UbuntuでWifi sniffをするためにやったこと
仕事の関連でWifi snifferの環境を構築する必要がでてきた。*1。 いろいろ試行錯誤して知識が積み重なったのでここにまとめてみる。
試した環境: - 環境はUbuntu 18.04.3LTS でシステムはもともとWin10が入っていた市販のノートPC(FMV LIFEBOOK UH75)にインストール。 - Wifiは内臓の Intel Dual Band Wireless-AC 8265 と、USBドングルのNETGEAR A6210の2パターン
monitor mode の設定
外部のwifiパケットをキャプチャするためにはWifiインターフェイスをMonitor Modeに変更する必要がある。(通常はManaged Mode)
- iwconfigコマンドでの設定
現在のインターフェイスをMonitorモードにかえる。一旦インターフェイスをInaciveにしてからMonitorモードに変更、そしてアップをおこなう。
sudo ifconfig wlp2s0 down sudo iwconfig wlp2s0 mode monitor sudo ifconfig wlp2s0 up
- iwコマンドでの設定
iw コマンドによりmonitor modeのWirelessのInterfaceを追加する方法。ここではmon0として追加。
sudo iw wlp2s0 interface add mon0 type monitor sudo ifconfig mon0 up
- airmon-ngの設定
aircrack-ngパッケージに含まれるairmon-ngでのMonitorモードの設定。自動的にMonitorモードのインターフェイスが新しい名前で追加される。
sudo airmon-ng start wlp2s0
どの方法でも iwconfig で monitor mode の確認ができる。
wlp2s0 IEEE 802.11 ESSID:"RHYMESTER" Mode:Managed Frequency:5.58 GHz Access Point: xx:xx:xx:xx:xx:xx Bit Rate=866.7 Mb/s Tx-Power=22 dBm Retry short limit:7 RTS thr:off Fragment thr:off Power Management:on Link Quality=66/70 Signal level=-44 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:40 Missed beacon:0
Wifi モジュールの選択
- Intel Dual Band Wireless-AC8265 (内蔵)
システム内蔵のモジュール。Linux入れとけばどんなモジュールでもSniffできると考えていたが、実際とれるパケットは多くなかった。WifiモジュールをManagedモードに戻すバッチファイルを実行するとそのタイミングだけパケットがおおくキャプチャできるようにみえたのだが、何がトリガになっていたのかは不明。
- NETGEAR A6210 (USB 外付け)
上記のあと、ダメ元で使ってみたら、常時Sniffをしている状態になったのでびっくりした。ただ下のさいとによると、これでも制限があるようで、A6200のほうがよいらしいけど、古いから手にはいらなさそう。
monitor mode WiFi cards under windows with Acrylic
製品によってかなり個性が違うようで、今後Wifi6関連でもこのあたりの情報は仕入れて行く必要があると感じる。
Sniffソフトの設定
とりあえず、いかの3つで動作を確認しました。
- Wireshake
言わずとしれた、King of パケットキャプチャソフト。Monitorモードに設定したInterfaceを指定すると、802.11のパケットもキャプチャできる。
- Scapy
Python用のLibrary。自分で細かいフィルタをかけるときに便利そう。とりあえずサンプルスクリプトとして、WebであったBeaconからAPのリストアップするスクリプトので動作を確認。
- airodump-ng
現在のSSIDのリアルタイム情報を表示するコマンドラインツール。使いやすくわかりやすい。チャネル指定してもFilterがうまくできないのが今の悩み。
- Kismet
超高機能なSnffプログラム。まだ動作について理解しきれていないが、最低限動いていることを確認した。このツールに関して言えば、monitor mode用に追加したインターフェイス(mon0 など)ではうまくキャプチャできず、もとからあった物理インターフェイスでの動作を確認できた。
*1:正確に言うと、必要ではないのだが、あったほうが断然はかどるといった感じ