防止 Windows 中的密码破解

防止 Windows 中的密码破解

我知道在 Windows 中存在从内存中获取纯文本密码的工具(从 LSASS 进程读取内存并解密密码)。

此行为在 Windows Server 2019 中仍然存在?

有什么方法可以避免本地管理员用户使用某些工具(例如 Mimikatz)从 Windows 机器获取密码?

谢谢。

答案1

不能避免这种情况,因为要窃取 kerberos 票证或 NTLM 哈希,请记住用户必须是本地管理员,并且应用程序也必须以管理员身份运行。

请参阅来自 mimikatz 的注释;

以管理员身份运行 Mimikatz:即使您使用的是管理员帐户,Mimikatz 也需要“以管理员身份运行”才能完全发挥作用。

因此它属于10 条不变的安全法则;参见大胆的

法则 1:如果一个坏人能说服你在你的电脑上运行他的程序 计算机,它不再仅仅是您的计算机了。

法则#2:如果坏人可以改变你的计算机的操作系统,那么它就不再是你的计算机了。

法则#3:如果一个坏人可以不受限制地物理访问您的计算机,那么它就不再是您的计算机了。

法则#4:如果您允许坏人在您的网站上运行活动内容,那么它就不再是您的网站了。

法则#5:弱密码胜过强安全性。

法则#6:只有管理员值得信赖,计算机才是安全的。

规则#7:加密数据的安全性取决于其解密密钥。

法则#8:过时的反恶意软件扫描程序只比没有扫描程序好一点点。

法则#9:无论在线还是离线,绝对匿名实际上都不可能实现。

法则#10:技术不是万能的。

当你陷入安全的十大不变法则时,微软永远不会解决这个问题,因为管理员可以在计算机上做任何事情,甚至安装键盘记录器,谁知道呢,因为你必须明白,更重要的是如何保护你的环境免受这种攻击媒介的侵害。

因此,首先我建议使用受限组 GPO 来确保没有人可以将自己添加到本地管理员组。

其次,我将删除除 HDD 之外的所有其他启动设备,以确保谁可以在闪存设备上启动,以防止有人擦除本地管理员帐户的密码。

第三,我会使用强密码保护 BIOS。

最后,我将对硬盘使用一种加密方法,以防止有人从机器中移除硬盘时通过冷启动进行未经授权的更改。

当然还有其他技巧,但如果您想保护您的企业工作空间,您必须遵守强大的安全模型,如果您想抓住不良行为者,则必须启用帐户审核。

答案2

使用默认设置,无法再从 LSA 内存中转储明文 WDigest 凭证,但是拥有本地管理员权限时,所有这些新的安全功能仍然可以被禁用因为微软喜欢保持向后兼容性。因此,在添加几个注册表项后,Mimikatz(或 Windows 10 的 Kiwi)将开始对修改后输入的所有密码再次起作用。

  • 在 Windows 8.1 中,添加了安全功能,不再以明文形式存储 WDigest 凭据,并且这些功能已移植到早期的 Windows 版本中KB2871997,修复了自 Windows 7 以来的每个版本。启用该功能后,Mimikatz 会开始显示(null)密码,但可以使用以下命令禁用它:

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest]
    "UseLogonCredential"=dword:00000001
    
  • 在 Windows 10 中,Windows Defender Credential Guard 正在保护密码。 如上所述禁用安全功能后,密码会显示,但不是明文:

    Kiwi,Windows Defender Credential Guard 已启用

    但是,Windows Defender Credential Guard 可以已禁用通过组策略。由于此策略实际上只是添加了两个注册表项,因此很容易禁用,例如从命令提示符禁用。

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard]
    "EnableVirtualizationBasedSecurity"=dword:00000000
    
    [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\LSA]
    "LsaCfgFlags"=dword:00000000
    

    一旦用户再次使用密码,它将以明文形式显示:

    Kiwi,Windows Defender Credential Guard 已禁用

由于这很容易被用于窃取域管理员凭据,因此人们不应该在其工作站上拥有本地管理员权限,并且应该使用没有域管理员权限的单独帐户进行本地管理。

答案3

我想提出一个在实践中确实行之有效的解决方案。其他答案暗示不可能完美地保护,但你可以让它变得足够困难,以至于最多攻击者将会放弃并转向更容易攻击的目标。

首先,启用 Credential Guard。这会将机密移出 LSA,以便攻击者无法从进程内存中读取密码。

第二,启用 LSA 保护进程模式 (RunAsPPL=1)。这将阻止攻击者向 LSA 注入代码或读取内存。

第三,启用 HVCI 以防止攻击者从内核内部禁用上述保护。

第四,使用 UEFI 锁定这一切,这样即使攻击者弄乱注册表项,由于配置被 UEFI 启动设置锁定,因此禁用它非常困难。

相关内容