KeePassデータベースのパスワード解析:keepass2johnの使い方 🔑

セキュリティツール

現代のデジタル社会では、多くのサービスでアカウントが必要となり、それぞれに異なるパスワードを設定することが推奨されています。これらのパスワードを安全に管理するために、KeePassのようなパスワードマネージャーが広く利用されています。しかし、万が一マスターパスワードを忘れてしまった場合や、セキュリティ監査の一環としてパスワード強度をテストしたい場合、どのように対処すればよいでしょうか? 🤔

ここで登場するのが、John the Ripperという強力なパスワードクラッキングツール群に含まれるkeepass2johnユーティリティです。この記事では、keepass2johnを使用してKeePassデータベース(.kdbxファイル)からパスワードハッシュを抽出し、John the Ripperで解析する方法について詳しく解説します。

⚠️ 倫理的な注意

この記事で紹介するツールや技術は、自分が所有する、または明示的な許可を得たKeePassデータベースに対してのみ使用してください。他人のデータベースに対して不正にアクセスしたり、パスワードを解析したりする行為は、法律で固く禁じられており、重大な結果を招く可能性があります。常に倫理的な観点を持ち、責任ある行動を心がけてください。

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リポジトリからダウンロードできます。

ダウンロードしたアーカイブを展開し、runディレクトリにあるjohn.exekeepass2john.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というファイルにリダイレクト(保存)します。

❗ 重要: KDBXバージョンとサポート状況

KeePassはデータベースフォーマット(KDBX)をバージョンアップしてきました。keepass2johnはKDBX v3.1やそれ以前のフォーマットをサポートしていますが、最新のKDBX v4.xフォーマットには対応していない可能性があります(特に新しいキー派生関数Argon2d/Argon2idが使用されている場合)。

もしkeepass2johnが「Unsupported file encryption!」や「File version not supported」のようなエラーを出力する場合、そのKDBXファイルのバージョンや設定が現在のkeepass2johnでは扱えない可能性があります。最新のJohn the Ripper (Jumbo) バージョンを試すか、別のツール(Hashcatなど、対応状況を確認する必要あり)を検討する必要があるかもしれません。

2024年1月頃の報告では、KDBX v4のハッシュ抽出に失敗するケースが確認されています。

また、KeePassの設定でキー変換の反復回数を非常に高く設定している場合(例えば「1秒遅延」設定など)、ハッシュ抽出は可能でも、その後のパスワード解析には膨大な時間がかかることになります。これは意図されたセキュリティ機能です。

ハッシュ形式の理解

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
💡 ヒント: John the Ripperには非常に多くのオプションがあります。john --helpで基本的なオプション一覧を、より詳細な情報は公式ドキュメント(OPTIONS, MODES, EXAMPLES)で確認できます。GPUを利用した高速化(OpenCL経由)も可能ですが、設定が必要です。

キーファイルの扱い 🔑

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
  • John the Ripper (Jumbo) が正しくインストールされていない。
  • keepass2johnがPATH環境変数に含まれるディレクトリにない。
  • インストールしたが、実行ファイル名が異なる(例: johnへのシンボリックリンク)。
  • John the Ripper (Jumbo) を再インストールする。
  • keepass2johnのフルパスを指定して実行する(例: /usr/share/john/keepass2john MyDatabase.kdbx)。
  • sudo apt install john などでインストールしたか確認する。
  • 管理者権限(sudo)で実行してみる。
Unsupported file encryption! または File version not supported
  • KeePassデータベースが新しいKDBXフォーマット (v4.x) で、keepass2johnが対応していない。
  • KeePassデータベースが非標準またはkeepass2johnが未対応の暗号化アルゴリズム(例: Argon2)を使用している。
  • 最新のJohn the Ripper (Jumbo) bleeding-jumboバージョンを試す。
  • KeePassデータベースの設定(暗号化アルゴリズム、キー派生関数)を確認する。
  • Hashcatなど、他のツールが対応しているか確認する (Hashcat mode 13400)。
  • オンラインの変換サービス(例: keepass2john.com など、セキュリティリスクを理解した上で)を検討する(非推奨)。
File signature invalid または ファイル破損のエラー
  • KeePassデータベースファイルが破損している。
  • ファイル転送中にデータが壊れた。
  • ファイルがKeePassデータベースファイルではない。
  • ファイルのバックアップがあれば、それを使用する。
  • ファイルを再度ダウンロードまたはコピーする。
  • file MyDatabase.kdbx コマンドなどでファイルタイプを確認する。
John the Ripperで No password hashes loaded
  • ハッシュファイルが空、または形式が間違っている。
  • keepass2johnの出力からデータベースファイル名部分(例: MyDatabase.kdbx:)を削除していない。
  • JohnがKeePass形式 ($keepass$) を認識できていない(Jumbo版でない可能性がある)。
  • ハッシュファイル内の改行などが原因で正しく読み込めていない。
  • ハッシュファイルの内容を確認し、$keepass$*...で始まっているか確認する。
  • ハッシュ文字列の先頭にあるファイル名とコロン(:)を削除する。
  • John the Ripper (Jumbo) がインストールされているか確認する。
  • john --list=formats | grep -i keepass でKeePass形式がサポートされているか確認する。
  • テキストエディタでハッシュファイルを開き、不要な改行や文字コードの問題がないか確認する(UTF-8推奨)。
Hashcatで Salt-value exception
  • ハッシュファイルのエンコーディングがHashcatの期待するものと異なる(例: UTF-8 BOM付き)。
  • ハッシュのフォーマットが不正(ファイル名部分が残っている、不要な改行など)。
  • テキストエディタ(Notepad++など)でハッシュファイルを開き、エンコーディングをUTF-8(BOMなし)に変換して保存する。
  • ハッシュ文字列の先頭にあるファイル名とコロン(:)を削除する。
  • ハッシュファイルに余計な文字や改行が含まれていないか確認する。

倫理的考察とまとめ ⚖️

keepass2johnとJohn the Ripperは、パスワードリカバリや正当なセキュリティ評価において非常に強力なツールです。しかし、そのパワーは悪用される危険性もはらんでいます。

これらのツールを使用する際は、必ず法と倫理を遵守してください。許可なく他人のデータを解析することは、プライバシーの侵害であり、犯罪行為です。

今回の記事では、以下のステップを解説しました。

  1. John the Ripper (Jumbo) のインストール。
  2. keepass2johnを使用してKeePassデータベース (.kdbx) からハッシュを抽出する方法。
  3. 抽出したハッシュをJohn the Ripperで解析する基本的な方法(辞書攻撃、マスク攻撃など)。
  4. キーファイルの基本的な扱い方。
  5. 一般的な問題と対処法。

パスワードを忘れてしまった場合、これらのツールが最後の手段となることがあります。また、自身のパスワードの強度をテストし、より安全なパスワード管理習慣を身につけるためにも役立ちます。KeePass自体のセキュリティ設定(キー変換回数の増加など)がいかに重要であるかも理解できるでしょう。🔐

繰り返しになりますが、これらの知識とツールは、常に正当な目的のためにのみ使用してください。

参考情報

コメント

タイトルとURLをコピーしました