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暗号化ボリュームのメタデータが必要です。メタデータは通常、暗号化されたデバイスの最後のセクターに保存されています。
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`に含まれるハッシュに対応する解析済みのパスワードを表示します。
注意点と制限事項
- 法的・倫理的な配慮: パスワードクラッキングツールを使用する際は、必ず法的な許可と倫理的な配慮を持ってください。自分自身が所有するシステム、または明示的な許可を得たシステムに対してのみ使用してください。不正アクセスは重大な犯罪です。
- キーファイルの使用: 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の様々なモードやオプションを駆使することで、パスワード解析を試みることができます。ただし、常に法的な制約と倫理的な問題を念頭に置き、許可された範囲内でツールを使用することが不可欠です。また、強力なパスワードに対しては解析が成功しない可能性も理解しておく必要があります。🛡️
参考情報
- John the Ripper official website: https://www.openwall.com/john/
- FreeBSD Manual Pages – geli(8): https://man.freebsd.org/cgi/man.cgi?query=geli&sektion=8
- John the Ripper Wiki (Community): https://openwall.info/wiki/john/ (各種フォーマットの扱い方などの情報があります)
コメント