はじめに
John the Ripper (JtR) は、広く使われているオープンソースのパスワードクラッキングツールです。システム管理者やセキュリティ専門家が、システムのパスワード強度をテストしたり、忘れてしまったパスワードを回復したりするのに役立ちます。JtRの強力な機能の一つは、その柔軟性とカスタマイズ性ですが、これを支える重要な要素が john-data
ディレクトリ(またはそれに類する役割を持つデータディレクトリ)です。
この記事では、John the Ripperのjohn-data
ディレクトリ(あるいは/usr/share/john/
や実行ディレクトリ直下のrun
ディレクトリなど、インストール方法によって異なるデータ格納場所)に含まれるファイルや設定が、どのようにパスワードクラックプロセスに影響を与えるのか、そしてそれらをどう活用すればクラック効率を高められるのかを詳しく解説します。Emojiも交えながら、初心者にも分かりやすく説明していきますので、ぜひ最後までお読みください😊。
John the Ripperのデータディレクトリとは?🤔
John the Ripperが動作するためには、実行ファイル本体だけでなく、様々な補助データが必要です。これには、設定ファイル、パスワードリスト(辞書)、クラックルール、文字セット定義などが含まれます。これらのデータは通常、特定のディレクトリにまとめて格納されています。
伝統的に、ソースコードからビルドした場合などでは、John the Ripperの実行ファイルと同じ場所(run
ディレクトリなど)や、その直下にjohn.conf
などの設定ファイルが置かれます。Debian/Ubuntu系のLinuxディストリビューションでパッケージマネージャ(apt
)を使ってインストールした場合、これらのデータファイルは/usr/share/john/
ディレクトリや/etc/john/
ディレクトリに配置されることが一般的です。Kali Linuxのツール情報では、john-data
というパッケージがこれらのアーキテクチャ非依存のデータ(文字セットやスクリプトなど)を提供すると説明されています。
また、John the Ripperは実行中にいくつかのファイルを生成・更新します。代表的なものが、クラックに成功したパスワードとそのハッシュを記録するjohn.pot
ファイルや、中断したセッションの状態を保存するjohn.rec
(またはセッション名を指定した場合はセッション名.rec
)ファイルです。これらのファイルは、デフォルトでは$JOHN
(Johnのホームディレクトリ、通常はrun
ディレクトリやユーザーのホームディレクトリ内の~/.john/
)に保存されます。
この記事では、これらの設定ファイルやデータファイルが格納される場所を総称して「データディレクトリ」と呼び、その中身と役割について解説します。
データディレクトリの主な役割
- 設定の管理:
john.conf
(またはjohn.ini
) ファイルを通じて、JtRの動作全般をカスタマイズします。 - 辞書攻撃の基盤:
password.lst
などのワードリスト(辞書ファイル)を提供し、辞書攻撃の効率を高めます。 - ルールの適用:
john.conf
内で定義されるルールを使って、辞書の単語を変化させ(マングリング)、より多くのパスワード候補を生成します。 - 進捗の記録:
john.pot
ファイルにクラック済みのパスワードを記録し、重複作業を防ぎます。john.rec
ファイルに中断したセッションの状態を保存し、再開を可能にします。 - 文字セット定義: インクリメンタルモード(総当たり攻撃)で使用する文字セットを定義します。
データディレクトリ内の主要ファイルとサブディレクトリ 📁
データディレクトリには、John the Ripperの動作に不可欠なファイルや、カスタマイズに使用できるファイルが含まれています。以下に主なものを紹介します。場所はインストール方法によって異なる場合があります。
ファイル/ディレクトリ名 | 役割 | 一般的な場所の例 |
---|---|---|
john.conf (または john.ini ) |
設定ファイル: JtRの全体的な動作、モードごとの設定、ワードリストのパス、ルール、文字セットなどを定義します。最も重要なファイルの一つです。 | /etc/john/ , /path/to/john/run/ , ~/.john/ |
password.lst |
デフォルトのワードリスト: 辞書攻撃モードで使用される単語リスト。一般的な単語やよく使われるパスワードが含まれています。 | /usr/share/john/ , /path/to/john/run/ |
john.pot |
Potファイル: クラックに成功したパスワードとそのハッシュを格納します。ユーザー名:パスワード または ハッシュ:パスワード の形式で記録されます。JtRは起動時にこのファイルを読み込み、既にクラック済みのハッシュは再度試行しません。 |
~/.john/ , /path/to/john/run/ (指定がなければ) |
john.rec (または セッション名.rec ) |
リカバリファイル: 中断されたセッションの状態を保存します。--restore オプションでセッションを再開する際に使用されます。 |
~/.john/ , /path/to/john/run/ (指定がなければ) |
john.log (または セッション名.log ) |
ログファイル: セッションの開始、終了、クラック成功などのイベントを記録します。 | ~/.john/ , /path/to/john/run/ (指定がなければ) |
(各種 *.chr ファイル) |
文字セットファイル: インクリメンタルモードで使用される文字セットの定義と統計情報が含まれます。--make-chars オプションでカスタム文字セットを作成できます。 |
/usr/share/john/ , /path/to/john/run/ |
(各種 *2john スクリプト/ツール) |
ハッシュ抽出ツール: ZIP, RAR, PDF, KeePass, Officeファイルなど、様々な形式からJtRが解析可能なハッシュ形式に変換するための補助ツール群。例: zip2john , rar2john , pdf2john 。 |
JtRの実行パス内 (/usr/sbin/ , /path/to/john/run/ など) |
これらのファイルは、John the Ripperの強力な機能を支える基盤となります。特に john.conf
のカスタマイズや、適切なワードリストの選択、john.pot
の管理は、効率的なパスワードクラックに不可欠です。
データディレクトリの活用方法 💪
データディレクトリ内のファイルを理解し、適切に活用することで、John the Ripperのパスワードクラック能力を最大限に引き出すことができます。
1. 設定ファイル (john.conf) のカスタマイズ ⚙️
john.conf
はJtRの心臓部とも言えるファイルです。このファイルを編集することで、様々な動作を制御できます。
- デフォルトワードリストの変更:
[Options] Wordlist = /path/to/your/custom/wordlist.txt
[Options]
セクションでWordlist
パラメータを変更し、デフォルトで使用する辞書ファイルを指定できます。例えば、有名な RockYou リストなどを指定すると効果的です。 - カスタムルールの定義:
[List.Rules:MyCustomRule] # 単語の先頭を大文字にし、末尾に数字2桁を追加 c A0"[0-9][0-9]" # 単語をすべて大文字にし、末尾に特殊文字を追加 u A1"!?#$%"
[List.Rules:ルール名]
セクションを作成し、独自の単語変換ルール(マングリングルール)を定義できます。これにより、辞書攻撃の効果を高めることができます。定義したルールは--rules=MyCustomRule
のように指定して使用します。 - インクリメンタルモードの設定:
[Incremental:Digits5] File = $JOHN/digits.chr MinLen = 5 MaxLen = 5 CharCount = 10
[Incremental:モード名]
セクションで、特定の文字セット(.chr
ファイル)を使用し、最小/最大長を指定したカスタムインクリメンタルモード(総当たり攻撃)を定義できます。 - その他のオプション: アイドル状態での実行 (
Idle = Y
)、ログ記録のフォーマット (TimeFormat
)、クラック成功時のビープ音 (Beep = N
) など、様々なグローバルオプションを設定できます。
john.conf
の編集は、JtRの挙動を深く理解し、特定のターゲットに合わせて最適化するための鍵となります。
2. ワードリスト (辞書) の管理 📚
辞書攻撃はJtRの主要な攻撃モードの一つであり、その成否は使用するワードリストの質に大きく依存します。
- デフォルトリストの利用: JtRには基本的な
password.lst
が含まれていますが、これだけでは不十分な場合が多いです。 - 外部ワードリストの導入:
- RockYou: 過去に漏洩したパスワードを集めた非常に有名なリスト。多くのLinuxディストリビューションに含まれていたり、オンラインで入手可能です。
- SecLists: 様々な種類のセキュリティ関連リストを集めた大規模なコレクション。パスワードリストも豊富に含まれています。(GitHub – danielmiessler/SecLists)
- 地域や言語に特化したリスト: ターゲットが特定の地域や言語を使用している場合、それに合わせたリストを使用すると効果的です。
- 独自リストの作成: ターゲットに関する情報(名前、誕生日、関連する単語など)を基に、カスタムリストを作成することも有効です。
- リストの指定方法:
john --wordlist=/path/to/rockyou.txt --rules=Best64 password-hashes.txt
--wordlist=ファイルパス
オプションで、使用するワードリストを明示的に指定します。--rules
オプションと組み合わせることで、指定したリストに対してルールを適用できます。 - 標準入力からの読み込み:
cat wordlist1.txt wordlist2.txt | john --stdin --rules=KoreLogic password-hashes.txt
--stdin
または--pipe
オプションを使うと、他のコマンドの出力や複数のファイルを結合したものをワードリストとして利用できます。
ターゲットの背景を考慮し、適切なワードリストを選択・組み合わせて使用することが重要です。巨大なワードリストは時間がかかりますが、網羅性は高まります。一方で、ターゲットに合わせて絞り込んだリストを使う方が効率的な場合もあります。
3. Potファイル (john.pot) の活用 🍯
john.pot
ファイルは、クラック作業の「記憶」の役割を果たします。
- クラック済みパスワードの確認:
このコマンドは、指定したハッシュファイルに含まれるハッシュのうち、john --show password-hashes.txt
john.pot
に記録されているクラック済みのパスワードを表示します。john.pot
を直接テキストエディタで開いて確認することも可能です。 - 重複作業の回避: JtRは、クラックを開始する前に
john.pot
を参照し、既にクラック済みのハッシュはスキップします。これにより、長期間にわたるクラック作業や、中断・再開を繰り返す場合に、無駄な計算を防ぐことができます。 - Potファイルの場所: デフォルトでは
~/.john/john.pot
やrun
ディレクトリに作成されますが、--pot=ファイルパス
オプションで場所を指定することもできます。 - 注意点:
john.pot
にはクラックされたパスワードが平文で記録されるため、このファイルのアクセス管理には注意が必要です。不要になった場合や、クリーンな状態から再開したい場合は、削除またはリネームします。 (例:rm ~/.john/john.pot
)
4. ルールベース攻撃の効果的な利用 📜
ルールは、限られたワードリストから膨大なパスワード候補を生成するための強力な武器です。
- 組み込みルールの活用:
john.conf
には、[List.Rules:Wordlist]
や[List.Rules:Single]
といったセクションに、デフォルトでいくつかの有用なルールセットが定義されています (Jumbo版ではさらに多くのルールが含まれます)。# デフォルトのワードリストルールを使用 john --wordlist=password.lst --rules password-hashes.txt # シングルクラックモードのルールを使用 (ユーザー名などを基にする) john --single password-hashes.txt
- 特定のルールセットの指定: Jumbo版などでは
KoreLogic
,Jumbo
,Extra
など、より強力なルールセットが用意されていることがあります。john --wordlist=password.lst --rules=KoreLogic password-hashes.txt
- ルールのテスト (stdout):
john --wordlist=mywords.txt --rules=MyCustomRule --stdout > generated_passwords.txt
--stdout
オプションを使うと、実際にクラックを行う代わりに、ルールを適用して生成されるパスワード候補を標準出力(またはファイル)に出力できます。これにより、定義したルールが意図通りに機能しているかを確認できます。 - ルールの組み合わせ: 複雑なパスワードポリシーに対応するために、複数のルールを組み合わせたり、独自のルールを作成したりすることが効果的です。例えば、数字の追加、特殊文字の挿入、Leet変換(例: o -> 0, e -> 3)などを組み合わせます。
効果的なルールを作成・選択するには、ターゲットとなるパスワードポリシーや、ユーザーがパスワードを作成する際の傾向を理解することが役立ちます。
ベストプラクティスとヒント ✨
- 環境の分離: 可能であれば、パスワードクラック専用の環境(VMや物理マシン)を用意し、他のシステムへの影響を最小限に抑えましょう。
- Potファイルのバックアップ: 長時間かかるクラック作業の場合、
john.pot
ファイルを定期的にバックアップしておくと、万が一ファイルが破損した場合でも安心です。 - 適切なモードの選択:
- シングルモード (
--single
): 最初に試すべき高速なモード。ユーザー名などから単純なパスワードを推測します。 - ワードリストモード (
--wordlist
): 最も一般的なモード。質の高い辞書と強力なルールを組み合わせます。 - インクリメンタルモード (
--incremental
): 最後の手段。あらゆる文字の組み合わせを試すため非常に時間がかかりますが、最も網羅的です。文字セットや長さを絞り込むことが重要です。 - マスクモード (
--mask
): パスワードのパターンがある程度わかっている場合に非常に効果的です。(例:--mask=?u?l?l?l?d?d?d?d
は大文字1文字+小文字3文字+数字4文字のパターン)
- シングルモード (
- ハードウェアの活用: John the Ripper (特にJumbo版) はGPU (OpenCL) を利用した高速化に対応しています。GPUを使うことで、特に複雑なハッシュ形式のクラック速度を劇的に向上させることができます。
--list=opencl-devices
で利用可能なデバイスを確認し、--format=opencl
や--dev=N
オプションで指定します。 - 複数コア/マシンの利用:
--fork=N
オプションで複数のCPUコアを利用したり、MPI (Message Passing Interface) を使って複数マシンでの分散クラッキングを行うことも可能です。 - 情報収集: ターゲットに関する情報(組織名、サービス名、ユーザーの傾向など)は、効果的なワードリストやルールの作成に役立ちます。
まとめ 🏁
John the Ripperのデータディレクトリ(/usr/share/john/
, /etc/john/
, run/
, ~/.john/
など)は、単なるファイルの置き場所ではありません。john.conf
による詳細な設定、password.lst
などのワードリスト、ルール定義、そしてjohn.pot
による進捗管理など、JtRの強力なパスワードクラッキング機能を支える重要な要素が詰まっています。
これらのファイルを理解し、適切にカスタマイズ・管理することで、John the Ripperをより効率的かつ効果的に活用することができます。特に、ターゲットの状況に合わせたワードリストの選択、強力なマングリングルールの適用、そしてPotファイルによる作業の継続性の確保は、パスワードクラックの成功率を高める鍵となります。
この記事が、John the Ripperとそのデータディレクトリの理解を深め、セキュリティテストやパスワード監査のスキル向上に役立つことを願っています🚀。ただし、繰り返しになりますが、ツールの使用は常に倫理的かつ合法的な範囲で行うようにしてください。
参考情報
- John the Ripper official website: https://www.openwall.com/john/ (ドキュメント、ダウンロードなど)
- John the Ripper Community Wiki (GitHub): https://github.com/openwall/john/wiki (より詳細な情報やTips)
- Kali Linux Tools – john: https://www.kali.org/tools/john/ (Kali LinuxにおけるJohn the Ripperの情報)
コメント