防止 LSASS 在 Kerberos 环境中存储明文密码

信息安全 验证 视窗 rdp kerberos
2021-08-24 14:51:14

如果用户在机器上执行了键盘交互式登录——无论是本地登录到他/她的工作站还是使用 RDP 到远程工作站, LSASS 都会存储明文密码,这是一个众所周知的安全风险。

还有一个经典的解决方法——禁用 wdigest 和 tspkg。到目前为止一切顺利,但如果支持 Kerberos,那么显然需要明文密码来更新 Ticket Granting Ticket (TGT),因此您处于两难境地 - 不支持 Kerberos 并享受一切与散列传递相关的风险或支持 Kerberos 并接受明文密码的风险。链接的帖子给出了以下我认为不可接受的建议:

因此,最有效的保护是避免交互式登录到任何不受信任的主机。

一个大企业有1000台服务器,你怎么知道哪台被入侵,应该避免登录?

我的问题:除了推出 2FA(稍后针对这些问题)之外,还有其他实际措施可以实现安全的键盘交互式登录吗?

PS关于2FA。最常见的方法是密码 + OTP 和智能卡上的 X.509 PKI。它们也不是完美无缺的:

  1. 如果您劫持了 lsass 进程,那么您可以使用 otp+passcode 在密码有效的情况下登录其他服务器。使用 autmation,这可能意味着您在 60 秒的窗口期间登录了数十台或更多服务器
  2. 根据这篇TechNet 文章,用户将 PIN 发送到服务器并使智能卡可用于 RDP 服务器。当管理员点击受感染的服务器时,可以使用与第一项相同的过程来破解许多服务器。

°º¤ø,¸¸,ø¤º°`°º¤ø,¸,ø¤°º¤ø,¸¸,ø¤º°`°º¤ø,¸°º¤ø,¸¸,ø¤º°`°º¤ø,¸,ø¤°º¤ø,¸¸,ø¤º°`°º¤ø,¸

2018 更新:从 Windows Server 2012 R2 和 Windows 8.1 开始,LSASS 可以通过启用RunAsPPL设置和禁止凭证转储作为受保护的进程运行。从 Windows 10 和 Server 2016 开始,Windows Credential Guard默认启用并实现类似的结果。

°º¤ø,¸¸,ø¤º°`°º¤ø,¸,ø¤°º¤ø,¸¸,ø¤º°`°º¤ø,¸°º¤ø,¸¸,ø¤º°`°º¤ø,¸,ø¤°º¤ø,¸¸,ø¤º°`°º¤ø,¸

2个回答

回答您的问题:我认为最安全的方法是使用 psexec 获取远程 cmd shell。此方法不应导致存储明文密码。还是您的意思是交互式的,并且带有 GUI?

不幸的是,您最好的解决方案实际上是尽可能避免交互式登录。

幸运的是,有一些安全的方法可以远程管理机器:

  • winrm(包括 Invoke-Command powershell)
  • psexec(仅当您不使用“-u”选项时)
  • 远程协助

这些是相当安全的。您在机器上生成一个令牌,但这是 Windows 体系结构的一部分,而不是错误/缺陷。

您应该尽可能避免使用以下内容,因为可以使用 mimikatz 转储明文密码:

  • RDP
  • 带有“-u”选项的 psexec

对于 Windows 8.1(和 Windows 2012R2?),默认情况下禁用明文 wdigest 密码。然而,在证明这个文章,你可以简单地重新启用在注册表中的明文密码存储。而且,总是有kerberos 攻击

尽管您可能不喜欢我的回答,但我认为这没有问题。好的,在内存中以明文形式保存密码并不理想,在这些情况下需要。这怎么会有安全风险?好吧,为了利用它,您需要管理权限,因为 lsass 在受保护的系统帐户下运行。并以与您要利用的用户相同的用户身份登录。因此,不会因此而导致特权升级;登录的管理员可以访问自己的明文密码。如果程序可以在没有用户干预的情况下访问该明文密码,这将带来问题。情况并非如此(UAC、访问注入代码等)所以你需要额外的缺陷来获得它。

对于您的具体问题:如何知道?你不知道。与用户将密码告诉朋友时相同。你无法避免这种情况。

是的,使用 2FA 或智能卡通常是个好主意,因为您不直接输入密码。