pem2john 徹底解説:パスワードで保護されたPEMファイルのハッシュ抽出ガイド

セキュリティツール

John the Ripper (JtR) は、広く利用されているオープンソースのパスワードクラッキングツールです。システム管理者が弱いパスワードを発見したり、ペネトレーションテスターがシステムのセキュリティ強度を評価したりするのに役立ちます。JtRは、単体でも強力なツールですが、その真価は、さまざまなファイル形式からパスワードハッシュを抽出するための補助ツール群と連携することで発揮されます。

その中でも、pem2john は、PEM (Privacy Enhanced Mail) 形式のファイル、特にパスワードで暗号化された秘密鍵ファイルから、JtRが解析可能なハッシュ値を抽出するために特化したツールです。この記事では、pem2john の基本的な使い方から、具体的な使用例、そしてセキュリティ上の注意点まで、詳細に解説していきます。😊

pem2john とは?

pem2john は、John the Ripper スイートに含まれるユーティリティスクリプト(通常はPythonスクリプト pem2john.py)です。その主な目的は、パスワードで保護されたPEM形式のファイル(特に秘密鍵ファイルなど)を読み込み、そのパスワードをクラックするために必要な情報をハッシュ形式で出力することです。

PEMファイルは、公開鍵、秘密鍵、証明書などを格納するために広く使われているテキストベースのフォーマットです。ヘッダー行(例: -----BEGIN RSA PRIVATE KEY-----)とフッター行(例: -----END RSA PRIVATE KEY-----)で囲まれ、その間にBase64エンコードされたデータが含まれています。秘密鍵ファイルは、不正アクセスを防ぐためにパスワード(パスフレーズ)で暗号化されていることが多く、pem2john はこの暗号化された鍵ファイルからパスワードクラックに必要な情報を抽出する役割を担います。

pem2john は、John the Ripper Jumbo パッケージの一部として提供されており、Kali Linuxなどのペネトレーションテスト用ディストリビューションには標準で含まれていることが多いです。通常、/usr/share/john//opt/john/ ディレクトリ内などに他の *2john ツールと共に見つけることができます。

John the Ripper (JtR) について: JtRは1996年に最初にリリースされた、歴史のあるパスワードクラッキングツールです。様々なOSで利用可能で、パスワード強度テスト、パスワードリカバリ、暗号化(ハッシュ化)されたパスワードのブルートフォース攻撃や辞書攻撃による解読に用いられます。

pem2john の使い方

基本的な構文

pem2john の基本的な使い方は非常にシンプルです。ターミナルで以下のコマンドを実行します。

pem2john <対象のPEMファイル>

または、Pythonスクリプトとして直接実行する場合:

python /path/to/pem2john.py <対象のPEMファイル>

このコマンドを実行すると、標準出力にJohn the Ripperが解読できる形式のハッシュ文字列が出力されます。通常、この出力をファイルにリダイレクトして保存し、後でJohn the Ripperの入力として使用します。

pem2john mykey.pem > hash.txt

出力されるハッシュ形式

pem2john が出力するハッシュ形式は、元のPEMファイルの種類や暗号化方式によって異なりますが、一般的には以下のような構造を持ちます。

$PEM$<バージョン>$<暗号スイート>$<ソルト>$<反復回数>$<初期化ベクトル>$<暗号化された鍵の長さ>$<暗号化された鍵データ>

例えば、PKCS#8形式で暗号化された秘密鍵の場合、以下のような形式になることがあります。

$PEM$1$aes-256-cbc$d4e5f6...$10000$abcdef...$1024$fedcba...

このハッシュ文字列には、John the Ripperがパスワードをクラックするために必要な情報(使用されている暗号アルゴリズム、ソルト、反復回数、暗号化されたデータなど)がすべて含まれています。

サポートされているPEMファイル形式

pem2john は、主にパスワードで暗号化された以下のタイプのPEMファイルをサポートしています。

  • 秘密鍵ファイル: RSA, DSA, EC (Elliptic Curve) などの秘密鍵。これらは通常 .pem.key といった拡張子を持ちます。
  • PKCS#8 形式の秘密鍵: より新しい標準形式であるPKCS#8でエンコード・暗号化された秘密鍵。
  • 場合によっては、他の暗号化されたPEM形式データ(証明書などを含む可能性もありますが、主に秘密鍵のパスワードクラックが目的です)。

ただし、すべての暗号化方式やPEMバリアントに対応しているわけではありません。例えば、特定の暗号スイート(例:比較的新しいAEAD暗号など)や、標準的でない形式のPEMファイルでは、ハッシュの抽出に失敗することがあります。GitHubのIssueトラッカーなどを見ると、過去に特定の暗号スイート(例:aes-128-cbc, aes-192-cbc, aes-256-cbc を使用した PKCS#8)のサポートが追加された経緯や、特定のPRFアルゴリズム(SHA-256など)の扱いで問題があったことなどが報告されています(2018年3月、2021年9月)。

もし pem2john でうまくハッシュを抽出できない場合、他の *2john ツール(例えば ssh2johnopenssl2john)を試すことが推奨される場合もあります。特に、SSHで使用される形式の秘密鍵(OpenSSH形式など)の場合は、ssh2john の方が適切な場合があります。

John the Ripper との連携:実践的なクラッキング例

pem2john でハッシュを抽出したら、次はそのハッシュを使ってJohn the Ripperでパスワードをクラックします。

ステップ1: ハッシュの抽出

まず、パスワードで保護されたPEMファイル(例: encrypted_private_key.pem)からハッシュを抽出し、ファイル(例: key_hash.txt)に保存します。

pem2john encrypted_private_key.pem > key_hash.txt

ステップ2: John the Ripper でクラック

次に、John the Ripper を使って key_hash.txt に保存されたハッシュをクラックします。John the Ripperにはいくつかのクラッキングモードがあります。

1. シングルクラックモード (Single Crack Mode)

最も基本的なモードで、高速に動作します。主に単純なパスワードや、ファイル名などから推測可能なパスワードを試します。

john key_hash.txt

または、明示的に指定する場合:

john --single key_hash.txt

2. 辞書モード (Wordlist Mode)

指定した単語リスト(辞書ファイル)に含まれる単語をパスワード候補として試します。最も一般的に使用されるモードの一つです。有名な辞書ファイルとして rockyou.txt などがあります。

john --wordlist=/path/to/wordlist.txt key_hash.txt

Kali Linuxなどでは、rockyou.txt/usr/share/wordlists/rockyou.txt.gz (展開が必要) などに配置されていることが多いです。

# rockyou.txt.gz を展開 (初回のみ)
sudo gzip -d /usr/share/wordlists/rockyou.txt.gz

# 辞書モードでクラック実行
john --wordlist=/usr/share/wordlists/rockyou.txt key_hash.txt

さらに、--rules オプションを使って、辞書の単語に特定のルール(大文字小文字変換、数字や記号の付加など)を適用し、より複雑なパスワード候補を生成することも可能です。

john --wordlist=/usr/share/wordlists/rockyou.txt --rules key_hash.txt

3. インクリメンタルモード (Incremental Mode)

ブルートフォース(総当たり)攻撃を行うモードです。指定された文字セット(数字、英小文字、英大文字、記号など)の組み合わせをすべて試します。非常に時間がかかる可能性がありますが、辞書に含まれない複雑なパスワードも発見できる可能性があります。

john --incremental key_hash.txt

特定の文字種を指定することもできます(例:数字のみ)。

john --incremental=Digits key_hash.txt

ステップ3: クラックされたパスワードの表示

John the Ripper がパスワードのクラックに成功すると、その結果は通常 ~/.john/john.pot (potファイル) というファイルに保存されます。このファイルには、クラックされたハッシュと対応する平文パスワードが記録されます。

特定のハッシュファイルに対してクラックされたパスワードを表示するには、--show オプションを使用します。

john --show key_hash.txt

これにより、key_hash.txt 内のハッシュに対応するクラック済みのパスワードが表示されます。もしパスワードがまだクラックされていない場合は、”0 password hashes cracked, 1 left” のようなメッセージが表示されます。

potファイル全体の内容を確認するには、cat コマンドなどを使用します。

cat ~/.john/john.pot

John the Ripperは、一度クラックに成功したハッシュを再度クラックしようとはしません。そのため、同じハッシュファイルに対して再度 john コマンドを実行しても、「No password hashes left to crack」というメッセージが表示されることがあります。

注意点 ⚠️

  • John the Ripperの実行には時間がかかる場合があります。特に辞書モードやインクリメンタルモードでは、計算リソースと時間に大きく依存します。
  • 使用する辞書ファイルの品質やサイズが、辞書モードの成功率に大きく影響します。
  • ハッシュのフォーマットをJohn the Ripperが自動で認識できない場合、--format= オプションで明示的に指定する必要がある場合があります。pem2johnで生成されたハッシュの場合、通常は自動認識されますが、問題が発生した場合は john --list=formats でサポートされているフォーマットを確認してください。

セキュリティ上の考慮事項

pem2john と John the Ripper を使用してPEMファイルのパスワードをクラックする能力は、セキュリティ評価やインシデント対応において非常に有用ですが、同時に悪用されるリスクも伴います。

  • 弱いパスワードのリスク: 暗号化された秘密鍵ファイルに設定されたパスワードが弱い(短い、単純、辞書に載っている単語など)場合、比較的短時間でクラックされる可能性があります。秘密鍵が漏洩すると、通信の盗聴、サーバーへの不正アクセス、デジタル署名の偽造など、深刻なセキュリティインシデントにつながる可能性があります。
  • パスワードの重要性: PEMファイル、特に秘密鍵を保護するパスワード(パスフレーズ)は、非常に強力なものを設定することが不可欠です。長くて複雑で、推測されにくいパスワードを使用してください。
  • アクセス制御: 秘密鍵ファイル自体へのアクセスを厳格に管理することも重要です。不要なユーザーやプロセスがファイルにアクセスできないように、適切なファイルパーミッションを設定してください。
  • 倫理的な使用: pem2john や John the Ripper などのツールは、正当な権限を持つシステムやファイルのセキュリティテスト、または自身が所有するファイルのパスワードリカバリといった倫理的な目的でのみ使用してください。許可なく他者のファイルを解析したり、パスワードをクラックしたりする行為は、法律や規制に違反する可能性があります。
警告: 強力なパスワードを設定し、秘密鍵ファイルを安全に保管することは、デジタルセキュリティの基本です。これらの対策を怠ると、重大なリスクにさらされる可能性があります。

まとめ

pem2john は、John the Ripper スイートの強力な補助ツールであり、パスワードで保護されたPEMファイルからパスワードクラック用のハッシュを抽出する上で不可欠な役割を果たします。この記事では、その基本的な使い方、John the Ripper との連携方法、そして関連するセキュリティ上の注意点について解説しました。

適切な知識と倫理観を持ってこれらのツールを使用することで、システムのセキュリティ強度を評価し、潜在的な脆弱性を特定・修正することが可能になります。常に最新の情報を確認し、安全かつ責任ある方法でツールを活用してください。🛡️

コメント

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