現代のデジタル社会では、多くのサービスでアカウントが必要となり、それぞれに異なるパスワードを設定することが推奨されています。これらのパスワードを安全に管理するために、KeePassのようなパスワードマネージャーが広く利用されています。しかし、万が一マスターパスワードを忘れてしまった場合や、セキュリティ監査の一環としてパスワード強度をテストしたい場合、どのように対処すればよいでしょうか? 🤔
ここで登場するのが、John the Ripperという強力なパスワードクラッキングツール群に含まれるkeepass2john
ユーティリティです。この記事では、keepass2john
を使用してKeePassデータベース(.kdbxファイル)からパスワードハッシュを抽出し、John the Ripperで解析する方法について詳しく解説します。
KeePassとJohn the Ripperについて
KeePassとは?
KeePass Password Safe(キーパス)は、フリーかつオープンソースのパスワードマネージャーです。ユーザー名、パスワード、URL、メモなどを暗号化されたデータベースファイル(.kdb または .kdbx)に安全に保管します。データベース全体は、マスターパスワード、キーファイル、またはWindowsユーザーアカウント(あるいはこれらの組み合わせ)によって保護されます。AES-256やChaCha20などの強力な暗号化アルゴリズムを使用しており、セキュリティ意識の高いユーザーや組織に広く採用されています。
主な機能として、パスワード生成、自動入力、プラグインによる拡張性などがあります。クロスプラットフォーム対応も進んでおり、Windowsだけでなく、Mono経由でLinuxやmacOSでも利用可能です。また、非公式ながら多くのプラットフォーム向けの派生アプリ(KeePassXC, KeePass2Androidなど)も存在します。
公式ウェブサイト: https://keepass.info/
John the Ripperとkeepass2johnとは?
John the Ripper(ジョン・ザ・リッパー、通称John)は、非常に有名で強力なパスワードクラッキングツールです。元々はUnix系のパスワードハッシュ(crypt(3)形式)を解析するために開発されましたが、現在では「Jumbo」と呼ばれるコミュニティ版によって、Windows LM/NTLMハッシュ、各種アーカイブファイル(ZIP, RAR)、ドキュメントファイル(PDF, Office)、そしてKeePassデータベースなど、数百種類ものハッシュや暗号形式に対応しています。システム管理者が弱いパスワードを発見したり、ペネトレーションテスト(侵入テスト)でパスワード強度を評価したりする目的で広く使われています。
keepass2john
は、John the Ripper (Jumbo) パッケージに含まれるユーティリティの一つです。その主な役割は、KeePassデータベースファイル(.kdbxまたは古い.kdb形式)から、John the Ripperが解析できる形式のハッシュ文字列を抽出することです。このハッシュ文字列には、暗号化アルゴリズム、キー派生関数の反復回数、ソルトなど、パスワードクラッキングに必要な情報が含まれています。
John the Ripper 公式ウェブサイト: https://www.openwall.com/john/
John the Ripper (Jumbo) のインストール
keepass2john
は通常、John the Ripper (Jumbo) の一部として提供されます。多くのLinuxディストリビューションでは、パッケージマネージャーを通じて簡単にインストールできます。
Debian/Ubuntu系の場合:
sudo apt update
sudo apt install john
Fedora/CentOS/RHEL系の場合:
sudo dnf install john
# または
sudo yum install john
macOS (Homebrewを使用):
brew update
brew install john-jumbo
Kali LinuxやParrot OSなどのペネトレーションテスト用ディストリビューション:
これらのディストリビューションには、通常、John the Ripper (Jumbo) がプリインストールされています。
Windowsの場合:
公式のWindowsビルドは提供されていませんが、コミュニティによるビルドが利用可能です。OpenwallのWikiやGitHubリポジトリからダウンロードできます。
- John the Ripper 公式サイト (ビルドへのリンクあり)
- John the Ripper Community Packages (GitHub) (Windowsバイナリを含む)
ダウンロードしたアーカイブを展開し、run
ディレクトリにあるjohn.exe
やkeepass2john.exe
を使用します。環境によってはCygwinが必要になる場合もあります。
ソースからのビルド:
最新機能を利用したい場合や、特定の環境向けに最適化したい場合は、GitHubからソースコードをクローンしてビルドすることも可能です。詳細な手順は、リポジトリ内のINSTALL
またはREADME.md
ファイルを参照してください。
John the Ripper (Jumbo) GitHubリポジトリ
keepass2john
コマンドが見つからない場合、john
パッケージに含まれる他の*2john
ユーティリティと一緒に別の場所(例: /usr/share/john/
や /opt/john/run/
)にあるか、あるいはjohn
コマンド自体へのシンボリックリンクとして実装されている可能性があります。インストール方法や環境によってパスが異なる場合があるので確認してください。一部の環境では `sudo keepass2john` のように管理者権限が必要な場合もあります。
keepass2johnの基本的な使い方
keepass2john
の基本的な使い方は非常にシンプルです。ターミナル(コマンドプロンプト)を開き、以下のようにコマンドを実行します。
keepass2john <KeePassデータベースファイル>
例えば、MyDatabase.kdbx
というファイルからハッシュを抽出したい場合は、次のようになります。
keepass2john MyDatabase.kdbx
成功すると、以下のような形式の文字列(ハッシュ)が標準出力に表示されます。
MyDatabase.kdbx:$keepass$*0*250000*0*b1a2...c3d4*e5f6...7890*a1b2...c3d4*...
または (KDBX v3.1/v4の場合)
MyDatabase.kdbx:$keepass$*2*60000*0*1af4...d3d*3869...091*393c...f03f6*b737...cff*...
この出力された文字列全体が、John the Ripperで解析するためのハッシュです。通常、このハッシュをファイルに保存して、John the Ripperの入力として使用します。
keepass2john MyDatabase.kdbx > keepass_hash.txt
上記のコマンドは、抽出されたハッシュをkeepass_hash.txt
というファイルにリダイレクト(保存)します。
ハッシュ形式の理解
keepass2john
が出力するハッシュ文字列は、特定のフォーマットに従っています。これにより、John the Ripperはパスワード解析に必要な情報を得ることができます。一般的な形式は以下のようになります。
<データベースファイル名>:$keepass$<バージョン情報>*<キー変換回数>*<キーファイルの有無>*<マスターキー関連データ>*...
各フィールドの意味は大まかに以下の通りです(バージョンによって異なります):
<データベースファイル名>:
: ハッシュの元となったファイル名(John the RipperやHashcatはこの部分を無視するため、削除する必要があります)。$keepass$
: John the RipperがKeePassハッシュであることを識別するためのマーカー。<バージョン情報>
: KeePassのバージョンやハッシュのタイプを示します。例えば、0
はKDB、1
はKDBX (v3.1以前でキーファイルあり)、2
はKDBX (v3.1/v4) を示すことがあります。<キー変換回数>
: マスターパスワードから暗号化キーを生成する際の反復回数。数値が大きいほど解析が困難になります。<キーファイルの有無>
: キーファイルが使用されているかどうかを示すフラグ(例:0
=なし,1
=あり)。<マスターキー関連データ>*...
: 暗号化に使用されたアルゴリズム、ソルト、検証用データなどがエンコードされて含まれます。
正確なフィールドの内容や順序はKeePassのバージョンや設定(AES, ChaCha20, Twofish, Argon2など)、keepass2john
の実装によって異なる場合があります。重要なのは、keepass2john
が出力した文字列全体(ファイル名部分を除く)をそのままJohn the Ripperに渡すことです。
John the Ripperでのパスワード解析
keepass2john
でハッシュを抽出し、ファイル(例: keepass_hash.txt
)に保存したら、いよいよJohn the Ripperを使ってパスワード解析を行います。
基本的な実行方法:
john keepass_hash.txt
このコマンドを実行すると、Johnはまず「シングルクラック」モードを試します。これは、ハッシュファイルに含まれる情報(ユーザー名など、KeePassの場合はファイル名)を元に簡単なパスワードを推測するモードです。次に、デフォルトの辞書(password.lst
)とルールを使って「辞書攻撃」モードを実行し、最後に「インクリメンタル」モード(総当たり攻撃)に移行します。
特定の辞書ファイルを使用する (辞書攻撃):
より効果的な辞書攻撃を行うには、強力な単語リスト(辞書ファイル)を指定します。例えば、有名なrockyou.txt
を使用する場合は以下のようになります。(rockyou.txt
は多くのセキュリティ系Linuxディストリビューションに含まれているか、オンラインで入手可能です)
john --wordlist=/path/to/rockyou.txt keepass_hash.txt
ルールの適用:
辞書の単語に数字を追加したり、大文字小文字を変換したりする「ルール」を適用することで、より複雑なパスワードも発見できる可能性が高まります。デフォルトのルールセットを使う場合は--rules
オプションを追加します。
john --wordlist=/path/to/rockyou.txt --rules keepass_hash.txt
マスクモード (総当たり攻撃):
パスワードのパターンがある程度わかっている場合(例: 大文字1文字+小文字5文字+数字2桁)、マスクモードが有効です。
john --mask='?u?l?l?l?l?l?d?d' keepass_hash.txt
?u
: 大文字 (Uppercase)?l
: 小文字 (Lowercase)?d
: 数字 (Digit)?s
: 記号 (Symbol)
解析結果の表示:
パスワードが見つかると、ターミナルに表示され、$JOHN/john.pot
(Johnのホームディレクトリ内のjohn.pot
ファイル)に保存されます。後で解析結果だけを確認したい場合は、--show
オプションを使用します。
john --show keepass_hash.txt
これにより、john.pot
ファイルに記録されている、指定したハッシュファイルに対応するクラック済みのパスワードが表示されます。
MyDatabase.kdbx:CorrectPassword123: ... (その他の情報) ...
:
で区切られた2番目のフィールドが解析されたパスワードです。
セッションの中断と再開:
解析中にCtrl+C
を押すと、現在の状態が$JOHN/john.rec
ファイルに保存され、セッションが中断されます。後で中断したところから再開するには、--restore
オプションを使用します。
john --restore
キーファイルの扱い 🔑
KeePassでは、マスターパスワードに加えて、またはマスターパスワードの代わりに「キーファイル」を使用してデータベースを保護することができます。キーファイルは、任意のファイル(画像、ドキュメント、専用のキーファイルなど)を使用できます。
keepass2john
は、キーファイルが使用されているかどうかを検出し、その情報をハッシュ文字列に含めます。通常、keepass2john
を実行する際にキーファイル自体を指定する必要はありません。 ハッシュ抽出プロセスはデータベースファイル(.kdbx)のみを分析して、キーファイルが必要かどうかを示す情報を埋め込みます。
ハッシュ形式の<キーファイルの有無>
フィールドが1
(または他の非ゼロ値、バージョンによる)になっている場合、John the Ripperはそのハッシュを解析する際に、キーファイルが使われていることを認識します。
注意点:
- John the Ripperが実際にパスワードを試行する際には、マスターパスワードの候補のみを探索します。キーファイルの内容自体をブルートフォースで探す機能は、John the Ripperの標準的な動作ではありません(キーファイルの内容が既知で、それをマスターパスワードの一部として扱うような特殊なケースを除く)。
- もしマスターパスワードとキーファイルの両方を使用しているデータベースのパスワードを忘れた場合、現状の標準的なツールでは、マスターパスワードを特定できたとしても、キーファイルがなければデータベースを開くことはできません。
- 古いバージョンの
keepass2john
や一部のドキュメントでは、-k <keyfile>
のようなオプションが存在したかもしれませんが、現在のJohn the Ripper (Jumbo) に含まれるC言語版のkeepass2john
では、通常キーファイル指定オプションは不要、または存在しません。データベースファイル自体から必要な情報を抽出します。
keepass2john.py
(Python版)が存在し、キーファイルに関するオプションがあった可能性や、特定の状況(例:キーファイルのみで保護されたDB)での議論がありましたが、標準的なkeepass2john
(C言語版)では、データベースファイルのみを入力としてハッシュを生成するのが一般的です。
一般的な問題とトラブルシューティング 🛠️
問題 | 考えられる原因 | 対処法 |
---|---|---|
keepass2john: command not found |
|
|
Unsupported file encryption! または File version not supported |
|
|
File signature invalid または ファイル破損のエラー |
|
|
John the Ripperで No password hashes loaded |
|
|
Hashcatで Salt-value exception |
|
|
倫理的考察とまとめ ⚖️
keepass2john
とJohn the Ripperは、パスワードリカバリや正当なセキュリティ評価において非常に強力なツールです。しかし、そのパワーは悪用される危険性もはらんでいます。
これらのツールを使用する際は、必ず法と倫理を遵守してください。許可なく他人のデータを解析することは、プライバシーの侵害であり、犯罪行為です。
今回の記事では、以下のステップを解説しました。
- John the Ripper (Jumbo) のインストール。
keepass2john
を使用してKeePassデータベース (.kdbx) からハッシュを抽出する方法。- 抽出したハッシュをJohn the Ripperで解析する基本的な方法(辞書攻撃、マスク攻撃など)。
- キーファイルの基本的な扱い方。
- 一般的な問題と対処法。
パスワードを忘れてしまった場合、これらのツールが最後の手段となることがあります。また、自身のパスワードの強度をテストし、より安全なパスワード管理習慣を身につけるためにも役立ちます。KeePass自体のセキュリティ設定(キー変換回数の増加など)がいかに重要であるかも理解できるでしょう。🔐
繰り返しになりますが、これらの知識とツールは、常に正当な目的のためにのみ使用してください。
参考情報
- John the Ripper 公式サイト: https://www.openwall.com/john/
- John the Ripper (Jumbo) GitHub: https://github.com/openwall/john
- KeePass Password Safe 公式サイト: https://keepass.info/
- KDBX File Format Specification: https://keepass.info/help/kb/kdbx_4.1.html
コメント