Windows Server 2003活动目录增强的安全性的研究
随着Windows NT 4.0 Server支持服务期限的日益邻近,微软在敦促客户尽可能早地升级到新版本的Windows操作系统的同时,又不得不决定将NT 4.0 Server的服务期限延长一年。感觉上Windows NT 4.0 Server对微软来说,的确有一点“脊肋”的味道——食之无味,弃之不能。一方面Windows NT 4.0 Server本身有太多难以弥补的诸多安全缺陷,另一方面也是因为其后续版本windows server 2000 和windows Server 2003 确实在整体架构和安全性上较之前者有较大的改善。
单单论及windows Server 2003的安全性能改进,大概就需要几百页的技术白皮书才能将之详尽描述,由于篇幅和本人能力的限制,本文仅仅针对Windows Server 2003增强的信任功能进行初步的研究。
一、活动目录的基本概念
活动目录是Windows 2000和Window 2003系统的重要组成,用来满足分布式计算和远程办公发展的需求。活动目录允许管理员集中的管理和共享网络信息资源和普通用户的权限分配。除了为windows环境提供广泛的目录服务外,活动目录还用来减少计算机所用的目录数量,并为网络资源的隔离、移植和集中管理提供了一种基础。
活动目录包括两方面的内容:目录与目录服务,以面向对象的方式将对象信息保存在一个层次结构中,并为分布式网络环境提供多主复制的支持。
二、域和信任关系
活动目录由一个或多个域组成,域是在Windows 2000 和Windows 2003网络中复制和安全性的基本单元。域为用户、组和计算机帐户定义了安全边界的管理范围,使得集中管理用户权限成为可能。在一个域中至少有一台域控制器。Windows NT域中只有一个主域控制器,整个域通过SAM数据库提供多台服务器的分布式验证服务;而Windows 2000和Windows 2003中所有域控制器都是平等的,SAM数据库的功能由活动目录来实现。
所谓信任关系,是指两个域之间的一种逻辑关系,它使一个域(受信任域)中的用户被授权访问另一个域(信任域)中的资源。受信任域中的用户帐户和全局组,即便没有在信任域中定义,也可以被授予访问权限。
两个域之间的信任关系可以按信任的方向分为单向信任关系和双向信任关系,也可以按信任的类型为传递性信任关系和非传递性信任关系。
两个域之间的单向信任关系,就是说在两个具有信任关系的域之间,只有一个域信任另一个域,反之则不成立。举个例子来说,假如域A信任域B,而域B不信任域A,则两者就是单项的信任关系。相比之下,双向的信任关系则是两个域互相信任的信任关系。
非传递的信任关系是指在一个有多个域的环境中,信任关系被限制在两个域之间,也就是说,假如域A和域B之间是非传递的信任关系,而域B信任域C,那么在域A和域C之间没有与之关联的信任关系。一个非传递的信任关系可以是双向的,也可以是单项的。传递的信任关系不同于非传递的信任关系,它作用于一个域的集合中,形成了一个域和所有信任它的域之间的信任关系。例如,域A和域B之间是传递的信任关系,域B信任域C,则域A信任域C。同样的,非传递的信任关系也有单项信任和双向信任之分。
在windows NT域中,信任关系一般是非传递且单项的,如下图所示:
而在 Windows 2000 和 Windows Server 2003 中,有三种类型的信任关系,分别满足域结构中的某一需要。
可传递信任
可传递信任在两个域之间建立一种信任关系,这种信任关系可以流动到其他域。
单向信任
单向信任不可传递,因此它们仅可以定义所涉及的域之间的信任关系,并且这些域不是双向的。
交叉链接信任
交叉链接信任用于提高性能。使用交叉链接信任,可在树或林层级内建立一个虚拟信任验证桥,从而能够更快地进行信任关系确认(或拒绝)。
三、活动目录森林
在 Windows 2000 中,引入了集成传统 Windows NT Server 4.0 域的活动目录森林的概念。该集成使得在森林中的多个域间进行随心的协作,很多 Windows NT Server 4.0 的限制都消失了,域之间不再是完全的独立,开始相互依赖,而转移到一个单独的森林需要某种层次上的赞同和不同的域的管理员之间的信任。
事实上,一个目录森林就是一个或多个域的集合,目录森林的所有域控制器上保管域数据库,使整个目录森林成为一个分布式的数据库,便于维护和管理。
在使用活动目录安装向导进行安装时,默认的信任类型是父子信任关系,和树根信任关系。见下表:
信任类型 | 传递性 | 方向 | 描述 |
父子 | 可传递 | 双向 | 默认情况下,新建子域的信任关系为父子关系 |
树根 | 可传递 | 双向 | 默认情况下,新建域树的信任关系为树根信任关系 |
还有其他四种类型的信任关系,分别是外部信任关系,领域信任关系,森林信任关系和捷径信任关系。见下表:
信任类型 | 传递性 | 方向 | 描述 |
外部 | 非可传递 | 单向或双向 | 用于在不同管理等级的域控制器,或不在同一森林且无森林信任的组成的域之间建立信任关系。. |
领域 | 传递或非传递 | 单向或双向 | 用于在非windows kerberos 领域和Windows Server 2003 域之间建立信任关系 |
森林 | 传递 | 单向或双向 | 用于森林之间共享资源 (由windows server 2003 提出) |
捷径 | 传递 | 单向或双向 | 用于出于不同的两个目录树的两个域之间 |
四、windows 2003 的森林信任
1、森林信任的基本概念
Windows 2000 Server 并不能提供多森林部署完美环境。如果一个森林中的用户需要访问第二个森林中的资源,管理员可以创建这两个域之间的外部信任关系,这种信任关系是单向的且具有不可传递性。这意味着为了将信任扩展到森林中的其它域,必须明确配置位于其中的每个域,因此限制了信任路径扩展到其他域的能力,同时也很难进行集中管理。 此外,由于信任粒度的限制,用户要么信任另一个森林中的每一个用户,要么不能信任另一个森林中任何一个用户。在跨企业的方案中,需要更好的粒度方法使用户允许其他公司的特定用户获得身份验证。不仅如此,跨企业的信任很可能必须跨越防火墙,而Windows 2000 提供的信任对跨越防火墙的支持是有限的。
鉴于Windows 2000在多森林环境中的种种缺陷,在 Windows Server 2003 家族中,引入了森林信任的概念。这个概念使两个森林间的信任成为可能,一个森林的所有域都是信任的一部分。信任粒度的问题通过选择性身份验证得到解决,该选项仅允许特定用户或用户群通过信任得到身份验证。因为管理员可以控制为使信任生效而必须开放的特定远程过程调用端口,管理跨越网络防火墙的信任也变得轻松。
在确保两个森林中的所有域控制器均运行Windows Server 2003,都具有正确配置的DNS基础结构,并且都将森林功能级设置为Windows Server 2003模式的前提下,森林信任允许创建森林之间基于双向Kerberos的可传递信任关系,从而允许两个森林中的所有域之间存在可传递的信任关系。森林信任是在两个森林的根域之间建立的,并且可以是单向或者双向的。这种额外的安全特性使得管理多森林和跨域信任关系更加容易。跨森林的信任关系是有别于现有Windows信任关系的新类型,它可以管理两个森林间的安全关系——大大简化了跨森林的安全管理以及验证。用户可以在不用牺牲单一登录功能的情况下,访问其他森林的资源,并且由于只需在用户所在的森林中维护它的用户ID和口令,因此管理也被大大的简化了。这对于一些需要在某些分公司或区域拥有自己森林的场景提供了更好的灵活性,同时也有利于对活动目录的维护。
森林信任这种信任关系又被称为联合森林。它可以使信任可以在两个森林的任何域之间传递。在下图中,森林 A 和 森林 B 相互之间有一个双向的信任。因此,森林 A 中的用户可以访问森林 B 中的资源,而森林 B 中的用户可以访问森林 A 中的资源。除了身份验证之外,该信任启用了授权,因此每一个森林资源的所有者都可以从其他的森林向任意访问控制列表 (DACL) 和组添加安全主体。
总的来说,使用森林信任有如下的几种优点:
(1)通过减少共享资源所需的外部信任数,使得跨越两个 Windows Server 2003林的资源的管理得以简化。
(2)每个林中每个域之间的完全的双向信任关系。
(3)使用跨越两个林的用户主体名称(UPN)身份验证。
(4)使用Kerberos V5和NTLM身份验证协议,提高了林之间传递的授权数据的可信度。
(5)灵活的管理。
(6)在每个森林内隔离活动目录的复制。对于计划、配置的改变和在林中增加新的域都只对这个林有影响,而对信任的林没有作用。
从上面的论述中,我们看到,Windows 2003是支持近乎完美的跨森林的信任关系的。我们还知道,域信任关系有传递关系和非传递关系之分,而跨森林的传递性有两点只得特别注意:第一点是所有域在两个森林之间都是可传递的。同样,根据需要,可以是完全可传递的信任,或者是具有不同等级划分的信任。要注意的第二点是,传递性并不跨越各个森林,这意味着如果客户森林和服务公司的森林之间存在某种信任关系,这种信任关系不会传递到服务公司的伙伴森林,因此信任在客户森林和伙伴森林之间是不可传递的。举个例子来说,如果在林1和林2之间创建了一个森林信任,在森林2和森林3之间也创建了一个森林信任,则森林1和森林3之间没有隐式信任关系。
2、基于森林信任的安全性增强
1)跨森林验证
跨森林验证使用户帐户位于一个森林而计算机帐户位于另一个森林的情况下能够安全的访问资源。这个特性允许用户在不牺牲单一登陆机制的前提下通过使用kerberos或NTLM来安全的访问另一个森林中的资源,而由于只存在一个需要维护的用户ID和口令,管理文件也被大大的简化了。如果活动目录森林工作在跨森林模式下,并且有这双向信任关系,那么Internet验证服务/远程验证拨入用户服务(IAS/RADIUS)可以使用这个特性来验证用户帐号。它使管理员拥有了将森林中现有的IAS/RADIUS服务和新的森林集成在一起的能力。
在建立森林信任之后,Kerberos 和 NTLM 身份验证因此被路由到其他的森林,这样其他的森林就可以验证用户凭据。通过使用 Kerberos ,当用户登录到计算机时,会接收到一个授权票证的票证(TGT)。当用户需要被认证到一个资源时,TGT 被提交到域控制器,然后域控制器返回一个用于验证的服务票证。这将通过 Kerberos 票证授权服务(TGS)请求完成。如果资源在另一个域,用户域控制器就不能讨论范围票证。相反,如果用户拥有与之相关的某个直接信任,域控制器将为其提供推荐以便联系资源域控制器。如果不存在直接信任,域控制器颁发推荐给下一个在信任链中的域控制器。最终的资源域控制器再将颁发服务票证给用户。如果资源是在同一个森林,用户所在的域控制器将通过查询全局编录来判别资源是否在同一森林。
如果资源在另一个通过森林信任连接的森林,全局编录不包含在另一个森林所有资源的信息。然而,通过在全部森林TDO查找森林信任信息,全局编录能够判别哪一个森林包含资源。在该信息被判别之后,推荐被颁发,用户就可以达到本地的森林根。本地森林根将引导用户到信任的森林根。在推荐到达信任森林后,用户就被授权并被引导到资源域控制器以获得服务票证。
如果一个从受信任的森林来的用户登录到一台位于信任森林的计算机, Kerberos Authentication Service (AS) 请求以相近的方式被路由。然而,在这种情况发生时,用户不必遍历在信任路径中的全部域;用户只需直接引用根域,然后引用另一个森林中包含用户帐户的域控制器。
2)跨森林授权
跨森林授权使管理员可以更容易的将所信任的用户或组加到本地访问控制列表(ACL)中。这个特性在允许森林间信任的同时维护了森林安全边界的完整性。它使信任森林在接受到来自于被信任的森林中用户访问其保护资源的企图时,通过控制哪些安全标识(SID)可以接受来确保安全。
当授权数据请求从受信任森林传来时,用户信任该森林拥有适当的经验证的用户凭据。然而,用户也会接收到以安全标识符(SID)列表为形式的授权信息和身份验证请求。如果 SID 符合该信任森林企业管理员的 SID(相似的权限或用户 SID ),那么这个来自受信任的森林的用户将得到较高的资源权限。为了防止通过签署假冒的SID产生受信任的森林,操作系统会经常过滤 SID 以验证其是否与受信任的森林中的一个域SID相关。这个过程确保受信任的森林仅颁发授权信息给授权的域。
如果某个来自A森林的用户迁移到了 B森林,该用户在B的 SID 历史将包含其在A森林中帐户的 SID 信息。当用户试图通过使用帐户访问位于A森林中的资源时,A帐户 SID 和从B发来的帐户 SID 一同展示出来。 A根域域控制器判定用户提供的A帐户 SID 未被授权转成B森林的用户帐户,于是就过滤掉了。SID 过滤功能打破了 SID 的历史,因为用户不能访问该用户以前的帐号资源。
3)选择性身份验证
授权与验证是一个统一体,它提供的选择性身份验证选项概念性的类似于网络防火墙的工作方式。与网络防火墙仅允许特定的网络访问请求通过防火墙类似,选择性身份验证选项仅允许特定的身份验证请求。
选择性身份验证用于解决信任粒度问题。当用户从一个受信任的森林用户获得授权时,这些用户在其森林接收到经身份验证的用户SID。用户的很多默认的在森林中的权限都是通过经身份验证的用户SID赋予的。因为经身份验证的用户组是一个计算的组而且其SID被添加到用户身份验证服务器上,用户就不能改变组的成员信息。因此,来自森林的用户拥有一些对信任森林全部资源默认的权限,在建立起森林信任后,这些资源对经身份验证的用户都是可以访问的。如果在受信任的森林中,只为一小群用户建立信任,可能就不需要这样做了。
选择性身份验证选项提供了一种方法,使用户可以使用该方法来获得更好的用于跨信任森林的身份验证请求粒度。当启用了选择性身份验证选项,全部的身份验证都将通过服务域控制器检查。在运行验证请求通过前,该服务域控制器将明确允许到资源的验证通过用户验证。因此,需要明确哪些跨信任森林的用户可以允许经过到域内资源的验证。这在启用跨信任森林选择性身份验证选项时是需要的。当跨信任森林的用户验证使用选择性身份验证选项时, “其他组织” SID 被添加到用户授权数据中。这个 SID 的存在触发了在服务域上的验证,用以确保用户允许通过验证来获得特定的服务。在用户通过验证之后,用户验证通过的服务器将添加另一个 SID,即“本组织” SID。(如果“其他组织” SID 未被提供,该“本组织” SID 就被添加进来。)例如,假若用户未跨信任森林验证,启用选择性身份验证选项,这时就将显示“本组织” 标识。正因如此,这些特殊 SID 中只有一个可以显示在用户的相关资料中。
上面仅仅介绍性的讨论了Windows 2003基于森林信任的安全性增强,其实还有许多细节上的问题有待进一步的讨论。这里从略了。
小结
本文所描述和研究的问题还只是Windows Server 2003的冰山一角,这正如本文开头所提到的那样,Windows 2003 和Windows 2000在功能性和安全性上都较之前的NT 4.0有很大的提高。而Windows 2003的又具备很多2000所没有的特性。这些特性一方面使用户更方便的使用Windows操作系统进行资源的管理和维护,另一方面也尽可能给用户提供了更多的安全性保障。虽然如此,我们也必须看到,功能性和安全性辨正对立的两种性能,功能的增强必定引来安全性能的相对减弱,作为一名未来的信息安全从业人员,我们肩负着巨大的历史责任。