欢迎光临 Enjoy IT (ITECN.NET) 登录 | 注册 | 帮助

"Windows和活动目录安全"培训小记

盆盆非常荣幸,能够给来自江南所的学员们主讲三天的“Windows和活动目录安全课程。学员们无论技术还是素质都非常高,都是素有经验的高级开发人员。课堂的技术讨论氛围非常好,这帮助盆盆发挥出最好的本领。整个三天我们的感觉非常愉快,对盆盆自己来说,也加深了对于微软安全技术的理解。

这三天的培训,盆盆介绍了以下内容:

1. Windows Vista/longhorn Server的最新安全技术,包括UACIE保护模式、MICUIPI,总共讲述了近四个多小时,盆盆自己也觉得非常过瘾。

2. 活动目录的验证和授权技术,包括客户端访问网络服务,其背后发生的Kerberos验证的实质性过程。还有信任关系,其低层的实质是什么,等等。

3. 组策略的意义和实现。如何借助组策略,锁定用户桌面,同时让桌面的进程符合最小特权的要求,等等。

4. PKIEFS的实现,介绍了EFS的内在实现原理,以及出现问题,如何进行最后的修复。

在讨论Kerberos验证时,盆盆用乘飞机作比方。把TGT比喻为所购买的机票,然而光凭机票(TGT)是无法登机的(获得目标服务),必须得拿到登机牌(服务票据)。而要获得登机牌,我们需要出示身份证(时间戳),来证明自己的机票不是捡别人的(防止replay攻击)。

在学习Kerberos时,盆盆自己的体会是:

一定要理解TGT也是一个普通票据,从本质上讲,它没有任何特殊性,TGT也是用服务方(KDC)的长期密钥所加密的会话密钥副本(还包括客户端的授权信息)。

而访问其他服务(例如Bob)所需的会话票据,也是由服务方(Bob)的长期密钥所加密的会话密钥副本(包括客户端的授权信息,取自TGT)。Bob验证并解密客户端发来的会话票据,取出其中的客户端授权信息,就可以在Bob上生成客户端的网络登录会话和访问令牌

注意 网络登录会话,默认不会缓存任何的凭据信息,如果不能理解这一点,就不能理解为什么Bob不会为客户端缓存访问凭据。

也就是说,TGT无非就是一种特殊的服务票据,客户端也是为了用它来请求服务,只不过所请求的服务比较特殊,用来获取新的服务票据。

Kerberos的优点是:并不是由服务方向DC请求验证客户端的身份(NTLM必须这样),同时服务方不需要缓存和客户端的票据。所有的一切都由客户端去完成,这大大减少服务器的压力。就好比我们去买电影票,很显然电影票由我们自己(客户端)保存,而不可能由售票处(服务方)保存。

域之间的信任是什么?盆盆的个人理解,信任并不神秘,信任无非就是一种服务。域会把自己的TGS服务,作为一个安全主体(Security Principal),在其他域中注册,也就是域只是把其他域的TGS服务简单的看成普通的服务(和文件访问服务没有区别)。也就是说,如果域无法验证客户端的服务请求,就会给客户端发一个TGT(带forward标记),客户端用这张TGT简单地申请另外一个域的TGT(按照信任路径一直走)…并最终获得目标服务的会话票据。

为什么是这样?因为Kerberos根本不管什么叫信任、什么叫AD、什么叫DC,它只认会话密钥(当然还有时间戳)。什么叫会话密钥?想像一下革命电影里的常见场景,两位地下党碰头,一个说“天王盖地虎”,另一个说出“宝塔镇河妖”,如果口令对榫,两人就会痛哭流涕,终于找到党了…,这就是“会话密钥”。

盆盆的个人看法:开发人员同样需要特别注意安全问题,因为随着Windows的安全要求越来越严格,开发人员必须更新自己的安全意识,这样才能确保自己的产品满足Windows的安全要求,满足Windows的兼容性要求。这次的谷歌输入法事件告诉我们,开发者的安全意识,是多么的重要!

然而由于技术水平的限制,盆盆肯定会存在理解不到位、甚至错误的地方,所幸技术知识是开放的,盆盆自己也会不断地吸收消化,一有新的技术心得,将会毫不犹豫,第一时间发表在ITECN博客上。

所幸,ITECN博客就是我们的“TGT”,有了这张“TGT”,我们就可以很容易获得新的知识。

已发表 2007年4月9日 17:25 作者 ahpeng

评论通知

如果您想在帖子更新时接到邮件通知,请先登录。这里

订阅帖子评论使用 RSS

评论

2007年4月9日 20:01 by ghjconan

# re: "Windows和活动目录安全"培训小记

呵呵,盆盆的理解真让人容易理解……

给我的启发是我们学习的时候遇到难以理解的抽象概念时,尽量找个生活中的实例,来帮助理解……

因为有些概念的确太晦涩了……

2007年4月10日 9:58 by 夜里晒太阳

# re: "Windows和活动目录安全"培训小记

个人的理解是,在windows 活动目录环境下,只要客户端能获得访问某一服务的票据,不用管他是本域或跨域,那是DC的事...TGT说清楚了也蛮好理解的(在食堂吃饭,要先去办张饭卡,到了食堂,刷卡买票,至于你想买肉票、菜票还是饭票那就自己决定了)呵呵,谢谢盆盆大哥的分享.

2007年4月10日 10:58 by ahpeng

# re: "Windows和活动目录安全"培训小记

多谢“夜里晒太阳”,这个比喻很好。

然而对于跨域的访问,没有那么简单。因为服务票据必须由同一个Authority颁发,而不能由帐户域的Authority颁发。帐户域的Authority只能颁发TGT,这个TGT,应该理解为获得其他域的TGT的TGT,有点拗口。

要想深入了解微软的Kerberos实现,我们还必须得仔细查阅Resource Kit文档。

比喻总归会存在不足,例如饭票的比喻,无法反映时间戳的事实(必须有时间戳,才能证明客户端的身份,同样可以证明服务方的身份)。而用飞机票的话,可以用身份证比喻时间戳,当然这个比喻也有不足,就是无法反映服务方的反向验证。

2007年4月10日 11:55 by 夜里晒太阳

# re: "Windows和活动目录安全"培训小记

盆盆大哥说得是,比喻只是帮助理解却不一定要是严谨的,也不可能面面具到。域间的Kerberos,要获得外域的访问票据,我记得是向外域的KDC申请一个TGT,(整个过程由Kerberos自动完成,用户并不需要关心具体的实现细节)

当然,前提是域间存在双向的信任关系,一但获得了一个针对某个外域的TGT,则用户可以申请访问外域的某项服务。不知道理解得对不对。至于时间戳,主要是为了防止中间人攻击,貌似实现过现有点复杂,不太好比喻,期待盆盆大哥能想出绝妙的比喻。

2007年4月11日 10:12 by ahpeng

# re: "Windows和活动目录安全"培训小记

To夜里晒太阳:您的理解非常棒!

我看法是,必须理解“TGT无非就是一种特殊的服务票据”,这样才可以理解信任的过程(A和B双域信任),这并不神秘,Kerberos里的所有东西全部是开放的:

1. 客户端凭借凭据缓存中的TGT,向本地的KDC(A域)请求服务票据。

2. 本地KDC无法回送目标服务的服务票据,所以发送一个参考TGT给客户端。这个参考票据用两个域共享的Inter-Domain Key(A和B的域间共享密钥)进行加密。

3. 客户端用这个参考TGT向B域的KDC请求服务票据。

4. B域的KDC验证无误后,解密这张参考TGT,取出授权信息,并和会话密钥(客户端和服务之间)一起用服务的长期密钥进行打包,生成服务票据。加上会话密钥的另外一个副本(用客户端和KDC之间的会话密钥进行加密),一起回送给客户端。

5. 客户端给服务方发送请求,服务方解密服务票据,取出会话密钥,对时间戳进行解密,即可判断用户是否属实。同时可以从服务票据里取出客户端的授权信息,以便在本地生成登录会话和访问令牌,接下来,就可以访问数据。

这里面关键要理解,TGT也是一种服务票据(客户端缓存的TGT可以用来获取前面说的参考TGT,以便获得其他域的验证),也就是说,本地域可以把信任域的KDC看成是自己提供的服务(通过域间密钥、把信任域的TGS服务注册为本地的安全主体)。

可以阅读RFC 1510,就可以发现任何Kerberos的细节,都可以有理可据,都应该可以解释。

2007年4月11日 10:30 by ahpeng

# re: "Windows和活动目录安全"培训小记

To夜里晒太阳:时间戳的话,我觉得飞机票这个比喻中的身份证,就可以拿来类比。

在购买飞机票时,必须报上身份证号,以便登记飞机票,这相当于客户端拿自己的时间戳作为验证体。

拿飞机票换登机牌时,还必须出示身份证,这相当于拿TGT申请服务票据时,还必须附上时间戳的加密副本。

最后登机时,有时候不仅仅要求有登记牌,还要求出示身份证,这相当于服务方要求客户端提供时间戳。

虽然两者的实现差别很大,但是实际意义是一样的。别人就算捡到身份证,也无法替换其中的照片,就好比就算中间人抓包企图进行replay,也无法修改其中的时间戳信息。

2007年4月12日 15:00 by 夜里晒太阳

# re: "Windows和活动目录安全"培训小记

感谢盆盆大哥的悉心指教,获益非浅。有机会再向您具体讨教.呵呵...

2007年4月12日 20:15 by ahpeng

# re: "Windows和活动目录安全"培训小记

To 夜里晒太阳

非常感谢兄弟的支持!你的回复也给我很多启示。

2007年12月28日 21:05 by bengboba

# re: "Windows和活动目录安全"培训小记

请问A信任B,那么B中的用户可以访问A中的服务

那请问A中的用户在B中的机器里登陆,请问这个流程的具体步骤是什么

说说您的看法?

(必填) 
必填 
(必填)