John the Ripper とカスタム文字セット

Kali LinuxBeginner
オンラインで実践に進む

はじめに

この実験では、John the Ripper の高度な機能を探求し、特にカスタム文字セットの活用方法に焦点を当てます。John the Ripper は強力なオープンソースのパスワードクラッキングツールです。定義済みの文字セットが付属していますが、独自の文字セットを定義することで、特に特定のパスワードポリシーや非標準文字を扱う場合に、クラッキング効率を大幅に向上させることができます。さまざまなシナリオに合わせてこれらのカスタムセットを作成、適用、最適化する方法を学び、それらがクラッキングプロセスにどのように影響するかをより深く理解します。

インクリメンタルモード用のカスタム文字セットの定義

このステップでは、John the Ripper のインクリメンタルモード用のカスタム文字セットを定義する方法を学びます。インクリメンタルモードは、指定された長さまでのすべての可能な文字の組み合わせを試す強力なクラッキング手法です。デフォルトでは、John は大きな文字セットを使用しますが、パスワードが限られた文字セット(例:小文字と数字のみ)を使用することを知っている場合、これは非効率的になる可能性があります。

まず、カスタム文字セットを使用してクラックしようとする簡単なパスワードハッシュを作成しましょう。パスワード abc のハッシュを作成し、hash_to_crack.txt という名前のファイルに保存します。

echo "user1:\$6\$salt1\$y.g.a.hash.for.abc" > ~/project/hash_to_crack.txt

次に、小文字のみを含むカスタム文字セットを定義しましょう。この定義は、~/project ディレクトリ内の custom.chr という名前のファイルに保存します。このファイルは、クラッキング時にどの文字を使用するかを John the Ripper に指示します。

nano ~/project/custom.chr

custom.chr ファイルに以下の内容を追加します。

[CharSet]
charset = abcdefghijklmnopqrstuvwxyz

Ctrl+X、次に Y、そして Enter を押してファイルを保存します。

次に、このカスタム文字セットをインクリメンタルモードで使用して、hash_to_crack.txt ファイルをクラックするために John the Ripper を使用しましょう。--incremental オプションは John にインクリメンタルモードを使用するように指示し、--external=custom.chr はカスタム文字セットを指定します。

john --format=sha512crypt --incremental=custom --external=~/project/custom.chr ~/project/hash_to_crack.txt

John がハッシュをクラックしようとするのが表示されるはずです。パスワードが見つかると、それが表示されます。

Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2])
Will run till completion
Press 'q' or Ctrl-C to abort, almost any other key for status
abc              (user1)
1g 0:00:00:00 DONE (2023-10-27 10:00) 100.0g/s 100p/s 100c/s 100C/s abc
Use the "--show" option to display all of the cracked passwords reliably
Session completed

クラックされたパスワードを表示するには、--show オプションを使用します。

john --show ~/project/hash_to_crack.txt
user1:abc

1 password hash cracked, 0 left

これにより、カスタム文字セットを使用して検索空間を絞り込み、パスワードの構成に関する知識がある場合にクラッキングプロセスをより効率的にする方法が示されています。

特定シナリオへのカスタム文字セットの適用

このステップでは、カスタム文字セットの柔軟性を示すために、より具体的なシナリオに適用します。新しいハッシュと、より洗練されたカスタム文字セットを作成します。

パスワードが数字のみで構成されていると仮定しましょう。例えば、1234 です。まず、このパスワードのハッシュを作成します。

echo "user2:\$6\$salt2\$y.g.a.hash.for.1234" > ~/project/numeric_hash.txt

次に、数字(0〜9)のみを含むカスタム文字セットを定義しましょう。このファイル名を digits.chr とします。

nano ~/project/digits.chr

digits.chr に以下の内容を追加します。

[CharSet]
charset = 0123456789

ファイルを保存します(Ctrl+XYEnter)。

次に、この新しい文字セットを使用して numeric_hash.txt ファイルをクラックするために John the Ripper を使用します。

john --format=sha512crypt --incremental=digits --external=~/project/digits.chr ~/project/numeric_hash.txt

John がパスワード 1234 を迅速にクラックするのが表示されるはずです。

Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2])
Will run till completion
Press 'q' or Ctrl-C to abort, almost any other key for status
1234             (user2)
1g 0:00:00:00 DONE (2023-10-27 10:05) 100.0g/s 100p/s 100c/s 100C/s 1234
Use the "--show" option to display all of the cracked passwords reliably
Session completed

クラックされたパスワードを確認するには:

john --show ~/project/numeric_hash.txt
user2:1234

1 password hash cracked, 0 left

このシナリオは、パスワードの文字構成に関する正確な情報がある場合に、カスタム文字セットが非常に効果的であり、一般的な文字セットを使用する場合と比較してクラッキング時間を大幅に短縮できることを強調しています。

文字セットサイズのインパクトを理解する

このステップでは、文字セットサイズがクラッキングプロセスに与える影響を観察します。文字セットが大きいほど、可能な組み合わせが増え、クラッキング時間が長くなります。

小文字と数字の両方を使用するパスワード、例えば a1b2 の新しいハッシュを作成しましょう。

echo "user3:\$6\$salt3\$y.g.a.hash.for.a1b2" > ~/project/alphanum_hash.txt

次に、小文字と数字の両方を含むカスタム文字セットを定義しましょう。このファイル名を alphanum.chr とします。

nano ~/project/alphanum.chr

alphanum.chr に以下の内容を追加します。

[CharSet]
charset = abcdefghijklmnopqrstuvwxyz0123456789

ファイルを保存します(Ctrl+XYEnter)。

次に、この組み合わせた文字セットを使用して John the Ripper を使用します。

john --format=sha512crypt --incremental=alphanum --external=~/project/alphanum.chr ~/project/alphanum_hash.txt

このより大きな文字セットで a1b2 をクラックすることは、パスワード長が似ているにもかかわらず、それぞれのより小さなセットで abc または 1234 をクラックするよりもわずかに時間がかかることに気づくでしょう。これは、検索空間(可能な組み合わせの数)が大幅に大きいためです。

Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2])
Will run till completion
Press 'q' or Ctrl-C to abort, almost any other key for status
a1b2             (user3)
1g 0:00:00:00 DONE (2023-10-27 10:10) 100.0g/s 100p/s 100c/s 100C/s a1b2
Use the "--show" option to display all of the cracked passwords reliably
Session completed

クラックされたパスワードを確認するには:

john --show ~/project/alphanum_hash.txt
user3:a1b2

1 password hash cracked, 0 left

このステップは、文字セットのサイズとクラッキングに必要な時間の間の直接的な関係を示しています。利用可能な情報に基づいて、可能な限り小さく具体的な文字セットを最適化することは、効率的なパスワードクラッキングにとって非常に重要です。

カスタム文字セット定義の最適化

このステップでは、異なる文字タイプを組み合わせ、John の組み込み文字クラスを使用することで、カスタム文字セット定義をさらに最適化する方法を学びます。John the Ripper では、小文字用の ?l、大文字用の ?u、数字用の ?d、記号用の ?s のような定義済みクラスを使用して文字セットを定義できます。

Pass123! のようなパスワードのハッシュを作成しましょう。

echo "user4:\$6\$salt4\$y.g.a.hash.for.Pass123!" > ~/project/complex_hash.txt

すべての文字を列挙する代わりに、John の文字クラスを使用できます。これらのクラスを組み合わせた complex.chr という名前のファイルを作成しましょう。

nano ~/project/complex.chr

complex.chr に以下の内容を追加します。

[CharSet]
charset = ?l?u?d?s

ファイルを保存します(Ctrl+XYEnter)。

ここで、?l は小文字、?u は大文字、?d は数字、?s は記号を表します。これは、広範な文字セットを定義するためのより簡潔な方法です。

次に、この最適化された文字セットを使用して John the Ripper を使用します。

john --format=sha512crypt --incremental=complex --external=~/project/complex.chr ~/project/complex_hash.txt

John は、小文字、大文字、数字、記号のすべての組み合わせを使用してパスワードをクラックしようとします。

Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2])
Will run till completion
Press 'q' or Ctrl-C to abort, almost any other key for status
Pass123!         (user4)
1g 0:00:00:00 DONE (2023-10-27 10:15) 100.0g/s 100p/s 100c/s 100C/s Pass123!
Use the "--show" option to display all of the cracked passwords reliably
Session completed

クラックされたパスワードを確認するには:

john --show ~/project/complex_hash.txt
user4:Pass123!

1 password hash cracked, 0 left

この方法は、すべての文字を手動で列挙することなく、一般的な文字セットを定義するのに効率的です。典型的なパスワード構成に対して、具体性と定義の容易さのバランスが取れています。

非英語パスワード用の文字セット作成

このステップでは、標準的な英語の文字セットには見られない特殊文字をしばしば含む、非英語パスワード用のカスタム文字セットを作成する方法を学びます。これは、異なる言語のパスワードをクラックする上で非常に重要です。

一般的なドイツ語のウムラウト文字を含むパスワード、例えば schön があると仮定しましょう。まず、このパスワードのハッシュを作成します。

echo "user5:\$6\$salt5\$y.g.a.hash.for.schön" > ~/project/german_hash.txt

次に、特定の非英語文字を含むカスタム文字セットを定義する必要があります。schön の場合、ö が必要です。

nano ~/project/german.chr

german.chr に以下の内容を追加します。ö 文字を含めるようにしてください。

[CharSet]
charset = abcdefghijklmnopqrstuvwxyzäöüß

ファイルを保存します(Ctrl+XYEnter)。

次に、このカスタム文字セットを使用して John the Ripper を使用します。文字が標準 ASCII でない場合は、エンコーディングを指定することが重要です。John は通常 UTF-8 をうまく処理しますが、明示的なエンコーディングが必要になる場合もあります。

john --format=sha512crypt --incremental=german --external=~/project/german.chr --input-encoding=UTF-8 ~/project/german_hash.txt

John は、ドイツ語の特殊文字を含めて、パスワードをクラックしようとします。

Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2])
Will run till completion
Press 'q' or Ctrl-C to abort, almost any other key for status
schön            (user5)
1g 0:00:00:00 DONE (2023-10-27 10:20) 100.0g/s 100p/s 100c/s 100C/s schön
Use the "--show" option to display all of the cracked passwords reliably
Session completed

クラックされたパスワードを確認するには:

john --show ~/project/german_hash.txt
user5:schön

1 password hash cracked, 0 left

このステップは、国際的なパスワードを扱う際に、カスタム文字セットに特定の非英語文字を含めることの重要性を示しています。これらの文字がないと、John the Ripper はインクリメンタルモードでそのようなパスワードをクラックできません。

まとめ

この実験では、John the Ripper を使用してカスタム文字セットを定義および利用する実践的な経験を積みました。特定の文字セットファイル(.chr)の作成方法、インクリメンタルクラッキングモードでの適用方法、および文字セットサイズがクラッキング効率に与える大きな影響について学びました。さらに、John の組み込み文字クラスを使用した文字セット定義の最適化方法や、特殊文字を含めることによる非英語パスワードの処理方法を探りました。カスタム文字セットを習得することは、効率的かつターゲットを絞ったパスワードクラッキングのための重要なスキルであり、既知のパスワード特性に基づいて検索空間を絞り込み、プロセスを加速させることができます。