ネットワーク認証プロトコルである RADIUS (Remote Authentication Dial-In User Service) は、多くの企業や組織でユーザー認証、認可、アカウンティング (AAA) のために広く利用されています。しかし、その設定や運用によってはセキュリティ上のリスクが存在します。特に、通信経路上で RADIUS パケットを傍受されると、認証情報が漏洩する可能性があります。
このようなリスクを評価し、対策を講じる上で役立つツールの一つが、John the Ripper スイートに含まれる radius2john
です。この記事では、radius2john
の概要、仕組み、そして具体的な使い方について詳しく解説します。セキュリティ専門家やネットワーク管理者が、自社のネットワークセキュリティ強度を評価する一助となれば幸いです 😊。
🚨 注意
本ツールは、パスワード強度テストやセキュリティ監査など、正当な目的でのみ使用してください。許可なく他者のネットワークやシステムに対して使用することは、法律で禁止されています。ツールの使用は自己責任で行い、倫理的な規範を遵守してください。
John the Ripper とは?
radius2john
を理解する前に、まずそれが含まれる John the Ripper (JtR) について簡単に触れておきましょう。John the Ripper は、1996年に Openwall Project によって開発された、非常に強力で広く使われているオープンソースのパスワードクラッキングツールです。
その主な目的は、システム管理者が弱いパスワードを発見し、システムのセキュリティを向上させる手助けをすることです。多くの Unix 系 OS で標準的に使われる crypt(3)
形式のハッシュだけでなく、Windows の LM/NTLM ハッシュ、Kerberos AFS、そしてその他多数の形式のパスワードハッシュに対応しています。
JtR は、辞書攻撃、ブルートフォース攻撃、インクリメンタルモードなど、多様なクラッキング手法をサポートしており、その柔軟性と拡張性の高さから、ペネトレーションテストやセキュリティ監査の現場で不可欠なツールとなっています。多くの Linux ディストリビューションのリポジトリに含まれており、Kali Linux などのペネトレーションテスト用ディストリビューションにはデフォルトでインストールされています。
JtR スイートには、本体の john
プログラムに加え、様々な形式のファイルからパスワードハッシュを抽出するための補助ツール群 (*2john
ツール) が含まれています。radius2john
もその一つです。
radius2john とは何か?
radius2john
は、John the Ripper スイートに含まれるユーティリティスクリプト(Perl スクリプト radius2john.pl
または Python スクリプト radius2john.py
として提供されることが多い)で、RADIUS 認証プロトコルのパケットキャプチャファイル (PCAP 形式) から、John the Ripper で解析可能な形式のハッシュ情報を抽出するために使用されます。
具体的には、RADIUS 認証プロセスで使用されるチャレンジ/レスポンス型の認証方式(特に MS-CHAPv1 や MS-CHAPv2)に関連する情報をパケットから探し出し、パスワードのクラッキング試行に必要なデータを整形して出力します。
radius2john
は主に以下の2つの攻撃シナリオを想定しています(これらは Joshua Wright 氏による RADIUS 認証のセキュリティ分析 で説明されている手法に基づいています):
- User-Password Attribute Based Shared Secret Attack (方法 3.3): 既知のパスワードを使用して認証を試行し、その際の RADIUS パケット (特に Access-Request) をキャプチャします。
radius2john
はこのパケットから Request Authenticator (RA) と暗号化されたパスワード属性を抽出し、RADIUS 共有秘密鍵 (Shared Secret) をクラッキングするためのハッシュを生成します。この攻撃を行うためには、認証試行に使用したパスワードとユーザー名を知っている必要があります。 - Response Authenticator Based Shared Secret Attack (方法 3.1): 認証試行を行う必要はなく、通常の RADIUS 通信 (Access-Request とそれに対応する Access-Challenge または Access-Accept/Reject) をキャプチャします。
radius2john
は、リクエストとレスポンスのペアから Response Authenticator などの情報を利用し、共有秘密鍵をクラッキングするためのハッシュを生成します。
多くの場合、radius2john
は MS-CHAPv2 認証のハッシュ情報を抽出するために用いられます。MS-CHAPv2 は Wi-Fi 認証 (WPA2-Enterprise など) や VPN 接続で広く利用されていますが、特定条件下ではオフラインでのパスワードクラッキングに対して脆弱性を持つことが知られています。
RADIUS 認証と MS-CHAPv2 の簡単な仕組み
radius2john
が何をしているかをより深く理解するために、RADIUS 認証、特に MS-CHAPv2 の基本的な流れを見てみましょう。
RADIUS プロトコル
RADIUS はクライアント/サーバーモデルのプロトコルです。
- ユーザーが接続しようとすると、NAS (Network Access Server – 例: Wi-Fi アクセスポイントや VPN サーバー) はユーザーから認証情報 (ユーザー名とパスワードなど) を受け取ります。
- NAS は RADIUS クライアントとして機能し、ユーザー情報と自身の識別情報を含む Access-Request パケットを作成し、設定された RADIUS サーバーへ送信します。この通信は NAS と RADIUS サーバー間で設定された「共有秘密鍵 (Shared Secret)」を用いて一部が保護されます。
- RADIUS サーバーは受け取った情報を検証します。ユーザーデータベース (LDAP, SQL, Active Directory など) と照合し、ユーザーが存在し、認証情報が正しいかを確認します。
- 認証結果に応じて、RADIUS サーバーは以下のいずれかのパケットを NAS に返します。
- Access-Accept: 認証成功。追加の設定情報 (IP アドレス、VLAN ID など) を含むことがあります。
- Access-Reject: 認証失敗。
- Access-Challenge: 追加情報が必要な場合 (例: ワンタイムパスワード、チャレンジ/レスポンス認証の開始)。
- NAS は RADIUS サーバーからの応答に基づき、ユーザーのアクセスを許可または拒否します。
重要なのは、古い認証方式である PAP (Password Authentication Protocol) ではパスワードが平文で送信されるのに対し、CHAP や MS-CHAPv2 ではパスワードそのものはネットワーク上を流れない点です。代わりに、チャレンジ/レスポンスメカニズムが使用されます。
MS-CHAPv2 (Microsoft Challenge Handshake Authentication Protocol version 2)
MS-CHAPv2 は、パスワード自体を送信せずにユーザーを認証するためのチャレンジ/レスポンスプロトコルです。PEAP (Protected EAP) や EAP-TTLS といった EAP (Extensible Authentication Protocol) メソッドの内部認証機構としてよく使用されます。これらの外部メソッドは TLS トンネルを確立し、その中で MS-CHAPv2 交換を保護します。
MS-CHAPv2 の認証交換の大まかな流れは以下の通りです。
- 認証サーバー (RADIUS サーバー) はランダムな「サーバーチャレンジ (Authenticator Challenge)」を生成し、クライアント (サプリカント) に送信します (Access-Challenge)。
- クライアントはランダムな「ピアチャレンジ (Peer Challenge)」を生成します。
- クライアントは、ユーザーのパスワードハッシュ、ピアチャレンジ、サーバーチャレンジを使用して「チャレンジレスポンス (Peer Response)」を計算します。
- クライアントは、計算したチャレンジレスポンス、ピアチャレンジ、およびユーザー名を NAS 経由で認証サーバーに送信します (Access-Request)。
- 認証サーバーは、自身のデータベースに保存されているユーザーのパスワードハッシュ、受け取ったピアチャレンジ、自身が送信したサーバーチャレンジを使用して、期待されるチャレンジレスポンスを計算し、クライアントから受け取ったレスポンスと比較します。
- もしレスポンスが一致すれば、認証サーバーはクライアントの認証に成功したと判断します。さらに、認証サーバーは「認証子レスポンス (Authenticator Response)」を計算し、クライアントに送信します (Access-Accept の一部として送られることが多い)。
- クライアントは受け取った認証子レスポンスを検証し、サーバーが正規のものであることを確認します。
radius2john
は、この MS-CHAPv2 交換が行われている RADIUS パケット (特にステップ 4 の Access-Request と、関連する Challenge/Accept パケット) をキャプチャした PCAP ファイルから、クラッキングに必要な情報 (ユーザー名、サーバーチャレンジ、ピアチャレンジ、チャレンジレスポンスなど) を抽出し、John the Ripper が解読できる形式に変換するのです。
radius2john の使い方
radius2john
は通常、John the Ripper の run
ディレクトリ、またはディストリビューションによっては /usr/share/john/
や /usr/sbin/
などに含まれています。Perl スクリプト (radius2john.pl
) または Python スクリプト (radius2john.py
) として提供されている場合があります。
基本的な使い方は非常にシンプルです。コマンドラインで radius2john
スクリプトを実行し、引数として RADIUS パケットが含まれる PCAP ファイルを指定します。
コマンド構文
./radius2john.pl <pcap_file> [<pcap_file2> ...] > <output_hash_file>
# または Python 版の場合
./radius2john.py <pcap_file> [<pcap_file2> ...] > <output_hash_file>
<pcap_file>
: Wireshark や tcpdump などでキャプチャした RADIUS 通信を含む PCAP ファイル (または PCAPNG ファイル) のパスを指定します。複数ファイルを指定することも可能です。<output_hash_file>
: 抽出されたハッシュ情報を保存するファイル名を指定します。リダイレクト (>
) を使ってファイルに出力するのが一般的です。
実行例
例えば、capture.pcap
というファイルからハッシュを抽出し、radius_hashes.txt
というファイルに保存する場合は、以下のように実行します (John the Ripper の run ディレクトリにいると仮定)。
./radius2john.pl ../capture.pcap > radius_hashes.txt
スクリプトは PCAP ファイルを読み込み、関連する RADIUS パケット (Access-Request, Access-Challenge, Access-Accept など) を解析します。MS-CHAPv2 交換や、共有秘密鍵に関連する情報が見つかると、John the Ripper が処理できる形式で標準出力に表示します。
出力形式 (MS-CHAPv2 の場合)
MS-CHAPv2 のハッシュが抽出された場合、出力は通常以下のような形式になります。
USERNAME:$MSCHAPv2$SERVER_CHALLENGE$PEER_CHALLENGE$PEER_RESPONSE
USERNAME
: 認証を試みたユーザー名。$MSCHAPv2$
: ハッシュのタイプを示す識別子。SERVER_CHALLENGE
: 認証サーバーから送信されたチャレンジ (16進数文字列)。PEER_CHALLENGE
: クライアント (ピア) が生成したチャレンジ (16進数文字列)。PEER_RESPONSE
: クライアントが計算したレスポンス (16進数文字列)。
この一行が、John the Ripper でクラッキングを試みるための完全な情報を含んでいます。
John the Ripper でのクラッキング
radius2john
でハッシュファイル (radius_hashes.txt
) を作成したら、John the Ripper 本体 (john
) を使ってパスワードクラッキングを実行します。
./john radius_hashes.txt
# 特定のワードリストを使用する場合
./john --wordlist=/path/to/wordlist.txt radius_hashes.txt
# 特定のフォーマットを指定する場合 (通常は自動検出されますが)
./john --format=netmschapv2 radius_hashes.txt
John the Ripper は、ハッシュファイル内の情報を解析し、指定された(またはデフォルトの)クラッキングモード(シングルクラック、ワードリスト、インクリメンタルなど)を実行してパスワードの特定を試みます。成功すると、クラックされたパスワードが表示されます。
考慮事項と制限
- 法的・倫理的側面: 再度強調しますが、
radius2john
および John the Ripper の使用は、許可された範囲内でのみ行ってください。不正アクセスやプライバシー侵害は重大な法的問題を引き起こす可能性があります。 - キャプチャの質: 抽出できる情報は、キャプチャした PCAP ファイルに含まれるパケットに依存します。完全な認証交換 (チャレンジとレスポンスの両方など) が含まれていない場合、ハッシュを抽出できないことがあります。
- 暗号化: RADIUS 通信自体が IPsec などで暗号化されている場合や、PEAP/EAP-TTLS の TLS トンネルが解読できない場合、内部の認証情報を取得することは困難です。
- 共有秘密鍵 vs ユーザーパスワード:
radius2john
は、シナリオによっては RADIUS サーバーと NAS 間の共有秘密鍵をクラックするためのハッシュを生成することもあります (上記の方法 3.1, 3.3)。これはユーザーパスワードとは異なりますが、共有秘密鍵が漏洩すると、中間者攻撃などのリスクが高まります。 - 対応フォーマット:
radius2john
が対応している RADIUS 属性や認証方式には限りがある可能性があります。特定のベンダー独自の実装などには対応していない場合があります。 - 偽陽性 (False Positives): John the Ripper が特定のハッシュ形式 (特に古いものや複雑なもの) をクラックする際、稀に間違ったパスワードを「クラック成功」として報告する可能性があります。
まとめ
radius2john
は、John the Ripper スイートの一部として提供される強力なユーティリティであり、RADIUS 認証のパケットキャプチャからパスワードクラッキングに必要なハッシュ情報を抽出する機能を提供します。特に MS-CHAPv2 を使用した認証のセキュリティ強度を評価する際に役立ちます。
その使用は簡単ですが、PCAP ファイルの準備と、John the Ripper による後続のクラッキングプロセスが必要です。最も重要なのは、このツールを倫理的かつ合法的な目的、すなわち自身の管理下にあるネットワークのセキュリティ評価やインシデント対応などに限定して使用することです。
RADIUS および MS-CHAPv2 の仕組みを理解し、radius2john
を適切に活用することで、ネットワーク認証における潜在的な脆弱性を発見し、より安全な環境を構築するための一歩を踏み出すことができるでしょう 💪。
コメント