はじめに
この実験では、強力なツールである John the Ripper に焦点を当て、Kali Linux を使用したパスワードクラッキングの基礎を学びます。主な目的は、通常 /etc/shadow ファイルに保存されているパスワードの暗号化表現である Linux パスワードハッシュをクラックする方法を理解することです。このスキルは、ペネトレーションテストにおいて脆弱なパスワードを特定し、システムのセキュリティを向上させるために不可欠です。
ターミナルを開くと、自動的に Kali Linux コンテナのシェルに接続されます。この実験のすべてのコマンドは、この環境内で実行してください。ガイド付きのステップバイステップの手順を通じて、サンプルハッシュファイルの操作、カスタムワードリストの作成と使用、そして後で確認するためにクラックした結果を保存する作業を行います。この実験は初心者向けに設計されており、提供されたコンテナ環境で確実に動作する John the Ripper に焦点を当てたワークフローになっています。
環境のセットアップとツールのインストール
最初のステップでは、この実験のメインツールをインストールして Kali Linux 環境を準備します。前述の通り、ターミナルセッションはすでに Kali Linux コンテナ内で実行されています。
ここでは、提供された LabEx コンテナで確実に動作する、汎用的で広く使用されているパスワードクラッカーである John the Ripper を使用します。
まず、パッケージリストを更新して、最新のソフトウェアバージョンにアクセスできるようにします。
apt update
次に、以下のコマンドを使用して John the Ripper をインストールします。-y フラグはインストールを自動的に確認します。
apt install -y john
インストールプロセスには数分かかる場合があります。完了したら、オプションを付けずに実行して、John the Ripper が正しくインストールされていることを確認します。
john
ヘルプとバージョン情報が表示されれば、ツールを使用する準備が整っています。出力は以下のようになります。
John the Ripper 1.9.0-jumbo-1+bleeding-aec1328d6c 2021-11-02 10:45:52 +0100 OMP [linux-gnu 64-bit x86_64 AVX512BW AC]
Copyright (c) 1996-2021 by Solar Designer and others
Homepage: https://www.openwall.com/john/
Usage: john [OPTIONS] [PASSWORD-FILES]
...
John the Ripper のインストールと確認が完了し、次のステップからのパスワードクラッキング演習に向けた環境が整いました。
サンプルハッシュファイルの作成
ツールがインストールされたので、作業用のデータが必要です。このステップでは、John the Ripper が実際に処理できる、実際の Linux パスワードハッシュを含むファイルを作成します。これらのハッシュは、Linux システムでユーザーのパスワード情報を安全に保存する /etc/shadow ファイルにあるものを模倣するようにフォーマットされています。これにより、安全かつ制御された方法でクラッキングを練習できます。
すべての操作は Kali コンテナの /root ディレクトリで行います。素早くクラックできる単純で一般的なパスワードの事前生成済みハッシュを使用して、ハッシュファイルを直接作成します。
以下のコマンドでサンプルハッシュファイルを直接作成します。
cd /root
echo -e "user1:\$6\$randomsalt\$WS2qjCQ1JrmZv8otdbtntIYu6lRzkk2aIVhgIMdMexOcvD9bEAoxtKcyZLXbR3wlhOOPBscJbLCPUU/fYjFhM0:18234:0:99999:7:::\nuser2:\$6\$anothersalt\$ZffCt8y5Hl8gLYS79/rhyT76C12kNhuOvkFR8Ll0RXcjQz2Nzuh3VUdT//e21HYfH6fP9btOp2aG22O3S7q1z/:18234:0:99999:7:::" > sample_hashes.txt
あるいは、内容をコピー&ペーストして手動でファイルを作成することもできます。
cd /root
cat > sample_hashes.txt << 'EOF'
user1:$6$randomsalt$WS2qjCQ1JrmZv8otdbtntIYu6lRzkk2aIVhgIMdMexOcvD9bEAoxtKcyZLXbR3wlhOOPBscJbLCPUU/fYjFhM0:18234:0:99999:7:::
user2:$6$anothersalt$ZffCt8y5Hl8gLYS79/rhyT76C12kNhuOvkFR8Ll0RXcjQz2Nzuh3VUdT//e21HYfH6fP9btOp2aG22O3S7q1z/:18234:0:99999:7:::
EOF
各行の $6$ というプレフィックスは、そのハッシュが現代の Linux システムで一般的な標準である SHA-512 crypt ハッシュであることを示しています。フォーマットは shadow ファイルの構造に従っています:username:hashed_password:last_change:min_age:max_age:warning:inactive:expire:reserved。
ファイルが正しく作成されたことを確認するために、cat コマンドを使用して内容を表示します。
cat /root/sample_hashes.txt
出力には、実際のハッシュ値を持つ2つのユーザーエントリが表示されるはずです。
user1:$6$randomsalt$WS2qjCQ1JrmZv8otdbtntIYu6lRzkk2aIVhgIMdMexOcvD9bEAoxtKcyZLXbR3wlhOOPBscJbLCPUU/fYjFhM0:18234:0:99999:7:::
user2:$6$anothersalt$ZffCt8y5Hl8gLYS79/rhyT76C12kNhuOvkFR8Ll0RXcjQz2Nzuh3VUdT//e21HYfH6fP9btOp2aG22O3S7q1z/:18234:0:99999:7:::
重要な注意点:
- これらは、
John the Ripperが処理できる、適切にフォーマットされた実際の SHA-512 ハッシュです。 - パスワードは
passwordと123456であり、非常に単純で一般的なため、John のデフォルトのワードリストに確実に含まれています。 - これにより、デモンストレーション目的で通常数秒以内に素早くクラッキングできます。
このサンプルデータファイルの準備ができたので、パスワードクラッキングの練習対象ができました。次のステップでは、John the Ripper を使用してこれらのハッシュのクラックを試みます。
John the Ripper のデフォルトモードを使用したハッシュのクラッキング
サンプルハッシュファイルが用意できたので、John the Ripper でクラッキングを開始します。デフォルトでは、John はユーザー名やその他の情報を使用してパスワードを推測する「シングルクラック」モードや、組み込みのパスワードリストを使用するワードリストモードなど、いくつかのモードを使用します。これは、脆弱で一般的なパスワードを特定するための素晴らしい出発点です。
以下のコマンドを実行して、sample_hashes.txt ファイルに対するクラッキングプロセスを開始します。
john /root/sample_hashes.txt
John がハッシュを読み込み、クラッキングセッションを開始します。進行状況を示す出力が表示されます。非常に単純で一般的なパスワード(password および 123456)の実際のハッシュを作成したため、John はデフォルトのワードリストモードを使用して素早くクラックできるはずです。
Using default input encoding: UTF-8
Loaded 2 password hashes with 2 different salts (sha512crypt, crypt(3) $6$ [SHA512 512/512 AVX512BW 8x])
Cost 1 (iteration count) is 5000 for all loaded hashes
Will run 2 OpenMP threads
Proceeding with single, rules:Single
Press 'q' or Ctrl-C to abort, almost any other key for status
Almost done: Processing the remaining buffered candidate passwords, if any.
Proceeding with wordlist:/usr/share/john/password.lst
...
John をしばらく実行させてクラッキングを試みるか、結果を早く確認したい場合は Ctrl-C でプロセスを停止できます。クラックされたパスワードを表示するには、--show オプションを使用します。
john --show /root/sample_hashes.txt
パスワードが正常にクラックされた場合、出力は以下のようになります。
user1:password:18234:0:99999:7:::
user2:123456:18234:0:99999:7:::
2 password hashes cracked, 0 left
John のデフォルトのワードリストにほぼ確実に含まれている非常に単純なパスワード(password および 123456)を使用したため、これらのハッシュは非常に素早く(多くの場合数秒以内に)クラックされます。この成功は、John the Ripper が実際のハッシュファイルで正しく動作していることを示しており、脆弱なパスワードがいかに素早く侵害されるかを示しています。
次のステップでは、カスタムワードリストを John に提供する方法と、クラッキング効率を向上させるためにさまざまなパラメータを調整する方法を探ります。
John the Ripper でのカスタムワードリストの使用
デフォルト設定に頼るだけでは不十分な場合が多いです。カスタムワードリストを使用した標的型攻撃は、はるかに効果的です。ワードリストとは、1行に1つの潜在的なパスワードが記載された単なるテキストファイルです。このステップでは、小さなカスタムワードリストを作成し、それを John the Ripper で使用します。
/root ディレクトリに custom_wordlist.txt という名前のファイルを作成し、ハッシュファイルに含まれていることがわかっているパスワードを含む、いくつかの一般的なパスワードを追加します。
echo -e "password\n123456\nadmin123\ntest1234\nqwerty\npassword123" > /root/custom_wordlist.txt
新しいワードリストの内容を確認します。
cat /root/custom_wordlist.txt
出力には、追加した6つのパスワードが表示されるはずです。
password
123456
admin123
test1234
qwerty
password123
次に、John the Ripper を再度実行しますが、今回は --wordlist オプションを使用してカスタムワードリストを指定します。
john --wordlist=/root/custom_wordlist.txt /root/sample_hashes.txt
このコマンドは、custom_wordlist.txt 内のすべてのパスワードを sample_hashes.txt 内のハッシュと照合するように John に指示します。ワードリストにはファイル内のハッシュに対応する実際のパスワード(password および 123456)が含まれているため、John は非常に素早くそれらをクラックするはずです。
プロセスが終了したら、再度結果を確認します。
john --show /root/sample_hashes.txt
ワードリストに正しいパスワードが含まれているため、出力にはクラックされた資格情報が表示されます。
user1:password:18234:0:99999:7:::
user2:123456:18234:0:99999:7:::
2 password hashes cracked, 0 left
これは、標的型ワードリスト攻撃の有効性を示しています。カスタムワードリストに実際のパスワードを含めることで、John のデフォルトのワードリストだけに頼るよりもはるかに速くハッシュをクラックできました。この手法は、標的型パスワード攻撃の基本です。最後のステップでは、クラックされた資格情報を後で確認するためにレポートファイルに保存します。
クラックされたパスワードの保存
このステップでは、John the Ripper セッションからクラックされた資格情報をレポートファイルに保存します。これは、パスワード監査作業において、クラッキングプロセスを再実行することなく後で復元されたアカウントを確認できるため、実用的な習慣です。
john --show を使用して復元されたパスワードを表示し、その出力を /root/cracked_passwords.txt にリダイレクトします。
john --show /root/sample_hashes.txt > /root/cracked_passwords.txt
保存されたレポートを表示して、クラックされた資格情報が含まれていることを確認します。
cat /root/cracked_passwords.txt
出力は以下のようになります。
user1:password:18234:0:99999:7:::
user2:123456:18234:0:99999:7:::
2 password hashes cracked, 0 left
ファイルにまだクラックされたパスワードが含まれていない場合は、前のステップの john --wordlist=/root/custom_wordlist.txt /root/sample_hashes.txt コマンドを再実行してから、結果を再度保存してください。
クラックされたパスワードをファイルに保存することで、ハッシュの準備から文書化された結果までのワークフローが完了します。これにより、制御されたセキュリティレビュー中に検査や共有ができる再利用可能な記録が得られます。
まとめ
この実験では、Kali Linux 環境における基本的なパスワードクラッキング技術の実践的な経験を積みました。ワークスペースのセットアップと John the Ripper のインストールから始め、Linux の /etc/shadow フォーマットを模倣したサンプルハッシュファイルを作成してターゲットデータを準備する方法を学びました。
John the Ripper をデフォルト設定とカスタムワードリストの両方で使用する練習を行い、復元された資格情報を後で確認するためにレポートファイルに保存しました。これらのスキルはペネトレーションテストの強固な基盤となり、このような攻撃から防御するために強力なパスワードポリシーを実装することの重要性を浮き彫りにします。



