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

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

はじめに

この実験では、強力なツールである John the Ripper に焦点を当て、Kali Linux を使用したパスワードクラッキングの基礎を学びます。主な目的は、通常 /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$ というプレフィックスは、そのハッシュが SHA-512 crypt ハッシュであることを示しており、これは現代の Linux システムにおける一般的な標準です。フォーマットは shadow ファイルの構造に従っています: ユーザー名:ハッシュ化されたパスワード:最終変更日:最小有効期間:最大有効期間:警告期間:非活動期間:有効期限:予約

ファイルが正しく作成されたことを確認するために、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 はハッシュを読み込み、クラッキングセッションを開始します。進行状況を示す出力が表示されます。非常にシンプルで一般的なパスワード(password123456)の本物のハッシュを作成したため、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

使用したパスワード(password123456)は非常にシンプルで、John のデフォルトワードリストにほぼ確実に含まれているため、これらのハッシュは通常数秒以内に非常に速く解読されます。この成功は、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 に指示します。ワードリストにはファイル内のハッシュに対応する実際のパスワード(password123456)が含まれているため、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 がクラッキングセッションを開始します。ワードリストに正しいパスワード(password123456)が含まれているため、Hashcat はこれらのハッシュを非常に迅速に解読するはずです。終了後、同じコマンドに --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 を探索しました。最後に、ドキュメント作成や報告のために調査結果を保存するという重要なステップを学びました。これらのスキルはペネトレーションテストの強固な基礎となり、このような攻撃から守るために強力なパスワードポリシーを導入することの重要性を浮き彫りにしています。