はじめに
Hashcat は、その速度と多数のハッシュアルゴリズムおよび攻撃モードのサポートで広く認識されている、強力で汎用性の高いパスワードリカバリツールです。その最も革新的な機能の 1 つが、PRINCE (Probabilistic Relevant Incremental Nonce-based Candidate-generator Extension) 攻撃です。
単語リストから単語を試すだけの標準的な辞書攻撃とは異なり、PRINCE 攻撃は、指定された単語リストの単語をさまざまな方法で組み合わせることで、新しいパスワード候補を生成します。これにより、記憶しやすく、しかし一見複雑に見えるパスワードを作成するための一般的なパターンである、2 つ以上の辞書単語の連結に対するパスワードに対して非常に効果的です。
この実験 (lab) では、Hashcat の PRINCE 攻撃モードの基本を学びます。単語リストを準備し、サンプルハッシュに対して PRINCE 攻撃を実行し、生成された候補を分析し、最終的にルールファイルと組み合わせて、さらに複雑なパスワードバリエーションに対応します。
PRINCE による確率的単語生成の理解
このステップでは、PRINCE 攻撃モードの核となる概念を学びます。PRINCE 攻撃は、Hashcat において攻撃モードフラグ -a 8 で指定されます。その強みは、大規模な辞書に依存するのではなく、より小さな単語リストから新しいパスワード候補を作成することにあります。ソースリストの単語をアルゴリズム的に組み合わせることで、はるかに大きく、より複雑な潜在的なパスワードのセットを生成します。
例えば、単語リストに「apple」と「pie」が含まれている場合、PRINCE は「apple」、「pie」、「applepie」、「pieapple」、「appleapple」などの候補を生成できます。
まず、Hashcat のヘルプメニューで PRINCE 攻撃モードのオプションを確認しましょう。grep を使用して広範なヘルプ出力をフィルタリングし、関連する行を見つけることができます。
ターミナルで以下のコマンドを実行してください。
hashcat --help | grep "PRINCE"
PRINCE 攻撃モードを定義し、その可用性と対応する攻撃モード番号を確認する行が表示されます。
8 | PRINCE
これにより、-a 8 が PRINCE 攻撃を呼び出す正しいフラグであることが確認できます。
小規模なベース単語リストの準備
このステップでは、小規模なベース単語リストを作成します。PRINCE 攻撃の効果は、入力単語リストの品質に直接関係します。たとえ小さくても、よく選択された単語リストは非常に強力になり得ます。この実験 (lab) では、いくつかの簡単な単語を含むファイルを作成します。
実験の最初の部分のターゲットパスワードは「labexrocks」です。したがって、単語リストにはベース単語「labex」と「rocks」を含める必要があります。
現在のディレクトリ (~/project) に wordlist.txt という名前のファイルを作成するために、出力リダイレクト付きの echo コマンドを使用します。
echo -e "labex\nrocks\npass\nword" > wordlist.txt
-e フラグはバックスラッシュエスケープの解釈を有効にするため、\n は各単語に対して新しい行を作成します。
次に、cat コマンドを使用して、新しく作成した単語リストの内容を確認します。
cat wordlist.txt
ファイルが正しく作成されたことを確認する以下の出力が表示されるはずです。
labex
rocks
pass
word
これで、PRINCE 攻撃の準備ができたベース単語リストができました。
-a 8 を使用した PRINCE 攻撃の実行
このステップでは、作成した単語リストを使用してサンプル MD5 ハッシュをクラックします。この実験 (lab) のセットアップスクリプトは、すでにパスワード「labexrocks」の MD5 ハッシュを含む hash.txt という名前のファイルを作成しています。
Hashcat コマンドを構築しましょう。
hashcat: 実行ファイルです。-m 0: ハッシュモードを指定します。0は MD5 に対応します。-a 8: 攻撃モードを指定します。これは PRINCE です。hash.txt: ターゲットハッシュを含むファイルです。wordlist.txt: ベース単語リストです。
それでは、ターミナルで完全なコマンドを実行してください。
hashcat -m 0 -a 8 hash.txt wordlist.txt
Hashcat が初期化され、攻撃が開始されます。単語リストは小さく、パスワードはそこにリストされている単語の直接的な組み合わせであるため、プロセスは非常に高速です。セッションの詳細、そして最も重要なことに、クラックされたパスワードが表示されます。
出力は以下のようになります(一部の詳細が異なる場合があります)。
...
Dictionary cache built:
* Filename..: wordlist.txt
* Passwords.: 4
* Bytes.....: 22
* Keyspace..: 468
2d4a2b23999534c734b26e1b31b5579d:labexrocks
Session..........: hashcat
Status...........: Cracked
Hash.Name........: MD5
Hash.Target......: 2d4a2b23999534c734b26e1b31b5579d
Time.Started.....: ...
Time.Estimated...: ...
Guess.Base.......: File (wordlist.txt)
Guess.Mode.......: PRINCE
Speed.#*.........: ...
Recovered........: 1/1 (100.00%) Digests
Progress.........: 468/468 (100.00%)
Rejected.........: 0/468 (0.00%)
Restore.Point....: 468/468 (100.00%)
Restore.Sub.#*...: ...
Candidate.Engine.: PRINCE
Candidates.#*....: ...
Hardware.Mon.#*..: ...
...
2d4a2b23999534c734b26e1b31b5579d:labexrocks という行は、元のハッシュと回復されたパスワードを明確に示しています。あなたは PRINCE 攻撃を成功裏に使用してパスワードをクラックしました。
生成された候補パスワードの分析
このステップでは、PRINCE が舞台裏で何を行っているかを調べます。ハッシュをクラックする代わりに、Hashcat に生成されたパスワード候補をコンソールに出力するように指示できます。これは --stdout フラグを使用して行われます。ベース単語リストがどのように変換されているかを理解するのに最適な方法です。
wordlist.txt を使用して --stdout を実行し、生成された候補を見てみましょう。
hashcat --stdout -a 8 wordlist.txt
これにより、多数の組み合わせが画面に表示されます。出力をより管理しやすくするために、head コマンドにパイプして最初の 10 行のみを表示できます。
hashcat --stdout -a 8 wordlist.txt | head -n 10
出力には、PRINCE によって生成された最初のいくつかの候補が表示されます。
pass
word
labex
rocks
passpass
password
passlabex
passrocks
wordpass
wordword
ご覧のとおり、PRINCE は元の単語から開始し、新しい組み合わせの作成を開始します。先ほどクラックしたパスワード「labexrocks」は、このリストのさらに下の方で生成されます。これは、PRINCE が小さな単語リストをはるかに大きく、より効果的なパスワード推測セットに拡張する能力を示しています。
PRINCE 攻撃とルールファイルを組み合わせて複雑性を向上させる
このステップでは、ルールファイルと組み合わせることで PRINCE 攻撃をさらに強力にする方法を学びます。ルールファイルは、PRINCE によって生成された各候補パスワードに特定の変換を適用します。これにより、大文字化、数字の追加、特殊文字の追加などの一般的なバリエーションをテストできます。
実験 (lab) のセットアップでは、ハッシュファイル hash2.txt (パスワード "Labexrocks" 用) と best64.rule という名前の一般的なルールファイルが提供されています。このルールファイルには、最も効果的なパスワード操作ルールが 64 個含まれています。
攻撃の流れは次のようになります。
- PRINCE が候補を生成します (例:"labexrocks")。
- Hashcat がその候補に
best64.ruleからのルールを適用します (例:先頭文字を大文字にする -> "Labexrocks")。 - 変更された候補がハッシュに対してテストされます。
PRINCE 攻撃とルールファイルを組み合わせるには、-r フラグに続けてルールファイルへのパスを追加するだけです。
次のコマンドを実行してください。
hashcat -m 0 -a 8 hash2.txt wordlist.txt -r best64.rule
Hashcat は PRINCE 攻撃を実行しますが、生成された各候補はテストされる前に best64.rule のルールによって変更されます。
出力でクラックの成功を確認できます。
...
15895e67271a552214b5e422d5752e47:Labexrocks
Session..........: hashcat
Status...........: Cracked
...
回復されたパスワードは "Labexrocks" です。これは、PRINCE が "labexrocks" を生成し、best64.rule のルールの 1 つが先頭文字を大文字にしたことで、ターゲットパスワードと一致したため見つかりました。この攻撃モードの組み合わせは、実際のシナリオで非常に効果的です。
まとめ
この実験 (lab) では、Hashcat の PRINCE 攻撃モードの使用方法を習得しました。利用可能な最も創造的で効果的なパスワードクラッキング技術の 1 つを実際に体験しました。
以下のことを学びました。
- PRINCE 攻撃 (
-a 8) の概念と、確率的にパスワード候補を生成する方法を理解する。 - 攻撃のベースとして機能する、シンプルでターゲットを絞った単語リストを準備する。
- 単語を連結して形成されたパスワードをクラックするために、基本的な PRINCE 攻撃を実行する。
--stdoutフラグを使用して PRINCE によって生成された候補を分析し、そのロジックを理解する。- 大文字化などのバリエーションを持つより複雑なパスワードをクラックするために、PRINCE 攻撃とルールファイル (
-r) を組み合わせる。
PRINCE 攻撃は、特に複数の単語から作成されたパスワードを扱う際に、あらゆるセキュリティ専門家の強力なツールです。その使用方法と他の攻撃モードとの組み合わせを習得することで、パスワード回復能力が大幅に向上します。


