John the Ripper で IKE 事前共有鍵をクラックするための準備
はじめに: ikescan2john とは?
ikescan2john
は、有名なパスワードクラッキングツールである John the Ripper (JtR) のユーティリティスクリプト群(run
ディレクトリ内によく含まれています)の一つです。その主な目的は、VPN (Virtual Private Network) の接続確立に使われるプロトコルである IKE (Internet Key Exchange) のハンドシェイク情報を解析し、特に事前共有鍵 (Pre-Shared Key, PSK) 方式で認証を行う場合に、その鍵をクラックするためのハッシュ形式データを生成することです。
具体的には、ikescan2john
は ike-scan
という別のツールが出力した結果(特に保存されたパケットデータ)を入力として受け取ります。ike-scan
は、IKE/IPsec を使用している VPN ゲートウェイを検出し、その設定情報をフィンガープリントするためのツールです。ike-scan
を用いて取得した IKE ハンドシェイクの応答パケット情報から、ikescan2john
が JtR で解析可能な形式のハッシュ文字列を抽出・整形します。
このブログ記事では、ikescan2john
がどのような場面で役立ち、具体的にどのように使用するのか、そして関連するツールやプロトコルについて詳しく解説していきます。VPN のセキュリティ評価やペネトレーションテストに関わる方にとって、重要なツールの一つとなるでしょう。💪
IKE/IPsec と事前共有鍵 (PSK) について
IKE と IPsec の役割
インターネットのような信頼性の低いネットワーク上で安全な通信を実現するために、IPsec (Internet Protocol Security) というプロトコルスイートが広く利用されています。IPsec は、データの暗号化、認証、完全性保護といった機能を提供します。
しかし、IPsec を利用するためには、通信相手との間でセキュリティパラメータ(使用する暗号アルゴリズム、鍵など)を合意し、安全に鍵を交換する必要があります。この役割を担うのが IKE (Internet Key Exchange) プロトコルです。IKE は通常、UDP ポート 500 (および NAT トラバーサル時は 4500) を使用して、IPsec のための Security Association (SA) を確立します。
IKE には主に二つのバージョン (IKEv1 と IKEv2) があり、それぞれ動作モード(フェーズ1、フェーズ2)が存在します。
事前共有鍵 (PSK) 認証
IKE では、通信相手が正当な相手であることを確認するための認証が必要です。認証方法にはいくつか種類がありますが、最もシンプルで広く使われている方法の一つが「事前共有鍵 (Pre-Shared Key, PSK)」です。
PSK 認証では、通信を行う両端(例えば、リモートワーカーの PC と会社の VPN ゲートウェイ)にあらかじめ同じ「秘密の合言葉」(=事前共有鍵)を設定しておきます。IKE のハンドシェイクプロセス(特にフェーズ1)の中で、この PSK を使って計算されたハッシュ値を交換し、互いが正しい鍵を持っていることを確認します。
PSK は設定が簡単な反面、以下のような課題も指摘されています。
- 鍵の管理: 多数のデバイスで同じ鍵を共有すると、鍵の変更や漏洩時の影響範囲が大きくなります。
- 鍵の強度: 短い、あるいは推測しやすい PSK が設定されている場合、総当たり攻撃や辞書攻撃によって鍵が特定されるリスクがあります。
ikescan2john
は、まさにこの「推測しやすい PSK」が使われている場合に、それを発見するためのプロセスの一部を担うツールなのです。⚠️
必要なツール (前提条件)
ikescan2john
を利用して IKE PSK のクラッキングを試みるには、以下のツールが必要です。
-
ike-scan:
- 目的: ターゲットの VPN ゲートウェイに対して IKE ハンドシェイクを試み、応答を取得・分析する。特に、PSK 認証を使用しているかどうか、どのような暗号・ハッシュアルゴリズムに対応しているかを特定する。
- 入手: Linux ディストリビューションのパッケージマネージャ (
apt
,yum
など) でインストールできることが多いです (例:sudo apt install ike-scan
)。または、公式 GitHub リポジトリからソースコードを入手してコンパイルすることも可能です。
-
John the Ripper (JtR):
- 目的:
ikescan2john
が生成したハッシュデータを入力として、実際の PSK をクラッキング(特定)する。 - 入手: Openwall の公式サイトから、安定版または開発版 (bleeding-jumbo) をダウンロードできます。多くのペネトレーションテスト用 Linux ディストリビューション (Kali Linux など) にはプリインストールされています。
ikescan2john
スクリプトは、通常 JtR のパッケージに含まれています (/usr/share/john/
や JtR の展開ディレクトリ内のrun
などに配置されています)。
- 目的:
💡 重要: ikescan2john
は単体で動作するものではなく、ike-scan
の出力と JtR のクラッキング能力を繋ぐ「橋渡し役」のスクリプトです。
ike-scan の使い方: PSK クラックのための情報収集
ikescan2john
に渡すための適切な情報を得るには、ike-scan
を正しく使う必要があります。単に ike-scan <ターゲットIP>
を実行するだけでは不十分な場合が多いです。PSK のクラックに必要な情報を得るためには、VPN ゲートウェイからの応答パケットをキャプチャする必要があります。
基本的な ike-scan コマンド
ターゲットの VPN ゲートウェイ (例: 192.168.1.1
) に対して、基本的なフィンガープリントを行うコマンドは以下のようになります。
ike-scan 192.168.1.1
これにより、ターゲットが IKE に応答するかどうか、どのような暗号化方式 (Transform) を提案してくるかなどが分かります。
PSK クラックに必要な情報を得るためのオプション
PSK クラックに必要なハンドシェイク情報を取得するには、より詳細なオプションを指定する必要があります。特に重要なのは以下のオプションです。
-
-P<ファイル名>
または--pskcrack=<ファイル名>
: VPN ゲートウェイからの応答パケットに含まれる、PSK クラックに必要な情報 (Nonce, ハッシュなど) を指定したファイルに保存します。このオプションがikescan2john
を使う上で最も重要です。 -
-A
または--aggressive
: IKEv1 のアグレッシブモード (Aggressive Mode) を試みます。アグレッシブモードは、メインモード (Main Mode) よりも少ないメッセージ交換で SA を確立しようとするため、一部の情報が暗号化されずに送信される場合があります。PSK 認証と組み合わせると、ハンドシェイク情報から PSK を推測する攻撃 (オフライン辞書攻撃) が可能になることがあります。ikescan2john
は主にこのモードの応答パケットを処理対象とします。 -
--id=<ID文字列>
: IKE ハンドシェイク時に使用する ID (アイデンティティ) を指定します。PSK 認証では、特定の ID (グループ名など) と PSK が紐づけられていることが一般的です。ターゲットの VPN が要求する ID が不明な場合は、デフォルトの ID や一般的な ID (例: “group”, “vpn”, “test” など) を試すか、何らかの方法で正しい ID を特定する必要があります。 -
-M
または--multiline
: 受信したパケットのペイロードを複数行で表示します。デバッグや詳細な分析に役立ちます。
コマンド実行例
ターゲット IP 192.168.1.1
に対して、アグレッシブモードで、ID “mygroupvpn” を使用し、クラックに必要な情報を ike-response.txt
というファイルに保存する場合のコマンド例は以下のようになります。
sudo ike-scan -A --id=mygroupvpn -Pike-response.txt 192.168.1.1
(ike-scan
は raw ソケットを使用することがあるため、sudo
が必要になる場合があります)
このコマンドが成功し、ターゲットがアグレッシブモードの PSK 認証に応答した場合、ike-response.txt
には以下のような形式で情報が書き込まれます(これは一例であり、実際の内容は異なります)。
192.168.1.1 Aggressive Mode Handshake returned HDR=..., SA=..., KE=..., Nonce=..., ID=..., HASH=... [encrypted HASH/etc]
この ike-response.txt
ファイルが、次のステップである ikescan2john
の入力となります。ファイルが空だったり、期待する情報が含まれていない場合は、ike-scan
のオプション (特に ID や試行する暗号スイートなど) を変更して再試行する必要があります。🔄
ikescan2john の使い方: ハッシュ形式への変換
ike-scan
で PSK クラックに必要な情報が含まれた応答ファイル (例: ike-response.txt
) を取得できたら、いよいよ ikescan2john
の出番です。このスクリプトは非常にシンプルで、通常は入力ファイル名を引数に取り、標準出力に John the Ripper が理解できる形式のハッシュ文字列を出力します。
基本的な使い方
ikescan2john
スクリプトは通常、John the Ripper のインストールディレクトリ内の run
ディレクトリにあります。パスが通っていない場合は、フルパスで指定する必要があります。
基本的なコマンド構文は以下の通りです。
/path/to/john/run/ikescan2john <ike-scanの出力ファイル> > <JtR用ハッシュファイル>
例えば、John the Ripper が /opt/john/
にインストールされており、ike-scan
の出力が ike-response.txt
である場合、以下のように実行します。
/opt/john/run/ikescan2john ike-response.txt > ike_hash.txt
これにより、ike-response.txt
の内容が解析され、John the Ripper でクラック可能な形式に変換されたものが ike_hash.txt
ファイルに出力されます。
出力されるハッシュ形式の例
ikescan2john
が生成するハッシュファイル (ike_hash.txt
) の中身は、ターゲットの IP アドレスや IKE ハンドシェイクから抽出された様々な情報(Nonce、ハッシュ値、SA ペイロードなど)が特定の形式で連結された文字列になります。John the Ripper はこの文字列を解析し、どの部分がどの情報に対応するかを理解してクラッキング処理を行います。
具体的な形式は IKE のバージョンやモード、John the Ripper のバージョンによって若干異なる可能性がありますが、以下のような形式になることが多いです (これはあくまで概念的な例です)。
ターゲットIP:$ike-psk$ヘッダ情報$SAペイロード$鍵交換データ$Nonceデータ$IDペイロード$ハッシュデータ*その他の情報...
重要なのは、この文字列全体が John the Ripper によって「一つのパスワードハッシュ」として扱われるということです。
⚠️ 注意: ike-scan
の出力ファイル (-P
オプションで保存したもの) に、PSK クラックに必要な情報がすべて含まれていない場合、ikescan2john
はエラーを出力するか、不完全なハッシュ文字列を生成する可能性があります。その場合は、ike-scan
の実行方法を見直す必要があります。
John the Ripper でのクラッキング実行
ikescan2john
によってハッシュファイル (例: ike_hash.txt
) が生成できたら、最後のステップとして John the Ripper を使って実際の PSK をクラックします。
辞書攻撃 (Wordlist Mode)
最も一般的な方法は、パスワードの候補リスト(辞書ファイル、ワードリスト)を使って攻撃する「辞書攻撃」モードです。
john --wordlist=/path/to/wordlist.txt ike_hash.txt
ここで、/path/to/wordlist.txt
は、PSK として使われていそうな単語やフレーズを集めたファイルのパスです。辞書ファイルが強力であるほど、クラックの成功率は高まります。有名な辞書ファイルには rockyou.txt
などがあります。
インクリメンタルモード (Incremental Mode)
John the Ripper は、辞書ファイルを使わずに、定義された文字セットから可能性のある全ての組み合わせを試す「インクリメンタルモード」もサポートしています。
john --incremental ike_hash.txt
このモードは、単純な鍵や短い鍵に対しては有効ですが、長く複雑な鍵の場合は非常に時間がかかります(現実的な時間では終わらないことも多いです)。
クラック結果の表示
John the Ripper が PSK のクラックに成功すると、通常はクラックされた鍵を画面に表示します。後で確認したい場合は、以下のコマンドを使用します。
john --show ike_hash.txt
成功した場合、ハッシュ文字列に対応する形でクラックされた PSK が表示されます。
ターゲットIP:...:クラックされたPSK:...
🎉 クラックに成功すれば、ターゲット VPN の事前共有鍵が判明したことになります!
ただし、クラックにかかる時間は、PSK の複雑さ、使用する辞書ファイルの質、そして計算に使用するマシンの性能に大きく依存します。単純な鍵でなければ、数時間、数日、あるいはそれ以上かかることも珍しくありません。
重要な考慮事項と倫理
ikescan2john
と John the Ripper を使った PSK クラッキングは、VPN のセキュリティ強度を評価する上で有効な手法となり得ますが、以下の点に注意が必要です。
- 成功の保証はない: クラックの成否は、設定されている PSK の強度に完全に依存します。長く、ランダムで、推測困難な PSK が使用されている場合、クラックは事実上不可能です。また、適切なワードリストを用意できるかどうかも重要です。
-
ike-scan
の限界:ike-scan
がターゲットの VPN ゲートウェイから適切な応答(特にアグレッシブモードでの PSK 認証のハンドシェイク情報)を引き出せない場合があります。ファイアウォールで IKE パケットがブロックされていたり、ゲートウェイが特定の設定(特定の ID や暗号スイートのみを受け付けるなど)になっている場合、情報収集自体が困難です。 -
法的・倫理的な問題: 許可なく他者の VPN システムに対して
ike-scan
を実行したり、取得した情報を使って PSK のクラッキングを試みることは、不正アクセス行為やその他の法律に抵触する可能性が非常に高いです。これらのツールは、自身が管理するシステム、または明確な許可を得たシステムに対してのみ、セキュリティ評価やテストの目的で使用してください。無許可のシステムへの攻撃は絶対に行わないでください。🚫⚖️ -
ツールのアップデート:
ike-scan
,ikescan2john
, John the Ripper はそれぞれ開発が続けられています。最新の機能や修正を利用するために、定期的にツールをアップデートすることを推奨します。
まとめ
ikescan2john
は、ike-scan
ツールと John the Ripper を連携させるための重要なユーティリティです。ike-scan
を用いて IKE/IPsec VPN ゲートウェイ(特に IKEv1 アグレッシブモード + PSK 認証を使用しているもの)からハンドシェイク応答パケットを取得し、その情報を ikescan2john
に渡すことで、John the Ripper でクラック可能なハッシュ形式データを生成できます。
このプロセスを通じて、脆弱な(短すぎる、推測しやすい)事前共有鍵が使用されていないかをテストすることが可能です。しかし、ツールの使用には技術的な知識と共に、法的な側面や倫理的な配慮が不可欠です。
適切な状況と許可の下で正しく使用すれば、ikescan2john
は VPN のセキュリティ体制を評価し、強化するための一助となるでしょう。🛡️
参考情報
- John the Ripper 公式サイト: https://www.openwall.com/john/
- ike-scan 公式サイト (GitHub): https://github.com/royhills/ike-scan
(ツールの詳細なオプションや最新情報については、各公式サイトや付属のドキュメントをご参照ください。)
コメント