📡

WiresharkでUTF-8文字を含むSSIDの無線LAN通信の復号でつまづいた話

2021/06/13に公開

やりたいこと

無線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 を設定してもエラーになってしまう。

Wireshark の Decryption Keys の設定ダイアログで  の新規エントリに  という文字列を入力しても、ダイアログには Invalid key format の赤字のエラーメッセージが表示されて設定を完了させることができない。

解決方法

先ほどの公式 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 を指定すればよい。

URL エンコードされた文字列を  に使用した場合は、エラーメッセージが表示されることなく設定できるようになる。

これで無事に IEEE 802.11 フレームの復号に成功するはずである。

もし上手く行かない時は、EAPOL ハンドシェイクの 4 つのフレームがキャプチャできているか確認するのをお忘れなく。PSK が既知であっても EAPOL ハンドシェイクがキャプチャできていなければ Wireshark で通信を復号することはできない。

それでは、良い Wireshark 生活を ✨

Discussion