缓存的 Active Directory 域凭据如何存储在 Windows 客户端上?它们是否存储在本地 SAM 数据库中,从而使它们容易受到本地用户帐户容易受到的相同彩虹表攻击,或者它们的存储方式不同?请注意,我确实意识到它们是经过加盐和散列处理的,以免以纯文本形式存储,但它们是否以与本地帐户相同的方式进行散列处理并且是否存储在同一位置?
我意识到至少他们容易受到暴力攻击,但这比在机器被盗时容易受到彩虹表攻击要好得多。
缓存的 Active Directory 域凭据如何存储在 Windows 客户端上?它们是否存储在本地 SAM 数据库中,从而使它们容易受到本地用户帐户容易受到的相同彩虹表攻击,或者它们的存储方式不同?请注意,我确实意识到它们是经过加盐和散列处理的,以免以纯文本形式存储,但它们是否以与本地帐户相同的方式进行散列处理并且是否存储在同一位置?
我意识到至少他们容易受到暴力攻击,但这比在机器被盗时容易受到彩虹表攻击要好得多。
“缓存凭证”
AD 域的缓存凭据实际上是密码的加盐双哈希值,并存储在 HKLM\Security 配置单元中。hive的文件位置为:
%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 上大约需要 3.5 万美元——根据可用性,可能需要数小时。
凭据实际上并未缓存在本地计算机上。请参阅 MS 的摘录:
http://support.microsoft.com/kb/913485
它们由 Credential Manager 处理,为此有一个 Credential Manager API。加盐哈希以某种安全的方式存储在磁盘上,并通过 HKLM\Security 访问。(默认情况下只能由 LocalSystem 访问,但很容易绕过,例如,通过 psexec -i -s regedit.exe。)
然而,在正在运行的 Windows 系统上,情况更糟,因为可以获取最近使用的凭据,并通过将 DLL 挂接到 Lsass 轻松将其转换为纯文本。(参见 Mimikatz。)
所以是的,您会在客户端的 HKLM\Security\Cache 中找到某种哈希(或哈希的哈希,或“验证器”或任何您想称呼它的东西)。但我认为没有任何可行的方法来攻击磁盘上的散列。它不是可攻击的旧式 NTLM 哈希。