缓存的 Windows 凭据如何存储在本地计算机上?

缓存的 Windows 凭据如何存储在本地计算机上?

缓存的 Active Directory 域凭据如何存储在 Windows 客户端上?它们是否存储在本地 SAM 数据库中,从而使它们容易受到与本地用户帐户相同的彩虹表攻击,还是它们的存储方式不同?请注意,我确实知道它们是经过加盐和散列的,因此不会以纯文本形式存储,但它们是否以与本地帐户相同的方式进行散列,并且它们是否存储在相同的位置?

我意识到他们至少容易受到暴力攻击,但这比机器被盗时容易受到彩虹表攻击的情况要好得多。

答案1

“缓存凭证”

AD 域的缓存凭据实际上是密码的加盐双重哈希,存储在 HKLM\Security 配置单元中。配置单元的文件位置为: %systemroot%\System32\config\SECURITY

只有“系统”用户可以访问注册表项:
HKLM\Security\Cache\NL$n其中n索引 1 表示缓存凭据的最大数量。

易受攻击

WinNT 到 WinXP 使用“Lan Manager”哈希值当地的账户,这些账户在现代硬件上很容易被破解。破解通常需要几分钟(我最近在 00:08:06 破解了 3 个密码),只需一台“普通”台式电脑即可。Lan Manager 哈希不加盐,因此也有公开可用的彩虹表。

Vista 及更高版本使用 NT 哈希值当地的帐户。Windows 2000 及更高版本使用 NT 哈希来领域帐户也是如此。NT 哈希是加盐的双 MD4 哈希。每个条目的盐可防止使用彩虹表,但 MD4 可以在现代硬件上非常快速地执行:60 位密码大约需要 6 个计算年。如果运气好,并且有 6 GPU 集群,破解者可以在大约 6 个月内破解这种密码。将其带到云端,在 Amazon EC2 GPU 上大约需要 35,000 美元 - 取决于可用性,可能需要几个小时。

答案2

凭证实际上并未缓存在本地计算机上。请参阅 MS 的以下摘录:

缓存域凭据的安全性

术语“缓存凭据”不能准确描述 Windows 如何缓存域登录的登录信息。在 Windows 2000 及更高版本的 Windows 中,用户名和密码不会被缓存。相反,系统会存储密码的加密验证器。此验证器是经过两次计算的加盐 MD4 哈希。两次计算实际上使验证器成为用户密码哈希的哈希。此行为与 Microsoft Windows NT 4.0 及更早版本的 Windows NT 的行为不同。

http://support.microsoft.com/kb/913485

答案3

它们由凭据管理器处理,凭据管理器有一个凭据管理器 API。加盐哈希以某种安全的方式存储在磁盘上,并通过 HKLM\Security 访问。(默认情况下只能由 LocalSystem 访问,但很容易绕过,例如,通过 psexec -i -s regedit.exe。)

然而,在运行 Windows 系统上,情况更加糟糕,因为可以通过将 DLL 挂接到 Lsass 中来获取最近使用的凭据,并轻松将其还原为纯文本。(参见 Mimikatz。)

是的,您会在客户端的 HKLM\Security\Cache 中找到某种哈希(或哈希的哈希,或“验证器”,或任何您想称呼它的名称)。但我认为没有任何可行的方法可以攻击磁盘上的哈希。它不是可攻击的旧式 NTLM 哈希。

相关内容