読者です 読者をやめる 読者になる 読者になる

シアトル生活はじめました

20年以上すんだ東海岸から西海岸に引っ越してきました。MicrosoftのUniversal Storeで働いてます。

Wiresharkで無線LAN(802.11)のデータを見てみよう!

テクノロジー

f:id:watanabe_tsuyoshi:20150627124144j:plain

今これをスタバで読んでいるとしたら、そこの空間では1秒間に10回の頻度で「ビーコン(Beacon)」と呼ばれるパケットが飛び交ってるはず。スタバのAP(無線LANアクセスポイント)がビーコンを発信しているから。

例えば我が家のAPのビーコンを一つを捕まえて中身を見てみると・・・

f:id:watanabe_tsuyoshi:20150623145529p:plain

一番上の行に「IEEE 802.11 Beacon frame」とある。

ビーコンってのは船舶の灯台みたいに「ピコン・・・ピコン・・・」っと定期的にAPが「私はここにいます・・・私はこういうやつです・・・」っと周りに知らせるためにある。私たちは気づかないけど、APはそういう信号を常に出している。

せっかくだから、ビーコン、もうちょっと詳しく見てみよう。

ビーコンは、特定の相手に送るわけじゃないんで Receiver address (宛先アドレス)はブロードキャスト、つまり不特定多数宛を示すアドレス「ff:ff:ff:ff:ff:ff」になってる。

また、送り主のAPのMACアドレス(消してある部分)が Transmitter address の項目などに書いてある。

・・・というわけで、こういうWiFi電波のパケットの波の中で私たちはのんびりコーヒーを飲みながらスマフォをいじってるわけです・・・。

 どうやってWiFiパケットを見るか?

WiFiってなんなのかというと、「IEEE 802.11」という規格のパケット(厳密にはフレームと呼ぶ)のやり取りで成り立っているプロトコール

802.11パケットを見るには、自分のパソコンのWiFiアンテナで802.11パケットを捕らえ、ドライバーからアプリケーションに渡し、内容を解析する、とういのが一般的。そして、パケットを見るアプリケーションの中でも一番有名なのがWireshark

!!!注意事項!!!

802.11に限らず、ネットワーク上のパケットを見る行為をパケットキャプチャ(パケット捕獲?)という。自分宛以外のパケットを見ると、それは盗聴にあたる。違法行為である可能性がある。

最近こういう事件があった。

無線LAN「ただ乗り」容疑で男を逮捕 警視庁が初の立件

電波法など詳しくないんで何とも言えないけれど、公共無線LANでの実験はやらない方がいいと思う。実験は自己責任でどうぞ。

パケットキャプチャーのセットアップ

 私が今回Windows上でパケットキャプチャーしたセットアップは以下のとおり。

 以下、その手順

(1) 無線LANアダプター

何を使うかは、何をやりたいかによって変わる。私は「モニターモード」でやりたかったんで、Acrylicが公開しているモニターモードが可能なUSBアダプターの一覧からNetgear A6200を選んだ

ちなみにモニターモードとは?

自分のアダプターはどのAPとも接続されていないんだけど、空中に飛び交う802.11パケットを拾える状態。

逆に自分のアダプターが、ある特定のAPに接続されている状態で、さらに別の人宛てのパケットをも拾っている状態を「プロミスキャスモード」という。802.11パケットの勉強のためなら「プロミスキャスモード」で十分。

アダプターの接続は普通にUSBポートに刺す。

(2)モニターモードをサポートするドライバーをインストール

Acrylic WiFi をインストールする際に、オプションでモニターモードをサポートするドライバーをインストールできます。モニターモードでなくてもいいなら Acrylic WiFiのメインのアプリケーションのみのインストールでOK。

f:id:watanabe_tsuyoshi:20150621072127p:plain

(3)パケットキャプチャーを実行する

私が試した限りでは、次の手順で802.11パケットをキャプチャーできる。

まず、Acrylic WiFi をスタートする。メニューバーの中央からやや右側に「NDIS interface」というドロップダウンメニューがあるので、そこから無線LANアダプターを選ぶ。

さらに「Mode」を「Monitor」にしてモニターモードにしておく。

f:id:watanabe_tsuyoshi:20150627134546p:plain

「スタート」ボタンのすぐ右に数字があって、そこをクリックすると、どのチャンネルの電波を拾うか、を設定できるダイアログが開く。

私は2.4GHz帯のチャンネル(1、6、11など)を監視することに(これはデフォルト設定だった)。

f:id:watanabe_tsuyoshi:20150628043604p:plain

「スタート」ボタンを押すとパケットキャプチャーが始まる。

まず、Acrylic でどのAPの電波を拾っているかを確認。下ではチャンネルは1、6、などを拾っているのが見える。信号の強さ(Rssi)やデータ転送速度も見える。

f:id:watanabe_tsuyoshi:20150628044326p:plain

Acrylic WiFi では(少なくとも最新のVersion2.0)では残念ながらパケットそのものを解析することは出来ない(お金を払ってPROエディションにすれば出来る機能)。

そこでオープンソースWireshark が登場!

Acrylic は開いたままで、Wiresharkでパケットキャプチャーをすれば、Wiresharkでパケットの内容を詳しく調べることが出来る。

Wireshark をスタートしたら、キャプチャー対象のインターフェイスを選ぶ。

Acrylic をインストールした時に、モニターモードをサポートするNDISドライバーをインストールしていたんで、使用しているNETGEARの無線LANアダプター用のNDISインターフェイスが表示されている。

それを選ぶ。

f:id:watanabe_tsuyoshi:20150628045104p:plain

 Wireshark でパケットキャプチャーをスタートすると、キャプチャーされた802.11パケットが続々と流れてくる。

f:id:watanabe_tsuyoshi:20150628050110p:plain

Acrylic側を見てみると、チャンネルが1,2,3、・・・13とサイクルしているのが確認できる。ことなるチャンネルでパケットを拾っているわけだ。

例えば3、

f:id:watanabe_tsuyoshi:20150628050346p:plain

例えば8

f:id:watanabe_tsuyoshi:20150628050405p:plain

それに合わせて Wireshark 側でも異なるチャンネルのパケットがキャプチャーされているのが分かる。下のスクショだと上の方に周波数、2437(2.437GHz)、チャンネルで言うと「6」、のパケットが6つほど見え、すぐあとに2.442GHz(チャンネル7)のパケットが一つみえる。

f:id:watanabe_tsuyoshi:20150628050454p:plain

特定のチャンネルだけをモニターしたいなら、先ほどのチャンネル設定ダイアログで、一つのチャンネルに固定する。

これで802.11パケットのキャプチャーが出来るようなった。

(4)キャプチャーしたパケットを解析する

これはパケットをキャプチャーする目的に寄るけど、Wiresharkで解析するならいくつかのよくある操作があるので紹介する。

(4-1)特定の種類のパケットのみを見る(フィルターを使う)

802.11のパケットの種類は大まかに三つの type がある。

  • Management frames: APと接続したり切断したり認証したり・・ (0)
  • Control frames: 他のフレームを運ぶため。ヘッダーしかない (1)
  • Data frames: 実際にデータを含むパケット (2)

例えば Management frames だけを表示したい場合は Filter に

wlan.fc.type == 0 (解説:WLANのFrameControlヘッダのtypeフィールドが0)

と指定して「Apply」ボタンを押すと、Management frame だけが表示される。

f:id:watanabe_tsuyoshi:20150628061230p:plain

同様にして、Control frame と Data frame のみを表示するには

f:id:watanabe_tsuyoshi:20150628062701p:plain

f:id:watanabe_tsuyoshi:20150628062739p:plain

とすればよい。

また、それぞれの type には、さらに細かく分けた subtype がある。

例えば Management frame の一つである Beacon frame のsubtype は8なので

f:id:watanabe_tsuyoshi:20150628063006p:plain

とすれば Beacon frame のみ表示される。

802.11パケットの type や subtype の実際の値はネットで検索すれば出てくる。下は「Wireshark 802.11 Display Filter Field Reference」という便利なPDFが合ったんで、そこから抜粋した。Beacon の subtype が8であることが確認できる。

f:id:watanabe_tsuyoshi:20150628063303p:plain

 (4-2)特定のインターフェイス宛のパケットのみ見る

まず、自分の無線LANアダプターのMACアドレスを調べる。コンソールで getmac コマンドを実行する。

f:id:watanabe_tsuyoshi:20150628082029p:plain

アダプターのMACアドレスが分かったらその値をWireshark でFilterにかける。

wlan.ra == 88-00-00-00-00-00 (解説:WLANのReceiveAddressが88-00-00-00-00-00)

f:id:watanabe_tsuyoshi:20150628082241p:plain

(4-3)特定のインターフェイス宛のパケットで、なおかつ特定の種類のパケットのみ見る

二つの条件をANDでつなぐ。

下は、この無線LANアダプターが受け取ったManagement frame を表示している。Probe Requst に対する Probe Response が届いたことが分かる。

f:id:watanabe_tsuyoshi:20150628082653p:plain

 こういう操作で、キャプチャーした大量のパケットから見たいものだけをフィルターをかけて表示し、それぞれのパケットの内容を詳しく見ていく、というのが一般的な解析の手順だといえる。

まとめ

WiFiの正体である802.11のパケットキャプチャーはハードウェアさえあれば簡単にできる。

パケットの解析はWiresharkで行うのが一般的。

802.11のパケットの意味や内容などは私もただいま絶賛勉強中!