
実際に流出したパスワードから生成された大規模なhashcatルールセット
プロジェクトメンテナンス注意: このプロジェクトは完了とみなされています。このプロジェクトへのプルリクエストや変更は、実際のバグや新しいバージョンのhashcatでこれらのルールを動作させるための移行を除き、今後行われません。
Pantagruleは、実際のパスワード侵害データの大量のデータから生成された、hashcatパスワードクラッカーのための一連のルールです。Pantagruleのルールファイルは大きくなる可能性がありますが、ルールは調整可能であり、多くの既存のルールセットよりも優れたパフォーマンスを発揮します。
Pantagruleは、自動ルール生成のためのPACKのLevenshtein Reverse Pathアルゴリズム(Kacherginsky, 2013)を使用して生成されました。PACKの出力は、PACKがルールを生成した回数に基づいてソートされ、ベースのルールセットが作成されました。このプロセスは、2014年のパスワードクラッキングコンテストのために_NSAKEYによって生成されたルール(_NSAKEY, 2014)と似ていますが、Pantagruleははるかに大きなパスワードセットから生成されました。 Pantagruleバージョン2は、公開されているhashes.org "founds" コーパス(最高クラスの公開ワードリスト)から開発されました。これにより、842,643,513個のユニークパスワードを含むプロプライエタリコーパスを使用した元のバリアントよりも透明性の高い結果が得られます。
このような大きなルールセットをPACKに通すと、数百万のルールが生成されます。しかし、生成されたルールのほとんどはごく少数しか出現しないため、有用なルールのほとんどはアルゴリズムによって最も一般的に生成されるものです。このリポジトリには、既存のコーパスを反復処理しながらPACKによって生成されたルールのサブセットが含まれています。
実世界のデータに対するルールの二次パス最適化を生成するために、生成された上位100万ルールを、rockyouワードリストを使用してPwned Passwords NTLMリストに対して実行しました。パスワードをクラックしたルールは独自のリストに追加され、パフォーマンスの低いルールは破棄されました。
4つの最適化タイプが作成されました。
popular.rule: HIBPセットの上位25,000,000パスワードに対して実行されたpantagrule.1m。random.rule: HIBPセットからランダムに選択された25,000,000パスワードに対して実行されたpantagrule.1m。hybrid.rule: 最も成功したpopularルールとrandomルールの組み合わせをソートし、半分にカットして、より軽量で「バランスの取れた」、より大きなサンプルセットで機能するルールセットを作成。one.rule: トップパフォーマンスのhybridルールが追加され、diveルールセットのサイズに切り詰められた_OneRuleToRuleThemAll_のバージョン。興味深いことに、_OneRuleToRuleThemAll_とPantagruleルールの間には数千ルールの重複しかなく、2つの戦略は補完的です。Pantagruleのoneは、このサイズの他の既知のリストよりも優れたパフォーマンスを発揮するため、より大きなバリアントのいずれかを試す前に、まずこのルールセットから始めることをお勧めします。これらの大きなルールセットの成功後、royce バリアントの逆の試みが行われました。そこでは、元のPantagruleの方法論が使用されましたが、両方のデータセットが異なっていました。Pantagruleは現在、ルール生成のワードリストベースとして公開のhashes.org "founds" リストを使用し、最適化パスはHave I Been PwnedのV6 NTLMリストに対して行われました。使用されたデータの完全に公開された性質により、pantagrule.v2.1m.rule(この方法論で生成された上位100万ルール)を含む、生の再現性データの公開も可能になります。V5とV6のデータは、上位2500万パスワードで同じです。
このバージョンでは、oneの生成方法が変更されました。oneを生成するために、完全な100万リストがOneRuleToRuleThemAll.ruleに追加され、その後セット全体がPwned V6で較正されました(ルールを追加して切り詰めるだけではありません)。
ルールの命名規則は、pantagrule.${corpus}.${trainingversion}.${extension}の形式に変更されました。これにより、ルールが何に最適化されているかを理解しやすくなります。たとえば、pantagrule.hashorg.v6.randomの場合、random方法論をhashes.orgをルール生成の基礎として使用し、Pwned Passwords V6で最適化されています。
元のルールは、rockyou.txtをベースとして、プロプライエタリなワードリストをPwned Passwords NTLM v5セットと一緒に使用してトレーニングされました。「トレーニングデータ」と検証データは同じであるため、V5データセットに最適化されていることは理にかなっています。
royce バリアントhashcatコントリビューターのRoyce Williamsのリクエストにより、上位100万ルールの最適化がhashes.org founds リストでも実行されました。これは、HIBPコーパスが比較的汚れており、hashes.org founds リストが実際のクラッキングにとってより実用的なルールセットを生成する可能性が高いためです。これらはroyceバリアントとして追加されました。royce最適化は全体的にわずかに少ないルールで構成されているようであり、random.royceは元のrandomよりもパスワードのロングテールに対して実質的に効果的です。一部のバリアントでは既存のルールよりもパフォーマンスが向上しませんでしたが、元のPantagruleのトレーニングデータと検証データの両方が_Pwned Passwords_データセットからのものであることを考えると、これは驚くべきことではありません。Pantagrule royce バリアントはrules/royceフォルダにあります。
Pantagrule戦略の他のルールセットに対する成功をテストするために、Pwned Passwords V5の上位2500万パスワードとPwned Passwords V5の上位1億パスワードに対して検証データを実行し、各ルールセットで「ロングテール」をクラックする際のルールの有効性を把握します。標準のrockyou.txtを辞書およびベースラインとして使用します。
元のバリアント生成は、hashcat v5.1.0を実行する8x 1070Tiリグで行われました。royce Pantagruleバリアントは、hashcat gitビルドv5.1.0-1774-gf96594efを実行する4x Radeon VIIリグで作成されました。hashorg.v6バリアントは、単一のNVIDIA Tesla M4、単一の1070Ti、およびhashcatv6.1.0で作成および検証されました(非常にゆっくりと)。
非常に一般的なパスワードに対するルールのパフォーマンスを記録するために、0-25Mは独自のカラムに分割されています。_RPP_カラムは、1億データセットの_ルールあたりのパーセンテージ_です。これは、rpp = Math.round(num_rules / (0_100m_percent - 6.450))の式を使用して計算されます。この数値が高いほど、クラックされたパーセンテージあたりに実行されるルールの数が多くなります。これは、ルールセットにおける収穫逓減を実現するのに役立ち、より遅いハッシュでルールを実行するための増幅されたコストのアイデアを与えます。
この研究は、rockyou辞書を使用した場合に、_NSAKEYが現代のデータセットで最初に目撃したPACK LRPアルゴリズムの限界を確認しました。LRPアルゴリズムはクラッキング率を向上させるルールを生成しますが、検索空間が大幅に増加します。そのため、Pantagruleは、困難なクラッキングに特殊なルールが必要な場合に最も役立ちます。
特定のコーパスに基づいてPACKを使用してルールを生成し、残りのハッシュをターゲットにできれば、これらの大きなルールセットの1つを使用するよりも、より高いクラッキング率が得られる可能性が高いことに注意することが重要です。たとえば、Pantagrule V2は、PPv5ではv5で較正されたルールセットほどパフォーマンスが良くありません。
元のPantagruleリリース以来、これらのルールは大規模なテクノロジー企業やコンサルティング会社での複数のレッドチームエンゲージメントで実績を上げています。元のpantagrule.1mリストは、Pantagruleの生成に使用されたコーパス、上記の一般的なルールセット、7文字の英数字ブルートフォース、およびKoreLogicのPathWellトポロジに耐えた残りのHIBPハッシュの8%をクラックしました。
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 |