黑客与 / - 使用 GPU 进行密码破解,第三部分:调整你的攻击

作者:Kyle Rankin

您已经构建了硬件,安装了软件并破解了一些密码。现在了解如何微调您的攻击。

在本系列的前两部分中,我解释了要获取哪些硬件,然后描述了如何使用 hashcat 软件套件执行字典和暴力破解攻击。如果您一直在关注,到目前为止,您应该有足够的时间构建自己的密码破解硬件并尝试使用 oclhashcat。正如我在上一篇文章中提到的,密码破解是一个相当复杂的主题。在本文中,我将完成本系列,描述如何进一步调整和改进您的攻击,使其更有效。

使用更多 GPU 周期

您可以微调攻击的第一个领域是增加或减少 GPU 的负载。传递给 oclhashcat 的 -n 选项会更改用于攻击的 GPU 量。文档说此值默认设置为 80;但是,在我的计算机上,默认值似乎更接近 40。当我第一次运行暴力破解攻击时,输出告诉我我正在使用大约 70-80% 的 GPU。一旦我将 -n 80 添加到我的 oclhashcat 命令中,我注意到我正在使用 96-98% 的 GPU,并且每秒增加了 40,000 次比较


/path/to/mp32.bin -1 ?d?l?u ?1?1?1?1?1?1 | \
/path/to/oclHashcat-plus32.bin -m 400 -n 80 \
-o recovered_hashes phpass-hashes

尝试传递不同的值给 -n,看看您的每秒比较次数和使用的 GPU 百分比是否增加。但请注意;数字越高,您的 GPU 将使用的功率就越大(如果散热不良,则运行温度会更高)。此外,如果您计划在破解密码时将系统用于其他用途,您可能会注意到对图形性能的更大影响。

虽然增加 -n 设置似乎是理所当然的,但事实证明,更高的设置实际上只对暴力破解攻击有利。hashcat 文档建议您在尝试字典攻击时尝试较低的 -n 值。最终,关键是尝试高值和低值,看看哪种方法能为您带来最佳结果。

掩码攻击

在本系列的第二部分中,我描述了两种类型的攻击:字典攻击和暴力破解攻击。对于字典攻击,您为破解软件提供一个包含所有可能的密码的字典,例如英语字典中的所有单词。暴力破解攻击迭代密码特定长度的所有可能组合。因为字典攻击通常要尝试的密码少得多,所以它比暴力破解攻击快得多。虽然暴力破解攻击需要很长时间,但它最终也会找到您要查找的密码。

事实证明,您不受快速但可能无效的攻击或高效但缓慢的攻击的限制。使用掩码攻击,您可以将字典攻击的速度与暴力破解攻击的某些彻底性结合起来。掩码攻击的工作原理是对密码中可能使用的字符进行一些有根据的猜测。使用掩码攻击,您只需根据模式对更小的组合列表执行暴力破解攻击。

一旦您看到示例,掩码攻击就更有意义了。假设您正在尝试破解密码,并且您知道密码策略要求用户选择至少一个大写字母和至少一个数字。正如我在之前的文章中提到的,您可以通过获取字符集中的字符数,计算密码的长度,然后将第一个数字提高到第二个数字的幂来计算特定类型密码中有多少组合。因此,例如,如果您想对上述密码策略进行彻底的暴力破解攻击,您的字符集中将有 62 个字符 (A-Za-z0-9),对于一个八个字符的密码,组合数将为:628 = 218 万亿个组合。

在我的密码破解硬件上,每秒进行 350,000 次比较,完成攻击大约需要 7,200 天,即 19 年。

事实是,当您告诉大多数用户创建一个包含至少一个大写字符和至少一个数字的八个字符密码时,大多数用户不会生成真正的随机密码。相反,他们可能会将第一个字母大写,然后使用小写字符,直到到达密码末尾,然后在密码末尾添加一个数字,或者在末尾添加一个四位数的年份——通常是他们的出生年份、高中毕业年份或当前年份。针对相同密码策略的掩码攻击将构建一个暴力破解模式,您只需尝试一个大写字母作为第一个字符,小写字母作为接下来的三个字符,然后是小写字母或数字作为最后四个字符。在这种情况下,组合数将为:(26) * (263) * (364) = ~ 7670 亿个组合。

在我的硬件上,这将花费 600 多个小时,或 25 天。虽然破解密码的时间很长,但仍然比 19 年好得多,并且可能对大量较弱的密码有效。

为了描述这种模式,我使用与我在上一篇文章中用于常规暴力破解攻击的 maskprocessor 相同的自定义模式语言,只是在这种情况下,我将包含所有小写字符和数字的自定义模式与常规字符模式集相结合。最终的 maskprocessor 命令如下所示


/path/to/mp32.bin -1 ?d?l ?u?l?l?l?1?1?1?1

如您所见,我定义了一个特殊的掩码 ?d?l (0-9a-z) 并将其分配给 1,然后我创建了一个密码模式,其中第一个字符是 ?u (A-Z),接下来的三个是 ?l (a-z),最后四个是 ?1 (0-9a-z)。使用我的新自定义 GPU 调整尝试对我的 phpass 哈希进行此掩码攻击的完整命令将是


/path/to/mp32.bin -1 ?d?l ?u?l?l?l?1?1?1?1 | \
/path/to/oclHashcat-plus32.bin -m 400 -n 80 \
-o recovered_hashes phpass-hashes

攻击规则

进一步改进攻击的最后一种方法是将规则应用于您的字典攻击。规则允许您对字典中的所有单词执行某种转换。例如,您可能不仅尝试所有字典单词,还创建一个规则,在字典单词的末尾添加一个数字。这将捕获更多弱密码,并且只会将总体组合数量增加十倍。

这是一个更好的例子,说明规则如何帮助破解更棘手的密码。随着新要求用户必须在密码中包含数字,许多用户已经求助于“leet speak”。例如,他们可能使用“p455w0rd”而不是“password”。事实是,他们仍然在使用字典单词——他们只是对其应用了一个基本的转换,其中 a 变为 4,s 变为 5,o 变为 0,e 变为 3 等等。当您想要破解这样的密码时,您只需将 -r 选项添加到 hashcat,并将其指向包含您要应用的规则的文件。Hashcat 使用自定义语言来定义规则,但这并不难理解,并且 oclhashcat 的安装目录有一个 rules 目录,其中包含许多规则文件,您可以将其用作参考。它甚至已经包含一个用于 leet speak 的规则,因此如果您想执行一个考虑了 leet speak 的字典攻击,如果您从 oclhashcat-plus 目录中运行它,它看起来会像这样


/path/to/oclHashcat-plus32.bin -m 400 \
-r ./rules/leetspeak.rule \
-o recovered_hashes example400.hash example.dict

有关规则的更多信息,请查看 Hashcat Wiki 上的文档:http://hashcat.net/wiki/rule_based_attack

现在您应该拥有完善您的(完全合法和白帽)密码破解攻击所需的一切。在 Hashcat Wiki 上,您将找到更多类型的攻击示例以及可用于提高破解密码哈希值的几率的示例。

资源

Hashcat 主要站点:http://hashcat.net

Hashcat Wiki:http://hashcat.net/wiki

Hashcat 规则文档:http://hashcat.net/wiki/rule_based_attack

密码照片,来自 Shutterstock.com

Kyle Rankin 是 Linux Journal 的技术编辑和专栏作家,也是 Purism 的首席安全官。他是 Linux Hardening in Hostile NetworksDevOps TroubleshootingThe Official Ubuntu Server BookKnoppix HacksKnoppix Pocket ReferenceLinux Multimedia HacksUbuntu Hacks 的作者,也是许多其他 O'Reilly 书籍的贡献者。Rankin 经常在安全和开源软件方面发表演讲,包括 BsidesLV、O'Reilly Security Conference、OSCON、SCALE、CactusCon、Linux World Expo 和 Penguicon。您可以在 @kylerankin 上关注他。

加载 Disqus 评论