使用 GPU 破解 MS-CACHE v2 哈希

信息安全 密码 哈希 蛮力 密码破解
2021-09-02 07:45:02

这里的大多数人都知道,Windows 以一种称为 MS-Cache v2 的格式缓存域/AD 凭据。显然,当在工作站上获得本地访问权限时,这些密码将是在渗透测试期间获得的极好密码。

我的理解是这些不能使用彩虹表进行攻击。但是,除了使用 JTR 和 Cain 之外,我在软件中没有看到很多破解它们的选项。具体来说,我想使用我的 GPU(4x Nvidia 卡)来尝试破解这些。或者,如果我可以运行分布式软件,那将是一个合理的次佳选择。

那么几个问题:

  • 有哪些选项可用于恢复 MS-Cache 密码?

  • 谁能提供有关如何生成/攻击 MS-Cache (v2) 的技术故障?

  • MS-Cache v2 是否用于加密存储在域控制器上的凭据?

编辑

我只对 MS-Cache v2 Hashes 感兴趣,因为通常我不会在域中遇到比 Windows XP 更老的机器。

3个回答

MS-Cache 是一种非常简单的格式 - 它是密码的 MD4 散列,后跟小写的用户名,然后一起散列MD4( MD4(Unicode(password)) + Unicode(tolower(username)) )我不确定 MS-Cache 和 v2 之间的技术差异;但我找不到任何迹象表明它们不易受到 RainbowTable 攻击(事实上,Cain & Abel似乎支持 MS-Cache 和 MS-Cache v2 表 - “Added MSCACHE v2 Hashes Cryptanalysis via Sorted Rainbow Tables” in v4 .9.4)。

MS-Cache 凭据不存储在域控制器上(直接登录到它的用户除外) - 它们存储为与用户名相关的密码的 MD4 哈希值。您可能会对有关如何处理它们的technet 文章感兴趣。

关于 GPU 加速,John the Ripper似乎支持 MD4;这可能就是你所追求的。否则,有这篇关于使用 GPU 攻击 Windows 密码的文章(具体来说,您可以根据自己的目的调整ighashgpu),正如 Lucas 在下面的评论中所提到的;rcracki_mt具有 GPU 支持。

[更新]

openwall.info详细描述了 MS-Cache v2(带有代码),重要的是PassLib提到它也被称为“DCC2”,这可能有助于未来的搜索(尽管信息令人沮丧)。至于针对它的攻击,来自 openwall:

换句话说,针对不同搜索空间的增量蛮力攻击,取决于字符集和密码长度,需要很长时间。所以在攻击 DCC2 散列时做一些智能密码猜测是个好主意,即基于规则的字典和概率攻击。

使用该 python 模块和 PassLib,您应该能够将涉及PyCUDAPassLib的东西放在一起,但它看起来不像以前有人做过。

从此页面中,我看到 MS-Cache v2 的描述为密码的“NTLM 哈希”和用户名(转换为小写,然后以“Unicode”编码,意思是“小- Microsoft 术语中的字节序 UTF-16")。“NTLM 哈希”是通过密码计算的 MD4(同样在 little-endian UTF-16 中)。因此哈希涉及两个嵌套的 MD4 调用,并被用户名“加盐”。

彩虹表是“只是”预先计算的表(有一个节省大量空间的技巧);他们可以破解在建表阶段遇到的哈希,但不能破解。因此,您可以为 MS-Cache v2 构建彩虹表,但仅限于特定的用户名;该表不适用于其他用户的哈希。因此,这样的表对于经常在许多域中找到的用户名是有意义的,即“管理员”,但这仍然是有限的适用性。Cain & Abel假装包括(从版本 4.9.43 开始)支持在 MS-Cache v2 哈希上生成和使用彩虹表,但当然,一次只支持一个用户名。

如果您只有一个哈希要破解,那么构建表将比暴力破解花费更多时间(构建一个涵盖N个可能密码的彩虹表需要大约1.7*N的时间,而暴力破解的平均成本约为N/2,因此只有在尝试破解至少 4 个散列密码时才值得构建该表,在 MS-Cache v2 的情况下,所有密码都具有相同的用户名)。

我没有找到免费的、已经计算好的 MS-Cache v2 和用户名“Administrator”的彩虹表。


MD4是 MD5 的祖先,并且可以很好地映射到 GPU(甚至比 MD5 更好),因此您的四个 GPU 应该能够以每秒十亿的速度尝试潜在的密码。John the Ripper的“巨型”版本被记录为支持带有 GPU 的 MS-Cache v2(名称为“MSCash2”),尽管在密码生成方面效率低下(每秒散列十亿个密码,您必须生成每秒 10 亿个潜在密码,这可能会使最善意的 CPU 饿死)。至少,这将为您提供一些可以使用的源代码,以及一个便于测试的“参考实现”。

一个四核 Core2 2.4 GHz CPU,完全没有任何 GPU,应该能够每秒计算 8000 万个 MD4 哈希,使用 SSE2 增强代码(根据我的一个实现估计,每个执行 4800 万个 SHA-1 哈希)秒),转换为每秒 4000 万个密码。按照密码破解标准,这已经相当不错了,尽管 GPU 的效率当然要高得多。这将是一个很好的编程练习。

您应该尝试的一个非常好的工具是oclHashcat,它是一个仅限 GPU的哈希破解器,它可以在WindowsLinux上运行,并且还支持多 GPU

该软件有两个版本对您有用,oclHashcat-lite是一个单一的哈希破解器,oclHashcat-plus可以同时破解多达 1500 万个哈希。

例如,使用此行后面的命令行参数,您将尝试使用lower_alpha_numeric 字符集来暴力破解保存在指定文件 (example.hash) 中的MS-CACHE 2哈希值。明文将保存到文件中:

cudaHashcat-plus64.exe -o out.txt -a 3 -1 ?l?d -m 1100 --increment-min=1 example.hash

更多信息可在Wiki中获得。

PS:因为这个脚本使用增量模式,它会检查最多 15 位的密码 (36^15)。