vdi2john 徹底解説:John the Ripper で VDI パスワードを解析する方法

セキュリティツール

John the Ripper (JtR) は、強力なオープンソースのパスワードクラッキングツールとして広く知られています。このツール群には、特定のファイル形式からパスワードハッシュ(パスワードそのものではなく、パスワードを検証するために保存されているデータ)を抽出するための補助ツールが数多く含まれています。その中でも、この記事では vdi2john というツールに焦点を当て、その機能と使い方を詳しく解説します。

vdi2john は、Oracle VirtualBox などで使用される仮想ディスクイメージファイル(VDI: Virtual Disk Image)から、パスワード保護された情報(主にディスク全体の暗号化や特定の暗号化ボリュームに関連するハッシュ)を抽出するために設計されたツールです。もし VDI ファイル自体がパスワードで暗号化されている場合、そのパスワードを忘れてしまうと、仮想マシン内のデータにアクセスできなくなってしまいます。このような状況で、vdi2john と John the Ripper 本体を組み合わせることで、パスワードの回復を試みることができます。💪

このブログ記事では、vdi2john の基本的な使い方から、抽出したハッシュを John the Ripper で実際に解析する手順までを、初心者にも分かりやすく解説していきます。

⚠️ 注意: パスワードクラッキングツールは、セキュリティ診断やパスワード復旧など、正当な目的のためにのみ使用してください。許可なく他者のファイルやシステムに対して使用することは、法律で禁止されており、重大な結果を招く可能性があります。この記事で紹介する内容は、教育目的および自身の所有するファイルに対するパスワード復旧を目的としています。悪用は絶対にしないでください。

John the Ripper と vdi2john の準備

vdi2john を使用するには、まず John the Ripper スイートがシステムにインストールされている必要があります。vdi2john は通常、John the Ripper 本体と一緒に配布されています。特に、コミュニティによって拡張された「Jumbo」バージョンに含まれていることが多いです。

John the Ripper のインストール

John the Ripper のインストール方法は、お使いのオペレーティングシステムによって異なります。

  • Linux (Debian/Ubuntu系): 多くのディストリビューションでは、パッケージマネージャーを通じて簡単にインストールできます。Kali Linux など、ペネトレーションテスト用のディストリビューションには、デフォルトでインストールされていることが多いです。
    sudo apt update
    sudo apt install john
  • Linux (ソースからビルド): 最新版や Jumbo バージョンを使用したい場合は、Openwall の John the Ripper 公式サイトからソースコードをダウンロードし、コンパイルします。手順は通常、ダウンロードしたアーカイブに含まれる `README` や `INSTALL` ドキュメントに記載されています。
  • Windows: Windows 向けのビルド済みバイナリが公式サイトやコミュニティサイトから入手可能です。ダウンロードした ZIP ファイルを解凍し、`run` ディレクトリ内でコマンドを実行します。Cygwin 環境を構築してソースからビルドすることも可能です。
  • macOS: Homebrew などのパッケージマネージャーを利用してインストールできます。
    brew install john
    または Jumbo バージョンをインストールする場合:
    brew install john-jumbo

インストール後、john コマンドと、vdi2john (または vdi2john.plvdi2john.py といった名前の場合もあります) が実行可能になっているか確認してください。通常、これらのツールは John the Ripper の `run` ディレクトリ、またはシステムの実行パス (/usr/bin, /usr/sbin など) に配置されます。

解析対象の VDI ファイル

当然ながら、パスワードを解析したい VDI ファイルが必要です。VirtualBox などで作成された、パスワードによる暗号化が施されたディスクイメージファイルを用意してください。ファイルサイズが大きい場合、処理に時間がかかることがあります。💾

vdi2john の基本的な使い方

vdi2john の基本的な目的は、VDI ファイルから John the Ripper が解析できる形式のハッシュ情報を抽出することです。コマンドの基本的な構文は非常にシンプルです。

vdi2john [対象のVDIファイル] > [出力先のハッシュファイル]

具体例を見てみましょう。例えば、`encrypted_disk.vdi` という名前の暗号化された VDI ファイルがあり、そこから抽出したハッシュを `vdi_hash.txt` というファイルに保存したい場合、次のようにコマンドを実行します。

vdi2john encrypted_disk.vdi > vdi_hash.txt

このコマンドは以下の処理を行います:

  1. vdi2john が `encrypted_disk.vdi` ファイルを読み込みます。
  2. ファイルヘッダーやメタデータを解析し、暗号化に関連する情報(パスワード検証に必要なデータ)を探します。
  3. 見つかった情報を、John the Ripper が認識できる特定のテキスト形式(ハッシュ形式)に変換します。
  4. 変換されたハッシュ文字列を標準出力に出力します。
  5. リダイレクション演算子 > によって、標準出力の内容が `vdi_hash.txt` ファイルに書き込まれます。

もし VDI ファイルがパスワードで保護されていない場合や、vdi2john が対応していない形式の暗号化である場合、ハッシュが出力されないか、エラーメッセージが表示されることがあります。

出力されるハッシュの形式

vdi2john が出力するハッシュの形式は、John the Ripper がそのハッシュの種類を識別できるように、特定のフォーマットに従っています。一般的には以下のような構成要素を含みます。

[ファイル名]$vdi$[暗号化タイプ]*[関連データ]*...*[ハッシュデータ]
  • ファイル名: 元の VDI ファイル名が含まれることが多いです(必須ではありません)。
  • $vdi$: このハッシュが VDI ファイル由来であることを示す識別子です。
  • 暗号化タイプ: 使用されている暗号化アルゴリズムやモードを示す情報。
  • 関連データ: パスワードの検証に必要なソルト(salt)やイテレーション回数などのパラメータ。
  • ハッシュデータ: 実際にパスワードと比較されるハッシュ値本体。

例えば、出力されるハッシュは以下のような見た目になるかもしれません(これはあくまで例です)。

encrypted_disk.vdi$vdi$1*1*10000*af3b...c1a2*0d8e...b4f9

この文字列全体が、John the Ripper がパスワードクラッキングを試みるための「インプット」となります。John はこの文字列を見て、「これは VDI のハッシュだな」と判断し、適切なアルゴリズムで解析を開始します。

John the Ripper で VDI ハッシュを解析する

vdi2john でハッシュファイルを生成したら、いよいよ John the Ripper 本体の出番です。John the Ripper は、様々な手法を用いてハッシュから元のパスワードを推測(クラック)しようと試みます。

最も基本的な使い方は、生成したハッシュファイルを John the Ripper に渡すことです。

john [vdi2johnで生成したハッシュファイル]

先ほどの例で作成した `vdi_hash.txt` を使う場合は、以下のようになります。

john vdi_hash.txt

このコマンドを実行すると、John the Ripper は以下のデフォルトの順序でクラッキングモードを試みます。

  1. シングルクラックモード (Single Crack Mode): ハッシュファイルに含まれるユーザー名などの情報から派生させた、単純なパスワード候補を試します。VDI ハッシュの場合、ユーザー名情報は通常含まれないため、このモードはあまり効果がないかもしれません。
  2. 辞書モード (Wordlist Mode): デフォルトまたは指定された辞書ファイル(一般的な単語や過去に漏洩したパスワードのリスト)に含まれる単語を試します。John the Ripper には `password.lst` というデフォルトの辞書が付属しています。さらに、`–wordlist` オプションでカスタム辞書を指定できます。
    # rockyou.txt という有名な辞書を使う例
    john --wordlist=/usr/share/wordlists/rockyou.txt vdi_hash.txt
    辞書モードでは、単語をそのまま試すだけでなく、「ルール (Rules)」を使って単語を変化させる(例: 大文字にする、数字を付ける、記号を挿入する)こともできます。これは `–rules` オプションで有効になります(デフォルトで有効な場合もあります)。
    # デフォルトルールを有効にして辞書攻撃
    john --wordlist=/usr/share/wordlists/rockyou.txt --rules vdi_hash.txt
  3. インクリメンタルモード (Incremental Mode): 設定された文字セット(例: すべての小文字アルファベット、数字と記号を含むすべてのASCII文字など)を使って、考えられるすべての組み合わせを総当たりで試します。これは最も時間がかかる可能性がありますが、辞書に載っていない複雑なパスワードも見つけられる可能性があります。
    # 特定の文字セットでインクリメンタルモードを実行
    john --incremental=Digits vdi_hash.txt  # 数字のみを試す
    john --incremental=Alnum vdi_hash.txt   # 英数字を試す
    john --incremental=All vdi_hash.txt     # すべての表示可能文字を試す

解析の進行状況と結果の確認

John the Ripper の実行中には、キーボードの任意のキー(通常はスペースキーなど)を押すと、現在の進行状況(試行中のパスワード候補、速度、経過時間など)が表示されます。

パスワードが見つかると、ターミナルに表示され、同時に `$JOHN/john.pot` (John the Ripper のホームディレクトリ内の `john.pot` ファイル) というファイルに記録されます。`.pot` ファイルは「Pot File」と呼ばれ、過去に見つかったパスワードを保存しておくことで、次回同じハッシュを解析する際に時間を節約できます。

解析が完了した後や、一度中断した後に、見つかったパスワードを確認するには `–show` オプションを使います。

john --show vdi_hash.txt

これにより、`vdi_hash.txt` に含まれるハッシュのうち、`.pot` ファイルに記録されているクラック済みのパスワードが表示されます。出力形式は通常 `<ハッシュ>:<パスワード>` または `<ユーザー名>:<パスワード>:<…> (<ハッシュタイプ>)` のようになります。

その他の便利なオプション

John the Ripper には多くのオプションがあります。いくつか便利なものを紹介します。

オプション 説明
--format=[format-name] ハッシュの形式を明示的に指定します。John が自動検出できない場合や、複数の形式が考えられる場合に役立ちます。VDI の場合、--format=vdi のようになる可能性がありますが、通常は自動検出されます。利用可能なフォーマットは john --list=formats で確認できます。
--fork=[N] 指定した数 (N) のプロセスをフォークして並列処理を行います。マルチコア CPU の場合に解析速度を向上させることができます。
--restore 中断したセッションを再開します。John は定期的に状態を保存しているため (.rec ファイル)、中断しても途中から再開できます。
--pot=[filename] デフォルトの john.pot 以外の Pot ファイルを指定します。

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

  • VDI の暗号化タイプ: vdi2john がすべての VDI 暗号化タイプに対応しているわけではありません。VirtualBox のバージョンや設定によっては、ハッシュを抽出できない場合があります。
  • 処理時間: VDI ファイルのサイズやパスワードの複雑さ、使用するマシンのスペックによって、解析には非常に長い時間がかかることがあります。数時間から数日、あるいはそれ以上かかることも珍しくありません。🕰️
  • John the Ripper のバージョン: vdi2john の機能は、比較的新しいバージョンの John the Ripper (特に Jumbo 版) で提供されている可能性があります。古いバージョンを使用している場合は、アップデートを検討してください。
  • エラーメッセージ: vdi2johnjohn の実行時にエラーメッセージが表示された場合は、その内容をよく読んで対処してください。ファイルパスが間違っている、権限がない、必要なライブラリが不足しているなどの原因が考えられます。
  • パスワードが見つからない場合: John the Ripper がすべてのパスワードを見つけられる保証はありません。特に、非常に長く複雑で、辞書に載っていないようなパスワードの場合、総当たり攻撃でも現実的な時間内に見つけるのは困難です。

💡 ヒント: より強力なパスワードクラッキングには、GPU を活用することも有効です。John the Ripper は OpenCL や CUDA をサポートしており、対応する GPU があれば CPU よりも大幅に高速な解析が可能です。ただし、設定やドライバの互換性など、CPU での実行よりも複雑になる場合があります。

まとめ

vdi2john は、パスワードで暗号化された VirtualBox VDI ファイルからパスワードハッシュを抽出し、John the Ripper で解析するための重要なツールです。このツールを使うことで、忘れてしまった VDI のパスワードを回復できる可能性があります。

手順の概要は以下の通りです:

  1. John the Ripper (Jumbo 版推奨) をインストールする。
  2. vdi2john を使って、対象の VDI ファイルからハッシュを抽出し、ファイルに保存する (vdi2john target.vdi > hash.txt)。
  3. John the Ripper 本体を使って、抽出したハッシュファイルを解析する (john hash.txt)。
  4. 必要に応じて、辞書ファイルやクラッキングモードを指定するオプションを利用する。
  5. john --show hash.txt で解析結果を確認する。

パスワードクラッキングは強力な技術ですが、その利用には責任が伴います。常に倫理的な観点と法律を遵守し、正当な目的のためにのみ使用するようにしてください。✅

この記事が、vdi2john と John the Ripper の使い方を理解する一助となれば幸いです。Happy cracking (ethically)! 😉

コメント

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