John the Ripper スイートの一部である pgpdisk2john を使用して、PGPDisk ボリュームからハッシュを抽出し、パスワードクラックを試みる方法を解説します。
はじめに:PGPDisk とは?
PGPDisk は、かつて Pretty Good Privacy (PGP) スイートの一部として提供されていたディスク暗号化ソフトウェアです。ハードドライブ全体や特定のパーティション(仮想ディスクボリューム)を暗号化し、保存されているデータを不正アクセスから保護する目的で使用されていました。PGP は 1991 年に Phil Zimmermann によって開発され、その後、PGP Corporation を経て、2010 年に Symantec (現在は Broadcom の一部) に買収されました。PGPDisk の技術は、Symantec Drive Encryption (旧称 PGP Whole Disk Encryption) に引き継がれています。
PGPDisk で暗号化されたボリュームにアクセスするには、設定されたパスフレーズが必要です。もしこのパスフレーズを忘れてしまった場合や、セキュリティ監査の一環としてパスワード強度をテストしたい場合などに、パスワードクラッキングツールが必要になることがあります。
John the Ripper と pgpdisk2john
John the Ripper (JtR) は、非常に有名で強力なオープンソースのパスワードクラッキングツールです。多様なプラットフォームで動作し、多数のハッシュ形式に対応しています。その主な目的は、弱いパスワードを検出することです。
pgpdisk2john
は、John the Ripper スイートに含まれるユーティリティスクリプト(通常は Python で書かれています)の一つです。その役割は、PGPDisk で暗号化されたボリュームやファイルから、John the Ripper が解析できる形式の「ハッシュ」を抽出することです。John the Ripper 本体は直接暗号化ボリュームを読み込むことはできないため、この種の *-2john
ユーティリティが必要になります。
John the Ripper の *-2john
ユーティリティは他にも多数存在し、ZIP ファイル (zip2john
)、RAR アーカイブ (rar2john
)、SSH 秘密鍵 (ssh2john
)、Office ドキュメント (office2john
) など、様々な形式からハッシュを抽出できます。
前提条件:John the Ripper のインストール
pgpdisk2john
を使用するには、John the Ripper がインストールされている必要があります。多くの Linux ディストリビューションでは、パッケージマネージャから簡単にインストールできます。
Debian / Ubuntu / Kali Linux の場合:
sudo apt update
sudo apt install john
Fedora の場合:
sudo dnf install john
Arch Linux の場合:
sudo pacman -S john
macOS (Homebrew を使用):
brew install john
あるいは、公式サイトからソースコードをダウンロードしてコンパイルすることも可能です。特に最新機能やより多くのハッシュ形式をサポートする “Jumbo” バージョンを使用したい場合に有効です。
インストール後、pgpdisk2john
スクリプトがシステムのパスに含まれているか確認してください。通常、John the Ripper のインストールディレクトリ(例: /usr/bin/
や /usr/sbin/
、あるいは John の実行ファイルと同じディレクトリ)に配置されます。見つからない場合は、John the Ripper の run
ディレクトリ内を探してみてください。
pgpdisk2john の基本的な使い方
pgpdisk2john
の基本的な構文は非常にシンプルです。
pgpdisk2john <PGPDiskボリュームファイル>
または、Python スクリプトとして直接実行する場合:
python /path/to/pgpdisk2john.py <PGPDiskボリュームファイル>
ここで、<PGPDiskボリュームファイル>
は、解析対象の PGPDisk で暗号化されたファイル(通常 .pgd
拡張子を持つことが多いですが、必須ではありません)またはディスクデバイスへのパスを指定します。
実行例:
例えば、my_encrypted_volume.pgd
という名前の PGPDisk ファイルがあるとします。このファイルからハッシュを抽出するには、以下のコマンドを実行します。
pgpdisk2john my_encrypted_volume.pgd
成功すると、標準出力にハッシュ文字列が表示されます。このハッシュ文字列は、John the Ripper がパスワードクラッキングに使用するデータです。
通常、この出力をファイルに保存して、後で John the Ripper に渡します。
pgpdisk2john my_encrypted_volume.pgd > pgpdisk_hash.txt
これで、pgpdisk_hash.txt
というファイルに抽出されたハッシュが保存されました。
ハッシュ形式の理解
pgpdisk2john
が出力するハッシュは、以下のような形式になることが一般的です(具体的な形式は PGPDisk のバージョンや設定によって若干異なる場合があります)。
$pgpdisk$*バージョン情報*salt*checkbytes*encryptedkey...
各フィールドの意味は以下の通りです:
$pgpdisk$
: このハッシュが PGPDisk 由来であることを示す識別子です。John the Ripper はこれを見て適切な処理形式を判断します。*バージョン情報*
: PGPDisk のバージョンや暗号アルゴリズムに関する情報が含まれることがあります。salt
: パスワードハッシュ化に使用されるソルト(ランダムな値)です。同じパスワードでもソルトが異なればハッシュ値も異なります。16進数で表現されます。checkbytes
: パスワードが正しいか検証するために使用されるデータの一部です。これも16進数で表現されます。encryptedkey
: 実際のディスク暗号化キーが、指定されたパスフレーズから派生したキーで暗号化されたものです。16進数で表現されます。
John the Ripper は、辞書やルールに基づいてパスワード候補を生成し、それぞれに対してソルトを用いてハッシュ化処理を行い、得られた結果がハッシュ内の checkbytes
や encryptedkey
の復号試行と一致するかどうかを比較します。
John the Ripper でハッシュを解析する
pgpdisk2john
でハッシュを抽出しファイル (pgpdisk_hash.txt
) に保存したら、いよいよ John the Ripper 本体を使ってパスワードクラックを試みます。
最も基本的なコマンドは以下のようになります。
john pgpdisk_hash.txt
John the Ripper は自動的にハッシュ形式 ($pgpdisk$
) を認識し、デフォルトのクラッキングモード(シングルクラックモード、辞書モード、インクリメンタルモードの順)で解析を開始します。
クラッキングモードの指定
特定のモードや辞書ファイルを使いたい場合は、オプションを指定します。
辞書モード (Wordlist Mode):
指定した単語リスト(辞書ファイル)に含まれる単語をパスワード候補として試します。強力な辞書ファイル(例: rockyou.txt)を使用すると効果的です。
john --wordlist=/path/to/your/wordlist.txt pgpdisk_hash.txt
単語リストにルール(例えば、単語の末尾に数字を追加するなど)を適用することもできます。
john --wordlist=/path/to/your/wordlist.txt --rules pgpdisk_hash.txt
インクリメンタルモード (Incremental Mode):
指定した文字セット(例: すべての小文字アルファベット)を使って、可能なすべての組み合わせを総当たりで試します。非常に時間がかかる可能性がありますが、辞書に載っていないパスワードも見つけられる可能性があります。
john --incremental pgpdisk_hash.txt
使用する文字セットを指定することもできます(例: Alnum
は英数字)。
john --incremental=Alnum pgpdisk_hash.txt
シングルクラックモード (Single Crack Mode):
ハッシュファイルに含まれるユーザー名などの情報(PGPDisk ハッシュの場合は通常ユーザー名は含まれませんが、他の形式では有効)を基に、よく使われる変形パターン(例: user -> user123, password -> p@ssword)を試します。デフォルトで最初に試されるモードの一つです。
john --single pgpdisk_hash.txt
解析結果の表示
John the Ripper がパスワードを見つけると、ターミナルに表示され、$JOHN/john.pot
(通常は ~/.john/john.pot
または John の実行ディレクトリ配下) というファイルに記録されます。
後でクラック済みのパスワードを確認するには、以下のコマンドを使用します。
john --show pgpdisk_hash.txt
このコマンドは、john.pot
ファイルを参照して、指定したハッシュファイルに対応するクラック済みパスワードを表示します。
セッションの管理
パスワードクラックは時間がかかることがあります。途中で中断して後で再開するには、Ctrl+C を押して John the Ripper を停止します。セッションの状態は $JOHN/john.rec
ファイルに保存されます。
再開するには、以下のコマンドを実行します。
john --restore
トラブルシューティングと注意点 🤔
- pgpdisk2john が見つからない: John the Ripper のインストールパスを確認し、
pgpdisk2john.py
(または単にpgpdisk2john
) が存在するか確認してください。John the Ripper のrun
ディレクトリにあることが多いです。パスが通っていない場合は、フルパスで指定して実行します。 - Python の依存関係エラー:
pgpdisk2john.py
は Python スクリプトであるため、実行に必要な Python のバージョン (Python 2 または 3) やライブラリがシステムにインストールされている必要があります。エラーメッセージを確認し、必要な依存関係をインストールしてください。 - サポートされていない PGPDisk バージョン: 非常に古い、または特殊なバージョンの PGPDisk で作成されたボリュームの場合、
pgpdisk2john
が対応していない可能性があります。その場合は、スクリプトの更新や代替ツールを探す必要があるかもしれません。 - 破損したボリュームファイル: 解析対象の PGPDisk ボリュームファイルが破損している場合、
pgpdisk2john
は正しくハッシュを抽出できないことがあります。 - パフォーマンス: パスワードクラックは、パスワードの複雑さ、使用する辞書のサイズ、マシンの計算能力に大きく依存します。複雑なパスワードの場合、解析に非常に長い時間(数日、数週間、あるいはそれ以上)がかかる可能性があります。GPU を利用できる環境であれば、Hashcat などの GPU アクセラレーションに対応したツールの方が高速な場合があります (ただし、Hashcat が PGPDisk 形式を直接サポートしているか確認が必要です)。
- Symantec Drive Encryption との互換性: PGPDisk の後継である Symantec Drive Encryption (SED) で暗号化されたボリュームの場合、
pgpdisk2john
がそのまま利用できるか、あるいは別のツール (sed2john
のようなもの) が必要になるかは、SED のバージョンや設定によります。pgpdisk2john.py
のソースコードコメントには、SED 10.4.1 でテストされたとの記述がありますが、常に最新の状況を確認することが重要です。
セキュリティと倫理に関する考慮事項
パスワードクラッキングツールは強力ですが、その使用には責任が伴います。
- 正当な目的: これらのツールは、自分が所有するデータへのアクセス回復、または許可を得た上でのセキュリティ評価(ペネトレーションテスト)のためにのみ使用してください。
- 法的遵守: 他人のアカウントやシステムに対して無許可でパスワードクラックを試みることは、多くの国で違法行為となります。
- パスワード強度: このようなツールが存在することを理解し、自身のアカウントやシステムでは、推測されにくい、長く複雑なパスワード(またはパスフレーズ)を使用し、可能であれば多要素認証 (MFA) を有効にすることが重要です。
- データ保護: 機密データを PGPDisk のような古い技術で保護している場合は、より現代的で堅牢な暗号化ソリューションへの移行を検討してください。
まとめ
pgpdisk2john
は、John the Ripper スイートの便利なユーティリティであり、古い PGPDisk 暗号化ボリュームからパスワードハッシュを抽出し、John the Ripper 本体で解析可能にするための重要なステップです。適切な手順に従い、倫理的な範囲内で使用することで、パスワード回復やセキュリティ評価に役立てることができます。
しかし、PGPDisk 自体が古い技術であること、そしてパスワードクラックには時間と計算リソースが必要であることを念頭に置く必要があります。常に最新のセキュリティ情報を確認し、適切なツールと手法を選択することが重要です。🛡️
コメント