パスワードで保護された7zファイルの壁を打ち破る方法を学びましょう。
はじめに:7z2johnとは? 🤔
7z2john
は、有名なパスワードクラッキングツール「John the Ripper」(JtR)のスイートに含まれるユーティリティプログラムの一つです。その主な目的は、パスワードで保護された7-Zipアーカイブファイル(拡張子 .7z
)から、John the Ripperが解析できる形式の「ハッシュ」データを抽出することです。
John the Ripper自体は非常に強力で、多くの種類のハッシュや暗号形式に対応していますが、.7z
ファイルのようなアーカイブファイルを直接読み込んでパスワード解析を行うことはできません。そこで 7z2john
の出番です。このツールが .7z
ファイルを解析し、パスワードに関連する情報(ハッシュ)をJohn the Ripperが理解できる文字列に変換してくれるのです。
7z2john
は、あくまでハッシュを抽出するツールであり、パスワード自体を見つけるわけではありません。抽出されたハッシュをJohn the Ripperに入力することで、初めてパスワードクラッキングのプロセスが開始されます。
7z2johnの入手方法と場所 🛠️
7z2john
は通常、John the Ripperの「Jumbo」バージョン(コミュニティによって拡張された機能豊富なバージョン)に含まれています。John the Ripperをインストールすると、多くの場合 7z2john
も一緒にインストールされます。
一般的な入手方法・場所は以下の通りです:
- Linuxディストリビューションのパッケージマネージャ:
Debian/Ubuntu系:sudo apt-get install john
Fedora/CentOS系:sudo dnf install john
またはsudo yum install john
Kali Linuxなど、ペネトレーションテスト向けのディストリビューションには、多くの場合プリインストールされています。 - ソースからのビルド:
最新版や特定の機能が必要な場合は、John the Ripperの公式GitHubリポジトリからソースコードをクローンし、ビルドします。ビルド手順はリポジトリ内のドキュメント(READMEやINSTALLなど)に記載されています。 - Windows:
公式ウェブサイトやコミュニティからWindows向けのバイナリビルドをダウンロードできます。Cygwin環境などを使用する場合もあります。
インストール後、7z2john
の実行ファイルは、John the Ripperのインストールディレクトリ内の run
サブディレクトリや、システムの /usr/bin/
、/usr/sbin/
、/opt/john/run/
などに配置されることが多いです。見つからない場合は、find / -name 7z2john 2>/dev/null
や locate 7z2john
コマンドで探すことができます(環境によっては updatedb
の実行が必要な場合があります)。
なお、7z2john
にはPerlスクリプト版 (7z2john.pl
) と Pythonスクリプト版 (7z2john.py
) が存在することがあります。近年ではPerl版の方がより機能が豊富で推奨される傾向にあります。
# Perl版の場所を確認する例 (Kali Linux)
locate 7z2john.pl
基本的な使い方 📖
7z2john
の基本的な使い方は非常にシンプルです。ターミナル(コマンドプロンプト)を開き、以下のようにコマンドを実行します。
# Perl版を使う場合
/path/to/john/run/7z2john.pl [対象の7zファイル]
# Python版を使う場合 (古いバージョンの可能性あり)
/path/to/john/run/7z2john.py [対象の7zファイル]
# システムパスに通っていれば直接実行できる場合も
7z2john.pl [対象の7zファイル]
[対象の7zファイル]
の部分には、パスワード解析を行いたい .7z
ファイルのパスを指定します。
例えば、mysecret.7z
というファイルのハッシュを抽出したい場合は、以下のようになります。
# 例: Perl版を使用
/usr/share/john/7z2john.pl mysecret.7z
成功すると、標準出力にJohn the Ripperが解析できる形式のハッシュ文字列が出力されます。通常、この出力をファイルにリダイレクト(保存)して、後でJohn the Ripperに渡します。
# 出力を hash.txt というファイルに保存する
/usr/share/john/7z2john.pl mysecret.7z > hash.txt
.7z
ファイルが存在しないパスを指定したり、ファイルが破損していたり、あるいは 7z2john
が対応していない形式(非常に古い形式や特殊な圧縮・暗号化設定など)の場合は、エラーメッセージが表示されるか、ハッシュが正しく抽出できないことがあります。
出力されるハッシュ形式について 🧐
7z2john
が出力するハッシュ文字列は、以下のような形式で始まります。
mysecret.7z:$7z$*...(長い文字列が続く)...
この文字列には、John the Ripperがパスワードクラッキングを試みるために必要な情報が含まれています。具体的には以下のような要素です。
- ファイル名: 文字列の先頭部分(
mysecret.7z:
)。どのファイルから抽出されたハッシュかを示します。 - ハッシュタイプ識別子:
$7z$
の部分。これが7-ZipアーカイブのハッシュであることをJohn the Ripperに伝えます。 - パラメータフィールド:
$7z$
に続く複数のフィールド(*
や数字、$
で区切られる)には、暗号化アルゴリズム(通常AES-256)、ハッシュ関数(通常SHA-256)、暗号化されたヘッダ情報、ソルト、検証用データなどがエンコードされて含まれています。これらのパラメータは、7-Zipファイルの作成時の設定によって異なります。
例えば、$7z$2$19$0$...
のような形式が見られます。2
はフォーマットのバージョンや種類を示し、19
はPBKDF2-HMAC-SHA256のlog2反復回数 (219回) を示すことが多いです。0
はソルトの存在や形式を示す場合があります。これらの具体的な意味はバージョンやファイルによって変動する可能性があります。
このハッシュ文字列全体をJohn the Ripperに渡すことで、John the Ripperは適切なアルゴリズムとパラメータを使ってパスワードの試行錯誤(クラッキング)を開始できます。
John the Ripperでのハッシュ利用方法 🔑
7z2john
でハッシュをファイル(例: hash.txt
)に保存したら、いよいよJohn the Ripperを使ってパスワード解析を行います。基本的なコマンドは以下の通りです。
john [ハッシュファイル名]
例えば、hash.txt
に保存したハッシュを解析するには、次のように実行します。
john hash.txt
これにより、John the Ripperはデフォルトのモード(シングルクラックモード、ワードリストモード、インクリメンタルモードの順)で解析を開始します。
より効率的に解析を進めるために、特定のモードやオプションを指定することが一般的です。
-
ワードリストモード (Wordlist Mode): パスワードの候補リスト(辞書ファイル)を使って解析します。一般的な単語や過去に漏洩したパスワードリストなどが効果的です。
# rockyou.txt という辞書ファイルを使う場合 john --wordlist=/path/to/rockyou.txt hash.txt
-
ルールベース攻撃 (Rules): ワードリストモードと組み合わせて、辞書にある単語を変化させるルール(大文字小文字変換、数字や記号の付加など)を適用します。
# デフォルトのルールを適用 john --wordlist=/path/to/rockyou.txt --rules hash.txt
-
インクリメンタルモード (Incremental Mode): 指定された文字セット(例: 数字のみ、小文字英字のみ、全ASCII文字など)を使って、可能な全ての組み合わせを試します。短いパスワードには有効ですが、長くなると天文学的な時間がかかります。
# 数字のみで構成されるパスワードを試す場合 (定義による) john --incremental=Digits hash.txt
-
マスクモード (Mask Mode): パスワードのパターン(例: 大文字2文字 + 小文字4文字 + 数字2文字)を指定して解析します。パスワードの構造にある程度の推測がつく場合に非常に効果的です。
# 例: 大文字(U)1文字 + 小文字(l)5文字 + 数字(d)2文字 のパターン john --mask='?u?l?l?l?l?l?d?d' hash.txt
-
特定のフォーマットを指定: John the Ripperが自動でハッシュタイプを誤認識する場合や、明示的に指定したい場合に
--format
オプションを使います。7zの場合は7z
や7z-opencl
(GPU利用時)などを指定します。# CPUで7zフォーマットを指定 john --format=7z hash.txt # OpenCL対応GPUで7zフォーマットを指定 (要設定・対応) john --format=7z-opencl hash.txt
解析中に状況を確認したり、見つかったパスワードを表示したりするには、以下のコマンドを使います。
# 現在のステータスを表示 (解析中に 'Enter' キーでも可)
john --status hash.txt
# 見つかったパスワードを表示
john --show hash.txt
John the Ripperは解析結果(見つかったパスワード)を john.pot
というファイルに記録します。--show
オプションはこのファイルを参照して結果を表示します。
john --show hash.txt
の実行時に ファイル名:パスワード
の形式で表示されます。
注意点とトラブルシューティング 🤔
- 対応していない形式:
7z2john
は全ての.7z
ファイルに対応しているわけではありません。特に、非常に古いバージョンの7-Zipで作成されたファイルや、特殊な圧縮・暗号化オプションが使用されている場合、ハッシュを抽出できないことがあります。 - ヘッダ暗号化なしの場合: 7-Zipではファイル名リスト(ヘッダ)を暗号化しないオプションがあります。
7z2john
はヘッダが暗号化されている場合を主に対象としていますが、バージョンによってはヘッダ非暗号化のファイルも扱える場合があります。挙動が異なる可能性がある点に注意が必要です。 - Perl/Pythonの依存関係: スクリプト版(
.pl
や.py
)を実行する場合、それぞれの実行環境(PerlインタプリタやPythonインタプリタ)および必要なライブラリ(例: PerlのCompress::Raw::Lzma
など)がシステムにインストールされている必要があります。不足している場合は、エラーメッセージに従ってインストールしてください。# Ubuntu/Debian系でPerlのLZMAモジュールをインストールする例 sudo apt install libcompress-raw-lzma-perl
- John the Ripperの性能: 7-Zipのパスワード保護は比較的強力(特にAES-256と強力なKDFを使用している場合)であり、パスワードクラッキングには相応の計算能力と時間が必要です。複雑で長いパスワードの場合、解析には数日から数年、あるいはそれ以上かかることも珍しくありません。GPU (OpenCLやCUDA) を利用するとCPUよりも大幅に高速化できる場合がありますが、適切な設定と対応ハードウェアが必要です。
- 文字コードの問題: ファイル名やパスワードに非ASCII文字が含まれている場合、システムの文字コード設定によっては
7z2john
やjohn
が正しく動作しない可能性があります。UTF-8環境での実行が推奨されます。
倫理的な考慮事項と合法性 ⚖️
7z2john
および John the Ripper は、セキュリティ専門家がシステムの脆弱性をテストしたり、自分が所有する(またはアクセス許可を得ている)ファイルの忘れたパスワードを回復したりするための強力なツールです。
まとめ ✨
7z2john
は、パスワードで保護された .7z
アーカイブからJohn the Ripper用のハッシュを抽出するための不可欠なツールです。このツールを使うことで、John the Ripperの強力なパスワードクラッキング能力を .7z
ファイルに対しても適用できるようになります。
基本的な使い方をマスターし、抽出したハッシュをJohn the Ripperの様々な攻撃モード(ワードリスト、ルール、インクリメンタル、マスクなど)と組み合わせることで、忘れてしまったパスワードの回復や、セキュリティ評価(ペネトレーションテストなど)のプロセスにおいて大きな助けとなります。
ただし、その強力さゆえに、常に倫理的な使用を心がけ、法律を遵守することが求められます。正しく使えば非常に有用なツールですが、悪用は厳禁です。🔒
参考情報 📚
- John the Ripper official website: https://www.openwall.com/john/
- John the Ripper Community Wiki (includes usage examples): https://openwall.info/wiki/john/
- John the Ripper (Jumbo) GitHub Repository (source code, including 7z2john): https://github.com/openwall/john
コメント