Windows環境でWi-Fiパケットをキャプチャする.とくに,一定のサイズごとにキャプチャファイルを分割・保存して,長時間のデータを収集する方法を紹介.
前置き
環境
ホストOS:Windows10
ゲストOS:Kali Linux

外付けWi-Fiモジュール:WTXUP TX-N600(チップセット:Mediatek RT5572)
(下記を参考にしてkali Linuxでモニターモードにできそうなやつを購入)
https://www.kalilinux.in/2022/04/wifi-adapter-for-kali-linux.html
Wi-Fiモジュールのモニターモード
PCやネットワーク機器のWi-Fiモジュールには下記のような複数の動作モードがある.*1
- マスターモード:アクセスポイントとして働き,無線子機(ステーション)への通信を中継
- マネージドモード:ステーションとして働き,アクセスポイントと通信を行う
- アドホックモード:ステーションとして働くが,他のステーションと直接通信
- モニターモード:周囲の通信をすべて受信し,他のステーションやアクセスポイントとの通信は行わない
モニターモード以外のモードでは,基本的に自分宛 or Broadcastのデータでなければ捨ててしまう(CPUなどの上位層に渡さない)ので,周囲の通信を傍受することはできない.
なので,まずはWi-Fiモジュールをモニターモードにする必要があるが,Windows環境ではいい方法が見当たらない*2ので,VirtualBox+Linuxを用いることとする.
VirtualBox+Kali LinuxでのモニターモードWi-Fiパケットキャプチャ
下記参考サイトとほぼ同じ

インストール・設定
OracleのページからVirtualBoxをダウンロード・インストール

Kali LinuxのページからVitualBox用Linuxイメージをダウンロード(2.7GBytesほど)

ダウンロードしたフォルダを解凍後,拡張子がvboxのファイルを実行すればkali Linuxを起動できる.
起動後は下記のように設定>システム>マザーボードのメインメモリーを2048MB,システム>プロセッサーを2あたりに設定しておけばOK(だと思う).
また,ネットワーク>アダプター1をホストオンリーアダプター,ネットワーク>アダプター2をNATに設定(順不同)
- ホストオンリーアダプター:ホストOSとの通信用.このインターフェイスを介してキャプチャしたWi-Fiパケットをホスト側に保存する.
- NAT:ゲストOSにインターネットアクセスしてもらうためのインターフェイス.別途kali Linux側にも設定が必要.(今回の目的ならいらないかも)
最後に,外付けWi-FiモジュールをPCに接続し,USBの項目からUSBコントローラーを有効化にチェックを入れ,USB3.0(xHCI)コントローラーを選択.USBデバイスフィルターに外付けWi-Fiモジュール(のチップセット)が表示されているっぽいのでチェックを入れてOKを押す.

起動してユーザー名:kali,パスワード:kaliでログイン
kali Linuxのインターフェイスの設定をしておく.
ターミナルから$sudo vi /etc/network/interfaces
でインターフェイスの情報を編集し,以下を追記.
# Host-Only Adapter
allow-hotplug eth0
iface eth0 inet static
address 192.168.0.100
netmask 255.255.255.0
# NAT interface
allow-hotplug eth1
iface eth1 inet dhcp
allow-hotplug **
:起動時にインターフェイス**を有効にする- eth0(ホストオンリーアダプター)は静的IPを設定(このIPと疎通できるようホスト側のホストオンリーイーサネットアダプターの設定も変えておく.192.168.0.10/24とか.)
- eth1(NAT)はDHCPにするとインターネットアクセス可能になる.
ゲストOS側でWi-Fiパケットキャプチャ
本記事の目標はホスト側でWi-Fiパケットを保存することだが,ひとまずゲスト側でWi-Fiパケットキャプチャを実施してみる.
ifconfig
でwlan0のインターフェイスが出ることを確認
(出なかったら設定確認 or kali Linuxを再起動してみる)

下記を実行(36chのWi-Fiパケットをモニター)
sudo ifconfig wlan0 down
sudo iwconfig wlan0 mode monitor
sudo ifconfig wlan0 up
sudo iwconfig wlan0 channel 36
sudo iwlist wlan0 channel
で現在のチャンネルを確認できる.

この状態でtcpdumpを実行すればモニターモードでのWi-Fiキャプチャができる.

- tcpdumpのオプション
- -w:出力先ファイル
- -i:入力インターフェイス
キャプチャしてみたファイルは以下.

チャンネルも36chに設定されている
これでゲストOS内でのWi-Fiキャプチャができるようになった.
WindowsでのWi-Fiパケットキャプチャ
前章ではゲストOS側でのキャプチャ+ファイル出力を実施したが,本章ではホスト側でのファイル出力を行う.大まかな流れは以下.
- ホスト側からゲストへsshでリモートアクセス
- tcpdumpを実行し,標準出力へ出力
- ホスト側でtsharkを起動.入力インターフェイスは標準入力
準備:ホスト側…sshクライアントの導入 ゲスト側…visudoの設定
sshでのログインをワンライナーで実施したいので,ホスト側にsshクライアントソフトPuttyをインストールする.
https://the.earth.li/~sgtatham/putty/latest/w64/putty-64bit-0.78-installer.msi
次に,sshログイン後にtcpdumpをパスワード無しで実行したいので,ゲスト側のターミナルで以下の操作を行う.
sudo visudo
/etc/sudoers.tmp
というファイルを編集できるので,
kali ALL=(ALL) NOPASSWD: /usr/bin/tcpdump
という記述を追加して保存.
キャプチャ実施
Windowsのコマンドプロンプトから下記1~3のコマンドを一括で実行する.
1.ホスト側からゲストへsshでリモートアクセス
{PuTTYのPath}\plink.exe kali@192.168.0.100 -pw kali -batch
-pwでパスワード指定.-batchを入れないとコマンドを打った後にキー押下を要求されて変なことになる.
2.tcpdumpを実行し,標準出力へ出力
sudo tcpdump -i wlan0 -w -
-w -→標準出力へパケットを出力.
3.ホスト側でtsharkを起動.入力インターフェイスは標準入力
{tsharkのPath}\tshark -i - -w {保存先フォルダのPath} -b filesize:1000
-i -→標準出力からキャプチャ.-b filesize:1000で1000[KB]ずつキャプチャファイルを保存.
以下のようなコマンドを打てばOK.2と3のコマンドを|で区切れば,2の出力を3の入力として渡せる.
{PuTTYのPath}\plink.exe kali@192.168.0.100 -pw kali -batch ; sudo tcpdump -i wlan0 -w - | {tsharkのPath}\tshark -i - -w {保存先フォルダのPath}\capture.pcapng -b filesize:1000
以下のようにうまくリングバッファで保存できている.

まとめ
WindowsPCでもVirtualBox+kali Linuxとssh+WiresharkでリングバッファでのWi-Fiパケットキャプチャができた.リングバッファでなくてよいならWiresharkの追加機能であるsshdumpとかもある.

補足
*1:iwconfigでの呼称.
*2:Eye P.Aなど,独自のWi-Fiモジュール用ドライバを用いてモニターモードキャプチャできるソフト(有料)を用いる方法もある.
コメント
good!!!