はじめに
この実験では、広く使用されているオープンソースのパスワードクラッキングツールである John the Ripper の機能を探求します。パスワード表現の保存によく使用される MD5 ハッシュのクラッキングに焦点を当てます。ハッシュをクラッキングする方法を理解することは、セキュリティ専門家がパスワードの強度を評価し、脆弱性を特定するために不可欠です。MD5 ハッシュの生成方法、John the Ripper の準備方法、そして単語リスト攻撃や増分モードを含むさまざまなクラッキングテクニックの使用方法を学びます。
パスワードから MD5 ハッシュを生成する
このステップでは、いくつかのサンプルパスワードの MD5 ハッシュを生成します。これにより、ハッシュ化されたパスワードにアクセスでき、それらをクラッキングする必要があるシナリオをシミュレートします。echoコマンドをmd5sumにパイプして、これらのハッシュを作成します。
まず、パスワードpassword123の MD5 ハッシュを生成しましょう。
echo -n "password123" | md5sum
以下のような出力が表示されるはずです。
202cb962ac59075b964b07152d234b70 -
次に、labexとsecretのパスワードについても MD5 ハッシュを生成します。
echo -n "labex" | md5sum
echo -n "secret" | md5sum
出力は以下のようになります。
202cb962ac59075b964b07152d234b70 -
a0b923820dcc509a86619210ed1572e4 -
5ebe2294ecd0e0f08eab7690d2a6ee69 -
これらの生成されたハッシュは、後続のステップでクラッキングに使用されます。
MD5 用ハッシュファイルの作成
このステップでは、生成した MD5 ハッシュを含むファイルを作成します。John the Ripper は通常、クラッキング対象のハッシュが各行に含まれるファイルをインプットとして受け取ります。~/projectディレクトリにhashes.txtという名前のファイルを作成し、MD5 ハッシュを格納します。
まず、hashes.txtファイルを作成し、MD5 ハッシュを追加しましょう。ハッシュ部分のみを追加し、-やファイル名は含めません。
echo "202cb962ac59075b964b07152d234b70" > ~/project/hashes.txt
echo "a0b923820dcc509a86619210ed1572e4" >> ~/project/hashes.txt
echo "5ebe2294ecd0e0f08eab7690d2a6ee69" >> ~/project/hashes.txt
次に、catコマンドを使用してhashes.txtファイルの内容を確認します。
cat ~/project/hashes.txt
出力は以下のようになります。
202cb962ac59075b964b07152d234b70
a0b923820dcc509a86619210ed1572e4
5ebe2294ecd0e0f08eab7690d2a6ee69
このファイルは、John the Ripper のインプットとして使用されます。
John the Ripper 用ハッシュタイプの指定
このステップでは、John the Ripper にどのハッシュタイプを扱っているかを伝える方法を学びます。John the Ripper は多種多様なハッシュタイプをサポートしており、成功したクラッキングのためには正しいタイプを指定することが重要です。MD5 ハッシュの場合、raw-md5フォーマットを使用します。
John the Ripper が raw-md5 を認識するかどうかを確認し、他のサポートされているフォーマットを見るには、--list=formats オプションを使用できます。しかし、この実験では直接 raw-md5 フォーマットを使用します。
--format オプションを使用して、単一のハッシュで John the Ripper をテストできます。これはまだクラッキングしませんが、John がフォーマットを処理できることを確認します。
john --format=raw-md5 ~/project/hashes.txt --stdout
このコマンドは、hashes.txt 内のハッシュを raw-md5 として処理し、標準出力に表示しようとします。まだクラッキングされたパスワードは表示されませんが、フォーマットが認識されていることが確認できます。John はクラッキングせずに処理しているだけなので、出力はハッシュ自体になります。
202cb962ac59075b964b07152d234b70
a0b923820dcc509a86619210ed1572e4
5ebe2294ecd0e0f08eab7690d2a6ee69
このステップにより、John the Ripper が MD5 ハッシュを正しく処理できるように設定されていることが保証されます。
Wordlist を用いた MD5 ハッシュのクラッキング
このステップでは、単語リスト(wordlist)を使用して MD5 ハッシュをクラッキングします。単語リスト攻撃は、事前に定義されたリスト内のすべての単語を試すことでパスワードをクラッキングしようとします。これは、弱いパスワードをクラッキングするための一般的で効果的な方法です。
まず、単語リストが必要です。この実験では、~/project ディレクトリに wordlist.txt という名前の簡単な単語リストファイルを作成し、以前にハッシュ化したものを含む一般的なパスワードを格納します。
echo "password123" > ~/project/wordlist.txt
echo "labex" >> ~/project/wordlist.txt
echo "secret" >> ~/project/wordlist.txt
echo "test" >> ~/project/wordlist.txt
echo "admin" >> ~/project/wordlist.txt
次に、wordlist オプションを使用して John the Ripper でハッシュをクラッキングします。
john --format=raw-md5 --wordlist=~/project/wordlist.txt ~/project/hashes.txt
John the Ripper は hashes.txt ファイルを処理し、wordlist.txt の各単語を MD5 ハッシュに対して試します。一致が見つかった場合、クラッキングされたパスワードが表示されます。
出力はクラッキングされたパスワードを示すはずです。
Using default input encoding: UTF-8
Loaded 3 password hashes with no different salts (raw-md5 [MD5])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password123 (202cb962ac59075b964b07152d234b70)
labex (a0b923820dcc509a86619210ed1572e4)
secret (5ebe2294ecd0e0f08eab7690d2a6ee69)
3g 0:00:00:00 DONE (2023-10-27 10:30) 100.0% (ETA: 00:00:00) 3.000g/s 15.00p/s 15.00c/s 15.00C/s password123 labex secret
Session completed.
John the Ripper の pot ファイルからクラッキングされたパスワードを表示するには、john --show を使用することもできます。
john --show ~/project/hashes.txt
出力:
202cb962ac59075b964b07152d234b70:password123
a0b923820dcc509a86619210ed1572e4:labex
5ebe2294ecd0e0f08eab7690d2a6ee69:secret
3 password hashes cracked, 0 left
これは、一般的または推測しやすいパスワードに対する単語リスト攻撃の効果を示しています。
Incremental モードを用いた MD5 ハッシュのクラッキング
このステップでは、John the Ripper の Incremental モードを使用して MD5 ハッシュをクラッキングします。Incremental モードは、文字セット(例:小文字、数字、記号)に基づいた文字の組み合わせを試す強力な総当たり攻撃(brute-force attack)です。単語リスト攻撃が失敗した場合に役立ちます。これは既存の単語に依存しないためです。
まず、このクラッキング試行のためにリフレッシュして開始できるように、John の pot ファイルをクリアしましょう。John はクラッキングされたパスワードを保存するため、クラッキングプロセスを再度確認したい場合はこれが重要です。
john --session=my_session --restore=NONE
次に、Incremental モードを使用してハッシュをクラッキングしてみましょう。デモンストレーション目的で、クラッキング時間を管理しやすくするために、非常に小さな文字セットと短い最大長を使用します。実際のシナリオでは、Incremental モードはパスワードの複雑さと長さに応じて非常に長い時間がかかる可能性があります。
john --format=raw-md5 --incremental=alnum --max-len=8 ~/project/hashes.txt
ここで:
--incremental=alnum: John に英数字(a-z、A-Z、0-9)を使用するように指示します。John にはalnum、alpha、digitsなどの事前定義された Incremental モードがあります。--max-len=8: パスワードの最大長を 8 文字に制限します。これは、この実験のクラッキング時間を短く保つために重要です。
John the Ripper は組み合わせの生成とテストを開始します。私たちのパスワード(password123、labex、secret)は alnum 文字セット内であり、max-len=8(labex と secret の場合)の範囲内にあるため、John は最終的にそれらをクラッキングするはずです。password123 は 11 文字長なので、max-len=8 ではクラッキングされません。
出力は、John が見つけたクラッキングされたパスワードを表示します。
Using default input encoding: UTF-8
Loaded 3 password hashes with no different salts (raw-md5 [MD5])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
labex (a0b923820dcc509a86619210ed1572e4)
secret (5ebe2294ecd0e0f08eab7690d2a6ee69)
2g 0:00:00:00 DONE (2023-10-27 10:35) 100.0% (ETA: 00:00:00) 2.000g/s 10.00p/s 10.00c/s 10.00C/s labex secret
Session completed.
再度 john --show を使用してクラッキングされたパスワードを表示できます。
john --show ~/project/hashes.txt
出力:
a0b923820dcc509a86619210ed1572e4:labex
5ebe2294ecd0e0f08eab7690d2a6ee69:secret
2 password hashes cracked, 1 left
今回 password123 がクラッキングされなかったのは、その長さ(11 文字)が --max-len=8 の制限を超えていたためです。これは、Incremental 攻撃に対して適切なパラメータを設定することの重要性を強調しています。
まとめ
この実験では、John the Ripper を使用して MD5 ハッシュをクラッキングすることに成功しました。サンプルパスワードから MD5 ハッシュを生成し、その後 John the Ripper が処理するためのハッシュファイルを作成することから始めました。ハッシュタイプ(raw-md5)を指定する方法を学び、その後、単語リスト攻撃と Incremental モードという 2 つの異なるクラッキング技術を適用しました。
単語リスト攻撃は辞書にある一般的なパスワードに対して効果的である一方、Incremental モードはより複雑または未知のパスワードに対して総当たり攻撃(brute-force approach)を提供しますが、クラッキングに非常に長い時間がかかる可能性があることを観察しました。この実験は、サイバーセキュリティ専門家にとって貴重なスキルである John the Ripper を使用したパスワードクラッキング技術の基本的な理解を提供します。


