パスワードクラッキングツール「John the Ripper」
2025年5月15日
セキュリティエンジニアの曽我です。今回のtoolsシリーズ第3回は、セキュリティ業界で長く使われている定番パスワードクラッキングツール「John the Ripper」(通称:John)について解説します。このツールはパスワードの強度テストに特化しており、セキュリティ診断やパスワードポリシーの検証に欠かせません。
本記事では、John the Ripperの基本から実践的な活用法まで、コマンド例と出力結果を交えながら解説します。これからセキュリティエンジニアを目指す方にとって、パスワードセキュリティの理解を深める一助となれば幸いです。
目次
- John the Ripperとは
- インストール方法
- 基本的な使い方 3.1. パスワードハッシュファイルの準備 3.2. 辞書攻撃モード 3.3. ブルートフォース攻撃モード
- 高度な使用方法 4.1. ルールベースの攻撃 4.2. カスタム文字セットの使用 4.3. パフォーマンスチューニング
- 実践的な活用例 5.1. パスワードポリシーの検証 5.2. 侵害されたシステムの評価
- セキュリティ対策への応用
- まとめ
- 参考資料
1. John the Ripperとは
John the Ripper(以下、John)は1996年に初めてリリースされた老舗のパスワードクラッキングツールで、現在も活発に開発が続けられています。オープンソースで提供されており、Kali Linuxをはじめとする多くのセキュリティ特化型ディストリビューションに標準搭載されています。
Johnの主な特徴:
- 多様なパスワードハッシュ形式に対応(Unix、Windows、KDE、macOS など)
- 複数のクラッキングモード(辞書攻撃、ブルートフォース、ルールベース)
- 高度なカスタマイズ性(ルール、文字セット、マスク)
- マルチプラットフォーム対応(Linux、Windows、macOS)
- GPUアクセラレーション対応(Pro版)
このツールの主な使用目的は、システムのパスワードセキュリティを評価し、弱いパスワードを特定することです。セキュリティ診断、ペネトレーションテスト、フォレンジック調査などで広く活用されています。
2. インストール方法
Kali Linuxには標準でインストールされていますが、他のディストリビューションへのインストール方法も記載します。
Debian/Ubuntuベースのシステム:
sudo apt update
sudo apt install john
Arch Linux:
sudo pacman -S john
Fedora/CentOS:
sudo dnf install john
ソースからのビルド:
最新版や拡張機能を使用したい場合は、公式GitHubリポジトリからクローンしてビルドすることもできます:
git clone https://github.com/openwall/john.git
cd john/src
./configure && make
インストールが完了したら、以下のコマンドでバージョンを確認できます:
john --version
出力例:
John the Ripper 1.9.0-jumbo-1 OMP [linux-gnu 64-bit x86_64 AVX2 AC]
Copyright (c) 1996-2019 by Solar Designer and others
3. 基本的な使い方
3.1. パスワードハッシュファイルの準備
Johnを使用するには、まずパスワードハッシュを含むファイルが必要です。Linux環境では、以下のコマンドで現在のシステムのパスワードハッシュを抽出できます:
sudo unshadow /etc/passwd /etc/shadow > passwords.txt
注意: このコマンドは、適切な権限を持つユーザーが自身のシステムで実行することを前提としています。
テスト用に単純なハッシュファイルを作成することもできます:
echo "testuser:$6$salt$hashedpassword:1000:1000:Test User:/home/testuser:/bin/bash" > test_passwords.txt
3.2. 辞書攻撃モード
辞書攻撃は、既知の単語リスト(辞書)を使用してパスワードを推測する方法です。Kali Linuxには、/usr/share/wordlists/
ディレクトリに複数の辞書ファイルが用意されています。
基本的な辞書攻撃の実行:
john --wordlist=/usr/share/wordlists/rockyou.txt passwords.txt
出力例:
Loaded 3 password hashes with 3 different salts (sha512crypt, crypt(3) $6$ [SHA512 128/128 AVX 2x])
Press 'q' or Ctrl-C to abort, almost any other key for status
password123 (testuser)
p@ssw0rd (user2)
2g 0:00:05:47 DONE (2025-05-15 14:23) 0.005787g/s 1234p/s 3702c/s 3702C/s
3.3. ブルートフォース攻撃モード
ブルートフォース攻撃(総当たり攻撃)は、可能なすべての文字の組み合わせを試行する方法です。
john --incremental=all passwords.txt
出力例:
Loaded 3 password hashes with 3 different salts (sha512crypt, crypt(3) $6$ [SHA512 128/128 AVX 2x])
Press 'q' or Ctrl-C to abort, almost any other key for status
0g 0:00:12:34 0.01% (ETA: 2025-05-23 17:45) 0.000126g/s 985p/s 2955c/s 2955C/s
ブルートフォース攻撃は時間がかかるため、実際の運用では範囲を制限することが一般的です。
これまでに解読したパスワードを表示するには:
john --show passwords.txt
出力例:
testuser:password123:1000:1000:Test User:/home/testuser:/bin/bash
user2:p@ssw0rd:1001:1001:User Two:/home/user2:/bin/bash
2 password hashes cracked, 1 left
4. 高度な使用方法
4.1. ルールベースの攻撃
ルールベースの攻撃は、辞書の単語に特定の変換ルールを適用してバリエーションを生成する方法です。
john --wordlist=/usr/share/wordlists/rockyou.txt --rules passwords.txt
独自のルールを定義することも可能です。ルールは /etc/john/john.conf
または ~/.john/john.conf
で設定できます。
例えば、単語の末尾に数字を追加するルールを定義する場合:
[List.Rules:MyRules]
$[0-9]
そして、このルールを使用する:
john --wordlist=/usr/share/wordlists/rockyou.txt --rules=MyRules passwords.txt
4.2. カスタム文字セットの使用
特定の文字セットに限定した攻撃を行うことができます:
john --incremental=digits passwords.txt # 数字のみ
john --incremental=alpha passwords.txt # アルファベットのみ
マスク攻撃を使用して、パターンを指定することも可能です:
john --mask="password?d" passwords.txt # "password" + 1桁の数字
?dは数字、?lは小文字、?uは大文字、?aはすべての文字を表します。
4.3. パフォーマンスチューニング
Johnのパフォーマンスを調整するためのオプションがいくつかあります:
john --fork=4 passwords.txt # 4つのプロセスを使用
john --node=2/4 passwords.txt # 分散処理(4ノード中の2番目)
john --session=mysession passwords.txt # セッション名を指定して後で再開可能に
セッションを一時停止した場合、以下のコマンドで再開できます:
john --restore=mysession
5. 実践的な活用例
5.1. パスワードポリシーの検証
組織のパスワードポリシーの有効性を検証するために、Johnを活用できます。
- テスト環境でサンプルユーザーを作成
- パスワードポリシーに準拠したパスワードを設定
- パスワードハッシュを抽出
- Johnで様々な攻撃を実行
- 短時間で解読できるパスワードがあれば、ポリシーの見直しが必要
# ポリシーの効果測定
time john --wordlist=/usr/share/wordlists/rockyou.txt --rules policy_test.txt
5.2. 侵害されたシステムの評価
セキュリティインシデント発生後の調査では、侵害されたシステムのパスワード強度を評価し、攻撃者がアクセスできた可能性のあるアカウントを特定することが重要です。
# 短時間で解読できるパスワードを特定
john --max-run-time=3600 --format=sha512crypt compromised_hashes.txt
6. セキュリティ対策への応用
John the Ripperによる診断結果を基に、以下のようなセキュリティ対策を検討できます:
-
強力なパスワードポリシーの実装:
- 最小文字数の増加(12文字以上を推奨)
- 複雑さの要件(大文字、小文字、数字、特殊文字の組み合わせ)
- 辞書内の単語や一般的なパスワードの使用禁止
- 定期的なパスワード変更の強制
-
多要素認証(MFA)の導入:
- パスワードだけでなく、追加の認証要素を要求
- パスワードが漏洩しても、不正アクセスのリスクを軽減
-
パスワード管理ツールの推奨:
- ユーザーごとに一意で複雑なパスワードを生成・管理
- 人間の記憶に依存しない強固なパスワードの使用
-
アカウントロックアウトポリシー:
- 一定回数の認証失敗後にアカウントをロック
- ブルートフォース攻撃を防止
-
定期的なパスワード監査:
- Johnを使用した定期的なパスワード強度テスト
- 弱いパスワードが見つかった場合の即時対応
7. まとめ
John the Ripperは、パスワードセキュリティを評価するための強力なツールです。25年以上の歴史を持ちながらも、現代のセキュリティ要件に対応する機能が継続的に追加されており、セキュリティ専門家の必須ツールとして位置づけられています。
このツールを適切に活用することで、組織のパスワードポリシーの有効性を検証し、潜在的な脆弱性を早期に発見することができます。しかし、John the Ripperのような強力なツールは、必ず適切な許可と倫理的な目的のもとで使用することが重要です。
セキュリティエンジニアを目指す方は、Johnの使い方を学ぶだけでなく、その結果を基にどのようにシステムのセキュリティを向上させるかを考える習慣を身につけることをお勧めします。パスワードセキュリティは、情報セキュリティの基本的かつ重要な要素です。
8. 参考資料
- John the Ripper 公式サイト
- John the Ripper GitHub リポジトリ
- Kali Linux Tools: John the Ripper
- NIST パスワードガイドライン
- OWASP パスワードセキュリティチートシート
※本記事の内容は、教育目的および正当なセキュリティテストのためのものです。John the Ripperの使用は、自分が所有または正当な許可を得たシステムに限定してください。不正アクセスや悪意のある目的での使用は法律違反となる可能性があります。