単語リストモードで簡単なパスワードをクラックする

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

はじめに

この実験(Lab)では、サイバーセキュリティにおける基本的なテクニックであるパスワードクラッキングを探求します。人気があり強力なオープンソースのパスワードセキュリティ監査ツールである John the Ripper(JtR)を使用します。具体的には、「単語リスト」攻撃を実行する方法を学びます。これは、定義済みのパスワード候補リストを使用して、保存されたパスワードハッシュに対して正しいパスワードを推測する手法です。

この実践的な演習では、サンプルパスワードハッシュの作成、単語リストの取得、John the Ripper を実行してパスワードをクラックする方法、そして最終的に結果の表示と保存について説明します。このプロセスを理解することは、ユーザーのパスワード強度をテストしたいシステム管理者と、将来のセキュリティ専門家の両方にとって非常に重要です。

この実験(Lab)を終える頃には、以下のことができるようになります。

  • パスワードハッシュを含むファイルを作成する。
  • John the Ripper で単語リストを使用する。
  • 簡単なパスワードをクラックし、結果を表示する。

サンプルパスワードハッシュファイルの作成

このステップでは、サンプルユーザーを作成し、そのパスワードハッシュをファイルに抽出します。パスワードクラッキングツールは平文のパスワードではなく、通常は Linux の/etc/shadowのようなシステムファイルに保存されているハッシュ化された表現に対して機能します。

まず、簡単なパスワードpassword123を持つtestuserという新しいユーザーを作成します。パスワードのハッシュを生成するためにopensslを、ユーザーを作成するためにuseraddを使用します。

ターミナルで以下のコマンドを実行してください。

sudo useradd -m -p $(openssl passwd -1 password123) testuser

次に、/etc/shadowファイルからtestuserのパスワードハッシュを含む行を抽出する必要があります。grepコマンドを使用して行を見つけ、その出力を現在のディレクトリ(~/project)内のhashes.txtという新しいファイルにリダイレクトします。

sudo grep testuser /etc/shadow > ~/project/hashes.txt

それでは、hashes.txtファイルの内容を表示して、ユーザーのハッシュが含まれていることを確認しましょう。

cat hashes.txt

以下のような出力が表示されるはずです。最初のコロンと 2 番目のコロンの間の長い文字列がハッシュ化されたパスワードです。

testuser:$1$jE/Ipl8J$z4JgUjZfH.yN.CgCjWn.H.:19782:0:99999:7:::

これで、パスワードクラッキング演習のターゲットファイルを正常に作成しました。

一般的な単語リストのダウンロード

このステップでは、単語リストを作成します。単語リストは、各行に潜在的なパスワードが含まれるテキストファイルです。John the Ripper はこのファイルを読み込み、ターゲットハッシュに対して各パスワードを試行します。この実験(Lab)では、大きくて既存の単語リストをダウンロードする代わりに、独自の小さくカスタムな単語リストを作成します。これにより、内容を制御し、クラックを成功させるために正しいパスワードが含まれていることを確実にすることができます。

wordlist.txtという名前のファイルを作成し、testuserに設定したパスワードを含め、いくつかの一般的なパスワードを追加しましょう。

まず、ファイルを作成し、password123を追加します。

echo "password123" > ~/project/wordlist.txt

次に、同じファイルにさらにいくつかの一般的なパスワードを追加します。>>は追記に使用し、ファイルを上書きせずに内容を追加します。

echo "123456" >> ~/project/wordlist.txt
echo "qwerty" >> ~/project/wordlist.txt
echo "admin" >> ~/project/wordlist.txt

新しい単語リストの内容を確認しましょう。

cat wordlist.txt

ターミナルには以下の内容が表示されるはずです。

password123
123456
qwerty
admin

これで、John the Ripper で使用できる単語リストが準備できました。

単語リストモードでの John the Ripper の実行

このステップでは、John the Ripper を使用して、作成した単語リストでパスワードハッシュをクラックします。単語リストモードで JtR を実行するための構文は簡単です。単語リストファイルとハッシュファイル(hashes.txt)を指定する必要があります。

コマンドの形式は john --wordlist=<単語リストへのパス> <ハッシュファイルへのパス> です。

それでは、ターミナルでコマンドを実行し、JtR にwordlist.txthashes.txtファイルを指定してください。

john --wordlist=wordlist.txt hashes.txt

John the Ripper が処理を開始します。ハッシュをロードし、単語リストから各パスワードを試行します。パスワードがリストに含まれているため、プロセスは非常に高速になります。以下のような出力が表示されます。

Using default input encoding: UTF-8
Loaded 1 password hash (MD5-based crypt [MD5_body])
Cost 1 (algorithm [1:MD5 2:SHA256 3:SHA512] of 3) is 1 (MD5)
Press 'q' or Ctrl-C to abort, almost any other key for status
password123      (testuser)
1g 0:00:00:00 DONE (2023-10-27 10:30) 100.0g/s 100.0p/s 100.0c/s 100.0C/s admin..password123
Session completed

password123 (testuser) という行は、JtR がパスワードを正常にクラックしたことを示しています。また、この結果は通常~/.john/john.potにある「pot ファイル」(plain old text)に保存されるため、既知のパスワードを再クラックする必要がなくなります。

クラックされたパスワードの表示

このステップでは、John the Ripper が既にクラックしたパスワードを表示する方法を学びます。パスワードがクラックされると、JtR はそれを pot ファイルに保存します。同じクラッキングコマンドを再度実行しようとすると、JtR は既に解決済みであるため、「No password hashes left to crack」(クラックすべきパスワードハッシュはありません)と報告します。

指定されたハッシュファイルに対してクラックされたパスワードを表示するには、--show オプションを使用します。

hashes.txt のクラックされたパスワードを表示するには、次のコマンドを実行します。

john --show hashes.txt

このコマンドは pot ファイルを確認し、hashes.txt 内のハッシュに関連付けられたクラックされたパスワードを表示します。出力は以下のようになります。

testuser:password123:19782:0:99999:7:::
1 password hash cracked, 0 left

出力形式は username:password:other_shadow_file_fields です。これにより、testuser のパスワードが password123 であることが確認できます。このコマンドは、pot ファイルを手動で解析することなく、クラッキングセッションの結果を迅速に取得するのに非常に役立ちます。

クラックされたパスワードをファイルに保存する

このステップでは、クラックされたパスワードを別のファイルに保存します。これは、ペネトレーションテストやセキュリティ監査において、レポート作成のために一般的に行われるプラクティスです。john --show コマンドの出力をファイルにリダイレクトすることで、これを簡単に実現できます。

結果を cracked.txt という名前のファイルに保存しましょう。

john --show hashes.txt > cracked.txt

このコマンドは、以前と同様に john --show hashes.txt を実行しますが、結果をターミナルに出力する代わりに、> 演算子が出力をリダイレクトし、cracked.txt ファイルに保存します。ファイルが存在しない場合は作成され、存在する場合は上書きされます。

出力が正しく保存されたことを確認するには、cat コマンドを使用して新しいファイルの内容を表示できます。

cat cracked.txt

ターミナルにファイルの内容が表示され、前のステップで見た出力と同じになるはずです。

testuser:password123:19782:0:99999:7:::

1 password hash cracked, 0 left

これで、パスワードを正常にクラックし、ドキュメントのために結果をファイルに保存することができました。

まとめ

この実験の完了、おめでとうございます!John the Ripper を使用した基本的な単語リストベースのパスワードクラッキング攻撃を正常に実行しました。

この実験では、以下の方法を学びました。

  • システムからサンプルパスワードハッシュファイルを作成する。
  • 潜在的なパスワードを含むカスタム単語リストを作成する。
  • 単語リストモードで John the Ripper を実行してパスワードハッシュをクラックする。
  • --show オプションを使用して、既にクラックされたパスワードを表示する。
  • コマンド出力をリダイレクトして、発見した結果をファイルに保存する。

この演習は、単純で一般的なパスワードがどれほど容易に侵害されるかを示しています。システムとデータを保護するために、強力で複雑でユニークなパスワードを使用することの重要性を強調しています。ここで学んだスキルは、セキュリティ監査とペネトレーションテストの基本的な部分です。