John the Ripper (JtR) は非常に強力なパスワードクラッキングツールですが、多くのアプリケーションはパスワードをそのまま保存せず、独自の形式でハッシュ化や暗号化を行っています。そのため、John the Ripperが直接解析できる形式に変換する必要があります。
この記事では、Mozilla FirefoxやThunderbirdがマスターパスワード(プライマリパスワードとも呼ばれます)を保護するために使用しているデータベースファイルから、John the Ripperで解析可能なハッシュ形式を抽出するツール mozilla2john
の使い方を詳しく解説します。
mozilla2johnとは? 🤔
mozilla2john
は、John the Ripperスイートに含まれるユーティリティスクリプト(通常はPythonスクリプト)の一つです。主な目的は、FirefoxやThunderbirdなどのMozilla製品が使用するパスワードデータベースファイル(key3.db
または key4.db
)を読み込み、マスターパスワードのハッシュを抽出することです。
FirefoxやThunderbirdでは、保存されたログイン情報(ユーザー名やパスワード)を保護するために「マスターパスワード」を設定できます。マスターパスワードが設定されている場合、保存されている個々のパスワードは、このマスターパスワードに基づいて生成されたキーで暗号化されます。mozilla2john
は、このマスターパスワード自体の検証に使われるデータを抽出し、John the Ripperが総当たり攻撃や辞書攻撃を行える形式に変換します。
マスターパスワードが設定されていない場合、key3.db
/key4.db
内のキーは空のパスワードで保護されており、mozilla2john
は通常、ハッシュを抽出できません(もしくは、空パスワードに対応する特定のハッシュ値を出力するかもしれませんが、実質的なクラッキングは不要です)。
抽出されたハッシュは、John the Ripperで mozilla
フォーマットとして認識され、解析を進めることができます。
mozilla2johnの入手と準備 💻
mozilla2john
は通常、John the Ripperの “jumbo” バージョンに含まれています。”jumbo” バージョンは、コミュニティによって拡張されたバージョンで、より多くのハッシュ形式や機能、ユーティリティツールが含まれています。
John the Ripperを入手する最も一般的な方法は以下の通りです。
- パッケージマネージャ (Linux): 多くのLinuxディストリビューションでは、パッケージマネージャを通じてJohn the Ripper (jumbo) をインストールできます。例えば、Debian/Ubuntu系では
sudo apt install john
、Fedora系ではsudo dnf install john
などです。Kali Linuxのようなペネトレーションテスト用ディストリビューションには、デフォルトで含まれていることが多いです。 - 公式サイトからダウンロード: OpenwallのJohn the Ripper公式サイトからソースコードやコンパイル済みバイナリをダウンロードできます。”jumbo” バージョンはGitHubリポジトリ (https://github.com/openwall/john) から入手するのが確実です。
John the Ripperをインストールすると、通常 mozilla2john
スクリプト(mozilla2john.py
など)は、John the Ripperの実行ファイルと同じディレクトリ、または run
サブディレクトリなどに配置されます。
# John the Ripperのインストールディレクトリに移動 (例)
cd /path/to/john/run/
# mozilla2johnスクリプトの存在確認
ls mozilla2john*
Pythonスクリプトとして提供されている場合、実行にはPythonインタプリタが必要です。最近のシステムでは通常Python 3が推奨されます。
解析対象ファイルの特定 📂
mozilla2john
が必要とするのは、FirefoxやThunderbirdのプロファイルディレクトリ内にある key3.db
または key4.db
ファイルです。これらのファイルには、マスターパスワードの検証に必要な情報や、保存されたパスワードを復号するためのキーが含まれています。
key3.db
: 古いバージョンのFirefox/Thunderbirdで使用されていたBerkeley DB形式のファイル。key4.db
: 比較的新しいバージョン(Firefox 58以降など)で使用されているSQLite形式のファイル。
これらのファイルが保存されているプロファイルディレクトリの場所は、OSによって異なります。
OS | 一般的なパス |
---|---|
Windows | C:\Users\<ユーザー名>\AppData\Roaming\Thunderbird\Profiles\<プロファイル名>\ C:\Users\<ユーザー名>\AppData\Roaming\Mozilla\Firefox\Profiles\<プロファイル名>\ (Microsoft Store版の場合は AppData\Local\Packages\... 内にあることもあります) |
macOS | ~/Library/Thunderbird/Profiles/<プロファイル名>/ ~/Library/Application Support/Firefox/Profiles/<プロファイル名>/ |
Linux | ~/.thunderbird/<プロファイル名>/ ~/.mozilla/firefox/<プロファイル名>/ |
<プロファイル名>
は通常、xxxxxxxx.default
や xxxxxxxx.default-release
のようなランダムな文字列とサフィックスで構成されています。
ヒント💡: FirefoxやThunderbirdの「トラブルシューティング情報」(about:support
またはメニューの ヘルプ > トラブルシューティング情報) を開くと、「プロファイルフォルダー」または「プロファイルディレクトリー」への直接リンクがあり、簡単に場所を確認できます。
また、保存された実際のログイン情報(暗号化されたユーザー名やパスワード)は、key3.db
/key4.db
と同じディレクトリにある logins.json
(新しいバージョン) または signons.sqlite
(古いバージョン) に格納されています。mozilla2john
は主に key3.db
/key4.db
を使用しますが、これらのファイルが揃っていることが重要です。
mozilla2johnの基本的な使い方 ⚙️
mozilla2john
の使い方は非常にシンプルです。基本的な構文は以下の通りです。
/path/to/john/run/mozilla2john <key3.db または key4.dbへのパス>
例えば、Linux環境でホームディレクトリ内のFirefoxプロファイルにある key4.db
ファイルからハッシュを抽出する場合、以下のようになります。
# Johnのrunディレクトリにいる場合
./mozilla2john ~/.mozilla/firefox/xxxxxxxx.default-release/key4.db
# フルパスで指定する場合
/path/to/john/run/mozilla2john ~/.mozilla/firefox/xxxxxxxx.default-release/key4.db
成功すると、標準出力にJohn the Ripperが解析できる形式のハッシュ文字列が出力されます。この出力をファイルにリダイレクトして保存するのが一般的です。
./mozilla2john ~/.mozilla/firefox/xxxxxxxx.default-release/key4.db > firefox_hash.txt
これで、firefox_hash.txt
というファイルに、解析対象のハッシュが保存されました。
mozilla2john
では、key3.db
や key4.db
ファイル自体ではなく、それらが含まれるプロファイルディレクトリを指定することも可能です。
./mozilla2john ~/.mozilla/firefox/xxxxxxxx.default-release/
試してみて、どちらの指定方法が機能するか確認してください。
マスターパスワードが設定されていない場合や、ファイルが破損している場合などは、エラーメッセージが表示されたり、ハッシュが出力されなかったりすることがあります。
ハッシュの取得と形式 📝
mozilla2john
が出力するハッシュの形式は、対象となるファイル (key3.db
か key4.db
) やMozilla製品のバージョンによって内部的に使用されている暗号化メカニズムに依存します。
一般的に、出力されるハッシュ文字列は以下のような情報を含んでいます(形式はJtRの内部表現に準じます)。
- フォーマット識別子: JtRがどのクラッキングルーチンを使うべきかを示すプレフィックス(例:
$mozilla$
)。 - 暗号化/ハッシュ化パラメータ: ソルト、イテレーションカウント、使用アルゴリズム(3DES, AES, PBKDF2, SHA1, SHA256など)に関する情報。
- 暗号化された検証データ: マスターパスワードが正しいか検証するために使われる暗号化されたデータ(通常は “password-check” という固定文字列を暗号化したもの)。
key3.db
(古い形式) の場合のハッシュ例(概念):
$mozilla$*<type>*<global_salt>*<entry_salt>*<encrypted_check_data>
key4.db
(新しい形式、SQLite) の場合のハッシュ例(概念):
これはPBKDF2-HMAC-SHA256とAES-CBCを使用する比較的新しい実装に基づいています。
$mozilla$*1*<db_salt>*<der_encoded_data>
ここで <der_encoded_data>
はASN.1 DER形式でエンコードされたデータで、この中にPBKDF2用のソルト、イテレーション回数、AES用のIV、暗号化された検証文字列などが含まれます。
ユーザーがこれらの詳細な形式を覚える必要はありません。重要なのは、mozilla2john
が生成した出力全体をそのままファイルに保存し、John the Ripperに渡すことです。JtRはプレフィックス ($mozilla$
) を見て、適切な解析モジュールを自動的に選択します。
John the Ripperでの解析 ⛏️
mozilla2john
でハッシュファイルを生成したら、いよいよJohn the Ripperを使ってマスターパスワードの解析を開始します。
基本的なコマンド構文は以下の通りです。
/path/to/john/run/john <ハッシュファイル名>
先ほど作成した firefox_hash.txt
を使う場合は、次のようになります。
./john firefox_hash.txt
John the Ripperは、デフォルトでいくつかの攻撃モードを順番に試します。
- Single Crack Mode: ハッシュファイル内の情報(ユーザー名など、Mozillaハッシュの場合はあまり関係ないかもしれません)を使って、簡単な変形(大文字小文字変換など)を試みます。
- Wordlist Mode: デフォルトのパスワードリスト (
password.lst
) とルール(単語の変形ルール)を使って辞書攻撃を試みます。 - Incremental Mode: 設定された文字セット(数字、英小文字、英大文字、記号など)を使って総当たり攻撃を試みます。
特定の攻撃モードを指定することも可能です。
ワードリスト攻撃 (特定の辞書ファイルを使用):
./john --wordlist=/path/to/custom_dictionary.txt --rules firefox_hash.txt
--rules
オプションを付けると、辞書内の単語に一般的な変形(例: password -> P@ssw0rd1)を適用して試行します。
インクリメンタルモード (総当たり攻撃、特定の文字種を指定):
# 数字のみで総当たり
./john --incremental=Digits firefox_hash.txt
# 英小文字のみで総当たり
./john --incremental=Lower firefox_hash.txt
# すべてのASCII文字で総当たり (非常に時間がかかる)
./john --incremental=All firefox_hash.txt
特定のフォーマットを指定 (通常は自動検出されるが明示する場合):
./john --format=mozilla firefox_hash.txt
解析が成功すると、クラックされたパスワードがターミナルに表示され、John the Ripperのホームディレクトリにある john.pot
ファイルに記録されます。
# クラックされたパスワードを表示
./john --show firefox_hash.txt
出力例:
?:CorrectHorseBatteryStaple
1 password hash cracked, 0 left
この例では、クラックされたパスワードは CorrectHorseBatteryStaple
であることがわかります。
解析には、パスワードの複雑さや長さ、使用するマシンの計算能力、選択した攻撃モードによって、数秒から数日、あるいはそれ以上かかる場合があります。特に強力なマスターパスワードが設定されている場合は、解析が非常に困難になる可能性があります。💪
注意点とトラブルシューティング ⚠️
- マスターパスワード未設定: 対象のプロファイルでマスターパスワードが設定されていない場合、
mozilla2john
はハッシュを生成できないか、「空パスワード」を示すような特定のハッシュを出力する可能性があります。John the Ripperを実行してもすぐにパスワードが見つからない(あるいは空パスワードとして表示される)でしょう。 - ファイルの破損:
key3.db
やkey4.db
ファイルが破損している場合、mozilla2john
は正常に動作しない可能性があります。 - 権限の問題: プロファイルディレクトリやその中のファイルに対する読み取り権限がない場合、
mozilla2john
はファイルにアクセスできません。適切な権限で実行するか、ファイルをアクセス可能な場所にコピーする必要があります。 - 古いJohn the Ripperバージョン:
key4.db
形式は比較的新しいため、古いバージョンのJohn the Ripper (jumbo) ではmozilla2john
がkey4.db
に対応していない可能性があります。最新版のJohn the Ripper (jumbo) を使用することをお勧めします。 - Python環境:
mozilla2john.py
を直接実行する場合、Python 3 と必要なライブラリ (場合によってはpyasn1
など) がインストールされている必要があります。 - 互換性のないNSSライブラリ:
mozilla2john
は内部的にMozillaのNSS (Network Security Services) ライブラリの構造やアルゴリズムに依存しています。システムにインストールされているNSSライブラリとの互換性問題が発生する可能性もゼロではありません(通常は問題になりにくいです)。 - 解析時間: 強力なパスワード(長く、ランダムで、大文字小文字数字記号を含む)は、解析に膨大な時間がかかるか、現実的な時間内には解析できない可能性があります。
- 倫理的な使用: 繰り返しになりますが、このツールは自身のパスワードリカバリや、許可されたセキュリティテストのためにのみ使用してください。他人のアカウントへの不正アクセスは重大な犯罪です。
問題が発生した場合は、John the Ripperのドキュメントやコミュニティ (メーリングリストなど) で情報を探すと良いでしょう。
まとめ ✅
mozilla2john
は、FirefoxやThunderbirdのマスターパスワードのハッシュを抽出し、John the Ripperで解析可能な形式に変換するための便利なツールです。
- John the Ripper (jumbo) をインストールし、
mozilla2john
スクリプトの場所を確認します。 - Firefox/Thunderbirdのプロファイルディレクトリから
key3.db
またはkey4.db
ファイルを見つけます。 mozilla2john
を実行して、対象のデータベースファイルからハッシュを抽出し、ファイルに保存します。- John the Ripperを使用して、抽出したハッシュファイルに対してパスワード解析(辞書攻撃、総当たり攻撃など)を実行します。
- 解析が成功すれば、マスターパスワードが判明します。
このプロセスを理解することで、パスワードがどのように保存され、どのように解析される可能性があるかを知ることができます。自身のパスワードセキュリティを見直す良い機会にもなるでしょう。常に強力でユニークなパスワードを使用し、マスターパスワードを設定する場合は特に推測されにくいものを選びましょう!🛡️
コメント