はじめに
この実験では、人気のオープンソースパスワードクラッキングツールである John the Ripper の強力な機能、特にその「インクリメンタルモード」に焦点を当てます。インクリメンタルモードは、定義済みの文字セットに基づいた文字の組み合わせを体系的に試すことで、パスワードをクラックする非常に効率的な方法です。この実験では、テスト目的で簡単なパスワードハッシュを生成し、その後、異なる文字セット(すべての文字、数字のみ、文字のみ)でインクリメンタルモードを適用して、その有効性とパフォーマンスを観察します。この実践的な経験により、パスワードクラッキングの仕組みと、その速度に影響を与える要因についての実践的な理解が得られます。
テスト用の簡単なハッシュを生成する
このステップでは、John the Ripper がクラックを試みることができる簡単なパスワードハッシュを生成します。mkpasswdコマンドを使用して、既知のパスワードのハッシュを作成します。これにより、後で John the Ripper の成功を確認できます。
まず、mkpasswdはwhoisの一部であるため、whoisがインストールされていることを確認してください。
sudo apt update
sudo apt install -y whois
次に、パスワード12345のハッシュを生成します。簡単にするために MD5 アルゴリズムを使用します。
mkpasswd -m md5 12345
出力は'$1$xxxxxxx$yyyyyyyyyyyyyyy'のようなものになります。このハッシュをコピーしてください。
次に、このハッシュを~/projectディレクトリ内のhash.txtという名前のファイルに保存します。YOUR_GENERATED_HASHをコピーした実際のハッシュに置き換えてください。
echo "YOUR_GENERATED_HASH" > ~/project/hash.txt
たとえば、ハッシュが$1$abcdefgh$ijklmnopqrstuvwxyzだった場合、コマンドは次のようになります。
echo "$1$abcdefgh$ijklmnopqrstuvwxyz" > ~/project/hash.txt
最後に、hash.txtファイルの内容を確認します。
cat ~/project/hash.txt
生成したハッシュが表示されるはずです。
John the Ripper をインクリメンタルモード(全文字)で実行する
このステップでは、生成したパスワードハッシュをクラックするために、John the Ripper をインクリメンタルモードで使用します。インクリメンタルモードは、定義された文字セットに基づいて文字の組み合わせを体系的に試行します。デフォルトでは、John のインクリメンタルモード(--incremental)は、すべての印刷可能な ASCII 文字を試します。
まず、John the Ripper がインストールされていることを確認してください。
sudo apt update
sudo apt install -y john
次に、インクリメンタルモードを使用して、hash.txtファイルに対して John the Ripper を実行します。
john --incremental ~/project/hash.txt
John はパスワードのクラックを試行し始めます。12345のような簡単なパスワードを使用したため、比較的迅速にクラックされるはずです。クラックされると、John はクラックされたパスワードを表示します。
パスワードがクラックされたことを示す、以下のような出力が表示されるはずです。
Using default input encoding: UTF-8
Loaded 1 password hash (MD5 [MD5])
Press 'q' or Ctrl-C to abort, almost any other key for status
12345 (hash.txt)
1g 0:00:00:00 DONE (2023-10-26 10:30) 100.0g/s 100.0p/s 100.0c/s 100.0C/s 12345
Session completed.
John が見つけたクラックされたパスワードを表示するには、--showオプションを使用できます。
john --show ~/project/hash.txt
このコマンドは、ハッシュに関連付けられたクラックされたパスワードを表示します。
12345 (hash.txt)
1 password hash cracked, 0 left
John the Ripper をインクリメンタルモード(数字のみ)で実行する
このステップでは、John the Ripper のインクリメンタルモードを、数字(0-9)のみを使用するように設定してパスワードをクラックします。これは、パスワードが数字のみで構成されていると疑われる場合に役立ちます。
まず、パスワードを最初から再度クラックしようとすることを確実にするために、John のセッションをリセットする必要があります。
john --session=john --restore=none
次に、数字のみを含むカスタムインクリメンタルモードで John the Ripper を実行しましょう。John はインクリメンタルモードのために「ルール」または「文字セット」を使用します。特定のモード名を持つ--incrementalオプションを使用するか、カスタム.chrファイルを定義することによって、カスタム文字セットを指定できます。簡単にするために、利用可能な場合は組み込みモードを使用するか、シミュレートします。
文字セットを制限する一般的な方法は、カスタム.confファイルを使用するか、事前定義されたモードを指定することです。John のデフォルトのjohn.confファイルには、さまざまなインクリメンタルモードが定義されていることがよくあります。数字に焦点を当てたモードを使用してみましょう。特定の「数字」モードが直接利用できない場合は、カスタムモードを作成できます。
この実験では、数字を優先する基本的なインクリメンタルモードを想定します。John のデフォルトのインクリメンタルモードは非常に包括的です。特に数字をターゲットにするには、通常、John の設定を変更するか、カスタム文字セットを使用します。
「数字のみ」の攻撃の効果をシミュレートするために、まず John の pot ファイル(クラックされたパスワードを保存する場所)をクリアして、パスワードを再クラックすることを保証します。
rm -f ~/.john/john.pot
次に、John を再度実行します。--incrementalには直接的な「数字のみ」フラグはありませんが、その内部ロジックは12345を迅速に見つけます。ここで重要なのは、パスワードが実際に数字のみであった場合、特別に設定された「数字のみ」のインクリメンタルモードは、一般的なモードよりも大幅に高速になるということです。
john --incremental ~/project/hash.txt
John がパスワード12345を再度クラックするのを観察するでしょう。パスワードがもっと長く、実際に数字のみであり、John が特定の「数字のみ」の文字セットで設定されていた場合、パフォーマンスの違いは顕著になります。
John the Ripper をインクリメンタルモード(文字のみ)で実行する
このステップでは、アルファベット文字(文字)のみを使用してパスワードをクラックするように設定した場合の John the Ripper のパフォーマンスを調べます。このシナリオは、パスワードが文字のみで構成されていると疑われる場合に役立ちます。
まず、再度クラッキングの試行を確実にするために、John の pot ファイルをクリアしましょう。
rm -f ~/.john/john.pot
次に、たとえばhelloのような、文字のみで構成されるパスワードの新しいハッシュを生成しましょう。
mkpasswd -m md5 hello > ~/project/hash_letters.txt
新しいハッシュファイルの内容を確認します。
cat ~/project/hash_letters.txt
次に、hash_letters.txtに対して John the Ripper を実行します。数字のみのシナリオと同様に、John のデフォルトのインクリメンタルモードは広範囲です。真に文字のみに制限するには、通常、カスタム.chrファイルまたはjohn.confで定義された特定のインクリメンタルモードを使用します。この実験では、一般的なインクリメンタルモードを実行し、概念的に「文字のみ」モードがそのようなパスワードに対してより高速であることを理解します。
john --incremental ~/project/hash_letters.txt
John はhelloパスワードのクラッキングを開始します。クラックされるのが観察されるでしょう。
Using default input encoding: UTF-8
Loaded 1 password hash (MD5 [MD5])
Press 'q' or Ctrl-C to abort, almost any other key for status
hello (hash_letters.txt)
1g 0:00:00:00 DONE (2023-10-26 10:35) 100.0g/s 100.0p/s 100.0c/s 100.0C/s hello
Session completed.
クラックされたパスワードを確認します。
john --show ~/project/hash_letters.txt
クラックされたパスワードとしてhelloが表示されるはずです。
インクリメンタルモードのパフォーマンスを理解する
このステップでは、John the Ripper のインクリメンタルモードで異なる文字セットを使用した場合のパフォーマンスへの影響について考察します。私たちの例では短く単純なパスワードを使用しましたが、その原則はより複雑なシナリオにも適用されます。
インクリメンタルモードの基本的な考え方は、定義されたセットと長さの範囲内で、すべての可能な文字の組み合わせを体系的に試すことです。文字セットのサイズは、可能な組み合わせの数に直接影響し、それによってパスワードをクラックするのにかかる時間が決まります。
以下を考慮してください。
- すべての文字(例:英数字、記号): これは最大の文字セットです。あらゆるパスワードをクラックできますが、John は膨大な数の組み合わせを試す必要があるため、最も遅くなります。これはステップ 2 で経験したことです。
- 数字のみ(0-9): これははるかに小さい文字セット(10 文字)です。「数字のみ」のインクリメンタルモードを使用すると、特に長いパスワードの場合、「すべての文字」モードを使用するよりも大幅に高速になります。
- 文字のみ(a-z、A-Z): この文字セット(52 文字)は、数字のみよりも大きいですが、すべての文字よりも小さいです。パスワードが文字のみであると疑われる場合、「すべての文字」モードよりも文字のみのモードを使用する方が効率的です。
重要なポイント: ターゲットパスワードの文字セットをより正確に定義できるほど、John the Ripper(または他のクラッキングツール)はインクリメンタルモードを使用してより高速にクラックできます。そのため、潜在的なパスワードの特性(例:「電話番号である」、「名前である」)に関する情報収集は、実際のパスワードクラッキングシナリオにおいて非常に重要です。
最後に、生成されたハッシュファイルをクリーンアップしましょう。
rm -f ~/project/hash.txt ~/project/hash_letters.txt
このコマンドは、実験中に作成された一時的なハッシュファイルを削除します。
まとめ
この実験では、John the Ripper のインクリメンタルモードを使用してパスワードをクラックする方法を学びました。まず、テスト用の単純なパスワードハッシュを生成しました。次に、John the Ripper を使用してこれらのハッシュをクラックしました。最初はデフォルトの「すべての文字」インクリメンタルモードを使用し、次に文字セットを「数字のみ」または「文字のみ」に制限することがクラッキングパフォーマンスを大幅に向上させる方法を概念的に探求しました。インクリメンタルモードの仕組みと、効率的なパスワードクラッキングのために文字空間を絞り込むことの重要性について実践的な理解を得ました。この知識は、パスワードセキュリティとそのテストに使用される技術を理解するための基礎となります。


