enpass2john の使い方:Enpass パスワードマネージャーのハッシュを解析する 🕵️‍♂️

はじめに

デジタル社会において、パスワード管理は非常に重要です。多くの人がパスワードマネージャーを利用して、複雑でユニークなパスワードを安全に管理しています。Enpass は人気のあるパスワードマネージャーの一つですが、万が一マスターパスワードを忘れてしまった場合や、セキュリティ監査の一環としてパスワード強度を評価する必要がある場合、どのように対応すれば良いでしょうか? 🤔

ここで登場するのが enpass2john です。これは、有名なパスワードクラッキングツール John the Ripper (JtR) スイートに含まれるユーティリティスクリプトで、Enpass のデータベースファイルからパスワードハッシュ情報を抽出するために使用されます。抽出されたハッシュ情報は、John the Ripper を使って解析(クラッキング)することができます。

⚠️ 注意: パスワードクラッキングツールの使用は、法的な許可と倫理的な配慮が必要です。自分自身のアカウントや、明示的な許可を得たシステムに対してのみ使用してください。不正アクセスや許可のないパスワード解析は法律で禁止されています。

この記事では、enpass2john の基本的な使い方、オプション、そして実際の使用例について、ステップバイステップで詳しく解説していきます。この記事を通して、enpass2john を正しく理解し、必要な場面で活用できるようになることを目指します。

John the Ripper と enpass2john とは?

John the Ripper (JtR)

John the Ripper(通称 John または JtR)は、1996年に Openwall Project によって開発された、非常に強力で広く使われているオープンソースのパスワードクラッキングツールです。当初は Unix システムの弱いパスワードを検出する目的で開発されましたが、現在では非常に多くのプラットフォーム (Unix系OS、Windows、macOS など) とパスワードハッシュ形式に対応しています。

JtR は主に以下の目的で使用されます:

  • システム管理者がユーザーの弱いパスワードを検出し、セキュリティを強化するため。
  • ペネトレーションテストやセキュリティ監査で、システムのパスワード強度を評価するため。
  • 忘れてしまったパスワードを回復するため(適切な権限がある場合)。

JtR は、辞書攻撃、ブルートフォース攻撃(総当たり攻撃)、インクリメンタルモード(文字の組み合わせを試す)、シングルクラックモード(ユーザー情報などを利用)など、複数の攻撃モードを組み合わせて効率的にパスワードを解析します。

enpass2john

enpass2john は、John the Ripper スイートに含まれる Python スクリプト (.py) です。その主な役割は、Enpass パスワードマネージャーがデータを保存するために使用するデータベースファイル (通常は vault.enpassdb という名前) を読み込み、マスターパスワードの検証に使われるハッシュデータを抽出することです。

Enpass は、保管庫 (Vault) のデータを保護するために、マスターパスワードから派生したキーを用いて AES-256 ビット暗号化を使用しています。具体的には、PBKDF2-HMAC-SHA512 という鍵導出関数を多数の反復回数(例えば 320,000 回)で実行し、暗号化キーを生成します。Enpass は内部的に SQLCipher という技術を使って SQLite データベース全体を暗号化しています。

enpass2john は、この vault.enpassdb ファイルから、SQLCipher がパスワード検証に使う形式のハッシュデータ(ソルトや PBKDF2 のパラメータなどを含む)を、John the Ripper が理解できるフォーマットに変換して出力します。この出力されたハッシュ文字列があれば、John the Ripper 本体を使ってマスターパスワードのクラッキング試行が可能になります。

まとめると、enpass2john は John the Ripper が Enpass のパスワードを解析するための「橋渡し」をするツールと言えます。🌉

インストールと準備

John the Ripper のインストール

enpass2john は John the Ripper の一部として提供されるため、まず John the Ripper をインストールする必要があります。多くの Linux ディストリビューションでは、パッケージマネージャーを通じて簡単にインストールできます。

Debian / Ubuntu / Kali Linux の場合:

sudo apt update
sudo apt install john

これにより、john 本体と、*2john 系スクリプト (enpass2john を含む) が含まれる john-data パッケージなどがインストールされます。

Fedora / CentOS / RHEL の場合:

sudo dnf install john
または
sudo yum install john

macOS の場合 (Homebrew を使用):

brew install john

ソースからビルドする場合:

最新版や特定の機能が必要な場合は、John the Ripper の GitHub リポジトリ からソースコードをクローンしてビルドすることもできます。

git clone https://github.com/openwall/john.git
cd john/src
./configure && make -s clean && make -sj4

ビルド後、実行ファイルは john/run/ ディレクトリ内に生成されます。

enpass2john スクリプトの場所

enpass2john スクリプトは、John the Ripper のインストールディレクトリ内の run ディレクトリ、またはディストリビューションによっては /usr/share/john//usr/lib/john/ のような場所にある *2john スクリプト群の中に含まれています。

通常、John the Ripper をパッケージマネージャーからインストールした場合、enpass2john.py (または単に enpass2john) コマンドが PATH に追加され、ターミナルから直接実行できることが多いです。

見つからない場合は、以下のコマンドで探してみてください (環境によってパスは異なります):

find /usr -name "enpass2john.py" 2>/dev/null
# または John の run ディレクトリ内で
ls ../run/enpass2john.py

Enpass データベースファイルの準備

解析対象となる Enpass のデータベースファイル (vault.enpassdb) を準備する必要があります。このファイルは通常、Enpass のデータが保存されているフォルダ内にあります。場所は OS や設定によって異なりますが、一般的には以下の場所周辺にあります:

  • Windows: C:\Users\<ユーザー名>\Documents\Enpass\
  • macOS: ~/Documents/Enpass/ または iCloud Drive など同期設定した場所
  • Linux: ~/Documents/Enpass/

クラウド同期 (Dropbox, Google Drive, OneDrive など) を使用している場合、同期フォルダ内に vault.enpassdb ファイルが存在します。

ℹ️ Enpass 6 以降、vault.json というファイルも同じディレクトリに存在することがあります。これは同期情報などを含む平文の JSON ファイルですが、暗号化されたデータ本体は vault.enpassdb (SQLCipher データベース) に格納されています。enpass2john が必要とするのは vault.enpassdb の方です。

準備ができたら、次のステップに進みましょう! 🚀

enpass2john の基本的な使い方

enpass2john の使い方は非常にシンプルです。基本的なコマンド構文は以下のようになります。

enpass2john.py [Enpassデータベースファイル] > [出力ファイル名]

または、John the Ripper の run ディレクトリから直接実行する場合:

python /path/to/john/run/enpass2john.py [Enpassデータベースファイル] > [出力ファイル名]

または、PATH が通っている場合:

enpass2john [Enpassデータベースファイル] > [出力ファイル名]

ステップ・バイ・ステップ

  1. Enpass データベースファイルの特定:

    まず、解析したい Enpass の vault.enpassdb ファイルを見つけ、そのパスを確認します。ここでは例として ~/Documents/Enpass/vault.enpassdb とします。

  2. enpass2john の実行:

    ターミナルを開き、以下のコマンドを実行します。出力ファイル名は何でも構いませんが、わかりやすい名前(例: enpass_hash.txt)をつけましょう。

    enpass2john.py ~/Documents/Enpass/vault.enpassdb > enpass_hash.txt

    (もし enpass2john.py ではなく enpass2john という名前で PATH が通っている場合は、enpass2john ~/Documents/Enpass/vault.enpassdb > enpass_hash.txt のように実行します。)

    エラーが出ずにコマンドが完了すれば、カレントディレクトリに enpass_hash.txt というファイルが生成されているはずです。

  3. 出力内容の確認 (任意):

    生成された enpass_hash.txt ファイルの中身を確認してみましょう。

    cat enpass_hash.txt

    以下のような形式の文字列が出力されているはずです (実際の値は異なります):

    vault.enpassdb:$enpass$*0*16*b1a2c3d4e5f6a7b8c9d0e1f2a3b4c5d6*320000*...(長いハッシュデータ)...

    この文字列は、John the Ripper が Enpass のハッシュ形式 ($enpass$) を認識し、解析するために必要な情報(バージョン、ソルト長、ソルト、反復回数、ハッシュ本体など)を含んでいます。ファイル名 (vault.enpassdb: の部分) も含まれることがあります。

  4. John the Ripper での解析:

    抽出したハッシュファイル (enpass_hash.txt) を使って、John the Ripper でパスワード解析を開始します。最も簡単な方法は、John に解析モードを自動で選択させることです。

    john enpass_hash.txt

    John はまずシングルクラックモードを試み、次にデフォルトの辞書 (password.lst) を使った辞書攻撃、最後にインクリメンタルモード(総当たり)へと移行します。

    特定の辞書ファイルを使いたい場合は --wordlist オプションを使用します。

    john --wordlist=/path/to/your/dictionary.txt enpass_hash.txt

    もし John が自動でフォーマットを認識しない場合は、--format=enpass オプションで明示的に指定できます。

    john --format=enpass enpass_hash.txt
  5. 結果の確認:

    John がパスワードを見つけると、ターミナルに表示されます。解析が完了または中断された後、見つかったパスワードは --show オプションで確認できます。

    john --show enpass_hash.txt

    以下のように表示されます(例):

    vault.enpassdb:CorrectPassword123: ... (その他の情報) ...
    
    1 password hash cracked, 0 left

    見つかったパスワード (CorrectPassword123 の部分) が表示されます。

これが enpass2john を使った基本的なワークフローです。非常にシンプルですね! 😊

enpass2john のオプション (もしあれば)

多くの *2john スクリプトは、特定のオプションを持たず、入力ファイルを受け取って標準出力にハッシュを出力するだけのシンプルな設計になっています。

現在のところ、enpass2john.py スクリプト自体には、特別なコマンドラインオプションは提供されていないようです。主な機能は Enpass データベースファイルを受け取り、John the Ripper が解釈可能なハッシュ形式に変換することに特化しています。

スクリプトのヘルプを確認するには、-h--help を試すことができますが、多くの場合、基本的な使用法のみが表示されるか、何も表示されない可能性があります。

enpass2john.py --help

もし将来的にオプションが追加される可能性もゼロではありませんが、基本的な使用法は上記で説明した通り、引数にデータベースファイル名を指定する形が主となります。

💡 Tips: オプションがないということは、使い方が非常に簡単であるとも言えます。入力ファイルを指定し、出力をリダイレクトする、という基本操作を覚えておけば十分です。

実践的な例とシナリオ

シナリオ1: マスターパスワードを忘れた場合 (自己責任)

Enpass のマスターパスワードをどうしても思い出せない… 😭 そんな時、最後の手段として JtR を試すことができます (ただし、成功する保証はありません)。

  1. ハッシュ抽出:
    enpass2john.py /path/to/your/vault.enpassdb > my_enpass_hash.txt
  2. 心当たりのあるパスワードリストを作成:

    自分が使いそうなパスワードのパターン、昔使っていたパスワード、関連する単語などをリスト (my_guesses.txt) にまとめます。

    # my_guesses.txt の例
    Password123
    MySecretPa$$
    favoritePetName2024
    ...
  3. 辞書攻撃を実行:
    john --wordlist=my_guesses.txt my_enpass_hash.txt
  4. John のルールを使って単語を変化させる:

    単純な単語だけでなく、数字をつけたり、大文字小文字を変えたりしたパターンも試したい場合は、--rules オプションを使います。

    john --wordlist=my_guesses.txt --rules my_enpass_hash.txt
  5. 結果確認:
    john --show my_enpass_hash.txt

複雑なパスワードの場合、この方法で見つけるのは非常に困難または時間がかかる可能性があります。

シナリオ2: セキュリティ監査でのパスワード強度評価 (許可が必要)

組織内で Enpass が使用されており、従業員が設定しているマスターパスワードの強度を監査する必要がある場合 (必ず事前に適切な許可と承認を得てください)。

  1. 対象のデータベースファイルを取得:

    監査対象の vault.enpassdb ファイルを入手します。

  2. ハッシュ抽出:
    enpass2john.py /path/to/target/vault.enpassdb > audit_hash.txt
  3. 一般的な辞書や組織に関連する単語リストで攻撃:

    よく使われるパスワードリスト (common_passwords.txt) や、会社名、製品名などを含むカスタム辞書 (company_words.txt) を使って試します。

    john --wordlist=common_passwords.txt audit_hash.txt
    john --wordlist=company_words.txt --rules audit_hash.txt
  4. 一定時間ブルートフォースを実行:

    短い単純なパスワードが使われていないか、短時間 (--max-run-time オプションで秒数を指定) のブルートフォース攻撃を試みます。

    john --incremental --max-run-time=3600 audit_hash.txt # 1時間試行
  5. 結果の分析と報告:
    john --show audit_hash.txt

    もし短時間でクラックされるパスワードが見つかった場合、それは強度が低いと判断できます。結果を分析し、パスワードポリシーの強化や従業員への注意喚起などの対策を検討します。

🚨 重要: 監査目的であっても、他人のパスワードをクラックする行為はプライバシーに関わる重大な問題です。必ず組織の正式な手続きと承認、法的な枠組みの中で実施してください。

Keyfile を使用している場合

Enpass では、マスターパスワードに加えて Keyfile を zweite 要素認証として設定できます。Keyfile は、マスターパスワードと組み合わせて保管庫の暗号化キーを生成するために使われます。

現在の enpass2john および John the Ripper の Enpass フォーマット (enpass_fmt_plug.c) の実装を見ると、Keyfile を直接扱ってハッシュを抽出・解析する機能は標準では提供されていないようです。Enpass のドキュメントによると、Keyfile が使用される場合、マスターパスワードと Keyfile の両方から Vault Key が派生されます。

このため、Keyfile を使用している Enpass の保管庫に対して enpass2john を実行しても、抽出されるハッシュはマスターパスワードのみに基づいたものとは異なる(あるいは正しく抽出できない)可能性が高いです。Keyfile を使った Enpass Vault のパスワード回復や監査は、標準的な JtR の機能だけでは困難であると考えられます。特別なツールや手法が必要になるかもしれません。

トラブルシューティングと注意点

よくある問題と解決策

問題 原因の可能性 解決策・確認事項
enpass2john.py: command not found John the Ripper が正しくインストールされていない、または PATH が通っていない。
  • John the Ripper のインストールを確認する (sudo apt install john など)。
  • スクリプトのフルパスを指定して実行する (例: python /usr/share/john/enpass2john.py ...)。
  • John の run ディレクトリに移動して実行する (cd /path/to/john/run; python ./enpass2john.py ...)。
スクリプト実行時にエラーが出る (Python関連のエラーなど) Python のバージョン依存関係、必要なライブラリ不足、スクリプト自体のバグ (稀)。Enpass のデータベース形式が新しくなり、スクリプトが対応していない。
  • John the Ripper を最新版にアップデートしてみる。
  • 別の Python 環境 (venv など) で試す。
  • John the Ripper の Issue トラッカーで同様の問題が報告されていないか確認する。
  • Enpass のバージョンと JtR のバージョンを確認する。古い JtR は新しい Enpass 形式に対応できない可能性がある。
ハッシュは抽出できたが、John がクラックできない (正しいパスワードを辞書に入れても)
  • enpass2john が対象の Enpass バージョン/形式に正しく対応していない。
  • Keyfile が使用されている。
  • 入力したパスワードが実際には間違っている。
  • John がハッシュ形式を誤認識している (可能性は低い)。
  • John the Ripper を最新版にアップデートする。
  • Keyfile を使用していないか確認する。
  • パスワードを再確認する (大文字小文字、記号など)。
  • --format=enpass オプションを明示的に指定してみる。
  • テスト用に簡単なパスワードで新しい Enpass Vault を作成し、それで enpass2johnjohn が正しく動作するか試す。
John の実行が非常に遅い Enpass は PBKDF2 の反復回数が非常に多い (例: 320,000回) ため、ハッシュ計算に時間がかかるのが正常。
  • 高性能な CPU や GPU (対応していれば) を使用する。
  • 辞書を絞り込む、ルールを最適化するなど、試行回数を減らす工夫をする。
  • 時間制限 (--max-run-time) を設けて、現実的な範囲で解析を行う。
  • これは仕様であり、セキュリティが高いことの裏返しでもあると理解する 💪。

重要な注意点

  • 法的・倫理的側面: 何度も強調しますが、enpass2john や John the Ripper の使用は、自分自身のデータ回復や、明確な許可を得たセキュリティテストに限定してください。不正な目的での使用は絶対に避けてください。
  • Enpass のバージョン: Enpass はアップデートにより内部構造や暗号化方式を変更する可能性があります。enpass2john が常に最新の Enpass バージョンに対応しているとは限りません。問題が発生した場合は、JtR のコミュニティや Issue トラッカーで情報を確認することが重要です。
  • Keyfile の影響: 前述の通り、Keyfile を使用している場合、標準の enpass2john では対応できない可能性が高いです。
  • 計算コスト: Enpass のマスターパスワードのハッシュ計算は意図的に高コストに設計されています。総当たり攻撃や大規模な辞書攻撃には相当な時間と計算リソースが必要です。
  • データのバックアップ: パスワード回復を試みる前に、念のため vault.enpassdb ファイルのバックアップを取っておくことを推奨します。

まとめ

enpass2john は、John the Ripper スイートの一部として、Enpass パスワードマネージャーの保管庫 (vault.enpassdb) からパスワードハッシュを抽出し、JtR で解析可能な形式に変換するための便利なツールです。

この記事では、以下の点について解説しました:

  • enpass2john と John the Ripper の概要
  • インストール方法と準備
  • 基本的な使い方 (ハッシュ抽出から JtR での解析まで)
  • オプション (現時点では特になし)
  • 実践的なシナリオ (パスワード忘れ、セキュリティ監査)
  • トラブルシューティングと重要な注意点 (法的側面、Keyfile、計算コストなど)

enpass2john の使い方は比較的簡単ですが、その背景にあるパスワードクラッキングの技術や、Enpass のセキュリティ実装 (高反復回数の PBKDF2) を理解することが重要です。また、ツールを使用する際は、常に法的な許可と倫理的な配慮を忘れないでください。

パスワード管理はセキュリティの基本です。強力なマスターパスワードを設定し、適切に管理することが、Enpass のようなツールを安全に利用するための鍵となります 🔑。

この記事が enpass2john の理解と適切な活用の一助となれば幸いです。Happy (ethical) hacking! 😉

参考情報

より詳細な情報や最新情報については、以下のリソースを参照してください。