Bitwarden のパスワード解析: bitwarden2john の使い方徹底解説 🔑

セキュリティツール

John the Ripper を用いたマスターパスワード強度テスト

はじめに

Bitwarden は、オープンソースで人気の高いパスワードマネージャーです。個人利用からビジネス利用まで幅広く活用されており、堅牢なセキュリティ機能を提供しています。しかし、どんなに強力なツールであっても、その安全性の根幹をなすのはユーザーが設定する「マスターパスワード」です。もしマスターパスワードが脆弱であれば、Bitwarden が提供する暗号化も意味をなさなくなってしまいます。

そこで登場するのが、John the Ripper (JtR) という強力なパスワードクラッキングツールと、その一部である bitwarden2john スクリプトです。bitwarden2john は、Bitwarden の Vault データ (エクスポートされた JSON ファイル) からマスターパスワードの検証に必要な情報(ハッシュ)を抽出し、John the Ripper が解析できる形式に変換する役割を担います。

このブログ記事では、bitwarden2john の使い方をステップバイステップで詳しく解説します。セキュリティ担当者、ペネトレーションテスター、あるいは自身のマスターパスワードの強度に関心のあるユーザーが、許可された環境下でパスワード強度をテストし、セキュリティ意識を高めることを目的としています。

⚠️倫理的な注意点

パスワードクラッキングツールは、許可されたシステムやデータに対してのみ使用してください。他人のアカウントやデータを不正に解析する行為は、法律で固く禁じられています。この記事で紹介する内容は、あくまで自身の管理下にあるデータに対するセキュリティテストや、正当な権限を持つセキュリティ評価の文脈での利用を想定しています。不正利用は絶対にやめてください。

準備するもの

bitwarden2john を使用して Bitwarden のマスターパスワード解析を行うには、以下のものが必要です。

  1. John the Ripper (Jumbo バージョン)

    bitwarden2john は、John the Ripper の “Jumbo” と呼ばれるコミュニティ版に含まれるスクリプトです。通常の John the Ripper ではなく、Jumbo バージョンをインストールする必要があります。Jumbo バージョンは、より多くのハッシュ形式や機能に対応しています。

    インストール方法は OS によって異なります。多くの 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

    あるいは、John the Ripper 公式サイト からソースコードをダウンロードし、自分でコンパイルすることも可能です。コンパイルすることで、最新版を利用できたり、特定の最適化を行ったりできます。

    インストール後、`john` コマンドが利用可能か確認してください。また、`bitwarden2john.py` スクリプトの場所も確認しておくと良いでしょう。通常、John the Ripper のインストールディレクトリ内の `run` ディレクトリにあります (例: `/usr/share/john/`, `/opt/homebrew/share/john/` など)。見つからない場合は、`find / -name bitwarden2john.py 2>/dev/null` のようなコマンドで探すことができます。

  2. Bitwarden のデータファイル (`data.json`)

    bitwarden2john が解析対象とするのは、Bitwarden からエクスポートされた Vault データです。このデータは JSON 形式で出力されます。

    データのエクスポート方法

    Bitwarden の Vault データは、以下のいずれかの方法でエクスポートできます。

    • Web Vault: Bitwarden の Web サイトにログインし、「ツール」メニューから「Vaultをエクスポート」を選択します。
    • デスクトップアプリ: デスクトップアプリを開き、「ファイル」メニュー (またはそれに類するメニュー) から「エクスポート」を選択します。
    • ブラウザ拡張機能: ブラウザ拡張機能の設定画面から「Vaultをエクスポート」機能を探します。

    エクスポート時には、ファイル形式を選択する必要があります。必ず 「.json」 を選択してください。

    エクスポート時の注意点:
    • パスワード保護形式の選択: Bitwarden はエクスポート時に「アカウントパスワードで保護された JSON」と「パスワード保護されていない JSON」の二種類を選べる場合があります (バージョンやクライアントによります)。bitwarden2john は、主にパスワード保護されていない形式の JSON ファイル、あるいは特定の構造を持つ JSON ファイルを処理するように設計されていると考えられます。可能であれば、パスワード保護されていない JSON 形式でエクスポートしてください。ただし、このファイルには Vault 内の全ての情報 (ID、パスワード、メモなど) が平文で含まれるため、取り扱いには最大限の注意が必要です。安全な場所に保管し、解析後は速やかに削除してください。
    • ファイル名: エクスポートされるファイル名は通常 `bitwarden_export_YYYYMMDDHHMMSS.json` のようになりますが、後で使いやすいように `data.json` など、短い名前に変更しておくと良いでしょう。

    エクスポートした `data.json` ファイルは、John the Ripper を実行するマシンにコピーしておきます。

`bitwarden2john` の基本的な使い方 ⚙️

準備が整ったら、いよいよ `bitwarden2john` を使って Bitwarden のデータファイルから John the Ripper が解析できる形式のハッシュを抽出します。

コマンド構文

基本的なコマンド構文は以下の通りです。`bitwarden2john.py` スクリプトのパスは、ご自身の環境に合わせて修正してください。

# Python 3 を明示的に指定する場合 (推奨)
python3 /path/to/john/run/bitwarden2john.py /path/to/your/data.json

# 環境によっては python だけで動作する場合もあります
python /path/to/john/run/bitwarden2john.py /path/to/your/data.json

例えば、John the Ripper が `/usr/share/john/` にインストールされており、エクスポートしたファイルがカレントディレクトリの `data.json` だとすると、以下のようになります。

python3 /usr/share/john/run/bitwarden2john.py data.json

実行例と出力

上記のコマンドを実行すると、標準出力にハッシュ文字列が出力されます。これは John the Ripper が認識できる形式になっています。

出力されるハッシュの例 (実際の値とは異なります):

data.json:$bitwarden$0*...(長い文字列)...

この出力は、以下のような構造をしています。

  • data.json:: 元のファイル名(John the Ripper がどのファイル由来のハッシュかを示すために付与することがあります)。
  • $bitwarden$: ハッシュの種類を示す識別子。John the Ripper はこれを見て、どの解析アルゴリズムを使うべきか判断します。
  • 0*...: 実際のハッシュデータ。これには、マスターパスワードの検証に必要な情報(ソルト、イテレーション回数、暗号化された検証用データなど)が含まれています。Bitwarden の場合、PBKDF2-HMAC-SHA256 のパラメータが含まれることになります。

ハッシュのファイルへの保存

John the Ripper で解析を行うためには、この出力されたハッシュをファイルに保存する必要があります。リダイレクト(>)を使ってファイルに書き込みましょう。

python3 /usr/share/john/run/bitwarden2john.py data.json > bitwarden_hash.txt

これで、`bitwarden_hash.txt` というファイルに、John the Ripper が解析できる形式のハッシュが保存されました。ファイル名は任意ですが、分かりやすい名前をつけておくと良いでしょう。

💡 豆知識: JSON ファイルの内容

エクスポートされた `data.json` ファイルには、アカウント情報、フォルダ、アイテム(ログイン情報、メモ、カード情報など)、そして暗号化に関する情報が含まれています。`bitwarden2john` は、この JSON ファイルの中から `”crypto”` や `”keys”` といったキーに含まれる情報を探し出し、特にマスターパスワードから派生する鍵に関する情報(ソルトやイテレーション回数など)を抽出してハッシュ形式に整形しています。具体的には、PBKDF2 のパラメータなどがターゲットとなります。

John the Ripper によるパスワード解析 💥

`bitwarden_hash.txt` ファイルが準備できたら、いよいよ John the Ripper を使ってマスターパスワードの解析(クラッキング試行)を行います。John the Ripper には様々な攻撃モードがあります。

基本的な解析コマンド

最もシンプルな使い方は、ハッシュファイルを引数として `john` コマンドを実行することです。

john bitwarden_hash.txt

このコマンドを実行すると、John the Ripper はデフォルトのモード(シングルクラックモード、ワードリストモード、インクリメンタルモードを組み合わせたもの)で解析を開始します。CPU パワーを使って様々なパスワード候補を試し、ハッシュと一致するかどうかを検証していきます。

ワードリストを使った攻撃

よく使われるパスワードや、特定のテーマに基づいた単語リスト(ワードリスト)を使って攻撃を試みる方法です。効率的な攻撃手法の一つです。有名なワードリスト `rockyou.txt` を使う場合は以下のようになります。

john --wordlist=/path/to/rockyou.txt bitwarden_hash.txt

/path/to/rockyou.txt の部分は、実際のワードリストファイルのパスに置き換えてください。より強力なカスタムワードリストを作成・利用することも可能です。

インクリメンタルモード

特定の文字セット(数字のみ、英小文字のみ、全文字種など)を使って、短いパスワードから順に全ての組み合わせを試すブルートフォース(総当たり)攻撃に近いモードです。

john --incremental bitwarden_hash.txt

このモードは非常に時間がかかる可能性がありますが、単純なパスワードであれば発見できる可能性があります。

マスクモード

パスワードのパターンがある程度分かっている場合(例: 大文字で始まり、数字で終わる8文字)に、そのパターンに合致する候補のみを生成して試すモードです。より効率的に特定のパターンのパスワードを探索できます。

# 例: 大文字1文字 + 小文字5文字 + 数字2文字 のパターン
john --mask='?u?l?l?l?l?l?d?d' bitwarden_hash.txt

マスクの指定方法については、John the Ripper のドキュメントを参照してください。

解析の進行状況と結果の表示

John the Ripper の実行中は、解析の進行状況が表示されます。Ctrl+C を押すと中断できますが、進捗は自動的に保存されます (`john.rec` ファイル)。再開するには、再度同じ `john` コマンドを実行します。

パスワードが見つかった場合、そのパスワードが表示されます。解析が完了した後や、中断後に見つかったパスワードを確認するには、`–show` オプションを使用します。

john --show bitwarden_hash.txt

このコマンドは、`bitwarden_hash.txt` に対応するクラック済みのパスワードを `john.pot` (Potfile と呼ばれるファイル) から探し出して表示します。

もしマスターパスワードが十分に長く、複雑であれば、John the Ripper を使っても現実的な時間内に解析することは非常に困難です 💪。

応用的な使い方・注意点 🤔

`bitwarden2john` スクリプトの場所

前述の通り、`bitwarden2john.py` は通常 John the Ripper (Jumbo) のインストールディレクトリ内の `run` ディレクトリにあります。

  • Linux (パッケージ管理): `/usr/share/john/run/` や `/usr/lib/john/` など
  • macOS (Homebrew): `/opt/homebrew/share/john/` や `/usr/local/share/john/` など
  • ソースからコンパイル: コンパイルしたディレクトリ内の `run` ディレクトリ

見つからない場合は `find` コマンドなどで検索してください。

sudo find / -name bitwarden2john.py 2>/dev/null

エラー発生時の対処法

  • ファイルが見つからない (FileNotFoundError):
    • `bitwarden2john.py` のパスが正しいか確認してください。
    • 入力ファイル (`data.json`) のパスが正しいか、ファイルが存在するか確認してください。
  • JSON 形式のエラー (JSONDecodeError):
    • エクスポートした `data.json` ファイルが破損していないか確認してください。
    • ファイルが正しい Bitwarden のエクスポート形式(JSON)であるか確認してください。
    • `bitwarden2john` が対応していない形式やバージョンの可能性も考えられます。John the Ripper を最新版にアップデートしてみてください。
  • ハッシュが抽出できない:
    • エクスポートした JSON ファイルに必要な情報(例: `”crypto”`, `”keys”` など)が含まれているか確認してください。パスワード保護された形式などでエクスポートした場合、スクリプトが対応していない可能性があります。保護されていない形式で再度エクスポートしてみてください(ただし、取り扱いには十分注意してください)。
    • `bitwarden2john.py` スクリプト自体に問題がある可能性もゼロではありません。John the Ripper の GitHub リポジトリで Issue が報告されていないか確認したり、スクリプトのコードを読んでみることも有効です。

Bitwarden の暗号化方式と解析の難易度

Bitwarden はマスターパスワードの保護に PBKDF2-HMAC-SHA256 という鍵導出関数を使用しています。これは、元のパスワードにソルト(ランダムな値)を加えて、指定された回数(イテレーション回数)だけハッシュ計算を繰り返すことで、最終的な鍵を生成する方式です。

PBKDF2 の特徴は以下の通りです。

  • ソルト: 同じパスワードでもユーザーごとに異なるハッシュが生成されるため、レインボーテーブルなどの事前計算による攻撃が困難になります。
  • イテレーション回数: ハッシュ計算を何度も繰り返すことで、パスワード1つあたりの検証にかかる時間を意図的に長くし、ブルートフォース攻撃や辞書攻撃のコストを増大させます。Bitwarden では、このイテレーション回数をユーザーが設定(またはデフォルト値を使用)できます。イテレーション回数が多いほど、解析は困難になります。

John the Ripper による解析は、この PBKDF2 の計算をパスワード候補ごとに行い、`data.json` 内の検証用データと一致するかどうかを確認する作業です。したがって、マスターパスワードが長く複雑で、かつイテレーション回数が十分に高く設定されていれば、解析には膨大な時間(数年、数十年、あるいはそれ以上)がかかることになり、現実的には解読不可能と言えます。

Vault 内の各アイテム(ログイン情報など)自体は、マスターパスワードから PBKDF2 を用いて生成された鍵によって AES-CBC 256bit で暗号化されています。`bitwarden2john` と John the Ripper がターゲットにするのは、この AES 鍵そのものではなく、その元となるマスターパスワードの検証部分(PBKDF2)です。

マスターパスワードの重要性

この解析プロセスからも分かる通り、Bitwarden のセキュリティはマスターパスワードの強度に大きく依存しています。以下の点に注意して、強力なマスターパスワードを設定・管理しましょう。

  • 長く、複雑にする: 英大文字、英小文字、数字、記号を組み合わせ、最低でも12文字以上、できれば16文字以上を推奨します。
  • 他のサービスで使い回さない: マスターパスワードは Bitwarden 専用のものにしましょう。
  • 推測されにくいものにする: 名前、誕生日、辞書にある単語などを避け、ランダムな文字列に近いものが理想です。Bitwarden のパスワード生成機能を使うのも良い方法です。
  • 定期的な変更は必ずしも必要ない: 強力なパスワードであれば、漏洩の兆候がない限り頻繁に変更する必要はありません。むしろ、変更によって弱いパスワードを設定してしまうリスクもあります。
  • イテレーション回数の確認: Bitwarden の設定で、PBKDF2 のイテレーション回数が適切な値(推奨値以上)になっているか確認しましょう。

二要素認証 (2FA) との関係性

二要素認証 (2FA) は、ログイン時のセキュリティを大幅に向上させる重要な機能です。しかし、`bitwarden2john` によるオフラインでのマスターパスワード解析に対しては、2FA は直接的な防御にはなりません

なぜなら、`bitwarden2john` はエクスポートされた Vault データ (`data.json`) を元に、マスターパスワードのハッシュを解析するからです。このプロセスは Bitwarden のサーバーへのログインを伴わないため、ログイン時に要求される 2FA コードは関与しません。

もしマスターパスワードが解析されてしまった場合、攻撃者はそのマスターパスワードを使って Vault データ (`data.json`) の内容を復号できてしまいます。たとえ Bitwarden アカウントへのログインに 2FA を設定していても、Vault データ自体が漏洩し、マスターパスワードが破られれば、中の情報は危険に晒されます。

したがって、2FA は非常に重要ですが、それだけに頼るのではなく、強力なマスターパスワードを設定すること、そして エクスポートした Vault データの安全な管理 が不可欠です。

まとめ ✨

`bitwarden2john` は、Bitwarden のエクスポートデータからマスターパスワードのハッシュを抽出し、John the Ripper で解析可能にするための便利なツールです。許可された環境で自身の Vault データに対してこのツールを使用することで、設定しているマスターパスワードの強度を評価し、セキュリティ対策を見直すきっかけとすることができます。

Bitwarden は PBKDF2-HMAC-SHA256 や AES-CBC 256bit といった堅牢な暗号化技術を採用していますが、その安全性はユーザーが設定するマスターパスワードの強度に大きく依存します。長く、複雑で、ユニークなマスターパスワードを設定し、適切に管理することが非常に重要です。

パスワード解析ツールは強力ですが、その使用は常に倫理的な範囲内に留めなければなりません。自分の管理下にあるデータや、明確な許可を得たシステムに対してのみ使用し、セキュリティ知識の向上と防御策の強化に役立てましょう。🛡️

この記事が、`bitwarden2john` の使い方を理解し、パスワードセキュリティへの意識を高める一助となれば幸いです。

参考情報

  • John the Ripper official website: https://www.openwall.com/john/

    John the Ripper の公式ウェブサイト。ダウンロード、ドキュメント、メーリングリストなどへのリンクがあります。

  • John the Ripper (Jumbo) GitHub Repository: https://github.com/openwall/john

    John the Ripper (Jumbo) のソースコードリポジトリ。`bitwarden2john.py` の最新コードや関連する議論を確認できます。

  • Bitwarden Help Center | Export Your Vault Data: https://bitwarden.com/help/export-your-data/

    Bitwarden の公式ヘルプセンターにある Vault データのエクスポート手順に関する説明です。

  • Bitwarden Security Whitepaper: https://bitwarden.com/help/what-encryption-is-used/ (関連ページ) および公式サイト内のセキュリティセクション

    Bitwarden が使用している暗号化方式 (PBKDF2, AES-CBC など) についての詳細な説明が記載されています(ホワイトペーパーは別途提供されている場合があります)。

コメント

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