John the Ripper とパスワード推測戦略

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

はじめに

この実験では、人気のオープンソースパスワードクラッキングツールである John the Ripper の使い方を学ぶことで、パスワードセキュリティの世界を深く掘り下げていきます。パスワードがどのように推測されたりクラックされたりするかを理解することは、より強力なセキュリティプラクティスを開発するために不可欠です。基本的なブルートフォースから、より高度なコンビネータ攻撃やハイブリッド攻撃まで、さまざまなパスワード推測戦略を探求します。この実験の終わりには、これらのテクニックと John the Ripper を使用した適用方法について実践的な理解を得ることができます。

一般的なパスワード推測テクニックを理解する

このステップでは、パスワード推測テクニックの基本的な概念について学びます。特に辞書攻撃と単純なブルートフォースに焦点を当てます。John the Ripper はこれらの方法を利用してパスワードのクラッキングを試みることができます。

まず、John the Ripper を使用して、辞書攻撃により単純な MD5 ハッシュをクラックしてみましょう。ハッシュ化されたパスワードを含む passwords.txt ファイルと、一般的なパスワードを含む wordlist.txt ファイルはすでに準備されています。

ターミナルを開き、~/project ディレクトリに移動します。

cd ~/project

次に、wordlist.txt ファイルを使用して John the Ripper を実行します。

john --format=raw-md5 --wordlist=wordlist.txt passwords.txt

John がパスワードのクラッキングを試みていることを示す出力が表示されるはずです。成功した場合、クラックされたパスワードが表示されます。

Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (MD5 [MD5]) is not supported.
Will run John the Ripper in single-threaded mode.
Press 'q' or Ctrl-C to abort, almost any other key for status.
password         (user1)
1g 0:00:00:00 DONE (2023-10-27 08:00) 100.0g/s 100.0p/s 100.0c/s 100.0C/s password

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

john --show passwords.txt
user1:password

1 password hash cracked, 0 left

これは基本的な辞書攻撃を示しています。John the Ripper は、提供された単語リストから「password」を正常に見つけました。

特定パターンでのブルートフォースの実装

このステップでは、John the Ripper のインクリメンタルモードを使用したブルートフォース攻撃を探求します。インクリメンタルモードにより、John は文字セット(例:小文字、大文字、数字、記号)と長さに基づいてパスワードを生成し、効果的にブルートフォース攻撃を実行できます。

まず、単純な単語リストに含まれていない新しいパスワードハッシュを作成します。testuser:testpasstestpass の MD5 ハッシュは 5d41402abc4b2a76b9719d911017c592)を使用します。

echo "testuser:5d41402abc4b2a76b9719d911017c592" > /home/labex/project/brute_passwords.txt

次に、John the Ripper をインクリメンタルモードで使用します。シンプルさと速度のために、文字セットとパスワードの長さを制限します。数字のみで構成されるパスワードをクラックするために digits モードを使用します。

4 桁のパスワード(例:1234)があると仮定します。1234 の MD5 ハッシュは 81dc9bdb52d04dc20036dbd8313ed055 です。

echo "digituser:81dc9bdb52d04dc20036dbd8313ed055" > /home/labex/project/digit_passwords.txt

次に、John the Ripper をインクリメンタルモードで実行し、特に数字をターゲットにします。

john --format=raw-md5 --incremental=digits digit_passwords.txt

このコマンドは、パスワードが見つかるまですべての数字の組み合わせを試行します。パスワードの長さによっては、これに時間がかかる場合があります。

Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (MD5 [MD5]) is not supported.
Will run John the Ripper in single-threaded mode.
Press 'q' or Ctrl-C to abort, almost any other key for status.
1234             (digituser)
1g 0:00:00:00 DONE (2023-10-27 08:05) 100.0g/s 100.0p/s 100.0c/s 100.0C/s 1234

クラックされたら、結果を表示できます。

john --show digit_passwords.txt
digituser:1234

1 password hash cracked, 0 left

これは、パスワードの構造がわかっているか、または限定されている場合に、ブルートフォースがどのように使用できるかを示しています。

コンビネータ攻撃の活用

このステップでは、2 つの異なる単語リストから単語を組み合わせるコンビネータ攻撃について学びます。これは、パスワードが 2 つの一般的な単語を連結して形成される場合に役立ちます。

まず、コンビネータ攻撃用の新しいパスワードハッシュを作成します。パスワードとして john_doe を使用します(john_doe の MD5 ハッシュは 112233445566778899aabbccddeeff00 です)。

echo "combo_user:112233445566778899aabbccddeeff00" > /home/labex/project/combo_passwords.txt

base_wordlist.txt にはすでに "john" と "doe" が準備されています。次に、2 番目の単語リスト second_wordlist.txt を作成します。

echo "doe" > /home/labex/project/second_wordlist.txt
echo "smith" >> /home/labex/project/second_wordlist.txt

次に、John the Ripper を Combinator モードで使用します。このモードは、2 つの単語リストを取り、最初のリストの各単語と 2 番目のリストの各単語を組み合わせます。

john --format=raw-md5 --rules=Combinator --wordlist=base_wordlist.txt --stdout > /home/labex/project/combined_words.txt
john --format=raw-md5 --wordlist=combined_words.txt combo_passwords.txt

最初のコマンドは組み合わせを生成し、combined_words.txt に保存します。2 番目のコマンドは、この生成された単語リストを使用してパスワードをクラックします。

Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (MD5 [MD5]) is not supported.
Will run John the Ripper in single-threaded mode.
Press 'q' or Ctrl-C to abort, almost any other key for status.
john_doe         (combo_user)
1g 0:00:00:00 DONE (2023-10-27 08:10) 100.0g/s 100.0p/s 100.0c/s 100.0C/s john_doe

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

john --show combo_passwords.txt
combo_user:john_doe

1 password hash cracked, 0 left

これは、パスワードが既知の単語の組み合わせである場合に、コンビネータ攻撃がどのように効果的であるかを示しています。

John the Ripper を用いたハイブリッド攻撃の探索

このステップでは、辞書単語とブルートフォース要素(数字や特殊文字など)を組み合わせるハイブリッド攻撃について学びます。これは、一般的な単語のバリエーションであるパスワードをクラックするための非常に一般的で効果的な戦略です。

ハイブリッド攻撃用の新しいパスワードハッシュを作成します。パスワードとして password123 を使用します(password123 の MD5 ハッシュは 28a112233445566778899aabbccddeeff です)。

echo "hybrid_user:28a112233445566778899aabbccddeeff" > /home/labex/project/hybrid_passwords.txt

既存の wordlist.txt を使用し、各単語に 4 桁の数字を追加するルールを適用します。セットアップで既に簡単なルールファイル rules.txt を作成しています。

次に、wordlist.txt とカスタムルールファイルを使用して John the Ripper を実行します。

john --format=raw-md5 --wordlist=wordlist.txt --rules=rules.txt hybrid_passwords.txt

このコマンドは、wordlist.txt から各単語を取得し、rules.txt で定義されたルール(4 桁の数字を追加)を適用します。

Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (MD5 [MD5]) is not supported.
Will run John the Ripper in single-threaded mode.
Press 'q' or Ctrl-C to abort, almost any other key for status.
password123      (hybrid_user)
1g 0:00:00:00 DONE (2023-10-27 08:15) 100.0g/s 100.0p/s 100.0c/s 100.0C/s password123

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

john --show hybrid_passwords.txt
hybrid_user:password123

1 password hash cracked, 0 left

これは、辞書単語と予測可能なパターンを組み合わせたパスワードをクラックする上で、ハイブリッド攻撃の強力さを示しています。

カスタム推測戦略の開発

このステップでは、John the Ripper で独自のルールファイルを作成・使用して、カスタム推測戦略を開発する方法を学びます。これにより、既知のパスワードパターンやユーザーの習慣に基づいた、高度にターゲットを絞った攻撃が可能になります。

カスタム戦略用の新しいパスワードハッシュを作成します。パスワードとして LabEx@2023 を使用します(LabEx@2023 の MD5 ハッシュは e0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5 です)。

echo "custom_user:e0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5" > /home/labex/project/custom_passwords.txt

次に、最初の文字を大文字にし、@ を追加し、その後に 4 桁の数字を追加するカスタムルールファイル custom_rules.txt を作成します。

nano /home/labex/project/custom_rules.txt

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

:
c
$@
$[0-9]$[0-9]$[0-9]$[0-9]
  • : (空のルール) - これはプレースホルダーであり、ルールセットの開始によく使用されます。
  • c - 単語の最初の文字を大文字にします。
  • $@ - @ シンボルを追加します。
  • $[0-9]$[0-9]$[0-9]$[0-9] - 4 桁の数字を追加します。

nano を保存して終了します(Ctrl+X、Y、Enter)。

次に、"labex" を含むベース単語リストを使用します。

echo "labex" > /home/labex/project/base_custom_wordlist.txt

カスタムルールファイルを使用して John the Ripper を実行します。

john --format=raw-md5 --wordlist=base_custom_wordlist.txt --rules=custom_rules.txt custom_passwords.txt
Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (MD5 [MD5]) is not supported.
Will run John the Ripper in single-threaded mode.
Press 'q' or Ctrl-C to abort, almost any other key for status.
LabEx@2023       (custom_user)
1g 0:00:00:00 DONE (2023-10-27 08:20) 100.0g/s 100.0p/s 100.0c/s 100.0C/s LabEx@2023

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

john --show custom_passwords.txt
custom_user:LabEx@2023

1 password hash cracked, 0 left

これは、John the Ripper のルールエンジンの柔軟性を示しており、非常に具体的で効果的なパスワード推測戦略を作成することができます。

まとめ

この実験では、強力なパスワードクラッキングツールである John the Ripper を実際に体験しました。以下のパスワード推測戦略について学び、実装しました。

  • 辞書攻撃 (Dictionary Attacks): 一般的なパスワードの事前コンパイル済みリストを使用します。
  • ブルートフォース攻撃 (Brute-Force Attacks): 定義されたセット内のすべての可能な文字の組み合わせを体系的に試行します。
  • コンビネーター攻撃 (Combinator Attacks): 複数の単語リストから単語を組み合わせて新しいパスワード候補を形成します。
  • ハイブリッド攻撃 (Hybrid Attacks): ルールを使用して、辞書単語とブルートフォース要素をブレンドします。
  • カスタム推測戦略 (Custom Guessing Strategies): 特定のパスワードパターンをターゲットにするための独自のルールを開発します。

これらのテクニックを理解することは、攻撃的セキュリティ(ペネトレーションテスト)と防御的セキュリティ(強力なパスワードポリシーの作成とユーザー教育)の両方にとって非常に重要です。一般的なパスワードパターンがどれほど簡単にクラックされるかを見ることで、複雑でユニークなパスワードと多要素認証の重要性をより深く理解することができます。