当黑客或渗透测试人员破坏系统并希望从数据库转储中访问明文密码时,他们必须首先破解存储的密码哈希值。许多攻击者一头扎进了这个概念:他们尝试了任何他们想尝试的任意密码攻击,几乎没有理由。本讨论将展示一些有效的密码破解方法,以及如何将密码的统计分析与工具结合使用,以创建一种有时间限制的方法来实现高效和成功的破解。
密码破解是一项垂死的事业。用户需要创建更复杂的密码,一些后端开发人员开始使用 Bcrypt 等机制来替换标准哈希函数。Bcrypt 哈希值需要更长的时间来生成,因此,密码变得更加难以破解。破解者需要非常快速地生成哈希值才能有效地破解密码,因此 Bcrypt 是对抗此类攻击的非常强大的工具。为了说明这个例子,2012 年推出的由 25 个 GPU 集群制作的密码破解程序能够实现每秒 3500 亿个哈希的 NTLM 哈希生成速度,而 Bcrypt 哈希生成速度为 71,000 个。以此作为比较模型,对于生成的每个 Bcrypt 哈希,可以生成 500 万个 NTLM 哈希。当面对 Bcrpyted 算法时,黑客必须对密码进行更多计算的猜测,并且不能依赖对每种可能性使用蛮力。
注意:如果攻击者知道密码的长度非常短,以至于暴力破解密钥空间不会花费很长时间,则无需采取增量攻击步骤。
时间效率成为成功破解密码的关键因素。虽然覆盖用户密码的整个关键空间会很好,但这样做所需的时间通常不可行。因此,在破解时,重要的是首先尝试最省时的攻击,如果不成功,则继续进行覆盖更多密钥空间的较慢的密码攻击。最快的方法是基于常用用户密码和以前的密码转储的简单字典攻击。从那里开始,应该尝试操纵字典以在末尾添加数字或符号或更改字母。这称为混合攻击或基于规则的攻击。接下来,可以尝试使用机器学习功能生成可能的密码。马尔可夫链就是一个很好的例子。通过组合英语中存在的常见元素来形成单词(例如,“ing”、“er”、“qu”),可以生成对密码的良好猜测,例如下面的密码。尽管使用任何方法都很容易破解此特定密码,但为了简化所有攻击媒介,我们将使用该密码。Password1234Password1234
最后,有针对性的暴力攻击(称为掩码攻击)基于密码结构覆盖给定密码的所有密钥空间。我所说的密码的 “结构” 是指用于创建密码的字符类型和顺序。例如,具有大写字母的“结构”,后跟 7 个小写字母,后跟 4 位数字(记为 )。Password1234ullllllldddd
小写字母 、 大写字母 、 符号 、 数字(l)(u)(s)(d)
因此,如果攻击者决定使用该结构创建字符组合的所有可能性,他或她最终会找到 密码 .那么攻击者的问题就变成了:在攻击一组哈希值时,应该首先以什么结构为目标?Password1234
为了帮助回答这个问题,我对流行的密码转储进行了一些统计分析,以查看是否存在比其他密码结构更普遍的密码结构,以及这种结构在多大程度上是正确的。超过 3400 万个公开暴露的密码的样本量包括 RockYou、LinkedIn、phpBB 等著名的密码转储。
下图显示掩码结构针对每个唯一掩码的频率。红线表示 50% 线,该线出现在第 13 个最频繁出现的掩码之后。
这意味着前 13 个唯一掩码结构占样本密码的 50%。样本中超过 2000 万个密码的结构位于前 13 个掩码中。就结构化密码的普遍性而言,这些结果相当令人震惊。其他 50% 存在于长长的右尾内,在此图中已被缩减。事实上,在 260,500 个唯一掩码中,此图中只显示了 400 个。这种通用结构密码的概念令人难以置信;但是,当您考虑用户如何创建和记住他们的密码时,这并不奇怪。根据分析数据,有一些逻辑因素有助于解释这是如何可能的。当用户被要求提供包含大写字母的密码时,超过 90% 的时间会将其作为第一个字符。当要求使用数字时,大多数用户会在密码末尾(可能是毕业年份)加上两位数字。下一个最受欢迎的选择是用四位数字结束密码(可能是上一年或今年)。在这种情况下,下一个最流行的数字在末尾有一个数字,在结尾处有三个数字。诸如此类的结构共性使攻击者能够预测用户密码的结构最有可能是什么。
利用这些结构知识,可以安全地假设用户很可能会将其密码设置为 than(随机字母),即使它们都以 9 个字母开头并具有 9 个字母。因此,我们假设给定一个密码结构,如果我们看到连续的字母,它很可能是一个单词。这对 crackers 来说是一个非常有用的假设,因为它消除了大量的 key 空间。然后,这变成了一种利用通用密码结构的统计显著性的混合攻击。potatoespwivwdhpp
通常,作为渗透测试人员,即使我们破坏了一组哈希值,我们也可能没有时间破解所有哈希值。但是,破坏它们可能有助于升级对系统的访问,并为客户带来更有用的发现。因此,在破解密码时,确定将分配多少时间来破解一组哈希值可能很有用。使用在前面的分析中发现的结构,攻击者可以根据按最快完成时间排序的密码复杂性要求来确定他或她想要覆盖前 10 种流行的结构。最后,攻击者可以通过花费不超过一个小时来执行破解,从而对他或她的方法进行时间限制。这是在最近的一次获取哈希的渗透测试中发现的。下面是基于 CPU 的 cracker 的结果快照。
在这种情况下,最快完成的结构是 ,我们将其定义为一个大写字母,后跟三个小写字母(“W”代表“word”),然后是四位数字。哈希集中有 69 个与该结构匹配的密码,我的标准 CPU 能够在一分钟内遍历该结构的所有可能性。我们在 62 分钟时停止破解,破解产生了 221 个独特的破解哈希值,匹配了 491 个账户,总共导致了 11% 的泄露。破解密码和帐户泄露数量差异较大的原因是 Office 设置往往会导致人们使用常用密码。如果攻击者确定环境中正在使用通用密码,则具有相同密码的所有用户也将受到威胁。U(W3)dddd
尽管混合攻击或基于规则的攻击(例如)可以更快地破解其中的几个密码,但攻击密码的结构可以让我们覆盖更多的密钥空间。如果 Faster 攻击被证明无法成功破坏目标哈希,则此方法是有效的下一步。此外,重要的是要记住,此示例是在相当平庸的 CPU 上完成的,并且在强大的 GPU 上执行相同的攻击可以将此时间缩短到几秒钟。因此,确切的时机不如有效执行理论重要。best64
统计分析有助于我们普遍攻击常见的密码结构;但是,有一些工具可以帮助定位特定应用程序。CeWL 等工具可以从网页中抓取单词,并用于生成专门针对公司的单词列表或词典。之所以有效,是因为公司倾向于使用与其行业、公司或工作相关的密码。此外,由于我们确定常用密码在工作环境中很流行,因此也可以将已经被破解的密码用作其他密码的基础,这可能是类似的。例如,如果我们发现 “” 是一个用户的密码,我们可能会将 “” 放入新的单词列表中,将其放入规则集中,然后发现其他人拥有密码 “”。这种使用破解的基本词(如 '')并与周围字符进行修饰的概念在破解从企业环境转储的哈希值时非常有效,这可以追溯到密码重用的概念。根据我们进行的渗透测试,这最适合用于破解最后 20% 的未破解哈希值。AcmeCorp1234AcmeCorpAcmeCorp@2015AcmeCorp
修剪词典以使猜测的所有密码都符合应用程序规定的要求也很重要,这样就不会浪费时间猜测由于长度或字符组成而无法猜测的密码。
从最快的攻击开始,覆盖最少的密钥空间(标准字典攻击)到最慢和最大的密钥空间(纯蛮力)是考虑分配给攻击的时间的最理想进展。因此,攻击者应该实施一种考虑到这一点的标准方法。如果攻击者想要入侵的帐户在第一阶段完成,那么可能没有理由继续使用其他攻击;但是,在许多情况下,如果存在目标帐户,则简单的字典攻击可能不够,或者攻击者只是想破坏尽可能多的帐户,因此可能需要使用统计结构的混合攻击和有针对性的暴力攻击。因此,建立方法对于成功破解至关重要,其中可以包括前面提到的方法以及一些自动化流程。最近的工具(如 PRINCE)可以帮助促进密码破解。开发一条工具带,例如 PRINCE 在方法中尝试是很重要的,但了解工具背后的功能,而不是完全依赖它们,这将使破解更加有效。
通过使用这些密码进行分析,可以确定给定所需复杂程度的最流行的结构。因此,开发人员可能应该实现一些控件,以阻止用户使用其中一些非常流行的结构,以使上一个图形的曲线变平。然而,这个想法的问题在于,如果没有简单的结构,用户可能会发现很难记住他们的密码。我推荐使用需要双重身份验证的密码管理器。这些应用程序将为您生成和存储您的所有密码,因此内存不是问题。他们生成的密码在结构上是随机的,只要应用程序允许,就可以一直使用。正如我之前提到的,加密密码是另一种非常有效的方法,可以减缓攻击者的发展前景。最后,在办公室内实施策略,帮助用户了解共享密码或重复使用密码的危险,是朝着正确方向迈出的成功一步,即使用户并不总是遵守。虽然他们很可能不会一直遵守,但这是一种有效的控制措施。
密码破解可能是一个模糊的概念。随着破解难度的增加,需要基于效率的针对性攻击,并应建立个人破解方法。为了最终提高哈希生成速度而投入资金是不值得的。因此,使用统计数据和工具作为攻击手段实施一种方法和简化的流程可以促进密码破解。开发人员可以制定控制措施来应对这种情况,用户可以使用安全的密码管理器来最大限度地降低这些攻击的有效性;但是,此类实现还不是很流行。目前,针对密码的统计攻击在破解数量和时间连接效率方面都是有效的。想想你自己的密码,问问自己,根据密码的结构,以及你办公室内的哪些控制措施可能导致攻击者入侵用户的账户,它们能以多快的速度被破解。