项目维护警告:该项目被视为已完成。除非是实际错误或为使其能适配更新版 hashcat 的迁移,未来将不会对此项目进行任何拉取请求或更改。
Pantagrule 是一系列为 hashcat 密码破解器生成的规则,这些规则源自大量真实世界的密码泄露数据。尽管 Pantagrule 规则文件可能很大,但规则既可调优,且性能优于许多现有规则集。
Pantagrule 使用 PACK 的 Levenshtein 反向路径算法进行自动规则生成(Kacherginsky, 2013)。随后,根据 PACK 生成规则的次数对输出进行排序,形成基础规则集。此过程类似于 _NSAKEY 在 2014 年密码破解竞赛中生成的规则(_NSAKEY, 2014),但 Pantagrule 是在显著更大的密码集上生成的。 Pantagrule 版本 2 基于公开可用的 hashes.org "founds" 语料库(一个同类最佳的公开词表)开发。这比原始变体(使用包含 842,643,513 个唯一密码的专有语料库)产生了更透明的结果。
当如此大的规则集输入 PACK 时,会产生数百万条规则。然而,由于生成的规则大多只出现几次,最有用的规则通常是算法最常生成的。此仓库包含 PACK 在遍历现有语料库时生成的规则子集。
为了对规则进行针对真实世界数据的第二遍优化,我们将生成的前一百万条规则与 rockyou 词表一起对 Pwned Passwords NTLM 列表运行。任何破解出密码的规则都被添加到其自己的列表中,而表现较差的规则被丢弃。
创建了四种优化类型:
popular.rule:pantagrule.1m 对 HIBP 集前 25,000,000 个密码运行。random.rule:pantagrule.1m 对 HIBP 集中随机选择的 25,000,000 个密码运行。hybrid.rule:合并 popular 和 random 中成功率最高的规则,然后截半,尝试生成一个更轻量、“平衡”的规则集,以便在更大的样本集上发挥作用。one.rule:对 OneRuleToRuleThemAll 的变体,在其中追加表现最佳的 hybrid 规则,并将列表截断至 dive 规则集的大小。有趣的是,OneRuleToRuleThemAll 与 Pantagrule 规则之间只有几千条规则重叠,这使得两种策略互补。Pantagrule 的 one 表现优于其他已知的同等大小规则集,建议在尝试更大变体之前先使用此规则集。在这些大型规则集取得成功之后,尝试了与 royce 变体相反的方法:使用相同的 Pantagrule 方法,但两组数据均不同。Pantagrule 现在使用公共 hashes.org "founds" 列表作为规则生成的词表基础,然后针对 Have I Been Pwned 的 V6 NTLM 列表进行了优化传递。鉴于所用数据的完全公开性质,也允许发布原始可重现性数据,包括 pantagrule.v2.1m.rule(即此方法生成的前一百万条规则)。对于 V5 和 V6,前 2500 万个密码的数据相同。
对于此版本,生成 one 的方式已更改。为了生成 one,将完整的 100 万条规则列表追加到 OneRuleToRuleThemAll.rule,然后在整个集合上针对 Pwned V6 进行校准,而不仅仅是追加规则并截断。
现在规则命名约定已更改为 pantagrule.${corpus}.${trainingversion}.${extension} 格式。这使得理解规则的优化目标更加容易。例如,对于 pantagrule.hashorg.v6.random,我们使用 random 方法,以 hashes.org 作为规则生成的基础,并在 Pwned Passwords V6 上优化。
原始规则使用专有词表以及 Pwned Passwords NTLM v5 集(以 rockyou.txt 为基础)进行训练。由于“训练数据”和验证数据相同,可以预期它们针对 V5 数据集进行了优化。
royce 变体应 hashcat 贡献者 Royce Williams 的请求,还使用 hashes.org founds 列表 对前一百万条规则进行了优化。这是因为 HIBP 语料库相对杂乱,而 hashes.org founds 列表可能产生更实用的用于真实世界破解的规则集。这些已作为 royce 变体添加。royce 优化似乎总体上规则数量略少,且 random.royce 对密码长尾的效果明显优于原始 random。对于某些变体,其性能并未超过现有规则,但考虑到原始 Pantagrule 的训练和验证数据均来自 Pwned Passwords 数据集,这并不令人惊讶。Pantagrule royce 变体位于 rules/royce 文件夹中。
为了测试 Pantagrule 策略相对于其他规则集的成功程度,我们将对 Pwned Passwords V5 前 2500 万个密码和前 1 亿个密码进行验证数据运行,以了解每个规则集在破解“长尾”时的规则有效性。规范化的 rockyou.txt 将作为我们的字典和基线。
原始变体生成在一台 8×1070Ti 机器上运行 hashcat v5.1.0 完成。royce Pantagrule 变体在 4×Radeon VII 机器 上运行 hashcat git 构建 v5.1.0-1774-gf96594ef 创建。hashorg.v6 变体在单个 NVIDIA Tesla M4、单个 1070Ti 以及 hashcat v6.1.0 上创建并验证(非常慢)。
为了记录规则针对非常常见密码的性能,将 0-25M 单独列为一列。RPP 列是 1 亿数据集的 每百分点的规则数。计算公式为 rpp = Math.round(num_rules / (0_100m_percent - 6.450))。该值越高,表示每破解一个百分点所需运行的规则越多。这有助于认识规则集中的收益递减,并了解对慢速哈希运行这些规则的成本放大。
这项工作证实了 _NSAKEY 在使用 rockyou 字典的现代数据集上最初观察到的 PACK LRP 算法的局限性。虽然 LRP 算法生成的规则确实提高了破解率,但代价是搜索空间大幅增加。因此,Pantagrule 最适用于需要非常规规则的困难破解场景。
需要注意的是,如果您能使用 PACK 根据特定语料库生成规则,然后针对剩余的哈希值使用这些规则,您可能会获得比使用这些大型规则集更高的破解率。例如,Pantagrule V2 在 PPv5 上的表现并不如 v5 校准的规则集。
自最初发布 Pantagrule 以来,这些规则已在多家大型科技公司和咨询公司的多次红队演练中得到验证。原始的 pantagrule.1m 列表破解了剩余 HIBP 哈希中 8% 的密码,这些哈希此前经受了用于生成 Pantagrule 的语料库、上述常见规则集、7 字符字母数字暴力破解以及 KoreLogic 的 PathWell 拓扑。
正如《One Rule to Rule Them All》(Hunt, 2017)元规则的作者所说,并不存在一种规则集始终优于其他规则集。每个用例都不同,每个规则源可能对特定的哈希转储或词表更有帮助。请注意,这些数据并未显示 哪些 哈希被破解;有些规则破解了其他规则未能破解的哈希。
Pantagrule 规则根据 MIT 许可证发布。欢迎将它们集成到您自己的工具中。
| 规则集 | 规则数量 | V5 25M | V5 100M | RPP |
|---|
| 无规则(仅 rockyou.txt) | 0 | 16.549% | 6.450% | N/A |
| pantagrule.private.v5.one | 99,092 | 79.814% | 69.417% | 1,574 |
| pantagrule.private.v5.hybrid | 355,205 | 81.346% | 73.372% | 5,308 |
| pantagrule.private.v5.popular | 478,736 | 81.792% | 73.544% | 7,135 |
| pantagrule.private.v5.random | 616,236 | 81.687% | 69.805% | 8,828 |
| pantagrule.hashorg.v6.one | 99,092 | 74.500% | 60.573% | 1,831 |
| pantagrule.hashorg.v6.hybrid | 339,953 | 77.649% | 68.341% | 5,493 |
| pantagrule.hashorg.v6.popular | 514,416 | 80.668% | 72.377% | 6,931 |
| pantagrule.hashorg.v6.random | 638,773 | 80.603% | 72.713% | 8,614 |
| pantagrule.private.hashorg.one.royce | 99,092 | 79.618% | 69.092% | 1,582 |
| pantagrule.private.hashorg.hybrid.royce | 314,268 | 81.068% | 73.082% | 4,716 |
| pantagrule.private.hashorg.popular.royce | 420,984 | 81.386% | 73.102% | 6,316 |
| pantagrule.private.hashorg.random.royce | 592,235 | 81.659% | 74.010% | 8,766 |
| best64 | 64 | 45.117% | 24.985% | 3 |
| hob064 | 68 | 37.786% | 19.773% | 5 |
| OneRuleToRuleThemAll | 52,014 | 78.058% | 64.541% | 895 |
| d3adhob0 | 57,548 | 51.274% | 34.800% | 2,030 |
| dive | 99,092 | 77.111% | 63.314% | 1,743 |
| _NSAKEY V1 | 123,289 | 76.42% | 64.121% | 2,138 |
| _NSAKEY V2 | 123,289 | 76.882% | 64.472% | 2,124 |