kismetというWiFiのアナライザーをFreeBSD 10.4R/amd64で試してみました。バイナリはpkg installでインストールしました。pkgはcursesだけで作られていた最後のバージョンの2016-07-R1が入るようです。
現在開発が続いているものは、ブラウザで見れるような機能があるようですが、2016-07-R1はcursesを使った構成でターミナルで使うことができます。
通常パケットは暗号化されているので、kismetではパケットの中身は確認できません。ifconfig scanでもAPのリストは確認できますが、kismetではアクセスしているSTAの一覧も確認できます。
kismetはkismet_client,kismet_server,kismet_captureのプロセスで処理されるようです。
kismet_clientとkismet_serverだけでも動きますが、権限を制限するために、kismet_captureを使い、また外部ホストでキャプチャを行うためにkismet_droneというプロセスがあります。
パッケージをインストールしたら、groupにkismetが追加されているので、そこに実行ユーザのアカウントを追加します。
kismet:*:229:yamori
USBモジュールのrun0をmonitorモードでwlanにします。
% sudo ifconfig wlan0 create wlandev run0 wlanmode monitor
インターフェースによってはmonitorが使えないこともあります。
kismetというラッパーがあるのでそれで実行します。
% kismet -c "wlan0:type=radiotap_bsd_g,name=run0"
引数でソースのインターフェースを指定しましたが、設定ファイルの/usr/local/etc/kismet.confに設定を書くこともできます。
サーバを起動して、コンソールにログが流れるので、ERRORが出てないことを確認してTABで[ Close Console Window ]を選択するとトラフィックの表示になります。ERRORが出ても処理は続きますが、FATALが出るとサーバが落ちてしまいます。
リストの緑はパスワード無しの暗号化無しで、黄色がWPAで赤がWEPになります。
Client ListのTypeはWiFiクライアントはWirelessになり、APはWired/APになります。これに加えて有線側の機器が無線側に通信をおこなうと、Wired/APとリストに表示されます。これはルータがこのような構成になっているためです。
AirMac Expressを子機として接続しているとTypeがUnknownになりました。
Client ListのPktsとSizeはどういう単位で表示しているのか分かりません。
Network Detailsの表示
Channel Detailsの表示
最初の起動時に、Terminalでdark grayなどが使えるかの確認するダイアログが表示されて、YesにしてしまうとMac OS XのEl Capitanのターミナルで表示すると一部の文字が表示されないようです。
~(チルダ)か`(バッククォート)でメニューのフォーカスON/OFFができます。メニューにフォーカスを入れカーソルキーでSortメニューのAuto-fit以外を選ぶとNetwork Detailsが見れます。リスト上で選択されているネットワークについてTABキーでネットワークの一覧とデバイスの一覧が切り替わり、リターンキーで詳細情報が確認できるようです。ちょっとUI分かりにくいです。
リストのAutogroup ProbeはProbe request(Active Scan)になるようです。
/usr/local/share/doc/kismet/manufにwiresharkで使われているMACアドレスの一覧を用意するとManufが名前で表示されるようになります。
キャプチャしたパケットはログファイルに落とせます。起動時のダイアログでチェックを外すか、-nオプションをつけて起動するとログは落とさなくなります。
ローカルのIPアドレスで起動すると外部ホストのclientから接続できます。
% kismet_server -l tcp://<local ip address>:2501
kismetはpluginで機能拡張できて、幾つかソースツリーに用意されているようですが試してません。
kismetはGPSモジュールを使って、自分の位置を特定して、移動してスキャンすることで、APの位置を特定することもできるようです。
runってチップは11nなんだけどドライバは11nに対応していないんで、11nな通信はキャプチャできないような気がします。
技適ついたUSBドングルつかってるし、そもそもmonitorモードでは送信しないので法律に触れることはありませんが、悪用した場合はおそらくなんらかの法律に抵触すると考えられます。
後日追記:ZRouterのプロファイルに追加してみた。mipsなモジュールでとりあえず使えてますが、/usr/local/etc/kismet.confのconfigdirが効いていないところがあるのとChennel Diteilsが表示されません。Chennel Diteilsの問題はserver側の問題のようなんだが何でだろう。。。野良ドライバーのrt2860の問題のようでした。。。解決しました。FreeBSDではRADIOTAPという仕組みがあるのですが、これの仕様が変更されたようで、動かなくなっていたようです。というか動かなくなるような仕様のRADIOTAPの問題の気もするのですが。