深入理解AD域登录过程
2009-11-20 18:32
   “域帐号登录”属于“交互式登录”(即用户通过相应的用户帐号(User Account)和密码进行登录)的一种(另外一种为“本地登录”)。采用域用户帐号登录计算机,系统通过存储在域控制器的活动目录中的数据进行验证。如果该用户帐号有效,则登录后可以访问到整个域中具有访问权限的资源。

       交互式登录,系统需要以下组件:
1、winlogon.exe
  winlogon.exe是“交互式登录”时最重要的组件,它是一个安全进程,负责如下工作:
  ◇加载其他登录组件。
 ◇提供同安全相关的用户操作图形界面,以便用户能进行登录或注销等相关操作。
 ◇根据需要,同 GINA发送必要信息。
2、GINA
GINA的全称为“Graphical Identification and Authentication”——图形化识别和验证。它是几个动态数据库文件,被winlogon.exe所调用,为其提供能够对用户身份进行识别和验证的函数,并将用户的帐号和密码反馈给winlogon.exe。在登录过程中,“欢迎屏幕”和“登录对话框”就是GINA显示的。
3、LSA服务
LSA的全称为“Local Security Authority”——本地安全授权,Windows系统中一个相当重要的服务,所有安全认证相关的处理都要通过这个服务。它从 winlogon.exe中获取用户的帐号和密码,然后经过密钥机制处理,并和存储在帐号数据库中的密钥进行对比,如果对比的结果匹配,LSA就认为用户的身份有效,允许用户登录计算机。如果对比的结果不匹配,LSA就认为用户的身份无效。这时用户就无法登录计算机。
4、SAM数据库
 SAM的全称为“Security Account Manager”——安全帐号管理器,是一个被保护的子系统,它通过存储在计算机注册表中的安全帐号来管理和用户和用户组的信息。我们可以把SAM看成一个帐号数据库。对于没有加入到域的计算机来说,它存储在本地,而对于加入到域的计算机,它存储在域控制器上。
如果用户试图登录本机,那么系统会使用存储在本机上的SAM数据库中的帐号信息同用户提供的信息进行比较;如果用户试图登录到域,那么系统会使用存储在域控制器中上的SAM数据库中的帐号信息同用户提供的信息进行比较。
5、Net Logon服务
Net Logon服务主要和NTLM(NT LAN Manager,Windows NT 4.0 的默认验证协议)协同使用,用户验证Windows NT域控制器上的SAM数据库上的信息同用户提供的信息是否匹配。NTLM协议主要用于实现同Windows NT的兼容性而保留的。
6、KDC服务
KDC(Kerberos Key Distribution Center——Kerberos密钥发布中心)服务主要同Kerberos认证协议协同使用,用于在整个活动目录范围内对用户的登录进行验证。如果你确保整个域中没有Windows NT计算机,可以只使用Kerberos协议,以确保最大的安全性。该服务要在Active Directory服务启动后才能启用。
7、Active Directory服务
计算机加入到Windows2000或Windows2003域中,则需启动该服务以对Active Directory(活动目录)功能的支持。
  
     登录到域的验证过程,对于不同的验证协议也有不同的验证方法。如果域控制器是Windows NT 4.0,那么使用的是NTLM验证协议,其验证过程和“登录到本机的过程”差不多,区别就在于验证帐号的工作不是在本地SAM数据库中进行,而是在域控制器中进行;而对于Windows2000和Windows2003域控制器来说,使用的一般为更安全可靠的Kerberos v5协议。通过这种协议登录到域,要向域控制器证明自己的域帐号有效,用户需先申请允许请求该域的TGS(Ticket-Granting Service——票据授予服务)。获准之后,用户就会为所要登录的计算机申请一个会话票据,最后还需申请允许进入那台计算机的本地系统服务。
       登录前后,winlogon到底干了什么?如果用户设置了“安全登录”,在winlogon初始化时,会在系统中注册一个SAS (Secure Attention Sequence——安全警告序列)。SAS是一组组合键,默认情况下为Ctrl-Alt-Delete。它的作用是确保用户交互式登录时输入的信息被系统所接受,而不会被其他程序所获取。所以说,使用“安全登录”进行登录,可以确保用户的帐号和密码不会被***盗取。要启用“安全登录”的功能,可以运行 “control userpasswords2”命令,打开“用户帐户”对话框,选择“高级”。(如图4)选中“要求用户按Ctrl-Alt-Delete”选项后确定即可。以后,在每次登录对话框出现前都有一个提示,要求用户按Ctrl-Alt-Delete组合键,目的是为了在登录时出现WindowsXP的GINA 登录对话框,因为只有系统本身的GINA才能截获这个组合键信息。而如前面讲到的GINA***,会屏蔽掉“安全登录”的提示,所以如果“安全登录”的提示无故被屏蔽也是发现***的一个前兆。“安全登录”功能早在Windows2000时就被应用于保护系统安全性。
       在winlogon注册了SAS后,就调用GINA生成3个桌面系统,在用户需要的时候使用,它们分别为:
Winlogon:桌面用户在进入登录界面时,就进入了Winlogon桌面。而我们看到的登录对话框,只是GINA负责显示的。如果用户取消以“欢迎屏幕”方式登录,在进入 WindowsXP中任何时候按下“Ctrl-Alt-Delete”,都会激活Winlogon桌面,并显示图5的“Windows安全”对话框。(注意,Winlogon桌面并不等同对话框,对话框只是Winlogon调用其他程序来显示的)
◇用户桌面:       用户桌面就是我们日常操作的桌面,它是系统最主要的桌面系统。用户需要提供正确的帐号和密码,成功登录后才能显示“用户桌面”。而且,不同的用户,winlogon会根据注册表中的信息和用户配置文件来初始化用户桌面。
屏幕保护桌面:屏幕保护桌面就是屏幕保护,包括“系统屏幕保护”和“用户屏幕保护”。在启用了“系统屏幕保护”的前提下,用户未进行登录并且长时间无操作,系统就会进入 “系统屏幕保护”;而对于“用户屏幕保护”来说,用户要登录后才能访问,不同的用户可以设置不同的“用户屏幕保护”。
     在“交互式登录”过程中, Winlogon调用了GINA组文件,把用户提供的帐号和密码传达给GINA,由GINA负责对帐号和密码的有效性进行验证,然后把验证结果反馈给 Winlogon程序。在与Winlogon.exe对话时,GINA会首先确定winlogon.exe的当前状态,再根据不同状态来执行不同的验证工作。通常Winlogon.exe有三种状态:
  1、已登录状态:顾名思义,用户在成功登录后,就进入了“已登录状态”。在此状态下,用户可以执行有控制权限的任何操作。
  2、已注销状态:用户在已登录状态下,选择“注销”命令后,就进入了“已注销状态”,并显示Winlogon桌面,而由GINA负责显示登录对话框或欢迎屏幕。
  3、已锁定状态:当用户按下“Win+L”键锁定计算机后,就进入了“已锁定状态”。在此状态下,GINA负责显示可供用户登录的对话框。此时用户有两种选择,一种是输入当前用户的密码返回“已登录状态”,另一种是输入管理员帐号和密码,返回“已注销状态”,但原用户状态和未保存数据丢失。
    
   登录到域的过程如下:
1、   用户首先按Ctrl+Alt+Del组合键。
2、 winlogon检测到用户按下SAS键,就调用GINA,由GINA显示登录对话框,以便用户输入帐号和密码。
3、 用户选择所要登录的域和填写帐号与密码,确定后,GINA将用户输入的信息发送给LSA进行验证。
4、在用户登录到本机的情况下,LSA将请求发送给Kerberos验证程序包。通过散列算法,根据用户信息生成一个密钥,并将密钥存储在证书缓存区中。
5、 Kerberos验证程序向KDC(Key Distribution Center——密钥分配中心)发送一个包含用户身份信息和验证预处理数据的验证服务请求,其中包含用户证书和散列算法加密时间的标记。
6、 KDC接收到数据后,利用自己的密钥对请求中的时间标记进行解密,通过解密的时间标记是否正确,就可以判断用户是否有效。
7、 如果用户有效,KDC将向用户发送一个TGT(Ticket-Granting Ticket——票据授予票据)。该TGT(AS_REP)将用户的密钥进行解密,其中包含会话密钥、该会话密钥指向的用户名称、该票据的最大生命期以及其他一些可能需要的数据和设置等。用户所申请的票据在KDC的密钥中被加密,并附着在AS_REP中。在TGT的授权数据部分包含用户帐号的SID以及该用户所属的全局组和通用组的SID。注意,返回到LSA的SID包含用户的访问令牌。票据的最大生命期是由域策略决定的。如果票据在活动的会话中超过期限,用户就必须申请新的票据。
8、 当用户试图访问资源时,客户系统使用TGT从域控制器上的Kerberos TGS请求服务票据(TGS_REQ)。然后TGS将服务票据(TGS_REP)发送给客户。该服务票据是使用服务器的密钥进行加密的。同时,SID被 Kerberos服务从TGT复制到所有的Kerberos服务包含的子序列服务票据中。
9、 客户将票据直接提交到需要访问的网络服务上,通过服务票据就能证明用户的标识和针对该服务的权限,以及服务对应用户的标识。