CentOS 6.4でWi-Fiモニタリング

なんとなくWi-Fi通信のモニタリングをしてみた。

環境

$ uname -a
Linux serv 2.6.32-358.11.1.el6.x86_64 #1 SMP Wed Jun 12 03:34:52 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

$ cat /etc/redhat-release
CentOS release 6.4 (Final)

無線LANアダプタ用ドライバのインストール

まずは無線LANアダプタの型番を確認。

$ dmesg | grep -i wireless
iwl3945: Intel(R) PRO/Wireless 3945ABG/BG Network Connection driver for Linux, in-tree:s
iwl3945 0000:03:00.0: Detected Intel Wireless WiFi Link 3945ABG
iwl3945: Intel(R) PRO/Wireless 3945ABG/BG Network Connection driver for Linux, in-tree:s
iwl3945 0000:03:00.0: Detected Intel Wireless WiFi Link 3945ABG

ここでの作業はマシンによるが、iwl3945の場合は下記のファームウェアのインストールが必要らしい。

$ sudo yum search iwl3945
iwl3945-firmware.noarch : Firmware for Intel® PRO/Wireless 3945 A/B/G network adaptors
$ sudo yum install iwl3945-firmware

インストールが終わったら、カーネルモジュールを再読み込みする。

$ sudo modprobe -r iwl3945
$ sudo modprobe iwl3945

ifconfigwlan0インタフェースが有効になっているか確認。

$ ifconfig

アプリケーションのインストール

パケットダンプ用にtcpdump無線LANインタフェースの設定変更用にwireless-toolsをインストールする。 wireless-toolsをインストールすると、iwconfigiwlistといったコマンドが使えるようになる。

$ sudo yum install tcpdump
$ sudo yum install wireless-tools

アクセスポイントのSSIDをスキャンする

wlan0がManagedモードになっていることを確認。

$ sudo iwconfig wlan0
wlan0     IEEE 802.11abg  ESSID:off/any
          Mode:Managed  Access Point: Not-Associated   Tx-Power=15 dBm

SSIDをスキャンして表示する。

$ sudo iwlist wlan0 scanning | grep -i essid
ESSID:"logitecuser"
ESSID:"logitecgameuser"

無線クライアントからのProbe Requestを収集する

wlan0をMonitorモードに切り換える。

$ sudo ifconfig wlan0 down
$ sudo iwconfig wlan0 mode monitor
$ sudo ifconfig wlan0 up
$ sudo iwconfig wlan0
wlan0     IEEE 802.11abg  Mode:Monitor  Frequency:2.412 GHz  Tx-Power=15 dBm

モニタするチャンネル(1~14)を設定して、tcpdumpですべてのフレームをダンプする。

$ sudo iwconfig wlan0 channel 1
$ sudo tcpdump -i wlan0
hh:mm:ss.SSSSSS 1.0 Mb/s 2412 MHz 11b -80dB signal antenna 2 [0x0000000e] Data IV:106 Pad 20 KeyID 1

Probe Requestのみをダンプする。

$ sudo tcpdump -i wlan0 subtype probereq
hh:mm:ss.SSSSSS short preamble 11.0 Mb/s 2412 MHz 11b -82dB signal antenna 2 [0x0000000e] Probe Request (Nintendo_3DS_continuous_scan_000) [1.0* 2.0* 5.5* 6.0 9.0 11.0* 12.0 18.0 Mbit]

たとえば上のような結果が得られた場合、周囲でNintendo 3DSが起動している可能性が高い。 これは、SSID Nintendo_3DS_continuous_scan_000 へのProbe RequestがNintendo 3DSすれ違い通信で使われているためである。

参考

上で示した実行例では一度に一つのチャンネルしかダンプできないが、下記サイトで説明されているように定期的にモニタするチャンネルを変更 (channnel hopping) することで効率的にモニタリングを行うことができる。

また、Aircrack-ngに含まれるairodump-ngを利用することで、より簡単に必要な情報を得ることもできる。