mrtc0.log

tail -f mrtc0.log

無線LANのAPをGoogle Mapにマッピングする

大学構内で電波が弱いところが多々あってどのあたりが弱いのかなんとなく把握したかったので, KismetとAndroidを使ってAPをGoogle Mapにマッピングしてみた.
別にAndroidじゃなくてもGPSレシーバーがあれば可能.

うまくいけばこんな風にマッピングでき, BSSIDはもちろん, 暗号化方式やチャンネル, 接続しているクライアントのMACアドレスと(大雑把な)製品情報もわかる.

f:id:mrtc0:20151208202102p:plain


Androidでの設定

以下の2つだけ.

  • USBデバッグモードを有効にしておく.
  • BlueNMEAをインストールしておく

BlueNMEAを使うことでAndroid端末をGPSレシーバーとしてUSB接続などで利用できる.
BlueNMEAは4352/tcpでListenするため, 後述するadbコマンドでポートフォワーディングしてあげる.


PCでの設定

Kali Linuxだとkismetやgiskismetが既に入っているので楽かも.
ここではArch Linuxを使った.

まず, adbコマンドを使用するためにAndroid SDKなどをインストールする.
このあたりは Android - ArchWiki が詳しい.

$ yaourt -S android-sdk
$ yaourt -S android-sdk-platform-tools
$ yaourt -S android-sdk-build-tools
$ yaourt -S android-tools
$ yaourt -S android-udev

USBデバッグモードを有効にしたままAndroid端末を接続する.

$ adb devices
List of devices attached 
HT07VHL00676    device

のように表示されたら問題はないはず.

続いて, kismetを導入する.

yaourt -S kismet

/etc/kismet.confを編集する. ncsourceのアダプタ名は環境に合わせて変更.

# mkdir /var/log/kismet
...
logprefix=/var/log/kismet
ncsource=wlp3s0:split=true,retry=true
...

kismetで収集した情報をkmlなどにエクスポートするためにgiskismetをインストールする必要があるが, レポジトリが見つからなかった.
Kali Linuxレポジトリにはあったのでこれを使用.

$ git clone git://git.kali.org/packages/giskismet.git
$ cd giskismet
$ yaourt -S perl-xml-libxml perl-dbi perl-dbd-sqlite
$ perl Makefile.PL
$ make
$ sudo make install

最後にgpsdをインストール.

$ yaourt -S gpsd

スキャンする

Android端末を接続し, adbコマンドでポートフォワーディングの設定をする.

$ adb forward tcp:4352 tcp:4352

続いて, 転送ポートである4352/tcpでgpsd起動する.

$ gpsd -N -n -D5 tcp://localhost:4352

Android端末でBlueNMEAを起動し, PCでKismetを起動する.

# kismet --use-gpsd-gps localhost:4352
歩く

PCとAndroid端末を持って調査したい場所を歩き回る.
Android端末の方はスリープにしてもBlueNMEAは動いているが, PCの方がモニターを閉じるとスリープになるとUSBの接続が切れるかもしれない.
systemdな環境であれば/etc/systemd/logind.confを以下のように編集して反映させる.

HandleLidSwitch=ignore
sudo systemctl restart systemd-logind

これでかばんの中にPCとAndroid端末を入れて持ち歩ける.

ログファイルは/var/log/kismet/以下にKismet-.netxmlの形式で保存されている.


Google Mapで可視化する

giskismetでログファイルからデータをDBに保存する.

./giskismet -x /var/log/kismet/Kismet-<date>.netxml

wireless.db1に保存されている. さらにDBからデータをkmlに変換する.

./giskismet -q "SELECT * FROM WIRELESS" -o output.kml

あとは生成されたkmlファイルをGoogle Mapのインポート機能で読み込ませればいい.
地図に情報をインポート - マイマップ ヘルプ


思った以上にWEPが多い...