パケットキャプチャしている端末を見つけ出す
ARP
プロトコルのことを調べているときに、Wireshark
なんかでパケットを盗聴している端末を見つけ出す方法があることを知ったので、実際に試してみました。
普段の動作
パソコンがインターネットを通じて通信するとき、
送信するときは
「アプリが送るデータをソケットAPIでネットワークスタックに依頼」
->「OSが適時パケットの分割とヘッダの負荷」
->「NICから物理的な信号として送出」
受信するときは
「NICがブロードキャストor自分宛の通信か判断」
->「OSが受け取ったパケットを組み立て」
->「組み立て終わったデータがアプリへ」
という流れ。
(のはず…)
なので、普通の動きでは自分宛以外のパケットを認識することはできない。
でもこのNIC
に対して、自分宛以外でもパケットを拾うように設定することもできる。
これをプロミスキャスモードといいます。
プロミスキャスモード
Wireshark
などのパケットキャプチャソフトはこうした設定でネットワーク上のパケットの様子を調べることができます。
でも全部を取り込んでいる、という点を突いて、キャプチャしている端末を見つけることができます。
パケットキャプチャしている端末を見つける
NIC
では宛先macアドレスを見てブロードキャストor自分宛?を判断していて、
似たような判断はOS
でもやっているのですが、そのチェックの粒度には差があって、
NIC
では厳密にmacアドレスの最初から最後を見ますが、OS
では最初の何バイトかを見て判断しています。
なので、このチェック粒度の差とプロミスキャスモードを組み合わせて、ARP
パケットを送りつけてあげることで、キャプチャ端末を特定することができます。
どういうことかというと、ぱっと見ブロードキャストなパケットで、しかもARP
要求を送ってあげると
そのパケットは無事APP
の層まで到達して、ARP
応答が戻ってくる、という仕組みです。
環境
パケットキャプチャ側をRaspberry Pi
で、
偽ARP
パケットをVirtual Box
のCent OS
から送信します。
パケットの送信にはScapy
というPython
のライブラリを使用いたしました。
まずキャプチャ側のNIC
をプロミスキャスモードにして、
偽ARP
要求パケットを送出。
その様子をWireshark
で観察
ARP
レスポンスが返ってくる。やったぜ。
参考
社内の盗聴者を見つけ出す---フリーツール「PromiScan」の使い方(中) | 日経 xTECH(クロステック)
ARPを利用してプロミスキャスモードの盗聴ホストを特定してみた - sonickun.log
盗聴者特定ツール
sniffer - How can I detect if someone is sniffing network packets on the LAN? - Information Security Stack Exchange