はじめに
この実験では、強力なパスワードクラッキングツールである John the Ripper の「シングルクラックモード」を探求します。シングルクラックモードは、ユーザー名のリストがあり、それらのユーザー名自体から派生した情報(順列や一般的なバリエーションなど)を使用してパスワードのクラッキングを試したい場合に特に役立ちます。このモードに適したハッシュファイルの準備方法、John the Ripper の実行、クラッキングプロセスの観察、そしてシングルクラックモードが最も効果的な特定のシナリオとその限界を理解します。この実践的な経験により、パスワードセキュリティと監査に関する実践的なスキルを習得できます。
ユーザー名を含むハッシュファイルの準備
このステップでは、John the Ripper がシングルクラックモードで使用できるハッシュファイルを準備します。シングルクラックモードは、ユーザー名自体からの情報を利用して、潜在的なパスワードを生成します。これを効果的に行うためには、ハッシュファイルにユーザー名が含まれている必要があります。
まず、プロジェクトディレクトリにいることを確認してください。
cd ~/project
次に、my_hashes.txt という名前の簡単なパスワードファイルを作成し、いくつかのエントリを追加しましょう。デモンストレーション目的で、パスワード "password" の既知の MD5 ハッシュ (5f4dcc3b5aa765d61d8327deb882cf99) を使用します。
echo "user1:5f4dcc3b5aa765d61d8327deb882cf99" > my_hashes.txt
echo "john:5f4dcc3b5aa765d61d8327deb882cf99" >> my_hashes.txt
echo "mary:5f4dcc3b5aa765d61d8327deb882cf99" >> my_hashes.txt
echo "testuser:5f4dcc3b5aa765d61d8327deb882cf99" >> my_hashes.txt
echo "admin:5f4dcc3b5aa765d61d8327deb882cf99" >> my_hashes.txt
cat コマンドを使用してファイルの内容を確認できます。
cat my_hashes.txt
期待される出力:
user1:5f4dcc3b5aa765d61d8327deb882cf99
john:5f4dcc3b5aa765d61d8327deb882cf99
mary:5f4dcc3b5aa765d61d8327deb882cf99
testuser:5f4dcc3b5aa765d61d8327deb882cf99
admin:5f4dcc3b5aa765d61d8327deb882cf99
このファイルには、ユーザー名とその対応するパスワードハッシュが含まれており、John the Ripper のシングルクラックモードの準備ができました。
シングルクラックモードで John the Ripper を実行する
このステップでは、準備したハッシュファイルに対して、シングルクラックモードを使用して John the Ripper を実行します。John は、ユーザー名から潜在的なパスワードを導き出すことによって、パスワードのクラッキングを試みます。
シングルクラックモードで John the Ripper を実行するには、--single オプションの後にハッシュファイルへのパスを指定します。
john --single my_hashes.txt
John the Ripper はハッシュの処理を開始します。パスワード "password" は一般的な単語であり、ユーザー名も単純なものであるため、John はそれらのいくつかを迅速にクラックする可能性があります。出力には、クラックされたパスワードが表示されます。
出力例:
Using default input encoding: UTF-8
Loaded 5 password hashes with no different salts (Raw-MD5 [MD5])
Press 'q' or Ctrl-C to abort, almost any other key for status
password (user1)
password (john)
password (mary)
password (testuser)
password (admin)
5g 0:00:00:00 DONE (2023-10-27 08:30) 100% ...
Session completed.
John が終了した後、John の pot ファイルに保存されたクラックされたパスワードを表示できます。
john --show my_hashes.txt
期待される出力:
user1:password
john:password
mary:password
testuser:password
admin:password
5 password hashes cracked, 0 left
このコマンドは、my_hashes.txt ファイルから John が正常にクラックしたすべてのパスワードを表示します。
シングルクラックモードの動作を観察する
このステップでは、John the Ripper のシングルクラックモードがどのように動作し、どのような種類のパスワード候補を生成するかを観察します。シングルクラックモードは、単語リストや総当たり攻撃を直接使用しない点でユニークです。代わりに、ユーザー名(または利用可能な場合は GECOS フィールド)を基にしてパスワードの推測を生成します。
観察のために、新しい実行を確実にするために John の pot ファイルをクリアしましょう。これは通常、実際のシナリオでは行われませんが、デモンストレーションには役立ちます。
john --session=clear --format=Raw-MD5 --pot=/home/labex/.john/john.pot
次に、シングルモードで John を再度実行しますが、今回は出力と各エントリの処理方法にさらに注意を払いましょう。
john --single my_hashes.txt
John が実行されると、ユーザー名のバリエーションを試していることに気づくでしょう。例えば、john に対しては、john、John、JOHN、john1、john123、johnny、j0hn などを試す可能性があります。正確なバリエーションは、John の内部ルールと john.conf 設定ファイルによって異なります。
重要な点は、シングルクラックモードは、ユーザー名の単純なバリエーションであるパスワードをクラックするのに非常に効率的であるということです。これは、辞書攻撃や総当たり攻撃のような、よりリソースを消費する方法に頼る前の迅速なチェックです。
また、John の設定ファイルを確認することで、シングルモードで使用されるルールを理解することもできます。変更はしませんが、その場所を知っておくと便利です。
ls -l /etc/john/john.conf
期待される出力:
-rw-r--r-- 1 root root 12345 Oct 27 08:00 /etc/john/john.conf
(ファイルサイズと日付は異なる場合があります)
このファイルには、シングルクラックモードなどのためのルールセットが含まれています。
シングルクラックモードの制限を理解する
このステップでは、John the Ripper のシングルクラックモードの制限を理解します。特定のシナリオでは強力ですが、すべてのパスワードクラッキングのニーズに対する万能な解決策ではありません。
シングルクラックモードは主に、ユーザー名(および場合によっては /etc/passwd からの GECOS フィールド)の順列とバリエーションに依存します。これは次のことを意味します。
- 限定的な範囲: ユーザー名から直接導き出せるパスワードのみを試行します。パスワードが "apple" でユーザー名が "user1" の場合、"apple" は "user1" と直接関連がないため、シングルクラックモードは失敗する可能性が高いです。
- 外部単語リストなし: 辞書攻撃モードとは異なり、シングルクラックモードは外部単語リストを使用しません。これにより高速になりますが、ユーザー名に関連のない一般的な単語であるパスワードをクラックする能力も制限されます。
- 総当たり攻撃なし: すべての可能な文字の組み合わせを試す完全な総当たり攻撃を実行しません。これは、複雑でランダムなパスワードがこのモードでクラックされる可能性が非常に低いことを意味します。
- ユーザー名への依存: その有効性は、ユーザー名の質と関連性に直接結びついています。ユーザー名が一般的(例:
user、admin)な場合、生成されるパスワード候補は効果が低い可能性があります。
この制限を実証するために、ユーザー名に関連のないパスワードのハッシュを追加しましょう。e10adc3949ba59abbe56e057f20f883e は 123456 の MD5 ハッシュであるため、randomuser:e10adc3949ba59abbe56e057f20f883e を追加します。
echo "randomuser:e10adc3949ba59abbe56e057f20f883e" >> my_hashes.txt
cat my_hashes.txt
次に、シングルモードで John を再度実行します。
john --single my_hashes.txt
randomuser のパスワード(123456)はクラックされないことがわかります。これは、123456 が randomuser の派生ではないためです。
期待される出力(randomuser がクラックされていないことに注意してください):
Using default input encoding: UTF-8
Loaded 6 password hashes with no different salts (Raw-MD5 [MD5])
Press 'q' or Ctrl-C to abort, almost any other key for status
password (user1)
password (john)
password (mary)
password (testuser)
password (admin)
5g 0:00:00:00 DONE (2023-10-27 08:35) 100% ...
Session completed.
これは、シングルクラックモードがパスワードがユーザー名の単純なバリエーションである場合にのみ効果的であることを明確に示しています。
シングルクラックモードと他のモードの比較
この最後のステップでは、John the Ripper の他の一般的なクラッキングモード(単語リストモードや総当たりモードなど)とシングルクラックモードを簡単に比較します。これらの違いを理解することは、適切なツールを選択するために不可欠です。
シングルクラックモード (
--single):- 方法: ユーザー名(および GECOS フィールド)に基づいてパスワード候補を生成します。
- ユースケース: ユーザー名の単純なバリエーションであるパスワードに対する迅速なチェックに最適です。非常に高速です。
- 制限: 範囲が限定的です。ユーザー名に関連のないパスワードはクラックしません。
単語リストモード (
--wordlist=FILE):- 方法: 提供された辞書または単語リストファイルからパスワードを試行します。ルール (
--rules) と組み合わせて順列を生成できます。 - ユースケース: 辞書で見つかる一般的な単語、フレーズ、または組み合わせであるパスワードをクラックするのに最も一般的で効果的です。
- 制限: 単語リストの質に依存します。リストまたはその順列に存在しないパスワードはクラックしません。
- 方法: 提供された辞書または単語リストファイルからパスワードを試行します。ルール (
インクリメンタル(総当たり)モード (
--incremental):- 方法: 定義された文字セットと長さ内で、可能なすべての文字の組み合わせを体系的に試行します。
- ユースケース: 他の方法で見つからなかった複雑なパスワードをクラックするための最後の手段です。十分な時間が与えられれば、パスワードを見つけることを保証します。
- 制限: 特に長いパスワードや大きな文字セットの場合、非常に時間がかかります。数日、数ヶ月、あるいは数年かかることもあります。
単語リストモードを使用して randomuser のパスワード(123456)をクラックして、その違いを実証しましょう。まず、「123456」を含む単純な単語リストを作成します。
echo "123456" > my_wordlist.txt
次に、単語リストモードで John を実行します。
john --wordlist=my_wordlist.txt my_hashes.txt
期待される出力:
Using default input encoding: UTF-8
Loaded 6 password hashes with no different salts (Raw-MD5 [MD5])
Press 'q' or Ctrl-C to abort, almost any other key for status
123456 (randomuser)
1g 0:00:00:00 DONE (2023-10-27 08:40) 100% ...
Session completed.
ご覧のとおり、randomuser のパスワードは単語リストを使用してクラックされました。これは、異なるクラッキングモードが異なる種類のパスワードに適していることを強調しています。シングルクラックモードは良い最初のステップですが、より包括的なクラッキングのためには、しばしば単語リストモードまたはインクリメンタルモードを続ける必要があります。
最後に、作成したファイルをクリーンアップします。
rm my_hashes.txt my_wordlist.txt
まとめ
この実験では、John the Ripper のシングルクラックモードの使用方法を学びました。ユーザー名を含むハッシュファイルを作成し、シングルクラックモードで John を実行し、ユーザー名から派生したパスワードをクラックする際の動作を観察しました。また、シングルクラックモードの制限を理解し、特定のパスワードパターンに最も効果的であり、万能な解決策ではないことを認識しました。最後に、シングルクラックモードを、単語リストモードやインクリメンタルモードなどの一般的な John the Ripper モードと比較し、各モードが最も適切な場合を強調しました。この実践的な経験により、パスワードセキュリティ監査技術への理解が深まります。


