Windows 上的 LSA 身份验证如何工作?

信息安全 视窗
2021-08-26 06:11:43

作为网络犯罪法律研究的一部分,我试图从高层次理解 Windows 上的安全协议,但我很难确定我的研究重点。

我已经走上了 LSA 身份验证模型路径,因为这是Flame 病毒(以某种方式)用来让自己访问服务的方式。至少按照这家保安公司的说法。但是,我知道我遗漏了一些东西,看起来程序只能授予自己对系统的访问权限。

我通读了这篇关于 Live ID 和 Windows 身份验证的文章,但这不是我感兴趣的。

Kerberos 似乎只关心不同盒子之间的交互同样,NTLM似乎并不关心计算机上的本地活动这让我回到了 LSA 身份验证。

我知道我在这里遗漏了一些步骤,因为看起来你可以调用LsaLogonUser(),并假设你有凭据(你必须窃取这些凭据吗?),做任何你想做的事。我从这篇文章中找到了这张图片,但老实说,我只是模糊地确定我在看什么:

LSA 体系结构(Microsoft TechNet,2003)

1个回答

该图对于 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 提供者,然后在每次系统启动时自动运行。