この記事では、John the Ripper (JtR) スイートに含まれるユーティリティツール strip2john
について詳しく解説します。
strip2john
は、特定のファイル形式からパスワードハッシュを抽出し、John the Ripper が解析できる形式に変換するための重要なツールです。
しかし、多くのファイル形式には専用の *2john
ツールが存在するため、この記事ではそれらも含めて、パスワードクラッキングの前処理としてのハッシュ抽出技術全般を扱います。
パスワード忘れやセキュリティ診断(ペネトレーションテスト)などでパスワード解析が必要になった際、これらのツールは非常に役立ちます。
ただし、これらのツールの使用は、必ず法的に許可された範囲、倫理的な目的に限定してください。不正アクセスや悪用は厳禁です。🚫
John the Ripper と *2john ツール群とは? 💻
John the Ripper (JtR) は、Openwall プロジェクトによって開発されている、非常に強力で広く使われているオープンソースのパスワードクラッキングツールです。
元々は UNIX 系 OS のパスワードハッシュ(例: /etc/shadow
ファイル内のハッシュ)を対象としていましたが、現在では「Jumbo」バージョンを中心に、Windows の LM/NTLM ハッシュ、各種アプリケーションのパスワードハッシュ、暗号化されたファイル(ZIP, RAR, PDF, Office 文書など)、SSH 秘密鍵、暗号化ボリューム(LUKS, TrueCrypt)、各種ウォレットファイルなど、非常に多くの形式に対応しています。
JtR がパスワードをクラックするためには、まず対象となるパスワードの「ハッシュ値」またはそれに相当するデータが必要です。 しかし、多くのファイルやシステムでは、パスワードそのものではなく、パスワードから生成されたハッシュ値が、ファイルヘッダーやメタデータなど特定の形式で保存されています。 そのままでは JtR が直接解析できない形式であることがほとんどです。
そこで登場するのが *2john ツール群です(zip2john
, rar2john
, pdf2john
, office2john
, ssh2john
, keepass2john
など)。
これらのツールは、それぞれの対応するファイル形式からパスワード情報を読み取り、JtR が理解できる特定のフォーマット(ハッシュ文字列)に変換(抽出)する役割を担います。
strip2john
は、この *2john ファミリーの一つですが、特定のファイル形式(歴史的には STRIP (Secure Telephony Interoperability Protocol) など)を対象としていました。しかし、現在では多くの専用ツールが存在するため、strip2john
自体が直接使われる場面は限られているかもしれません。
本記事では、strip2john
という名前を冠していますが、実際には JtR Jumbo に含まれる様々な *2john ツールの使い方全般を解説します。
これらのツールは通常、JtR のインストールディレクトリ内の run
ディレクトリに配置されています(Perl スクリプト、Python スクリプト、または実行可能バイナリとして提供されます)。
基本的な使い方 🛠️
ほとんどの *2john ツールの基本的な使い方は共通しています。コマンドラインでツールを実行し、引数としてハッシュを抽出したいファイルを指定します。
抽出されたハッシュ文字列は標準出力に出力されるため、通常はリダイレクト(>
)を使ってファイルに保存します。
基本構文:
/path/to/john/run/<tool_name> <入力ファイル> > <出力ハッシュファイル>
例えば、パスワードで保護された ZIP ファイル secret.zip
からハッシュを抽出し、zip.hash
というファイルに保存する場合は以下のようになります。
# JtRのrunディレクトリに移動している場合
./zip2john secret.zip > zip.hash
# フルパスで指定する場合 (例)
/usr/share/john/zip2john secret.zip > zip.hash
同様に、PDF ファイル document.pdf
からハッシュを抽出する場合は pdf2john
を使います(多くの場合、pdf2john.pl
または pdf2john.py
という名前です)。
./pdf2john.pl document.pdf > pdf.hash
抽出されたハッシュファイル (*.hash
) は、以下のような形式のテキストデータを含んでいます(形式はファイルタイプによって異なります)。
secret.zip:$zip2$*0*3*0*b5a94e1a4a8a0a4b9588017f2395366b*eda9*f5d6*3b9d763c2b4f6b5f666b9c0d6a3a72a501928638*$/zip2$:::::secret.zip
document.pdf:$pdf$4*4*128*-1060*1*16*5c8f37d2a4...{省略}...ba4dac0c*32*...{省略}*32*...{省略}...000000000000000000000000:::Format:%PDF FormatVersion:1.7 ID:7c5e... Title:Secret Document Author:Unknown Subject:None Keywords:None Creator:Microsoft® Word 2016 Producer:Microsoft® Word 2016 CreationDate:D:20240331142800Z ModDate:D:20240331142800Z NumPages:1 Encrypted:Yes PDFVersion:1.7:document.pdf
このハッシュファイル (*.hash
) を JtR に入力として与えることで、パスワードクラッキングを開始できます。
# 辞書攻撃の例
john --wordlist=/path/to/password.lst zip.hash
# 総当たり攻撃 (Incremental mode) の例
john --incremental pdf.hash
クラックに成功すると、パスワードがターミナルに表示され、john.pot
ファイル(デフォルトのポットファイル)に記録されます。
# クラックされたパスワードを表示
john --show zip.hash
*2john ツールの対応フォーマット例 📄
John the Ripper (Jumbo) には、非常に多くのファイル形式に対応する *2john ツールが含まれています。以下に代表的なものとその簡単な説明を挙げます。これらは JtR のバージョンやインストール方法によって利用可能なものが異なる場合があります。
ツール名 (例) | 対応フォーマット | 説明 |
---|---|---|
zip2john |
ZIP アーカイブ | パスワード保護された ZIP ファイルからハッシュを抽出します。古い ZipCrypto と AES 暗号化の両方に対応していることが多いです。 |
rar2john |
RAR アーカイブ | パスワード保護された RAR ファイルからハッシュを抽出します。RAR3, RAR5 形式に対応しています。 |
7z2john (または 7z2john.pl /.py) |
7z アーカイブ | パスワード保護された 7-Zip ファイルからハッシュを抽出します。 |
pdf2john (または pdf2john.pl /.py) |
PDF ドキュメント | パスワード保護された PDF ファイルからハッシュを抽出します。ユーザーパスワードとオーナーパスワードの両方に対応する場合があります。RC4, AES など様々な暗号化レベルに対応。 |
office2john.py |
Microsoft Office ドキュメント (doc, xls, ppt, docx, xlsx, pptx など) | パスワード保護された古い形式 (97-2003) および新しい形式 (OOXML) の Office ドキュメントからハッシュを抽出します。 |
ssh2john.py |
SSH 秘密鍵 (RSA, DSA, ECDSA, Ed25519 など) | パスフレーズで保護された SSH 秘密鍵ファイル (id_rsa など) からハッシュを抽出します。 |
keepass2john (または keepass2john.py ) |
KeePass データベース (kdb, kdbx) | KeePass (バージョン1 および 2) のパスワードデータベースファイルからマスターパスワード/キーファイルのハッシュを抽出します。 |
dmg2john (または dmg2john.py ) |
Apple Disk Image (DMG) | パスワード保護された macOS のディスクイメージファイルからハッシュを抽出します。 |
luks2john.py |
LUKS (Linux Unified Key Setup) 暗号化ボリューム | LUKS で暗号化されたディスクボリュームのヘッダーからパスフレーズのハッシュを抽出します。 |
truecrypt2john.py |
TrueCrypt/VeraCrypt 暗号化ボリューム | TrueCrypt や VeraCrypt で暗号化されたボリューム/コンテナからパスワード/キーファイルのハッシュを抽出します。 |
bitcoin2john.py |
Bitcoin ウォレット (wallet.dat) | パスフレーズで保護された Bitcoin Core のウォレットファイルからハッシュを抽出します。 |
keychain2john.py |
macOS Keychain | macOS のキーチェーンファイル (.keychain-db) からログインパスワードのハッシュを抽出します。 |
wpapcap2john |
WPA/WPA2 ハンドシェイク (pcap ファイル) | Wi-Fi の WPA/WPA2 の4ウェイハンドシェイクを含むネットワークキャプチャファイルからハッシュを抽出します。 |
pem2john.py |
PEM 形式の暗号化キーファイル | パスフレーズで保護された PEM 形式の秘密鍵などからハッシュを抽出します。 |
bitlocker2john |
BitLocker 暗号化ボリューム | Windows の BitLocker で暗号化されたドライブからリカバリパスワードやユーザーパスワードのハッシュ情報を抽出します。 |
electrum2john.py |
Electrum Bitcoin ウォレット | Electrum ウォレットファイルからパスワードハッシュを抽出します。 |
上記はほんの一例です。JtR Jumbo の run
ディレクトリを確認すると、さらに多くの *2john ツールが見つかるでしょう (例: aix2john
, ansible2john
, bitwarden2john
, signal2john
など)。
特定のファイル形式に対応するツールがあるか不明な場合は、John the Ripper の公式サイトやコミュニティ Wiki、GitHub リポジトリなどを確認することをお勧めします。
主要な *2john ツールの使い方と実践例 🧑💻
ここでは、よく使われるいくつかの *2john ツールについて、具体的な使用例と JtR での解析手順を示します。
1. ZIP ファイル (zip2john)
パスワード「password123
」で保護された archive.zip
を解析する場合。
-
ハッシュ抽出:
./zip2john archive.zip > archive.zip.hash
-
JtR で解析 (辞書攻撃):
john --wordlist=passwords.txt archive.zip.hash
(
passwords.txt
はパスワードリストファイル) -
JtR で解析 (総当たり攻撃 – 例: 数字4桁):
john --mask='?d?d?d?d' archive.zip.hash
-
結果確認:
john --show archive.zip.hash
2. PDF ファイル (pdf2john)
パスワードで保護された report.pdf
を解析する場合。
-
ハッシュ抽出:
./pdf2john.pl report.pdf > report.pdf.hash
(環境によっては
pdf2john.py
の場合もあります) -
JtR で解析 (Incremental モード):
john --incremental report.pdf.hash
-
結果確認:
john --show report.pdf.hash
3. SSH 秘密鍵 (ssh2john)
パスフレーズ「mysecretphrase
」で保護された秘密鍵ファイル id_rsa
を解析する場合。
-
ハッシュ抽出:
./ssh2john.py id_rsa > id_rsa.hash
-
JtR で解析 (辞書攻撃):
john --wordlist=rockyou.txt id_rsa.hash
(
rockyou.txt
は有名なパスワードリスト) -
結果確認:
john --show id_rsa.hash
4. KeePass データベース (keepass2john)
マスターパスワードで保護された MyPasswords.kdbx
(KeePass 2.x 形式) を解析する場合。
-
ハッシュ抽出:
./keepass2john MyPasswords.kdbx > keepass.hash
(キーファイルも使用している場合は、キーファイルを引数に追加します:
./keepass2john -k mykey.key MyPasswords.kdbx > keepass.hash
) -
JtR で解析 (辞書攻撃):
john --wordlist=passwords.txt keepass.hash
-
結果確認:
john --show keepass.hash
keepass2john
はこれらの組み合わせに対応している場合があります。
5. Microsoft Office ファイル (office2john.py)
パスワード保護された Word 文書 confidential.docx
を解析する場合。
-
ハッシュ抽出:
python ./office2john.py confidential.docx > office.hash
(
office2john.py
は Python スクリプトなのでpython
コマンドで実行します) -
JtR で解析 (辞書攻撃 + ルール):
john --wordlist=wordlist.txt --rules=All office.hash
(
--rules=All
オプションで単語の変形ルールを適用し、より多くの候補を試します) -
結果確認:
john --show office.hash
注意点とベストプラクティス ⚠️
- 倫理的な利用を厳守する: これらのツールは、自分自身が所有するファイルや、明確な許可を得ているシステムに対してのみ使用してください。他者のファイルやシステムに対して無断で使用することは、法律で禁止されており、重大な犯罪となります。
- 適切な *2john ツールを選択する: 解析したいファイル形式に対応した正しい *2john ツールを使用する必要があります。ファイル形式が不明な場合や、どのツールを使えばよいかわからない場合は、JtR のドキュメントやコミュニティで確認してください。
- JtR のバージョンを確認する: 特に Jumbo バージョンは頻繁に更新され、新しいファイル形式やアルゴリズムへの対応が追加されます。最新の機能を利用したい場合は、JtR を最新版に保つことを検討してください。
- ハッシュ抽出エラーへの対処: ファイルが破損している、対応していない暗号化方式が使われている、ファイル形式自体が非対応であるなどの理由で、*2john ツールがエラーを出すことがあります。エラーメッセージを確認し、原因を特定してください。場合によっては、別のツールや手法が必要になることもあります。
-
ハッシュ形式の理解: 抽出されたハッシュ文字列は、特定のフォーマット (
$zip2$
,$pdf$
,$ssh$
,$keepass$
などで始まる) を持っています。JtR はこのフォーマットを自動認識しますが、明示的に--format=
オプションで指定することも可能です。形式が正しくないと JtR はハッシュをロードできません (“No password hashes loaded” エラーの原因の一つ)。 - パフォーマンス: ハッシュ抽出自体は比較的短時間で終わることが多いですが、その後の JtR によるパスワードクラッキングには、パスワードの複雑さ、ハッシュのアルゴリズム、使用するマシンの計算能力、攻撃手法(辞書、総当たりなど)によって、数秒から数年、あるいはそれ以上かかる可能性があります。特に GPU を活用すると解析速度を大幅に向上させることができますが、設定が必要です。
- GUI フロントエンド: コマンドライン操作が苦手な場合、Johnny などの JtR 用 GUI フロントエンドを利用することも可能です。これらは *2john ツールの実行や JtR の操作をグラフィカルなインターフェースで行えるようにします。
まとめ ✨
strip2john
および関連する *2john ツール群は、John the Ripper を使ったパスワード解析プロセスにおいて、非常に重要な前処理の役割を果たします。
様々なファイル形式から JtR が解析可能なハッシュデータを抽出することで、忘れられたパスワードの回復や、システムのセキュリティ強度評価(ペネトレーションテスト)を可能にします。
この記事では、基本的な使い方から、主要なファイル形式ごとの実践例、そして利用上の注意点までを解説しました。 ZIP, PDF, Office 文書, SSH 鍵, KeePass DB など、日常的に利用される多くのファイル形式に対応しているため、いざという時にこれらのツールの存在を知っておくことは有用です。
繰り返しになりますが、これらの強力なツールは、必ず正当な理由と権限のもとで使用してください。技術は使い方次第で善にも悪にもなります。責任ある利用を心がけましょう。🛡️
さらに詳しい情報や最新の対応フォーマットについては、John the Ripper 公式サイトや、関連ドキュメントをご参照ください。
コメント