WiresharkでUTF-8文字を含むSSIDの無線LAN通信の復号でつまづいた話
やりたいこと
無線LAN (IEEE 802.11) の通信をキャプチャして、事前共有鍵 (PSK) のパスフレーズを知っている特定の SSID に対する暗号化された通信を復号したい。
なお、その SSID には UTF-8 でエンコードされた ASCII 範囲外の文字を含んでいるものとする。(e.g. 大塩平八郎のLAN)
要約
Wireshark の Decryption Keys の設定で、wpa-pwd
を使用して UTF-8 の SSID を指定するためには URL エンコードした SSID を入力する必要がある。
使用した環境
- MacBook Pro (Late 2013)
- Windows で試したら Monitor mode のキャプチャが設定できなかったので、埃を被っていた MacBook を掘り出して使用した
- macOS Big Sur 11.4
- Late 2013 もサポート機種にギリギリ入っていてよかった
- Wireshark 3.4.6 (stable release)
どこで躓くのか
通常、事前共有鍵のパスフレーズがあらかじめ分かっている場合、Wireshark を使用してキャプチャした IEEE 802.11 フレームを復号することは難しい話ではない。
まして、MacBook 内蔵の無線 LAN インタフェースを使用する場合は、Windows のようにドライバの対応状況などで困ることも無いはずである。
暗号化された IEEE 802.11 フレームを復号する方法については、Wireshark の公式 Wiki にある HowToDecrypt802.11 が詳しい。
しかし SSID に UTF-8 でエンコードされた ASCII 範囲外の文字が含まれていた場合、手順通りに wpa-pwd
を使用して Decryption Keys を設定してもエラーになってしまう。
解決方法
先ほどの公式 Wiki の内容をさらに読んでいくと、次の説明がある。
The WPA passphrase and SSID preferences let you encode non-printable or otherwise troublesome characters using URI-style percent escapes, e.g. %20 for a space. As a result you have to escape the percent characters themselves using %25.
つまり、wpa-pwd
に指定するパスフレーズおよび SSID には URL エンコードされた文字列を使用できるとのことである。
例えば SSID が 大塩平八郎のLAN
でパスフレーズが oshio-heihachiro
であるならば、wpa-pwd
には oshio-heihachiro:%E5%A4%A7%E5%A1%A9%E5%B9%B3%E5%85%AB%E9%83%8E%E3%81%AELAN
を指定すればよい。
これで無事に IEEE 802.11 フレームの復号に成功するはずである。
もし上手く行かない時は、EAPOL ハンドシェイクの 4 つのフレームがキャプチャできているか確認するのをお忘れなく。PSK が既知であっても EAPOL ハンドシェイクがキャプチャできていなければ Wireshark で通信を復号することはできない。
それでは、良い Wireshark 生活を ✨
Discussion