概要
このドキュメントでは、Extensible Authentication Protocol(EAP)方式を使用して、Wi-Fi Protected Access 2(WPA2-Enterprise)または802.1x(dot1x)暗号化ワイヤレスover-the-air(OTA)スニファを復号化する方法について説明します。
完全な4方向EAP over LAN(EAPoL)ハンドシェイクがキャプチャされている限り、PSKベース/WPA2パーソナル802.11 OTAキャプチャを比較的簡単に復号化できます。ただし、事前共有キー(PSK)は、セキュリティの観点から必ずしも推奨されるわけではありません。ハードコードされたパスワードを解読するのは時間の問題です。
そのため、多くの企業では、無線ネットワークの優れたセキュリティソリューションとしてRemote Authentication Dial-In User Service(RADIUS)を使用してdot1xを選択しています。
前提条件
要件
次の項目に関する知識があることが推奨されます。
- radsniffがインストールされたFreeRADIUS
- Wireshark/Omnipeek、または802.11ワイヤレストラフィックを復号化できる任意のソフトウェア
- ネットワークアクセスサーバ(NAS)とオーセンティケーター間の共有秘密を取得する権限を取得する権限を付与します。
- EAPセッション全体で、最初のアクセス要求(NASからオーセンティケータへ)から最後のアクセス許可(オーセンティケータからNASへ)まで、NASとオーセンティケータ間のRADIUSパケットキャプチャをキャプチャする機能
- 4方向EAPoLハンドシェイクを含むOver-the-Air(OTA)キャプチャを実行する機能
使用するコンポーネント
このドキュメントの情報は、次のソフトウェアとハードウェアのバージョンに基づいています。
- Radiusサーバ(FreeRADIUSまたはISE)
- Over-the-Airキャプチャデバイス
- Apple macOS/OS XまたはLinuxデバイス
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、初期(デフォルト)設定の状態から起動しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。
背景説明
この例では、2つのペアワイズマスターキー(PMK)は、ISE 2.3からキャプチャされたRADIUSパケットから取得されます。このSSIDのセッションタイムアウトは1800秒で、ここで指定されるキャプチャの長さは34分(2040秒)です。
図に示すように、例としてEAP-PEAPが使用されますが、これは任意のdot1xベースのワイヤレス認証に適用できます。
手順
ステップ1:Access-accept PacketからPMKを復号化します。
PMKを抽出するには、NASとオーセンティケータ間のRADIUSキャプチャに対してradsniffを実行します。キャプチャ中に2つのaccess-acceptパケットが抽出される理由は、この特定のSSIDでセッションタイムアウトタイマーが30分に設定され、キャプチャの長さが34分であることです。認証は2回実行されます。
FRLU-M-51X5:pcaps frlu$ radsniff -I /Users/frlu/Downloads/radius_novlan_merged.pcapng -s <shared-secret between NAS and Authenticator> -x
<snip>
2018-11-16 11:39:01.230000 (24) Access-Accept Id 172 /Users/frlu/Downloads/radius_novlan_merged.pcapng:10.66.79.42:32771 <- 10.66.79.36:1812 +0.000 +0.000
User-Name = "frlu_2"
State = 0x52656175746853657373696f6e3a306134323466326130303030303565373562656530393732
Class = 0x434143533a3061343234663261303030303035653735626565303937323a4953452d322d332f3332383237313233382f33303432
EAP-Message = 0x03c50004
Message-Authenticator = 0x38c67b9ba349842c9624889a45cabdfb
MS-MPPE-Send-Key = 0xa464cc15c0df8f09edc249c28711eb13a6db2d1a176f1196edcc707579fd6793
MS-MPPE-Recv-Key = 0xddb0b09a7d6980515825950b5929d02f236799f3e8a87f163c8ca41a066d8b3b<<<<<<<<<<<<<<<<<<PMK
Authenticator-Field = 0x6cd33b4d4dde05c07d9923e17ad6c218
<snip>
2018-11-16 11:39:01.470000 (48) Access-Accept Id 183 /Users/frlu/Downloads/radius_novlan_merged.pcapng:10.66.79.42:32771 <- 10.66.79.36:1812 +0.000 +0.000
User-Name = "frlu_2"
State = 0x52656175746853657373696f6e3a306134323466326130303030303565373562656530393732
Class = 0x434143533a3061343234663261303030303035653735626565303937323a4953452d322d332f3332383237313233382f33303434
EAP-Message = 0x03910004
Message-Authenticator = 0x81c572651679e15e54a900f3360c0aa9
MS-MPPE-Send-Key = 0xeae42cf7c6cd26371eee29856c51824fbb5bbb298874125928470114d009b5fb
MS-MPPE-Recv-Key = 0x7cce47eb82f48d8c0a91089ef7168a9b45f3d798448816a3793c5a4dfb1cfb0e<<<<<<<<<<<<<<<<<PMK
Authenticator-Field = 0xa523dd9ec2ce93d19fe4fc2e21537a5d
注:Radiusパケットキャプチャの仮想LAN(VLAN)タグを削除してください。削除しない場合、radsniffは入力pcapファイルを認識しません。VLANタグを削除するには、たとえばeditcapを使用できます。
ヒント:通常、RADIUS pcapファイルに対するradsniffコマンドの実行時は、秒のスケールとしてカウントできます。ただし、ログに示されたこの状態でradsniffがスタックしている場合は、同じNASとオーセンティケータの間で別の長いパケットキャプチャ(B)を使用して、このパケットキャプチャ(A)をカスケードしてください。次に、カスケードされたパケット(A+B)に対してradsniffコマンドを実行します。 パケットキャプチャ(B)の唯一の要件は、radsniffコマンドを実行して詳細な結果を表示できることです。
FRLU-M-51X5:pcaps frlu$ radsniff -I /Users/frlu/Downloads/radius_novlan.pcap -s Cisco123 -x
Logging all events
Sniffing on (/Users/frlu/Downloads/radius_novlan.pcap)
この例では、WLCパケットロギング機能によってキャプチャされたワイヤレスLANコントローラ(WLC)コントロールプレーンロギング(A)が、ISEのTCPダンプ(B)からより長いキャプチャにカスケードされています。WLCパケットロギングは通常、非常に小さいサイズであるため、例として使用されます。
WLCパケットロギング(A)
ISE Tcpdump(B)
マージ(A+B)
次に、マージされたpcap(A+B)に対してradsniffを実行すると、詳細な出力が表示されます。
FRLU-M-51X5:pcaps frlu$ radsniff -I /Users/frlu/Downloads/radius_novlan_merged.pcapng -s <shared-secret between NAS and Authenticator> -x
<snip>
2018-11-16 11:39:01.230000 (24) Access-Accept Id 172 /Users/frlu/Downloads/radius_novlan_merged.pcapng:10.66.79.42:32771 <- 10.66.79.36:1812 +0.000 +0.000
<snip>
ステップ2:PMKを抽出します。
その後、詳細出力から各MS-MPPE-Recv-Keyの0xフィールドを削除し、ワイヤレストラフィックデコードに必要なPMKを提示します。
MS-MPPE-Recv-Key = 0xddb0b09a7d6980515825950b5929d02f236799f3e8a87f163c8ca41a066d8b3b
PMK:
ddb0b09a7d6980515825950b5929d02f236799f3e8a87f163c8ca41a066d8b3b
MS-MPPE-Recv-Key = 0x7cce47eb82f48d8c0a91089ef7168a9b45f3d798448816a3793c5a4dfb1cfb0e
PMK:
7cce47eb82f48d8c0a91089ef7168a9b45f3d798448816a3793c5a4dfb1cfb0e
ステップ3:OTAスニファを復号化します。
[Wireshark] > [Preferences] > [Protocols] > [IEEE 802.11]に移動し、[Enable Decryption]をオンにし、[Decryption Keys]の横にある[Edit]ボタンをクリックします。
次に、キーの種類としてwpa-pskを選択し、[Key]フィールドに導出されたPMKを入力し、[OK]をクリックしてください。これが完了すると、OTAキャプチャが復号化され、上位レイヤ(3+)情報が表示されます。
復号化された802.11パケットの例
PMKが含まれていない2番目の結果と、PMKが含まれている1番目の結果を比較すると、パケット397886は802.11 QoSデータとして復号化されます。
暗号化された802.11パケットの例
注意:復号化時にWiresharkで問題が発生する可能性があり、その場合は、正しいPMKが指定されている(またはPSKが使用されている場合は、SSIDとPSKの両方が指定されている)場合でも、WiresharkはOTAキャプチャを復号化しません。この問題を回避するには、Wiresharkの電源をオフにしてから、上位レイヤ情報を取得して802.11パケットがQoSデータとして表示されなくなるまで数回使用するか、Wiresharkがインストールされている別のPC/Macを使用します。
ヒント: pmkXtractというC++コードが関連情報の最初の投稿に添付されています。コンパイルが正常に行われ、実行可能ファイルが取得されましたが、実行可能プログラムが正常に復号化を行っていないことが判明した理由があります。また、PMKを抽出しようとするPythonスクリプトは、最初の投稿のコメント領域に投稿されます。このコメント領域は、読者が興味を持っている場合に詳しく調べることができます。
関連情報