ARP スプーフィングは結局何をしていたのか

以前、ARPスプーフィングの実験 ということで、"arpspoof"というコマンドを使用して、ARPスプーフィングをしたのですが、その時は詳細にパケットを見ていなかったので見てみます。

検証環境

f:id:ryouta768:20140616185930p:plain

* ゲートウェイ
    * IPアドレス : 192.168.11.1
* 攻撃者PC
    * IPアドレス : 192.168.11.5
* ターゲットPC
    * IPアドレス : 192.168.11.3

検証

arpspoof -i wlan0 -t 192.168.11.3 192.168.11.1

上のようなコマンドを使用して、ゲートウェイである192.168.11.1になりすまします。ここで、攻撃PC(192.168.11.5)でどのようなパケットをターゲットPC(192.168.11.3)に送信しているのか確認してみます。

f:id:ryouta768:20140616185926p:plain

tcpdump でキャプチャした pcap ファイルを wireshark で見てみると、約2秒間に1回、ターゲットPCにARP reply を送信していることがわかります。

その ARP reply の中身を詳しく見てみると、

f:id:ryouta768:20140616185928p:plain

上のような感じになります。

* Sender MAC address
    * 攻撃者PCのMACアドレス
* Sender IP address
    * 攻撃者PCのIPアドレス
* Target MAC address
    * ターゲットPCのMACアドレス
* Target IP address
    * ターゲットPCのIPアドレス

これを見ると、Sender MAC adress の項目が偽装されていることがわかります。本来はゲートウェイMACアドレスが入るはずが、攻撃者PCのMACアドレスになっています。このため、ターゲットPCのARPテーブルでは「ゲートウェイIPアドレス」と「攻撃者PCのMACアドレス」が紐付き、ターゲットPCがフレームをゲートウェイIPアドレスに送信しようとして、実際には攻撃者PCにフレームを送信してしまうのです。こうして、攻撃者はターゲットPCがどのような通信を行っているのか盗聴出来てしまいます。

ゲートウェイに偽装したMACアドレスが入った ARP reply を定期的にターゲットPCに送信することで、ARPテーブルを偽の情報で上書きしている訳です。

この「IPアドレス」と「MACアドレス」の組み合わせ保存しているものを、ARPキャッシュと呼びますが、この保存された情報は一定期間が経つと削除されます。つまり、一定期間が経つまでは、ターゲットPCは攻撃者にフレームを送信していることになります。そしてもし、攻撃者が一定間隔(上の例のように2秒間隔など)で、偽情報の入った arp reply をターゲットPCに送信し続けているとすると、ターゲットPCの内容はその arp reply の送信が途絶えるまで、攻撃者に筒抜けです。

ARPスプーフィングの対策方法

1. 静的エントリを使用する
2. Dynamic ARP Inspection

1. 静的エントリを使用する

ARP スプーフィングがなぜ起こるかを考えてみると、第一の原因は ARP テーブルが動的に書き換えられてしまうことが原因です。

ならば!!!!

動的に書き換えられないようにすればよい!、ということで、静的に MAC アドレスを ARP テーブルに登録します。そうすることで、動的にARPテーブルを書き換えられる心配はありません。しかし、静的に登録してしまうと、ゲートウェイMACアドレスが正当な理由で変更された場合(機器の変更など)、通信が出来なくなってしまう可能性があります。

2. Dynamic ARP Inspection

これはCisco のスイッチなどにある機能らしく、スイッチ上を流れる ARP パケットを監視し、不正なARPパケットを破棄することができるそうです!

参考にしたページ

Dynamic ARP Inspection