geli2johnの使い方:FreeBSD GELI暗号化ボリュームのパスワード解析

セキュリティツール

John the Ripper (JtR) は、パスワードのセキュリティ監査やパスワードリカバリのための強力なツールです。様々な種類のパスワードハッシュや暗号化フォーマットに対応しており、その中にはFreeBSDのディスク暗号化機能であるGELI (GEOM ELI) も含まれます。

geli2john は、John the Ripperスイートに含まれるPythonスクリプトで、GELIで暗号化されたボリュームのメタデータからJohn the Ripperが解析できる形式のハッシュ情報を抽出するために使用されます。パスワードを忘れてしまった場合や、システムのセキュリティ監査の一環としてパスワードの強度をテストする場合などに役立ちます。

この記事では、geli2johnの基本的な使い方と、抽出したハッシュをJohn the Ripperで解析する手順について詳しく解説します。😊

GELIとは?

GELI (GEOM ELI) は、FreeBSDオペレーティングシステムに組み込まれているディスク暗号化フレームワークです。ディスク全体や特定のパーティションを暗号化し、不正なアクセスからデータを保護するために使用されます。

GELIは、パスフレーズ、キーファイル、またはその両方を使用してマスターキーを保護します。このマスターキーは、実際にデータを暗号化/復号化するためのデータキーを暗号化するために使用されます。暗号化されたボリュームにアクセスするには、正しいパスフレーズまたはキーファイルを提供する必要があります。

GELIは、AES-XTSなどの強力な暗号化アルゴリズムや、データの完全性を保証するためのデータ認証機能もサポートしています。

GELIに関するより詳細な情報は、FreeBSDの公式マニュアル geli(8) を参照してください。

geli2johnを使用するための前提条件

geli2johnを使用するには、以下のものが必要です。

  • John the Ripper (Jumbo版): geli2johnはJohn the Ripper Jumbo版に含まれるツールです。通常のJohn the Ripperでは提供されていない場合があります。多くのLinuxディストリビューションやmacOS (Homebrewなど)、FreeBSDのPorts Collectionからインストールできます。Kali Linuxなどのペネトレーションテスト用ディストリビューションにはデフォルトで含まれていることが多いです。
  • GELIメタデータ: パスワード解析の対象となるGELI暗号化ボリュームのメタデータが必要です。メタデータは通常、暗号化されたデバイスの最後のセクターに保存されています。
注意: geli2johnはパスワードそのものを直接復元するツールではありません。パスワードから生成されたハッシュ情報を抽出し、John the Ripperが総当たり攻撃や辞書攻撃によって元のパスワードを推測できるようにするための準備を行うツールです。パスワードの複雑さによっては、解析に非常に長い時間がかかるか、解析できない場合もあります。

GELIメタデータの取得方法

geli2johnを実行する前に、対象となるGELIボリュームのメタデータをファイルとして抽出する必要があります。メタデータは通常、暗号化されたデバイスの末尾に格納されています。

FreeBSDシステム上で`geli`コマンドを使用してメタデータをダンプまたはバックアップできます。

方法1: geli dumpコマンドを使用する

`geli dump`コマンドは、指定したプロバイダ(デバイス)からメタデータをダンプします。

# geli dump /dev/ada0p2 > geli_metadata.dump

上記の例では、`/dev/ada0p2`デバイスのメタデータを`geli_metadata.dump`というファイルに出力しています。デバイス名は環境に合わせて変更してください。

方法2: geli backupコマンドを使用する

GELIボリュームを初期化 (`geli init`) する際に、メタデータのバックアップが自動的に作成されることがよくあります(通常は`/var/backups/`ディレクトリに保存されます)。また、手動でバックアップを作成することも可能です。

# geli backup /dev/ada0p2 /path/to/geli_metadata.backup

このコマンドは、`/dev/ada0p2`のメタデータを`/path/to/geli_metadata.backup`ファイルに保存します。

GELIボリュームが稼働していないシステム(例: フォレンジック調査のために取り外されたディスク)からメタデータを抽出する場合は、`dd`コマンドなどを使用してデバイスの最後の数セクターをコピーする必要があります。GELIメタデータは通常、デバイスの最後のセクターに保存されますが、サイズは設定によって異なる可能性があります(多くの場合512バイトまたは4096バイト)。不確かな場合は、少し大きめに最後の数MBをコピーしておくと良いでしょう。

# dd if=/dev/sdX of=geli_metadata.raw bs=512 skip=$(($(blockdev --getsz /dev/sdX) - 1)) count=1

(上記はLinuxでのddコマンド例です。`sdX`は対象デバイス名、`blockdev`が利用できない場合は`fdisk -l`などでセクタ数を確認してください。)

重要: メタデータの取得操作は慎重に行ってください。誤った操作はデータを破壊する可能性があります。可能であれば、元のデバイスの完全なディスクイメージを取得し、そのイメージに対して操作を行うことを強く推奨します。

geli2johnの実行方法

GELIメタデータファイルが準備できたら、geli2johnスクリプトを実行してJohn the Ripper用のハッシュ文字列を抽出します。

geli2johnスクリプトは通常、John the Ripperの実行可能ファイルと同じディレクトリ、または`../run/`や`../share/john/`などのサブディレクトリにあります。パスが通っていない場合は、スクリプトのフルパスを指定する必要があります。

基本的な使い方

$ python /path/to/john/run/geli2john.py geli_metadata.backup > geli_hash.txt

または、John the Ripperのディレクトリ構成によっては以下のようになる場合もあります。

$ /usr/share/john/geli2john.py geli_metadata.dump > geli_hash.txt

このコマンドは、`geli_metadata.backup` (または `.dump`) ファイルを読み込み、抽出したハッシュ情報を標準出力に出力します。リダイレクト (`>`) を使って、その出力を`geli_hash.txt`というファイルに保存しています。

成功すると、`geli_hash.txt`ファイルには以下のような形式の文字列が格納されます(実際の値は異なります)。

device_name:$geli$*version*flags*keylen*salt*iterations*encrypted_master_key*mac

この文字列には、GELIのバージョン、フラグ、キー長、ソルト、パスワード導出のための反復回数、暗号化されたマスターキー、そしてメッセージ認証コード(MAC)などの情報が含まれています。John the Ripperはこの情報を使ってパスワードのクラッキングを試みます。

John the Ripperによるハッシュ解析

geli2johnでハッシュファイル (`geli_hash.txt`) を作成したら、いよいよJohn the Ripperを使ってパスワード解析を実行します。

基本的な解析コマンド

$ john geli_hash.txt

このコマンドを実行すると、John the Ripperはデフォルトのモード(シングルクラックモード、辞書モード、インクリメンタルモード)を順番に試してパスワードの解析を行います。

辞書ファイルを使用する

特定の辞書ファイル(例: `password.lst`)を使用したい場合は、`–wordlist`オプションを指定します。

$ john --wordlist=/path/to/password.lst geli_hash.txt

有名な辞書ファイルには`rockyou.txt`などがあります。より効果的な解析のためには、ターゲットに関連する可能性のある単語(ユーザー名、サービス名、組織名など)を含むカスタム辞書を作成することも有効です。

ルールを使用する

辞書ファイルと組み合わせてルールを使用すると、辞書内の単語に一般的な変形(大文字化、数字の追加、記号の置換など)を加えて試行することができます。

$ john --wordlist=/path/to/password.lst --rules=Jumbo geli_hash.txt

`–rules=Jumbo`は、John the Ripper Jumbo版に含まれる多くのルールセットを適用します。特定のルールセットを指定することも可能です。

インクリメンタルモードを使用する

インクリメンタルモードは、指定された文字セットを使って可能性のあるすべてのパスワードの組み合わせを生成して試します。辞書攻撃でパスワードが見つからない場合に有効ですが、非常に時間がかかる可能性があります。

$ john --incremental=Digits geli_hash.txt

上記の例では、数字のみ (`Digits`) を使ったインクリメンタルモードを実行します。他にも`Alnum`(英数字)、`All`(すべての表示可能文字)などのモードがあります。

解析結果の表示

John the Ripperがパスワードの解析に成功すると、その結果は通常`$JOHN/john.pot`(`$JOHN`はJohn the Ripperのホームディレクトリ)というファイルに保存されます。

解析済みのパスワードを表示するには、`–show`オプションを使用します。

$ john --show geli_hash.txt

このコマンドは、`geli_hash.txt`に含まれるハッシュに対応する解析済みのパスワードを表示します。

ヒント: John the Ripperには非常に多くのオプションがあります。`john –help`コマンドで利用可能なオプションの一覧を確認できます。また、解析にはCPUパワーと時間が必要です。複雑なパスワードの場合は数日から数週間、あるいはそれ以上かかることもあります。GPUを利用した高速化オプション(OpenCLなど)が利用可能な場合もあります。

注意点と制限事項

  • 法的・倫理的な配慮: パスワードクラッキングツールを使用する際は、必ず法的な許可と倫理的な配慮を持ってください。自分自身が所有するシステム、または明示的な許可を得たシステムに対してのみ使用してください。不正アクセスは重大な犯罪です。
  • キーファイルの使用: GELIがパスフレーズではなくキーファイルのみ、またはパスフレーズとキーファイルの両方で保護されている場合、geli2johnとJohn the Ripperだけではパスワード(この場合はキーファイルの内容)を特定することは困難または不可能です。キーファイル自体を入手する必要があります。
  • パスワードの強度: 長くて複雑なパスフレーズ(大文字、小文字、数字、記号を組み合わせたランダムな文字列など)は、現在の計算能力では解析が非常に困難、あるいは事実上不可能です。
  • John the Ripperのバージョン: 必ずJohn the Ripper Jumbo版を使用してください。古いバージョンや非Jumbo版ではgeli2johnスクリプトやGELIハッシュフォーマットに対応していない可能性があります。
  • メタデータの破損: GELIメタデータが破損している場合、geli2johnは正しくハッシュを抽出できない可能性があります。

まとめ

geli2johnは、FreeBSDのGELI暗号化ボリュームのパスワード強度をテストしたり、忘れたパスワードを回復したりするための重要なツールです。GELIメタデータからJohn the Ripperが解析可能なハッシュ形式を抽出し、John the Ripperの強力なクラッキング機能を利用することができます。

正しい手順でメタデータを取得し、geli2johnを実行してハッシュを生成、そしてJohn the Ripperの様々なモードやオプションを駆使することで、パスワード解析を試みることができます。ただし、常に法的な制約と倫理的な問題を念頭に置き、許可された範囲内でツールを使用することが不可欠です。また、強力なパスワードに対しては解析が成功しない可能性も理解しておく必要があります。🛡️

参考情報

コメント

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