enpass5tojohn を使って Enpass 5 のマスターパスワードを解析する方法 🔐

セキュリティツール

はじめに:enpass5tojohn とは? 🤔

パスワード管理ツール Enpass は、多くのユーザーにとって重要な認証情報を安全に保管する手段を提供しています。しかし、万が一マスターパスワードを忘れてしまった場合、保管されている情報へのアクセスが困難になります。そのような状況や、セキュリティ監査の一環としてパスワードの強度をテストする必要がある場合に役立つツールの一つが enpass5tojohn です。

enpass5tojohn は、著名なパスワードクラッキングツールである John the Ripper (JtR) スイートに含まれるPythonスクリプトです。このスクリプトの主な目的は、Enpass バージョン 5 のデータベースファイル(通常は vault.db または sync_default.walletx という名前)から、マスターパスワードのハッシュ情報を抽出し、John the Ripper が解析できる形式に変換することです。

抽出されたハッシュは、特定のフォーマット($enpass$*5*... という形式)を持ちます。このハッシュに対して John the Ripper を用いることで、総当たり攻撃(ブルートフォースアタック)、辞書攻撃、ルールベース攻撃など、様々な手法を駆使して元のマスターパスワードの特定を試みることができます。

⚠️ 重要:Enpass 6 以降について
enpass5tojohn は、その名前が示す通り Enpass 5 系専用のツールです。Enpass はバージョン 6 でデータベースの暗号化方式やフォーマットを大幅に変更しました(SQLCipher から PBKDF2-HMAC-SHA512 と AES-256-GCM を利用する独自形式へ)。そのため、Enpass 6 以降のデータベースファイルに対して enpass5tojohn を使用することはできません。Enpass 6 以降のパスワード解析には、別のツールや手法(例: enpass2john.py スクリプトなど、より新しいバージョンのJohn the Ripperに含まれている可能性があります)が必要になります。常に最新の John the Ripper のドキュメントやコミュニティ情報を確認してください。
🚨 倫理的な利用について
このツールは、自分が所有するアカウントのパスワードを忘れてしまった場合や、明示的な許可を得た上でのセキュリティテストにのみ使用してください。他人の Enpass データベースに対して不正にパスワード解析を行うことは、プライバシーの侵害であり、法的に罰せられる可能性があります。ツールの使用は自己責任で行ってください。

準備:必要なもの 🛠️

enpass5tojohn を使用して Enpass 5 のパスワード解析を行うには、いくつかの準備が必要です。

enpass5tojohn は John the Ripper (JtR) の一部として提供されています。したがって、まず JtR をシステムにインストールする必要があります。JtR は多くの Linux ディストリビューションのパッケージマネージャからインストールできます。

Debian / Ubuntu 系の場合:

sudo apt update
sudo apt install john

Fedora / RHEL 系の場合:

sudo dnf update
sudo dnf install john

macOS の場合 (Homebrew を使用):

brew update
brew install john

あるいは、John the Ripper 公式サイトからソースコードをダウンロードし、自分でコンパイルすることも可能です。最新版やコミュニティ版 (Jumbo John) を利用したい場合は、ソースからのビルドが推奨されることもあります。コミュニティ版は、より多くのハッシュ形式や最適化されたコードを含んでいることが多いです。

JtR をインストールすると、通常 enpass5tojohn (または enpass5tojohn.py) スクリプトは JtR の実行ファイルと同じディレクトリ、あるいは /usr/share/john//opt/john/run/ といった補助スクリプトが置かれるディレクトリに含まれます。多くの場合、run という名前のサブディレクトリ内にあります。

以下のコマンドで場所を探すことができます(環境によってパスは異なります):

find /usr -name enpass5tojohn.py 2>/dev/null
find /opt -name enpass5tojohn.py 2>/dev/null
# または JtR のインストールディレクトリ内で探す
cd /path/to/john/run
ls enpass*

見つからない場合は、John the Ripper (できれば Jumbo John) の最新版ソースコードを GitHub などから取得し、run ディレクトリを確認してください。

enpass5tojohn は Python スクリプトであるため、Python 実行環境が必要です。通常、Python 2.7 または Python 3.x が必要となります。現代的なシステムでは Python 3 が標準でインストールされていることが多いですが、スクリプトが特定のバージョンを要求する場合もあります。

バージョンを確認するには:

python --version
python3 --version

もしスクリプト実行時にエラーが出る場合は、スクリプトの先頭行(シバン: #!/usr/bin/env python など)を確認し、適切な Python バージョンで実行してみてください。

python /path/to/enpass5tojohn.py --help
python3 /path/to/enpass5tojohn.py --help

最も重要なのが、解析対象となる Enpass 5 のデータベースファイルです。このファイルは通常、以下のいずれかの名前と場所にあります。

  • vault.db: Enpass 5 のローカルストレージに保存される際の標準的なファイル名。
  • sync_default.walletx: クラウド同期(Dropbox, Google Driveなど)を使用している場合に生成されることがあるファイル名。実体は SQLite データベースです。

これらのファイルの場所は、お使いのオペレーティングシステムや同期設定によって異なります。

OS 一般的な場所の例
Windows C:\Users\<ユーザー名>\Documents\Enpass や同期フォルダ内
macOS ~/Documents/Enpass や同期フォルダ内
Linux ~/Enpass や同期フォルダ内

クラウドストレージ(Dropbox, Google Drive, OneDrive など)と同期している場合は、その同期フォルダ内にファイルが存在する可能性が高いです。正確な場所が不明な場合は、Enpass 5 の設定画面を確認するか、システム全体でファイル名を検索してみてください。

解析を行う前に、必ずデータベースファイルのバックアップを取得してください。万が一、操作ミスでファイルを破損させてしまうリスクに備えるためです。

enpass5tojohn の使い方:ハッシュの抽出 🔑

準備が整ったら、いよいよ enpass5tojohn スクリプトを使って Enpass 5 データベースファイルからパスワードハッシュを抽出します。

enpass5tojohn の基本的な使い方は非常にシンプルです。Python インタープリタ経由でスクリプトを実行し、引数として Enpass 5 のデータベースファイルへのパスを指定します。

python /path/to/enpass5tojohn.py /path/to/your/vault.db

または

python3 /path/to/enpass5tojohn.py /path/to/your/sync_default.walletx

スクリプトのパスや Python のバージョンは、ご自身の環境に合わせて適宜変更してください。John the Ripper の run ディレクトリにいる場合は、相対パスで指定できることもあります。

cd /path/to/john/run
python enpass5tojohn.py /path/to/your/vault.db

例えば、カレントディレクトリに vault.db がある場合、以下のように実行します。

python ../run/enpass5tojohn.py vault.db

成功すると、以下のような形式の文字列が標準出力に表示されます。これが John the Ripper で解析可能なハッシュ形式です。

vault.db:$enpass$*5*1000*88*f8a2b4c6d8...e3f1*88*a1b2c3d4e5...f0a9

この出力形式について少し解説します。

  • vault.db: : 元のファイル名(またはユーザー名として扱われる部分)。John the Ripper がどのハッシュがどのファイル由来かを示すために使います。
  • $enpass$ : ハッシュの種類を示す識別子。John the Ripper はこれを見て Enpass 5 のハッシュだと認識します。
  • *5* : Enpass のバージョン番号(この場合は 5)。
  • 1000* : パスワード導出関数(PBKDF2)のイテレーション回数(反復処理の回数)。この数値が大きいほど、パスワードの検証に時間がかかり、総当たり攻撃に対する耐性が高まります。
  • 88* : 最初のソルト(Salt)の長さ(バイト単位)。ソルトはパスワードハッシュ化の際に加えるランダムなデータで、同じパスワードでも異なるハッシュ値を生成させ、レインボーテーブル攻撃などを防ぎます。
  • f8a2b4c6d8...e3f1 : 最初のソルト(16進数表記)。
  • *88* : 検証用データの長さ(バイト単位)。
  • a1b2c3d4e5...f0a9 : パスワードが正しいか検証するための暗号化されたデータ(16進数表記)。

このハッシュ文字列は、マスターパスワードそのものではなく、マスターパスワードが正しいかどうかを検証するために必要な情報(暗号化方式、イテレーション回数、ソルト、検証用データ)を含んでいます。John the Ripper は、様々なパスワード候補をこの情報に基づいて処理し、検証用データと一致するかどうかを確認することで、正しいパスワードを探し出します。

John the Ripper で解析を行うためには、抽出したハッシュをテキストファイルに保存するのが一般的です。リダイレクション(>)を使って簡単に行えます。

python /path/to/enpass5tojohn.py /path/to/your/vault.db > enpass_hash.txt

これで、enpass_hash.txt というファイルに上記のハッシュ文字列が保存されます。ファイル名は任意で構いません。複数のデータベースからハッシュを抽出する場合は、追記(>>)を使うこともできます。

python /path/to/enpass5tojohn.py vault1.db > all_enpass_hashes.txt
python /path/to/enpass5tojohn.py vault2.db >> all_enpass_hashes.txt

ファイルに保存しておけば、John the Ripper で繰り返し解析を試す際に便利です。

💡 ヒント
スクリプトがうまく動作しない場合、エラーメッセージをよく読んでください。Python のバージョンが違う、必要なライブラリ(例えば SQLite 関連)が不足している、データベースファイルが破損している、または Enpass 5 のものではない(バージョン 6 以降)などの原因が考えられます。

John the Ripper でのパスワード解析 🔓

enpass5tojohn でハッシュを抽出し、ファイル(例: enpass_hash.txt)に保存したら、次はいよいよ John the Ripper を使って実際のパスワード解析を行います。John the Ripper は非常に多機能なツールであり、様々なモードやオプションがあります。ここでは基本的な使い方と代表的な攻撃方法を紹介します。

最もシンプルな使い方は、JtR の実行ファイルにハッシュファイル名を渡すだけです。

john enpass_hash.txt

これを実行すると、JtR はまずデフォルトのモード(シングルクラックモード)で解析を試みます。このモードでは、ハッシュファイルに含まれるユーザー名(今回の場合はファイル名 vault.db)や、一般的なパスワードの変形ルールを試します。その後、設定によってはインクリメンタルモード(文字を組み合わせる総当たりに近いモード)に移行します。

解析には時間がかかることがあります。特にマスターパスワードが長く複雑な場合は、数時間、数日、あるいはそれ以上かかることもあります。処理中は、現在の状況や試行中のパスワード候補が表示されることがあります。

よく使われるパスワードや、特定のテーマに関連する単語を集めた「ワードリスト」(辞書ファイル)を使って攻撃を行う方法です。強力なワードリスト(例: RockYou リストなど)を使用すると、比較的単純なパスワードであれば短時間で見つけられる可能性があります。

john --wordlist=/path/to/password.lst enpass_hash.txt

/path/to/password.lst の部分には、使用するワードリストファイルへのパスを指定します。password.lst は JtR に付属している基本的なリストですが、より大規模で効果的なリストはインターネット上で見つけることができます(使用には注意が必要です)。

ワードリスト攻撃にルール(--rules オプション)を組み合わせることで、辞書の単語を大文字小文字変換したり、数字や記号を付加したりするなど、より多くのバリエーションを試すことができます。

john --wordlist=/path/to/password.lst --rules=All enpass_hash.txt

特定の文字セット(例: すべての小文字アルファベット、数字を含むすべての印字可能文字など)を指定し、それらの文字の組み合わせを順番に試していくモードです。総当たり攻撃(ブルートフォース)に近いですが、JtR は文字の出現頻度などを考慮して、より効率的に試行します。

john --incremental=Lower enpass_hash.txt  # 小文字のみ
john --incremental=Digits enpass_hash.txt  # 数字のみ
john --incremental=Alnum enpass_hash.txt   # 英数字
john --incremental=All enpass_hash.txt     # すべての印字可能文字

文字セットが大きくなるほど、またパスワード長が長くなるほど、解析に必要な時間は指数関数的に増加します。All モードで長いパスワードを解析するのは現実的でない場合が多いです。

パスワードの構造(長さや使用されている文字種)にある程度の見当がついている場合に非常に有効なモードです。例えば、「大文字1文字 + 小文字5文字 + 数字2桁」のようなパターンを指定して攻撃できます。

# 例: 8文字で、最初の文字が大文字、次が小文字、最後が数字の場合
john --mask='?u?l?l?l?l?l?l?d' enpass_hash.txt
  • ?u : 大文字 (Upper)
  • ?l : 小文字 (Lower)
  • ?d : 数字 (Digit)
  • ?s : 記号 (Symbol)
  • ?a : すべての印字可能文字 (All)

マスクモードの詳細は john --help や JtR のドキュメントで確認できます。非常に強力ですが、効果的なマスクを定義するにはパスワードに関するある程度の推測が必要です。

John the Ripper がパスワードを発見すると、通常はターミナルに表示され、john.pot というファイル(ポットファイル)に記録されます。後から発見したパスワードを確認するには、--show オプションを使用します。

john --show enpass_hash.txt

もしパスワードが見つかっていれば、以下のように表示されます(例)。

vault.db:CorrectPassword123

1 password hash cracked, 0 left

見つかっていない場合は、「0 password hashes cracked」のように表示されます。

解析を中断した場合でも、JtR は進捗状況を保存しており、再度同じコマンドを実行すれば中断したところから再開できます(john.rec ファイルに状態が保存されます)。

🎉 発見!
パスワードが見つかったら、そのパスワードを使って Enpass 5 にログインし、データを復旧してください。そして、より強力で安全な新しいマスターパスワードにすぐに変更することを強くお勧めします。

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

enpass5tojohn と John the Ripper を使用する際には、いくつかの注意点と、発生しうる問題への対処法を知っておくと良いでしょう。

  • Enpass 6 以降では動作しない: 再度強調しますが、enpass5tojohn は Enpass 5 専用です。Enpass 6, 7, 8… といった新しいバージョンのデータベースファイル (vault.json など) にはこのスクリプトは使用できません。無理に使おうとするとエラーになるか、意味のない出力が得られるだけです。新しいバージョン用の enpass2john.py などのツールを探してください。
  • データベースファイルの破損: データベースファイルが何らかの理由で破損している場合、enpass5tojohn はハッシュを正常に抽出できないことがあります。エラーメッセージを確認し、可能であれば別のバックアップファイルや、同期先のクラウドストレージからファイルを再取得してみてください。
  • Python の依存関係: enpass5tojohn は内部で SQLite データベースを扱います。Python の環境によっては SQLite 関連のライブラリが不足している場合があります。ImportError: No module named sqlite3 のようなエラーが出た場合は、python-sqlite3 やそれに相当するパッケージをインストールする必要があるかもしれません。
    # Debian/Ubuntu例
    sudo apt install python3-sqlite3
  • JtR のフォーマット認識エラー: John the Ripper が抽出したハッシュ形式 ($enpass$*5*...) を正しく認識できない場合、「No password hashes loaded」のようなメッセージが出ることがあります。これは、使用している JtR のバージョンが古いか、Enpass 5 形式に対応していないビルドである可能性があります。最新の Jumbo John を使用することで解決することが多いです。
  • 解析にかかる時間: マスターパスワードの複雑さ(長さ、文字種)と PBKDF2 のイテレーション回数、そして使用するコンピュータの CPU パワーによって、解析にかかる時間は大きく変動します。特にイテレーション回数が多い場合(Enpass 5 では 1000 回がデフォルトのようですが、設定で変更されていた可能性もあります)、パスワード候補を一つ試すだけでも時間がかかります。強力な GPU を使った解析に対応している場合もありますが、JtR の設定やビルドに依存します。単純なパスワードでなければ、解析には相当な時間と計算リソースが必要になることを覚悟してください。
  • 倫理と法律: 繰り返しになりますが、自分自身のデータ復旧や、許可を得たペネトレーションテスト以外の目的でこのツールを使用しないでください。不正アクセスは犯罪です。
🚫 データベースファイルの共有には注意
もし解析がうまくいかず、オンラインフォーラムなどで助けを求める場合でも、Enpass のデータベースファイル (.db.walletx) そのものを絶対にアップロードしたり共有したりしないでください。 これらのファイルには暗号化されたパスワード情報などが含まれており、大変危険です。共有するとしても、enpass5tojohn で抽出したハッシュ文字列($enpass$*... の部分)のみに留めるべきですが、それでも第三者に解析の機会を与えることになるため、慎重に行ってください。

まとめとパスワード管理の重要性 ✨

enpass5tojohn は、Enpass 5 のマスターパスワードを忘れてしまった場合や、セキュリティ監査においてパスワード強度を評価する必要がある場合に、John the Ripper と連携してパスワード解析を試みるための有用なツールです。この記事では、その準備からハッシュの抽出、そして John the Ripper を用いた基本的な解析手順までを解説しました。

このプロセスを通じて、パスワードハッシュの仕組みやパスワードクラッキングの基本的な手法に触れることができたかと思います。同時に、パスワード解析がいかに時間と計算能力を要する作業であるか、そしてそれ故に強力でユニークなマスターパスワードを設定することの重要性を再認識させられます。

パスワード管理ツールは非常に便利ですが、そのマスターパスワードは文字通り「すべての鍵」です。以下の点を心がけましょう。

  • 長く複雑なマスターパスワードを設定する: 推測されにくい、十分な長さ(最低でも15文字以上推奨)と、大文字、小文字、数字、記号を組み合わせたパスワードを使用しましょう。
  • 他のサービスで使い回さない: マスターパスワードは Enpass 専用とし、他のウェブサイトやサービスと同じパスワードを使用しないでください。
  • 安全な場所に記録する(オプション): どうしても覚えられない場合は、物理的に安全な場所(例: 金庫など)に紙で記録しておく、信頼できる家族にのみ伝える、などの最終手段も考えられますが、デジタルでの安易な保存は避けましょう。
  • 二要素認証 (2FA) を活用する: Enpass 自体というよりは、Enpass で管理している各アカウントで二要素認証を有効にすることで、万が一パスワードが漏洩した場合の被害を軽減できます。

enpass5tojohn のようなツールは、あくまで最終手段または特定のテスト目的で使用されるべきものです。日頃から適切なパスワード管理を実践することが、最も確実なセキュリティ対策となります。 💪

最後に、ツールの使用は常に倫理的な範囲に留め、法律を遵守することを忘れないでください。

参考情報

コメント

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