
Große hashcat-Regelsätze, generiert aus echten kompromittierten Passwörtern
Projektwartungshinweis: Dieses Projekt gilt als abgeschlossen. Es werden in Zukunft keine Pull Requests oder Änderungen an diesem Projekt vorgenommen, es sei denn, es handelt sich um tatsächliche Fehler oder Migrationen, um diese Regeln mit neueren Versionen von hashcat kompatibel zu machen.
Pantagrule ist eine Reihe von Regeln für den hashcat-Passwortknacker, die aus großen Mengen realer Passwort-Kompromittierungsdaten generiert wurden. Obwohl Pantagrule-Regeldateien groß sein können, sind die Regeln sowohl abstimmbar als auch leistungsfähiger als viele vorhandene Regelsätze.
Pantagrule wurde mit dem Levenshtein-Reverse-Path-Algorithmus von PACK zur automatischen Regelgenerierung erstellt (Kacherginsky, 2013). Die Ausgabe von PACK wurde dann nach der Häufigkeit sortiert, mit der PACK die Regel generierte, um den Basisregelsatz zu erstellen. Dieser Prozess ähnelt den Regeln, die von _NSAKEY für Passwortknack-Wettbewerbe im Jahr 2014 generiert wurden (_NSAKEY, 2014), jedoch wurde Pantagrule mit einem deutlich größeren Satz von Passwörtern erstellt. Version 2 von Pantagrule wurde auf der Grundlage des öffentlich verfügbaren hashes.org-„founds“-Korpus entwickelt, einer erstklassigen öffentlichen Wortliste. Dies liefert transparentere Ergebnisse als die ursprüngliche Variante, die einen proprietären Korpus mit 842.643.513 eindeutigen Passwörtern verwendete.
Wenn solch große Regelsätze durch PACK verarbeitet werden, entstehen Millionen von Regeln. Da die meisten der generierten Regeln jedoch nur wenige Male vorkommen, sind die nützlichsten Regeln diejenigen, die vom Algorithmus am häufigsten generiert werden. Dieses Repository enthält einen Teil der von PACK generierten Regeln, während der vorhandene Korpus durchlaufen wurde.
Um eine zweite Optimierungsrunde der Regeln gegen reale Daten zu generieren, wurden die obersten eine Million generierten Regeln gegen die Pwned Passwords NTLM-Liste mit der RockYou-Wortliste ausgeführt. Jede Regel, die ein Passwort knackte, wurde ihrer eigenen Liste hinzugefügt, und schlechter abschneidende Regeln wurden verworfen.
Vier Optimierungstypen wurden erstellt:
popular.rule: pantagrule.1m ausgeführt gegen die obersten 25.000.000 Passwörter des HIBP-Satzes.random.rule: pantagrule.1m ausgeführt gegen 25.000.000 zufällig ausgewählte Passwörter aus dem HIBP-Satz.hybrid.rule: Eine sortierte Liste einer Kombination der erfolgreichsten popular- und random-Regeln, dann halbiert, um einen leichteren, „ausgewogenen“ Regelsatz zu erstellen, der über eine größere Stichprobenmenge hinweg funktioniert.one.rule: Eine Version von OneRuleToRuleThemAll, bei der die leistungsstärksten hybrid-Regeln angehängt werden und die Liste auf die Größe des dive-Regelsatzes gekürzt wird. Interessanterweise gibt es nur eine Überlappung von einigen tausend Regeln mit OneRuleToRuleThemAll und den Pantagrule-Regeln, was die beiden Strategien komplementär macht. Pantagrules one schneidet besser ab als andere bekannte Listen dieser Größe, und es wird empfohlen, mit diesem Regelsatz zu beginnen, bevor man eine der größeren Varianten ausprobiert.Nach dem Erfolg dieser großen Regelsätze wurde ein umgekehrter Ansatz der Royce-Variante versucht, bei dem die ursprüngliche Pantagrule-Methodik verwendet wurde, aber beide Datensätze unterschiedlich waren. Pantagrule verwendet jetzt die öffentliche hashes.org „founds“-Liste als Wortlisten-Basis für die Regelgenerierung, und ein Optimierungsdurchlauf wurde dann gegen die V6-NTLM-Liste von Have I Been Pwned durchgeführt. Aufgrund der vollständig öffentlichen Natur der verwendeten Daten ermöglicht es auch die Veröffentlichung von rohen Reproduzierbarkeitsdaten, einschließlich pantagrule.v2.1m.rule, den obersten eine Million Regeln, die mit dieser Methodik generiert wurden. Die Daten für V5 und V6 sind für die obersten 25 Millionen Passwörter gleich.
Für diese Version hat sich die Art und Weise, wie one generiert wird, geändert. Um one zu generieren, wurde die vollständige 1-Millionen-Liste an OneRuleToRuleThemAll.rule angehängt und dann der gesamte Satz gegen Pwned V6 kalibriert, anstatt nur Regeln anzuhängen und zu kürzen.
Die Namenskonventionen für die Regeln haben sich nun geändert und haben das Format pantagrule.${corpus}.${trainingversion}.${extension}. Dies erleichtert das Verständnis, wofür die Regel optimiert wurde. Zum Beispiel für pantagrule.hashorg.v6.random haben wir die random-Methodik mit hashes.org als Grundlage für die Regelgenerierung verwendet, optimiert auf Pwned Passwords V6.
Die ursprünglichen Regeln wurden mit der proprietären Wortliste zusammen mit dem Pwned Passwords NTLM v5-Satz unter Verwendung von rockyou.txt als Basis trainiert. Da die „Trainingsdaten“ und die Validierungsdaten identisch sind, ist es sinnvoll, sie für den V5-Datensatz optimiert zu sehen.
royce-VariantenAuf Anfrage des hashcat-Mitarbeiters Royce Williams wurden auch Optimierungen der obersten eine Million Regeln mit der hashes.org founds list durchgeführt. Dies liegt daran, dass der HIBP-Korpus relativ verunreinigt ist und die hashes.org founds-Liste wahrscheinlich einen praktischeren Regelsatz für das reale Knacken liefert. Diese wurden als die royce-Varianten hinzugefügt. Die royce-Optimierungen scheinen insgesamt aus etwas weniger Regeln zu bestehen, und random.royce ist bei einem langen Ausläufer von Passwörtern wesentlich effektiver als das ursprüngliche random. Die Leistung stieg bei einigen Varianten nicht über die vorhandenen Regeln hinaus, aber angesichts der Tatsache, dass sowohl die Trainings- als auch die Validierungsdaten des ursprünglichen Pantagrule aus dem Pwned Passwords-Datensatz stammen, ist dies nicht überraschend. Pantagrule-royce-Varianten befinden sich im Ordner rules/royce.
Um etwaige Erfolge der Pantagrule-Strategie im Vergleich zu anderen Regelsätzen zu testen, führen wir Validierungsdaten über die obersten 25 Millionen Passwörter von Pwned Passwords V5 und die obersten 100 Millionen Passwörter von Pwned Passwords V5 aus, um ein Verständnis für die Effektivität der Regeln beim Knacken des „langen Ausläufers“ mit jedem Regelsatz zu erhalten. Das kanonische rockyou.txt wird unser Wörterbuch und unsere Baseline sein.
Die Erstellung der ursprünglichen Variante wurde auf einem 8x 1070Ti-Rig mit hashcat v5.1.0 durchgeführt. Die royce-Pantagrule-Varianten wurden auf einem 4x Radeon VII Rig mit hashcat git build v5.1.0-1774-gf96594ef erstellt. Die hashorg.v6-Varianten wurden (sehr langsam) auf einer einzelnen NVIDIA Tesla M4, einer einzelnen 1070Ti und hashcat v6.1.0 erstellt und validiert.
Um die Regelperformance gegen sehr häufige Passwörter zu beachten, ist 0-25M in eine eigene Spalte unterteilt. Die RPP-Spalte ist die Regeln pro Prozent im 100M-Datensatz. Diese wird mit der Formel rpp = Math.round(num_rules / (0_100m_percent - 6.450)) berechnet. Je höher diese Zahl, desto mehr Regeln werden pro Prozent geknackter Passwörter ausgeführt. Dies hilft, die abnehmenden Erträge in Regelsätzen zu erkennen und gibt eine Vorstellung von den verstärkten Kosten für die Ausführung der Regeln auf langsameren Hashes.
Diese Arbeit bestätigt die Einschränkungen des PACK-LRP-Algorithmus, die ursprünglich von _NSAKEY bei modernen Datensätzen bei Verwendung des RockYou-Wörterbuchs beobachtet wurden. Obwohl der LRP-Algorithmus Regeln generiert, die die Knackrate erhöhen, geschieht dies mit einer großen Zunahme des Suchraums. Aus diesem Grund ist Pantagrule am nützlichsten in Fällen, in denen schwieriges Knacken exotische Regeln erfordert.
Es ist wichtig zu beachten, dass Sie, wenn Sie PACK verwenden können, um Regeln basierend auf einem bestimmten Korpus zu generieren und dann Ihre verbleibenden Hashes damit zu targetieren, wahrscheinlich eine höhere Knackrate erzielen als mit einem dieser großen Regelsätze. Zum Beispiel schneidet Pantagrule V2 auf PPv5 nicht so gut ab wie der auf v5 kalibrierte Regelsatz.
Seit der ursprünglichen Veröffentlichung von Pantagrule haben sich diese Regeln bei mehreren Red-Team-Einsätzen bei großen Technologieunternehmen und Beratungsfirmen gleichermaßen bewährt. Die ursprüngliche pantagrule.1m-Liste knackte 8% der verbleibenden HIBP-Hashes, die dem Korpus, der zur Erstellung von Pantagrule verwendet wurde, den oben genannten gängigen Regelsätzen, einer alphanumerischen Brute-Force mit 7 Zeichen und KoreLogics PathWell-Topologien standgehalten hatten.
Wie sogar der Autor der One Rule to Rule Them All (Hunt, 2017) Meta-Regel feststellt, gibt es keine Regel, die besser funktioniert als andere. Jeder Anwendungsfall ist anders, und jede Regelquelle kann eine sein, die Ihnen bei einem bestimmten Hash-Dump oder mit einer bestimmten Wortliste mehr hilft als eine andere. Beachten Sie, dass diese Daten nicht zeigen, was geknackt wurde; einige Regeln haben Hashes geknackt, die andere Regeln nicht geknackt haben.
Pantagrule-Regeln werden unter der MIT-Lizenz veröffentlicht. Sie können sie gerne in Ihre eigenen Werkzeuge integrieren.
| Regeln | Anzahl der Regeln | V5 25M | V5 100M | RPP |
|---|
| Keine Regeln (nur 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 |