OpenBSDは、セキュリティに重点を置いたUnixライクなオペレーティングシステムとして知られています。その機能の一つに、ディスクボリュームを暗号化するsoftraid(4)
のcrypto
機能があります。これにより、物理的な盗難や不正アクセスからデータを保護することができます。しかし、万が一パスワードを忘れてしまった場合や、セキュリティ監査の一環としてパスワード強度を評価する必要がある場合、どうすればよいでしょうか? 🤔
ここで登場するのが、パスワードクラッキングツール「John the Ripper」 (通称 John) と、その補助ツールである openbsd_softraid2john
です。この記事では、openbsd_softraid2john
を使用してOpenBSDのsoftraid cryptoボリュームからパスワードハッシュを抽出し、John the Ripperで解析する方法を詳しく解説します。
OpenBSD softraid crypto とは?
OpenBSDのsoftraid(4)
は、ソフトウェアRAID機能を提供するフレームワークです。様々なRAIDレベル(0, 1, 4, 5, 6)やディスク連結(CONCAT)に加えて、crypto
というディスク全体を暗号化する機能を持っています。
crypto
ボリュームを作成する際には、パスフレーズを設定します。このパスフレーズを元に暗号化キーが生成され、ディスク上のデータはこのキーで暗号化されます。システム起動時やボリュームのマウント時にパスフレーズの入力が求められ、正しいパスフレーズを入力しない限り、ボリューム内のデータにアクセスすることはできません。
OpenBSD 6.1 (2017年4月11日リリース) 以降では、bioctl(8)
コマンドはキー派生関数としてbcrypt PBKDFを使用するようになり、パスワードに対するブルートフォース攻撃(総当たり攻撃)への耐性が向上しています。それ以前のバージョンでは、異なるキー派生メカニズムが使用されていました。openbsd_softraid2john
は、これらのボリュームメタデータから、John the Ripperが解析できる形式のハッシュ情報を抽出する役割を担います。
John the Ripper と *2john ツール
John the Ripper は、非常に強力で広く使われているパスワードクラッキングツールです。様々な種類のパスワードハッシュに対応しており、辞書攻撃、ブルートフォース攻撃、インクリメンタルモードなど、多様なクラッキング手法をサポートしています。
John the Ripper本体は、特定のフォーマットのハッシュ文字列を入力として受け取ります。しかし、実際のアプリケーションやシステムでは、パスワードハッシュは独自の形式でファイルやメタデータ内に保存されていることがよくあります。そこで、John the Ripperのコミュニティ版(Jumbo John)には、様々なデータソースからJohnが理解できる形式のハッシュを抽出するための補助スクリプト群が含まれています。これらは一般的に `*2john` という名前が付けられています (例: `zip2john`, `rar2john`, `pdf2john` など)。
openbsd_softraid2john
(多くの場合、Pythonスクリプト openbsd_softraid2john.py
として提供されます) も、この `*2john` ファミリーの一つであり、OpenBSD softraid cryptoボリュームのメタデータからパスワードハッシュ情報を抽出するために特化しています。
準備するもの
openbsd_softraid2john
を使用するには、以下のものが必要です。
-
John the Ripper (Jumbo版):
openbsd_softraid2john
スクリプトは、通常、John the Ripperの “Jumbo” バージョンに含まれています。多くのLinuxディストリビューションやmacOSのパッケージマネージャ(例: Homebrew)でインストールできます。あるいは、公式サイトからソースコードをダウンロードしてコンパイルすることも可能です。Kali Linux, Alpine Linux, FreeBSD Ports などにも含まれています。 - softraid cryptoボリュームのメタデータ: パスワードハッシュは、暗号化されたデータ本体ではなく、ボリュームのメタデータ領域に保存されています。通常、これは物理ディスクまたはディスクイメージの先頭部分に含まれます。対象となるディスク(またはそのイメージファイル)へのアクセス権が必要です。
-
Python環境:
openbsd_softraid2john.py
はPythonスクリプトであるため、実行にはPythonインタープリタが必要です。
openbsd_softraid2john の使い方
手順は大きく分けて2段階あります。
openbsd_softraid2john
を使ってメタデータからハッシュを抽出する。- 抽出したハッシュをJohn the Ripperに渡して解析する。
ステップ1: ハッシュの抽出
まず、John the Ripperのインストールディレクトリ内にある `run` ディレクトリ(またはそれに類する場所)に移動します。そこに `openbsd_softraid2john.py` スクリプトがあるはずです。
次に、解析対象のsoftraid cryptoボリュームが含まれるディスクデバイスまたはディスクイメージファイルを指定して、スクリプトを実行します。多くの場合、softraidのメタデータはディスクの先頭にあります。dd
コマンドなどを使用して、ディスクの先頭部分だけをファイルにコピーしておくと、処理が効率的になる場合があります(ただし、メタデータの正確な位置とサイズを把握している必要があります)。一般的には、ディスクデバイス全体または完全なディスクイメージを指定するのが最も確実です。
仮に、対象のディスクデバイスが /dev/sd1
であり、John the Ripperの `run` ディレクトリにいるとします。コマンドは以下のようになります。
cd /path/to/john/run # John the Ripperのrunディレクトリに移動
python ./openbsd_softraid2john.py /dev/sd1
ディスクイメージファイル (例: disk_image.img
) を使う場合は、以下のようになります。
python ./openbsd_softraid2john.py disk_image.img
スクリプトがメタデータ内のハッシュ情報を正しく認識できれば、標準出力にJohn the Ripperが理解できる形式のハッシュ文字列が出力されます。この出力は通常、以下のような形式をしています(これは一例であり、実際のハッシュ値や形式は異なります)。
volume_name:$softraid$*1*f7d9...*e8a0...
volume_name
はボリューム名(またはファイル名)、$softraid$
はハッシュタイプを示す識別子、その後に続く文字列が実際のハッシュデータやソルト、パラメータなどを含みます。
この出力されたハッシュ文字列を、後のステップでJohn the Ripperに渡すためにファイルに保存しておきましょう。例えば、hash.txt
というファイルに保存するには、リダイレクトを使います。
python ./openbsd_softraid2john.py /dev/sd1 > hash.txt
openbsd_softraid2john
は複数のハッシュを出力する可能性があります。
ステップ2: John the Ripper によるパスワード解析
ハッシュを抽出したら、いよいよJohn the Ripperの出番です。Johnは非常に多機能ですが、基本的な使い方は、解析したいハッシュが含まれるファイルを指定することです。
先ほど作成した hash.txt
ファイルを使って、John the Ripperを実行します。
../john hash.txt # runディレクトリから一つ上の階層にあるjohn本体を実行する場合
または、システムにインストールされた `john` コマンドを使う場合:
john hash.txt
John the Ripperは、hash.txt
内のハッシュ形式 ($softraid$
) を自動的に認識し、デフォルトのクラッキングモード(通常は single crack モード、次に wordlist モード、最後に incremental モード)で解析を開始します。
クラッキングモードの選択
より効率的に解析を進めるために、特定のクラッキングモードやオプションを指定できます。
-
辞書攻撃 (Wordlist Mode): 特定の単語リストファイル (辞書) を使ってパスワードを試します。よく使われるパスワードや関連性の高い単語を集めた辞書ファイルを用意すると効果的です。
password.lst
という辞書ファイルを使う場合:
John the Ripperにはデフォルトで基本的な辞書ファイル (john --wordlist=password.lst hash.txt
password.lst
) が付属していることが多いです。より強力な辞書は別途入手できます。 -
インクリメンタルモード (Incremental Mode): 定義された文字セットを使って、可能性のある全ての文字の組み合わせを順番に試します(ブルートフォース攻撃の一種)。非常に時間がかかる可能性がありますが、単純なパスワードなら見つけられることがあります。特定の文字セット(例: Alnum = 英数字)を指定する場合:
john --incremental=Alnum hash.txt
-
ルールベース攻撃 (Rules): 辞書攻撃と組み合わせて使われ、辞書内の単語に特定のルール(例: 大文字小文字変換、数字や記号の追加)を適用して試行回数を増やします。
john --wordlist=password.lst --rules=Jumbo hash.txt
解析結果の確認
John the Ripperがパスワードのクラッキングに成功すると、その結果は通常 john.pot
というファイル (ポットファイル) に保存されます。解析が完了した後や、途中で中断した場合でも、以下のコマンドでクラックに成功したパスワードを確認できます。
john --show hash.txt
このコマンドは、hash.txt
に含まれるハッシュのうち、john.pot
に記録されているクラック済みのパスワードを表示します。成功していれば、ハッシュ文字列の隣に対応するパスワードが表示されます 🎉。
解析には、パスワードの複雑さやマシンの計算能力によって、数分から数日、あるいはそれ以上かかることがあります。特にbcrypt PBKDFを使用している比較的新しいバージョンのOpenBSD softraid cryptoの場合、解析にはかなりの計算資源と時間が必要です。
重要な考慮事項
- 法的・倫理的な側面: 繰り返しになりますが、パスワードクラッキングツールの使用は、正当な権限を持つシステムに対してのみ許可されます。他者のシステムやデータに対して無許可で使用することは、重大な法的問題を引き起こす可能性があります。
- パフォーマンス: パスワード解析の速度は、CPUやGPUの性能、使用するクラッキングモード、パスワードの複雑さに大きく依存します。特にbcryptのような計算コストの高いハッシュ関数が使われている場合、高性能なハードウェア(特にGPU)を使用すると解析時間を大幅に短縮できることがあります。John the RipperはOpenCLやCUDAを利用したGPUアクセラレーションに対応しています。
-
John the Ripperのバージョン:
openbsd_softraid2john
や関連するフォーマットのサポートは、John the Ripperのバージョンによって異なる場合があります。常に最新のJumboバージョンを使用することをお勧めします。 -
メタデータの破損: softraidボリュームのメタデータが破損している場合、
openbsd_softraid2john
が正しくハッシュを抽出できない可能性があります。
まとめ
openbsd_softraid2john
は、John the Ripper スイートの一部として、OpenBSDのsoftraid cryptoボリュームからパスワードハッシュを抽出するための重要なツールです。このツールを使ってハッシュを抽出し、John the Ripper本体で解析することで、忘れてしまったパスワードの回復や、システムのセキュリティ監査を行うことが可能になります。
手順自体は比較的単純ですが、パスワード解析には時間と計算資源が必要であり、特に最近のOpenBSDバージョンで採用されているbcrypt PBKDFは解析を困難にします。ツールの使用にあたっては、常に法的な側面と倫理的な問題を念頭に置き、責任ある行動を心がけてください。🛡️
OpenBSDのセキュリティ機能は強力ですが、万が一の事態に備えて、パスワード管理の重要性を再認識するきっかけにもなるでしょう。
コメント