该图对于 XP 和以前的版本非常准确。它如此复杂的原因是涉及到几个抽象级别。
登录 Windows 有两种主要(如“最常用”)方式 - 作为独立工作站用户和作为域成员。在这两种情况下,在 XP 上,这些凭据都通过 LSA 客户端及其服务器。
因此,在后端,LSA 必须确定“向谁询问”以确定凭证是否确实有效。这就是“协商”块的用武之地——它将做以下两件事之一:
- 如果系统配置为工作站,请使用盒子上配置的 NTLM 方案并与 SAM 数据库通信。
- 如果系统被配置为域的一部分,请与服务器交谈以查看它支持的内容,并为其提供所需的内容。
从本质上讲,这个过程与协商使用哪种散列来表示 HTTP 身份验证方法并没有什么不同:服务器说出它想要的内容(PLAIN、DIGEST、MD5),然后我根据需要发送密码。
这里以“msgina.dll”的形式暗示了其他凭据类型。这是 Ctrl+Alt+Delete 后负责与用户对话的组件,可以替换为提供新的 UI,例如指纹和智能卡登录。在每一种情况下,LSA 都必须与后端数据库(无论在哪里)对话,以获取某种形式的身份验证令牌。
您还可以通过 LSA 提供程序向 LSA 添加额外的身份验证协议。这是相应的“与身份验证数据库对话以确定这是否是有效用户”组件,您可以在此处阅读有关这些组件的信息以及如何在此处编写组件的说明。
现在,一旦此过程完成,用户将获得一个称为访问令牌的身份验证令牌。除了 UAC,呈现这个令牌是进程如何向系统表明他们已经被授权代表用户行事。
这就是正在发生的事情以及 LSA 和各种组件如何组合在一起。
现在,我回答的第二部分。Flame 以 LSA 为目标有两个原因:
- 它是可扩展的。您可以注册新的身份验证协议、新的 GINA/凭据提供程序(分别为 XP/Vista+)。
- 它在系统启动时运行,具有
NT AUTHORITY\SYSTEM特权。
这使它成为启动恶意软件并在系统上保持持久性的绝佳场所。看到这个分析
可以想象,通过Authenticode存在制衡机制,可以防止任何旧程序在那里自行安装,甚至在那里运行。然而,Flame 使用了一个被盗的证书来绕过这个,这就是事情变得有趣的地方。验证码证书中包含的信息(特别是公用名)显示为验证码警告对话框的一部分。因此,在这种情况下,恶意软件实际上似乎是由“Microsoft Corporation”创作的。一旦他们单击“确定”并以提升的权限运行 Flame,它就拥有了它想要的所有访问权限。然后它可以将自己注册为 LSA 提供者,然后在每次系统启动时自动运行。