John the Ripper を使用した Kali パスワードクラッキング

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

はじめに

この実験では、Kali Linux を使用したパスワードクラッキングの基礎を学びます。特に強力なツールである John the Ripper に焦点を当てます。主な目的は、通常 /etc/shadow ファイルに保存されている、パスワードの暗号化表現である Linux パスワードハッシュをクラックする方法を理解することです。このスキルは、ペネトレーションテストにおいて脆弱なパスワードを特定し、システムのセキュリティを向上させるために不可欠です。

ターミナルを開くと、自動的に Kali Linux コンテナのシェルに接続されます。この実験のすべてのコマンドは、この環境内で実行してください。ガイド付きのステップバイステップの手順を通じて、サンプルハッシュファイルの操作、カスタムワードリストの作成と使用、John the RipperHashcat といったクラッキングツールの比較、そして分析のための結果保存を行います。この実験は初心者向けに設計されており、制御された環境で明確かつ実践的な学習体験を提供します。

環境のセットアップとツールのインストール

最初のステップでは、パスワードクラッキングに必要なツールをインストールして Kali Linux 環境を準備します。前述の通り、ターミナルセッションはすでに Kali Linux コンテナ内で実行されています。

ここでは、汎用性が高く広く使用されているパスワードクラッカーである John the Ripper と、その速度と柔軟性で知られる強力なツール Hashcat の2つを主に使用します。

まず、パッケージリストを更新して、最新のソフトウェアバージョンにアクセスできるようにします。

apt update

次に、以下のコマンドを使用して John the RipperHashcat をインストールします。-y フラグはインストールを自動的に確認します。

apt install -y john hashcat

インストールには数分かかる場合があります。完了したら、オプションなしで実行して 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]
...

次に、Hashcat のバージョンを確認してインストールを検証します。

hashcat --version

以下のようなバージョン番号が表示されます。

v6.2.5

両方のツールがインストールされ検証されたので、次のステップからのパスワードクラッキング演習に向けた環境準備は完了です。

サンプルハッシュファイルの作成

ツールがインストールされたので、作業用のデータが必要です。このステップでは、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 ハッシュです。
  • パスワードは password123456 であり、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 のデフォルトのワードリストだけに頼るよりもはるかに速くハッシュをクラックできました。この手法は、ターゲットを絞ったパスワード攻撃の基本です。次は、Hashcat を使用して同様の攻撃を実行する方法を見ていきます。

比較のための Hashcat を使用したハッシュのクラック

John the Ripper は優れたツールですが、Hashcat のような代替ツールに慣れておくことも良い習慣です。Hashcat は、特に GPU を搭載したシステムでの速度で有名です。ここでは、Hashcat を使用して同じ辞書攻撃を実行します。

Hashcat は、ハッシュ値のみを含むクリーンなファイルを好みます。awk コマンドを使用して sample_hashes.txt から2番目のフィールド(ハッシュ)を抽出し、新しいファイル clean_hashes.txt に保存します。

awk -F':' '{print $2}' /root/sample_hashes.txt > /root/clean_hashes.txt

新しいファイルの内容を確認します。

cat /root/clean_hashes.txt

出力にはハッシュ文字列のみが含まれているはずです。

$6$randomsalt$WS2qjCQ1JrmZv8otdbtntIYu6lRzkk2aIVhgIMdMexOcvD9bEAoxtKcyZLXbR3wlhOOPBscJbLCPUU/fYjFhM0
$6$anothersalt$ZffCt8y5Hl8gLYS79/rhyT76C12kNhuOvkFR8Ll0RXcjQz2Nzuh3VUdT//e21HYfH6fP9btOp2aG22O3S7q1z/

次に、Hashcat を実行します。ハッシュモード(SHA-512 crypt の場合は -m 1800)と攻撃モード(単純な辞書攻撃の場合は -a 0)を指定する必要があります。

hashcat -m 1800 -a 0 /root/clean_hashes.txt /root/custom_wordlist.txt
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 1800 (sha512crypt $6$, SHA512 (Unix))
Hash.Target......: /root/clean_hashes.txt
Time.Started.....: Mon Sep  1 06:33:21 2025 (0 secs)
Time.Estimated...: Mon Sep  1 06:33:21 2025 (0 secs)
Kernel.Feature...: Pure Kernel
Guess.Base.......: File (/root/custom_wordlist.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:      226 H/s (5.08ms) @ Accel:8 Loops:1024 Thr:1 Vec:8
Recovered........: 2/2 (100.00%) Digests (total), 1/2 (50.00%) Digests (new), 2/2 (100.00%) Salts
Progress.........: 6/12 (50.00%)
Rejected.........: 0/6 (0.00%)
Restore.Point....: 0/6 (0.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:4096-5000
Candidate.Engine.: Device Generator
Candidates.#1....: password -> password123

攻撃を実行する前に、Hashcat が OpenCL バックエンドを検出できることを確認してください。

hashcat -I

このコマンドで OpenCL プラットフォームが利用できないと報告された場合は、Intel OpenCL ランタイムパッケージをインストールして再度確認してください。

apt update
apt install -y intel-opencl-icd
hashcat -I

それでも Hashcat が CL_PLATFORM_NOT_FOUND_KHR と表示する場合は、Portable OpenCL ランタイムをインストールして再度確認してください。

apt install -y pocl-opencl-icd
hashcat -I

OpenCL が検出されたら、クラッキングコマンドを再度実行します。このコンテナ環境で Hashcat が警告を表示する場合は、--force を追加してください。

hashcat -m 1800 -a 0 /root/clean_hashes.txt /root/custom_wordlist.txt --force

攻撃が完了したら、--show フラグを付けてコマンドを実行し、クラックされたパスワードを表示します。

hashcat -m 1800 -a 0 /root/clean_hashes.txt /root/custom_wordlist.txt --show

攻撃が成功すると、Hashcat は各ハッシュの後にコロンで区切られたクラックされたパスワードを表示します。

$6$randomsalt$WS2qjCQ1JrmZv8otdbtntIYu6lRzkk2aIVhgIMdMexOcvD9bEAoxtKcyZLXbR3wlhOOPBscJbLCPUU/fYjFhM0:password
$6$anothersalt$ZffCt8y5Hl8gLYS79/rhyT76C12kNhuOvkFR8Ll0RXcjQz2Nzuh3VUdT//e21HYfH6fP9btOp2aG22O3S7q1z/:123456

このステップでは、パスワードクラッキングの強力な代替ツールとして Hashcat を紹介しました。最後のステップでは、調査結果を適切に文書化する方法を学びます。

まとめ

この実験では、Kali Linux 環境における基本的なパスワードクラッキング技術の実践的な経験を積みました。ワークスペースのセットアップから始まり、John the RipperHashcat といった重要なツールをインストールしました。次に、Linux の /etc/shadow 形式を模倣したサンプルハッシュファイルを作成して、ターゲットデータを準備する方法を学びました。

John the Ripper をデフォルト設定とカスタムワードリストの両方で使用する練習をし、強力な代替ツールとして Hashcat を探求しました。最後に、文書化と報告のために調査結果を保存するという重要なステップを学びました。これらのスキルはペネトレーションテストの強固な基盤となり、このような攻撃から防御するために強力なパスワードポリシーを実装することの重要性を強調しています。