2019/07/23

WPA2のパケットキャプチャから読み取るWi-Fi接続の仕組み

2019 年 7 月 23 日 Emil Hozan 著

Wireshark をプロミスキャス(無差別)モードを有効にして使ったことがなく、オタクっぽいことに興味のある方には、ぜひ試してみることをお勧めします。もちろん私は、オタクを自認しています。そして、試してみる場合、当然ながら、自分の行動に責任を持たなければなりません。プロミスキャスモードにすると、トラフィックの送信先がクライアントマシンかどうかに関係なく、対応する WNIC(Wireless Network Interface Card)ですべての無線トラフィックを監視できます。それ以外のモードは通常、自分のマシンを送信先とするトラフィックの解釈だけが可能です。

この記事での説明は、いずれも私が所有しているデバイスで構成されるテスト環境に基づくものです。私の実験環境は、無線アクセスポイント(AP)、その AP への接続に使用する無線クライアント、およびプロミスキャスモードでリスンする 3 つ目の無線対応デバイスで構成されており、この 3 つ目のデバイスで Wireshark を使用しています。ただし、この記事に記載する画像では、関連する MAC アドレスについては黒塗りにしてあります。この記事の主な目的は、WPA2 プロトコルがどのようなものであるかを理解し、このプロトコルに関連する脅威の概要を知っていただくことです。

ただし、WPA2 の Wi-Fi 接続といくつかの複雑な問題、すなわち、802.11 フレームタイプのサブタイプ(ビーコンフレームとプローブ要求/応答)や IEEE 802.1X 認証プロセス(EAPOL、メッセージ 1 〜 4)についても解説します。もちろん、我々がほとんど目にすることのない、802.11 のさまざまなフレームタイプのパケットをすべて詳しく説明するわけではありません。ご自分で実際にテストしてみていただければ、その理由をご理解いただけるはずです。あるいは、802.11 フレームタイプの Wikipedia ページをご覧いただければ、おわかりになるでしょう。それでは早速、本題に入りましょう。

一般的な WPA2 / Wi-Fi 接続プロセス

対応デバイスで Wi-Fi サービスを有効にすると、多くの場合に、近くの AP のリストが表示されます。そこから該当する SSID を選択し、パスワードの入力が要求されたら(そうであることを願います)、パスワードを入力して、SSID に接続します。厳密に言うと、このプロセスで使用される WPA2-PSK メカニズムでは事前共有鍵(PSK)が採用されており、WPA2-Enterprise では、セキュリティが強化された異なるメカニズムが使用されています。WPA2-PSK と WPA2-Enterprise の違いについては、こちらにわかりやすく解説されています。

パスワード要件を満たしていれば、このプロセスで、ビーコンフレーム、プローブの手順、EAPOL の手順をすでに終了していることになります。これらの手順については、次のセクションで詳しく説明します。これらの手順はいずれも、無線クライアントが近くの無線電磁スペクトルをスキャンし、目的とする SSID を認識し、その SSID を認証するための既知のパスワードを入力する過程で完了しています。

ここで少し、上記の手順から少し外れた説明をしたいと思います。

SSID が一覧に表示されるようにするには、AP サービスプロバイダが「SSID のブロードキャストを有効にする」のチェックがオンであることを確認する必要があります。チェックがオンになっていない場合、少なくとも上記の説明の状況では、SSID が表示されません。特定の SSID をアドバタイズしないオプションもありますが、このオプションを使ったとしても、誰かが手動ですべての無線パケットをスニッフィングするのを防止できるわけではありません(その手段として、プロミスキャスモードが使われます)。これは、「security by obscurity(隠蔽によるセキュリティ)」と呼ばれるもので、隠すことでセキュリティが保証されるという考え方ですが、実際にはいかなる種類のセキュリティも保証されません。つまり、自らの SSID をアドバタイズしないオプションを選択したからといって、この情報を取得する他の方法がないわけではありません。

したがって、SSID をアドバタイズしないと選択した場合であっても、その SSID の存在と必要なパスワードを知っている人であれば、その SSID に接続できます。事実、私が実施したテストでも、自分のデバイスを表示するよう明示的に選択すると、設定した SSID を含むビーコンフレームが表示され(図 1)、明示的に選択しないと、SSID が「Wildcard(Broadcast)」と表示されます(図 2)。

図 1:SSID アドバタイズを有効にすると SSID が表示される

図 2:SSID アドバタイズを無効にすると SSID が Wildcard と表示される

SSID が表示されない場合も、この簡単な手順を実行し、近くにこの SSID に接続しているクライアントがあれば、SSID を知ることができます。これについては、次のセクションでもう少し詳しく説明します。

フレームの説明

このセクションでは、この記事の説明に出てくるフレーム、すなわち、ビーコンフレーム、プローブ要求、プローブ応答、4 つのメッセージ EAPOL ハンドシェイクについて説明します。

ビーコンフレーム

このビーコンフレームという語については、すでに説明で言及し、関連する画像にも出てきましたが、ビーコンフレームとは何でしょうか?ビーコンフレームには、特定の SSID に関するすべてのネットワーク情報が含まれています。Wireshark の表示には 5 つの主要セクションがあり、それぞれにさまざまな情報が表示されます。

図 3:ビーコンフレームの 5 つの主要セクション

SSID は 5 つ目の「IEEE 802.11 wireless LAN」というセクションの下にあります。図 4 は、SSID を表示にした場合のサブセクション、図 5 は、SSID が非表示にした場合のサブセクションです。

図 4:SSID を表示にした場合

図 5:SSID 非表示にした場合

SSID が表示されない場合は、前のセクションの手順の範囲を拡張すると、IEEE 802.11 の Beacon frame セクションに、Transmitter address、Source address、BSS Id address がサービスプロバイダのものとして表示されます。3 つのアドレスはすべて同じアドレスですが、ここでは黒塗りにしてあります。

図 6:非表示の SSID ブロードキャストの MAC アドレスの取得

これをテストするために、Wireshark を特定のフィルタコマンドで開き、私の無線クライアントと AP の MAC アドレスをリスンするようにしました。使用したフィルタコマンドのうちの 2 つは、「wlan.sa == {MAC:ADDRESS} || wlan.sa == {MAC:ADDRESS}」と「wlan.bssid == {MAC:ADDRESS} || wlan.sa == {MAC:ADDRESS}」です。

非表示の SSID をオンにしたところ、ビーコンフレームとプローブ要求の送信が開始し、送信先は「Broadcast」アドレス、SSID パラメータは「Wildcard SSID」に設定されていました。次に、自分のクライアントで Wi-Fi を有効にしましたが、もちろん、SSID は利用可能な SSID として表示されませんでした。ところが、「Join Network」をクリックすると、(事もあろうに)SSID の入力が要求され、このプローブ要求は送信元の MAC アドレスと共に Broadcast ドメインに送信されました。予想通り、AP はプローブ応答でクライアントに直接応答しました。

図 7:非表示の SSID を知ることができる

ご覧のとおり、非表示の SSID に接続しているクライアントによって、SSID が明らかになります。オタク心をお持ちの方は、ご自分の実験環境でお試しになり、5 つのセクションをそれぞれ詳しく調べてみてください。SSID 以外にも多くの詳しい情報が明らかになります。利用可能なサポートされているデータ速度、使用しているチャンネル、ベンダ情報、さらには、頭を悩ませることになるかもしれないさまざまなデータがたくさん見つかるはずです。

プローブ要求とプローブ応答

名前から推察されるかもしれませんが、これら 2 つは対になっています。プローブ要求は、何かが情報を要求しているものと推論されますが、この場合は、WNIC が近くの利用可能な周波数を要求することになります。その逆方向のプローブ応答は、プローブ要求に対する、ネットワークに関する要求された情報を含む応答ということになります。

図 8:プローブ要求

図 9:プローブ応答

Broadcast アドレスを使用することには、いくつかのメリットがあります。図 8 に示した要求は、私のテスト用無線クライアントからの、エリアで利用可能なすべての SSID を要求するものです。ビーコンフレームもこの同じ MAC に送信されますが(ff:ff:ff:ff:ff:ff)、これは、そのような用途のために予約されているアドレスです。これによって、リスンしているすべてのサービスプロバイダがパケット内から要求元の MAC アドレスを取得し、図 9 に示すような形でそのクライアントに直接応答します。そして、その応答には、対応するネットワークの SSID も含まれています。

これら 2 組のフレームとビーコンフレームに大きな違いはありません。プローブ応答は、含まれる情報という点では、ビーコンフレームとほとんど同じです。プローブ要求とプローブ応答はクライアント間の直接のやり取りであり、ビーコンフレームはサービスの通常のアドバタイズメントであると考えればよいでしょう。

EAPOL メッセージ 1 〜 4

ここまでの説明で、無線クライアントが非表示の電磁スペクトルをどのようにスキャン(プローブ)できるのか、また、サービスプロバイダからどのような詳細情報が提供されるかがわかりました。私の実験環境には、接続先する SSID があり、WPA2 で保護されていて、正しいパスワードを知っています。EAPOL 交換メッセージを図 10 に示します。

図 10:4 つの EAPOL キーメッセージ交換

図 10 に示した Wireshark には、各メッセージに 6 つのセクションがあります。最初の 3 つのセクションは、プローブメカニズムまたはビーコンフレームに対応するものです。

図 11:メッセージパケットセクション

4 つのメッセージのそれぞれの交換によって、最終的には、無線クライアントに対して、無線サービスを提供している AP への接続が許可されます。これが完了すると、無線クライアントは SSID に接続され、インターネットアクセスまた必要な処理を実行するためのアクセスが許可されます。

まとめ

要約すると、プローブ要求とは、無線サービスプロバイダに関連付けられているネットワーク情報、またはブロードキャストドメインで利用できるものを要求する無線クライアントであり、プローブ応答とは、特定の無線プロバイダから返されるメッセージであり、ネットワークに関する要求されたデータが含まれます。これら 2 つが連携することで、近くの利用可能な SSID の情報が提供されます。これら 2 つとビーコンフレームは同じように見えますが、わずかな違いがあります。私が気付いた主な違いは、ビーコンフレームが継続してすべてにブロードキャストされるのに対し、プローブはより限定的な通信交換である点です。

この記事の目的は、WPA2 接続プロセスの過程でさまざまな情報が我々の身の回りを飛び交っている事実を知っていただくことにあります。たくさんの情報が飛び交っており、それらはすべて「可視」であり、方法さえわかっていれば、手に入れることができるものであり、このブログでは、その方法をご紹介しました。この記事は、この後に予定している WPA2-PSK パスフレーズの解読方法の記事の基礎知識を説明するものでもあります。

最後にもう一度申し上げておくと、この記事で説明した情報は教育を目的とするものであり、私も WatchGuard Technologies も、違法行為を容認するものではありません。この記事は、侵入テストやそれに類似するテストを自分のネットワーク、あるいは明示的に許可されているネットワークで実行する方法を知りたいと考える方向けに執筆したものです。