1、Windows XP 系统登陆原理及其验证机制概述WindowsXP 的登录验证机制和原理都要比 Windows98 严格并复杂得多,不会再出现按“取消” 按钮就能进入系统的丑事(可以通过修改注册表来禁止 )。理解并掌握 WindowsXP 的登录验证机制和原理对我们来说很重要,能增强对系统安全的认识,并能够有效预防、解决黑客和病毒的入侵。 一、了解 WindowsXP 的几种登录类型 1、交互式登录 交互式登录是我们平常最常见类型,就是用户通过相应的用户帐号(User Account)和密码在本机进行登录。有些网友认为“交互式登录” 就是“本地登录”,其实这是错误的。 “交互式登录”还包括“
2、域帐号登录”,而“本地登录” 仅限于 “本地帐号登录”,详细讲解请参看下文。 这里有必要提及的是,通过终端服务和远程桌面登录主机,可以看作“交互式登录”,其验证的原理是一样的。 在交互式登录时,系统会首先检验登录的用户帐号类型,是本地用户帐号(Local User Account),还是域用户帐号(Domain User Account),再采用相应的验证机制。因为不用的用户帐号类型,其处理方法也不同。 本地用户帐号 采用本地用户帐号登录,系统会通过存储在本机 SAM 数据库中的信息进行验证。所以也就为什么Windows2000 忘记 Administrator 密码时可以删除 SAM 文件的
3、方法来解决。不过对于 WindowsXP 则不可以,可能是出于安全方面考虑吧。用本地用户帐号登录后,只能访问到具有访问权限的本地资源。(图 1) 域用户帐号 采用域用户帐号登录,系统则通过存储在域控制器的活动目录中的数据进行验证。如果该用户帐号有效,则登录后可以访问到整个域中具有访问权限的资源。 小提示:如果计算机加入域以后,登录对话框就会显示“登录到:”项目,可以从中选择登录到域还是登录到本机。 2、网络登录 如果计算机加入到工作组或域,当要访问其他计算机的资源时,就需要“网络登录”了。如图 2,当要登录名称为 Heelen 的主机时,输入该主机的用户名称和密码后进行验证。这里需要提醒的是,
4、输入的用户帐号必须是对方主机上的,而非自己主机上的用户帐号。因为进行网络登录时,用户帐号的有效性是由受访主机进行的。 3、服务登录 服务登录是一种特殊的登录方式。平时,系统启动服务和程序时,都是先以某些用户帐号进行登录后运行的,这些用户帐号可以是域用户帐号、本地用户帐号或 SYSTEM 帐号。采用不同的用户帐号登录,其对系统的访问、控制权限也不同,而且,用本地用户帐号登录,只能访问到具有访问权限的本地资源,不能访问到其他计算机上的资源,这点和“交互式登录” 类似。 从图 3 的任务管理器中可以看到,系统的进程所使用的帐号是不同的。当系统启动时,一些基与Win32 的服务会被预先登录到系统上,从
5、而实现对系统的访问和控制。运行 services.msc,可以设置这些服务。正是系统服务有着举足轻重的地位,它们一般都以 SYSTEM 帐号登录的,对系统有绝对的控制权限,所以很多病毒和木马也争着加入这个贵族中。除了 SYSTEM,有些服务还以 Local Service 和 Network Service 这两个帐号登录。而在系统初始化后,用户运行的一切程序都是以用户本身帐号登录的。 从上面讲到的原理不难看出,为什么很多电脑文章告诉一般用户,平时使用计算机时要以 Users 组的用户登录,因为即使运行了病毒、木马程序,由于受到登录用户帐号相应的权限限制,最多也只能破坏属于用户本身的资源,而对
6、维护系统安全和稳定性的重要信息无破坏性。 4、批处理登录 批处理登录一般用户很少用到,通常被执行批处理操作的程序所使用。在执行批处理登录时,所用帐号要具有批处理工作的权利,否则不能进行登录。 平常我们接触最多的是“交互式登录” ,所以下面笔者讲为大家详细讲解“交互式登录” 的原理。 二、交互式登录,系统用了哪些组件 1、winlogon.exe winlogon.exe 是“交互式登录”时最重要的组件,它是一个安全进程,负责如下工作 :相关的用户操作图形界面,以便用户能进行登录或注销等相关操作。 根据需要,同 GINA 发送必要信息。 2、GINA GINA 的全称为“Graphical Id
7、entification and Authentication”图形化识别和验证。它是几个动态数据库文件,被 winlogon.exe 所调用,为其提供能够对用户身份进行识别和验证的函数,并将用户的帐号和密码反馈给 winlogon.exe。在登录过程中, “欢迎屏幕”和“ 登录对话框”就是 GINA 显示的。 一些主题设置软件,例如 StyleXP,可以指定 winlogon.exe 加载商家自己开发的 GINA,从而提供不同的 WindowsXP 的登录界面。由于这个可修改性,现在出现了盗取帐号和密码的木马。 一种是针对“欢迎屏幕” 登录方式的木马,它模拟了 WindowsXP 的欢迎界面
8、。当用户输入密码后,就被木马程序所获取,而用户却全然不知。所以建议大家不要以欢迎屏幕来登录,且要设置“安全登录”。 另一种是针对登录对话框的 GINA 木马,其原理是在登录时加载,以盗取用户的帐号和密码,然后把这些信息保存到%systemroot% system32 下的 WinEggDrop.dat 中。该木马会屏蔽系统以“欢迎屏幕”方式登录和“ 用户切换 ”功能,也会屏蔽 “Ctrl-Alt- Delete”的安全登录提示。 用户也不用太担心被安装了 GINA 木马,笔者在这里提供解决方案给大家参考: 正所谓“解铃还需系铃人 ”,要查看自己电脑是否安装过 GINA 木马,可以下载一个 GI
9、NA 木马程序,然后运行 InstGina -view,可以查看系统中 GinaDLL 那键值是否有被安装过 DLL,主要用来查看系统是否被人安装了 Gina 木马作为登录所用。如果不幸被安装了 GINA 木马,可以运行 InstGina -Remove 来卸载它。 3、LSA 服务 LSA 的全称为“Local Security Authority”本地安全授权,Windows 系统中一个相当重要的服务,所有安全认证相关的处理都要通过这个服务。它从 winlogon.exe 中获取用户的帐号和密码,然后经过密钥机制处理,并和存储在帐号数据库中的密钥进行对比,如果对比的结果匹配,LSA 就认为
10、用户的身份有效,允许用户登录计算机。如果对比的结果不匹配,LSA 就认为用户的身份无效。这时用户就无法登录计算机。怎么看这三个字母有些眼熟?对了,这个就是和前阵子闹得沸沸扬扬的“震荡波”撤上关系的。 “震荡波”蠕虫就是利用 LSA 远程缓冲区溢出漏洞而获得系统最高权限 SYSTEM 来攻击电脑的。解决的方法网上很多资料,这里就不多讲了。 4、SAM 数据库 SAM 的全称为“ Security Account Manager”安全帐号管理器,是一个被保护的子系统,它通过存储在计算机注册表中的安全帐号来管理和用户和用户组的信息。我们可以把 SAM 看成一个帐号数据库。对于没有加入到域的计算机来说
11、,它存储在本地,而对于加入到域的计算机,它存储在域控制器上。 如果用户试图登录本机,那么系统会使用存储在本机上的 SAM 数据库中的帐号信息同用户提供的信息进行比较;如果用户试图登录到域,那么系统会使用存储在域控制器中上的 SAM 数据库中的帐号信息同用户提供的信息进行比较。 5、Net Logon 服务 Net Logon 服务主要和 NTLM(NT LAN Manager,Windows NT 4.0 的默认验证协议)协同使用,用户验证 Windows NT 域控制器上的 SAM 数据库上的信息同用户提供的信息是否匹配。 NTLM 协议主要用于实现同 Windows NT 的兼容性而保留的
12、。 6、KDC 服务 KDC(Kerberos Key Distribution CenterKerberos 密钥发布中心 )服务主要同 Kerberos 认证协议协同使用,用于在整个活动目录范围内对用户的登录进行验证。如果你确保整个域中没有 Windows NT 计算机,可以只使用 Kerberos 协议,以确保最大的安全性。该服务要在 Active Directory 服务启动后才能启用。 7、Active Directory 服务 如果计算机加入到 Windows2000 或 Windows2003 域中,则需启动该服务以对 Active Directory(活动目录)功能的支持。 三
13、、登录前后,winlogon 到底干了什么 如果用户设置了“安全登录” ,在 winlogon 初始化时,会在系统中注册一个 SAS (Secure Attention Sequence安全警告序列)。SAS 是一组组合键,默认情况下为 Ctrl-Alt-Delete。它的作用是确保用户交互式登录时输入的信息被系统所接受,而不会被其他程序所获取。所以说,使用“安全登录”进行登录,可以确保用户的帐号和密码不会被黑客盗取。要启用“安全登录” 的功能,可以运行 “control userpasswords2”命令,打开“用户帐户 ”对话框,选择 “高级”。( 如图 4)选中“要求用户按 Ctrl-A
14、lt-Delete”选项后确定即可。以后,在每次登录对话框出现前都有一个提示,要求用户按 Ctrl-Alt-Delete 组合键,目的是为了在登录时出现 WindowsXP 的 GINA 登录对话框,因为只有系统本身的 GINA 才能截获这个组合键信息。而如前面讲到的 GINA 木马,会屏蔽掉“ 安全登录”的提示,所以如果“ 安全登录 ”的提示无故被屏蔽也是发现木马的一个前兆。 “安全登录 ”功能早在 Windows2000 时就被应用于保护系统安全性。 桌面系统,在用户需要的时候使用,它们分别为: Winlogon 桌面用户在进入登录界面时,就进入了 Winlogon 桌面。而我们看到的登录
15、对话框,只是GINA 负责显示的。如果用户取消以“欢迎屏幕”方式登录,在进入 WindowsXP 中任何时候按下“Ctrl-Alt-Delete”,都会激活 Winlogon 桌面,并显示图 5 的“Windows 安全”对话框。(注意,Winlogon 桌面并不等同对话框,对话框只是 Winlogon 调用其他程序来显示的) 用户桌面 用户桌面就是我们日常操作的桌面,它是系统最主要的桌面系统。用户需要提供正确的帐号和密码,成功登录后才能显示“用户桌面” 。而且,不同的用户,winlogon 会根据注册表中的信息和用户配置文件来初始化用户桌面。 屏幕保护桌面屏幕保护桌面就是屏幕保护,包括“系统
16、屏幕保护”和“用户屏幕保护” 。在启用了“系统屏幕保护”的前提下,用户未进行登录并且长时间无操作,系统就会进入 “系统屏幕保护”;而对于“用户屏幕保护”来说,用户要登录后才能访问,不同的用户可以设置不同的“用户屏幕保护”。 四、想登录,也要过 GINA 这一关 在“ 交互式登录” 过程中,Winlogon 调用了 GINA 组文件,把用户提供的帐号和密码传达给 GINA,由GINA 负责对帐号和密码的有效性进行验证,然后把验证结果反馈给 Winlogon 程序。在与 Winlogon.exe对话时,GINA 会首先确定 winlogon.exe 的当前状态,再根据不同状态来执行不同的验证工作。
17、通常Winlogon.exe 有三中状态: 1、已登录状态 顾名思义,用户在成功登录后,就进入了“已登录状态” 。在此状态下,用户可以执行有控制权限的任何操作。 2、已注销状态 用户在已登录状态下,选择“注销” 命令后,就进入了“已注销状态” ,并显示 Winlogon 桌面,而由GINA 负责显示登录对话框或欢迎屏幕。 3、已锁定状态 当用户按下“Win+L”键锁定计算机后,就进入了“已锁定状态”。在此状态下,GINA 负责显示可供用户登录的对话框。此时用户有两种选择,一种是输入当前用户的密码返回“已登录状态”,另一种是输入管理员帐号和密码,返回“已注销状态” ,但原用户状态和未保存数据丢失
18、。 五、登录到本机的过程 1、用户首先按 Ctrl+Alt+Del 组合键。 2、winlogon 检测到用户按下 SAS 键,就调用 GINA,由 GINA 显示登录对话框,以便用户输入帐号和密码。 3、用户输入帐号和密码,确定后,GINA 把信息发送给 LSA 进行验证。 4、在用户登录到本机的情况下,LSA 会调用 msv1_0.dll 这个验证程序包,将用户信息处理后生成密钥,同 SAM 数据库中存储的密钥进行对比。 5、如果对比后发现用户有效,SAM 会将用户的 SID(Security Identifier安全标识) ,用户所属用户组的 SID,和其他一些相关信息发送给 LSA。
19、6、LSA 将收到的 SID 信息创建安全访问令牌,然后将令牌的句柄和登录信息发送给 winlogon.exe。 7、winlogon.exe 对用户登录稍作处理后,完成了整个登录过程。 六、登录到域的过程 登录到域的验证过程,对于不同的验证协议也有不同的验证方法。如果域控制器是 Windows NT 4.0,那么使用的是 NTLM 验证协议,其验证过程和前面的 “登录到本机的过程”差不多,区别就在于验证帐号的工作不是在本地 SAM 数据库中进行,而是在域控制器中进行 ;而对于 Windows2000 和Windows2003 域控制器来说,使用的一般为更安全可靠的 Kerberos v5 协
20、议。通过这种协议登录到域,要向域控制器证明自己的域帐号有效,用户需先申请允许请求该域的 TGS(Ticket-Granting Service票据授予服务)。获准之后,用户就会为所要登录的计算机申请一个会话票据,最后还需申请允许进入那台计算机的本地系统服务。 其过程如下: 1、用户首先按 Ctrl+Alt+Del 组合键。 2、winlogon 检测到用户按下 SAS 键,就调用 GINA,由 GINA 显示登录对话框,以便用户输入帐号和密码。 3、用户选择所要登录的域和填写帐号与密码,确定后,GINA 将用户输入的信息发送给 LSA 进行验证。 4、在用户登录到本机的情况下,LSA 将请求发
21、送给 Kerberos 验证程序包。通过散列算法,根据用户信息生成一个密钥,并将密钥存储在证书缓存区中。 5、Kerberos 验证程序向 KDC(Key Distribution Center密钥分配中心 )发送一个包含用户身份信息和验证预处理数据的验证服务请求,其中包含用户证书和散列算法加密时间的标记。 6、KDC 接收到数据后,利用自己的密钥对请求中的时间标记进行解密,通过解密的时间标记是否正确,就可以判断用户是否有效。 7、如果用户有效,KDC 将向用户发送一个 TGT(Ticket-Granting Ticket票据授予票据) 。该TGT(AS_REP)将用户的密钥进行解密,其中包含
22、会话密钥、该会话密钥指向的用户名称、该票据的最大生命期以及其他一些可能需要的数据和设置等。用户所申请的票据在 KDC 的密钥中被加密,并附着在AS_REP 中。在 TGT 的授权数据部分包含用户帐号的 SID 以及该用户所属的全局组和通用组的 SID。注意,返回到 LSA 的 SID 包含用户的访问令牌。票据的最大生命期是由域策略决定的。如果票据在活动的会话中超过期限,用户就必须申请新的票据。用 TGT 从域控制器上的 Kerberos TGS 请求服务票据(TGS_REQ) 。然后 TGS 将服务票据(TGS_REP)发送给客户。该服务票据是使用服务器的密钥进行加密的。同时,SID 被 Kerberos 服务从 TGT 复制到所有的Kerberos 服务包含的子序列服务票据中。 9、客户将票据直接提交到需要访问的网络服务上,通过服务票据就能证明用户的标识和针对该服务的权限,以及服务对应用户的标识。 因此如果要设置登录,最好不要设置为管理员帐号,可以设置为 USERS 组的用户帐号。设置自动登录的方法是:运行“control userpasswords2”,( 如图 6) 在“ 用户帐户” 窗口中取消“要使用本机,用户必须输入用户名和密码” 选项,确定后会出现一个对话框,输入要自动登录的帐号和密码即可。注意,这里不对密码进行验证,用户要确保密码和帐号的正确性。