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

セキュリティツール

John the Ripperを使ってDiskCryptorの暗号化ボリュームからパスワードを回復する方法

データを保護するために、ディスク全体の暗号化は非常に有効な手段です。その中でも、DiskCryptorはWindows向けのオープンソースディスク暗号化ソフトウェアとして知られています。AES、Twofish、Serpentといった強力な暗号化アルゴリズムをサポートし、システムパーティションを含むディスク全体や特定のパーティションを暗号化できます。しかし、設定したパスワードを忘れてしまうと、暗号化されたデータへのアクセスが不可能になってしまいます 😭。

そんな時に役立つ可能性があるのが、John the Ripper (JtR) です。John the Ripperは、非常に有名で強力なパスワードクラッキングツールであり、様々な種類のハッシュ形式に対応しています。パスワードの強度テストや、忘れてしまったパスワードの回復(所有しているデータやシステムに対してのみ!)に使用されます。

しかし、John the Ripperが直接DiskCryptorのボリュームを解析できるわけではありません。DiskCryptorボリュームからパスワード検証に必要な情報(ハッシュ化されたデータ)を抽出し、John the Ripperが理解できる形式に変換する必要があります。この重要な役割を担うのが、John the Ripperスイートに含まれるユーティリティ、diskcryptor2john なのです ✨。

このブログ記事では、diskcryptor2john を使用してDiskCryptorで暗号化されたボリュームからパスワードハッシュを抽出し、John the Ripperでパスワード解析を試みる手順を詳しく解説します。

⚠️倫理的な注意と法的側面

パスワードクラッキングツール(John the Ripperを含む)の使用は、自身が所有するシステムやデータ、または明示的な許可を得たシステムに対してのみ 行ってください。許可なく他人のシステムやデータに対してこれらのツールを使用することは、重大なプライバシー侵害であり、多くの国で違法行為となります。この記事は、正当な目的(例:忘れたパスワードの回復、セキュリティ監査)での利用を前提としており、不正利用を推奨するものでは一切ありません。

diskcryptor2john を使ったパスワード解析を始める前に、以下のものが必要です。

  • John the Ripper (JtR): 最新版のJohn the Ripperがインストールされている必要があります。diskcryptor2john は通常、JtRの `run` ディレクトリに含まれています。Linuxディストリビューションのパッケージマネージャ(例: `apt`, `yum`, `pacman`)でインストールするか、John the Ripperの公式サイトからソースコードをダウンロードしてコンパイルします。
  • DiskCryptorで暗号化されたボリュームのデータ: diskcryptor2john は、パスワードハッシュを抽出するために、暗号化されたボリュームの先頭部分のデータを必要とします。具体的には、ボリュームの最初の128 KiB (131,072 バイト) のデータが必要です。このデータへのアクセス権と、それをファイルに抽出する手段(例: `dd` コマンド)が必要になります。
  • オペレーティングシステム: John the Ripperとデータ抽出ツールを実行できる環境が必要です。Linux環境が一般的ですが、Windows Subsystem for Linux (WSL) や macOS でも実行可能です。

特に重要なのは、暗号化ボリュームの先頭データを正確に抽出することです。システムドライブが暗号化されている場合は、別のOSから起動するか、ドライブを別のマシンに接続してデータを抽出する必要があります。

diskcryptor2john は比較的シンプルなツールですが、その役割は非常に重要です。

  1. ヘッダー情報の読み込み: DiskCryptorは、暗号化ボリュームの先頭部分(通常は最初のセクタ群)に、暗号化方式、キーデータ、ソルト(Salt)、パスワード検証に必要な情報などを格納したヘッダーを持っています。diskcryptor2john は、入力として与えられたデータファイル(ボリューム先頭128 KiB)からこのヘッダー情報を読み込みます。
  2. ハッシュ形式への変換: 読み込んだヘッダー情報から、パスワード検証に必要な要素(ソルト、暗号化されたキー検証データなど)を抽出し、John the Ripperが認識できる特定のフォーマット(diskcryptor フォーマット)のハッシュ文字列に変換します。
  3. 出力: 変換されたハッシュ文字列を標準出力に出力します。この出力をファイルに保存し、John the Ripperの入力として使用します。

このプロセスにより、DiskCryptor固有のデータ構造を、汎用的なパスワードクラッカーであるJohn the Ripperが扱える形式に橋渡しするわけです🌉。

それでは、実際に `diskcryptor2john` を使用する手順を見ていきましょう。ここではLinux環境を想定して説明しますが、他の環境でも基本的な流れは同じです。

John the Ripperをインストールすると、diskcryptor2john (多くの場合PerlスクリプトまたはPythonスクリプト) は通常、John the Ripperのメインディレクトリ内の `run` サブディレクトリに配置されます。

# 例: John the Ripperのソースを ~/src/JohnTheRipper に展開した場合
cd ~/src/JohnTheRipper/run
ls diskcryptor2john*

diskcryptor2john.pydiskcryptor2john といった名前のファイルが見つかるはずです。以降のコマンドでは、このスクリプトへのパスを適宜指定してください。

これが最も重要なステップです。暗号化されたボリューム(パーティションまたはディスク全体)の先頭 128 KiB (131,072 バイト) をファイルに保存する必要があります。Linuxの `dd` コマンドを使用するのが一般的です。

まず、対象となる暗号化ボリュームのデバイス名を特定する必要があります。lsblkfdisk -l コマンドで確認できます。(例: /dev/sda1, /dev/nvme0n1p2 など)

🚨 `dd` コマンドの注意点

dd コマンドは非常に強力ですが、使い方を誤るとデータを破壊する可能性があります。特に `if` (入力ファイル) と `of` (出力ファイル) の指定を間違えないように、細心の注意を払ってください。操作対象のデバイス名は絶対に間違えないようにしてください。不安な場合は、読み取り専用でマウントする、あるいは物理的に書き込み禁止にするなどの対策を検討してください。

以下のコマンドで、対象デバイス(ここでは例として `/dev/sdXN`)の先頭128 KiBを `diskcryptor_header.bin` というファイルに保存します。

# sudoが必要な場合が多い
sudo dd if=/dev/sdXN of=diskcryptor_header.bin bs=512 count=256

解説:

  • if=/dev/sdXN: 入力ファイル(読み込み元)として、暗号化されたボリュームのデバイスファイルを指定します。/dev/sdXN は実際のデバイス名に置き換えてください。
  • of=diskcryptor_header.bin: 出力ファイル名を指定します。任意の名前で構いません。
  • bs=512: ブロックサイズを512バイトに設定します(一般的なセクタサイズ)。
  • count=256: 読み込むブロック数を256に設定します。これにより、512 バイト * 256 = 131,072 バイト (128 KiB) のデータが読み込まれます。

これで、diskcryptor_header.bin ファイルに、解析に必要なボリューム先頭データが保存されました。

いよいよ `diskcryptor2john` を実行します。ステップ1で見つけたスクリプトを実行し、引数としてステップ2で作成したデータファイル (diskcryptor_header.bin) を指定します。出力結果をファイル(例: `diskcryptor_hash.txt`)にリダイレクトして保存します。

# John the Ripperのrunディレクトリにいる場合
./diskcryptor2john ../../path/to/diskcryptor_header.bin > diskcryptor_hash.txt

# スクリプトのパスを直接指定する場合 (Pythonスクリプトの場合)
# python /path/to/john/run/diskcryptor2john.py /path/to/diskcryptor_header.bin > /path/to/save/diskcryptor_hash.txt

(注意:スクリプトがPythonの場合は `python` コマンドが、Perlの場合は `perl` コマンドが必要になることがあります。また、パスは環境に合わせて修正してください。)

成功すれば、diskcryptor_hash.txt ファイルに以下のような形式のハッシュ文字列が書き込まれます(実際の値は異なります)。

volume_label:$diskcryptor$0*...(長い16進数文字列)...

これでJohn the Ripperにかける準備が整いました 🎉。

抽出したハッシュファイル (diskcryptor_hash.txt) を使って、John the Ripperでパスワード解析を開始します。John the Ripperにはいくつかの解析モードがありますが、ここでは代表的なものを紹介します。

最も基本的なモードです。ハッシュファイル名を指定するだけで実行できます。ユーザー名(この場合はボリュームラベル)などから派生した簡単なパスワードを試します。

# John the Ripperの実行ファイルがあるディレクトリで実行する場合
../run/john diskcryptor_hash.txt

# パスを指定する場合
/path/to/john/run/john /path/to/diskcryptor_hash.txt

最も一般的に使われるモードの一つです。パスワードの候補がリストされた「辞書ファイル」を用意し、そのリストにある単語をパスワードとして試します。強力な辞書ファイル(例えば `rockyou.txt` など)を使うと、発見の可能性が高まります。

../run/john --wordlist=/path/to/your/dictionary.txt diskcryptor_hash.txt

/path/to/your/dictionary.txt の部分を、使用する辞書ファイルの実際のパスに置き換えてください。John the Ripperにはデフォルトで `password.lst` という小さな辞書が付属していることが多いです。

ルール(Mangling Rules)を組み合わせることで、辞書の単語を変化させ(例: 大文字小文字変換、数字や記号の追加)、より多くの候補を試すこともできます。

../run/john --wordlist=/path/to/dictionary.txt --rules=All diskcryptor_hash.txt

特定の文字セット(例: すべての小文字アルファベット、数字を含むすべての印字可能文字など)を使って、可能なすべての組み合わせを総当たりで試すモードです。パスワードが短い場合は有効ですが、長くて複雑なパスワードに対しては非常に時間がかかります(数年〜数世紀以上かかることも ⏳)。

../run/john --incremental=Digits diskcryptor_hash.txt  # 数字のみを試す
../run/john --incremental=Lower diskcryptor_hash.txt   # 小文字アルファベットのみを試す
../run/john --incremental=Alnum diskcryptor_hash.txt   # 英数字を試す
../run/john --incremental=All diskcryptor_hash.txt     # すべての印字可能文字を試す(非常に時間がかかる)

どのモードを使用するかは、想定されるパスワードの複雑さや、利用できる時間、計算リソースによって選択します。

John the Ripperがパスワードを発見すると、通常は以下のように表示されます。

Loaded 1 password hash (diskcryptor, DiskCryptor AES/Serpent/Twofish)
Cost 1 (iteration count) is 10000 for all loaded hashes
Will run 8 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
Session aborted

Use the "--show" option to display all of the cracked passwords reliably

解析が完了した後や、途中で中断した場合でも、発見されたパスワードは以下のコマンドで確認できます。

../run/john --show diskcryptor_hash.txt

もしパスワードが見つかっていれば、ハッシュ文字列の後ろにコロン区切りで表示されます。

volume_label:CorrectPassword123:...(元のハッシュの一部)...

1 password hash cracked, 0 left

見つからない場合は、”0 password hashes cracked” と表示されます。

  • 合法性と倫理: 繰り返しになりますが、絶対に許可なく他人のデータやシステムに対してこの手法を使用しないでください。 法的な問題に発展する可能性があります。自分の所有物に対するパスワードリカバリや、許可されたセキュリティテストに限定してください。
  • パスワードの強度: パスワード解析の成功率は、元のパスワードの強度に大きく依存します。長くて複雑で、辞書に載っていないようなランダムなパスワードは、解析が極めて困難、あるいは事実上不可能です。
  • 計算リソース: パスワード解析、特にインクリメンタルモードや大規模な辞書攻撃は、CPU(または対応していればGPU)パワーと時間を大量に消費します。高性能なマシンを使っても、複雑なパスワードの解析には数日から数週間、あるいはそれ以上かかることがあります。
  • DiskCryptorのバージョンと設定: DiskCryptorのバージョンや設定(使用アルゴリズム、キーファイルの使用有無など)によっては、diskcryptor2john が対応していない、または解析の難易度がさらに上がる可能性があります。キーファイルを使用している場合、パスワードだけでは解読できません。
  • データ抽出の正確性: ボリュームの先頭128 KiBを正確に抽出することが不可欠です。間違った場所や不完全なデータを抽出すると、diskcryptor2john は正しいハッシュを生成できません。

パスワード回復が成功する保証はありません。日頃からパスワード管理を適切に行い、忘れないようにすることが最も重要です。パスワードマネージャーの利用や、安全な場所への記録などを検討しましょう。

diskcryptor2john は、DiskCryptorで暗号化されたボリュームのパスワードを忘れてしまった場合に、John the Ripperを用いたパスワード回復を試みるための重要なツールです。正しい手順でボリュームヘッダーデータを抽出し、diskcryptor2john でハッシュ形式に変換し、John the Ripperの様々なモードで解析を実行することで、パスワードを発見できる可能性があります。

ただし、このプロセスは技術的な知識を要し、成功が保証されるものではありません。また、ツールの使用は常に倫理的かつ合法的な範囲に留めなければなりません。

この記事が、DiskCryptorとJohn the Ripperを使ったパスワード回復プロセスを理解する一助となれば幸いです 😊。

参考情報

  • John the Ripper official website: https://www.openwall.com/john/
  • John the Ripper Community Wiki (GitHub): https://github.com/openwall/john/wiki (使い方や対応フォーマットに関する情報が含まれることがあります)
  • DiskCryptor (注意: 開発が停止している可能性があります): 公式サイトが見当たらない場合もありますが、過去の情報源として参照されることがあります。利用は自己責任で。

注: DiskCryptorは長期間更新されていない可能性があり、セキュリティ上の懸念があるかもしれません。新規での利用は推奨されず、代替として VeraCrypt などの活発に開発されているオープンソース暗号化ソフトウェアの利用を検討してください。

コメント

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