Mac OS X 遭遇并抵御 ARP 攻击

2009年12月某天出差在武汉一快餐店用新买的 MacBook 接入餐厅的无线上网,用得挺好,突然间发现上不了了,打开终端(Terminal),arp -a,发现有网关的 MAC 和另外1个 IP 的 MAC 相同,显然遭遇 ARP 攻击了。Ping 了一下网关(192.168.1.1),不通,看来情况不容乐观啊。
开始采取抵御措施吧。

一般的 ARP 攻击只是伪装网关,把正确的网关 MAC 地址加入本机 MAC 地址表即可。所以首先要获取正确的网关 MAC地址。
但是攻击 PC 一直在发送错误的 ARP 包,采取以下对策。
终端中执行命令:
sudo tcpdump -i en1 host 192.168.1.1
tcpdump 是 Unix 系统的抓包工具,上面命令的作用是使用 root 用户执行 tcpdump 工具,抓取 en1 接口(当时上网用的无线网卡)上所有 IP 地址为 192.168.1.1 的数据包。
然后把无线断开再连接,这个过程中可以获得正确的网关 MAC,因为接入无线的那一瞬间网关会相应我的 ARP 请求,终端中可以获取到下面的信息:
====================
16:29:11.184612 ARP, Request who-has 192.168.1.1 tell 192.168.1.192, length 28
16:29:11.188276 ARP, Reply 192.168.1.1 is-at 00:25:86:2c:16:6e (oui Unknown), length 28
16:29:11.193168 ARP, Request who-has 192.168.1.1 tell 192.168.1.192, length 28
16:29:11.203527 IP 192.168.1.1.bootps > 192.168.1.192.bootpc: BOOTP/DHCP, Reply, length 548
16:29:11.211389 ARP, Reply 192.168.1.1 is-at 00:25:86:2c:16:6e (oui Unknown), length 28
16:29:11.211408 IP 192.168.1.192.53695 > 192.168.1.1.osu-nms: UDP, length 4
16:29:11.385210 ARP, Reply 192.168.1.2 is-at 00:22:43:96:0b:7d (oui Unknown), length 34
16:29:11.385681 ARP, Reply 192.168.1.100 is-at 00:22:43:96:0b:7d (oui Unknown), length 34
16:29:11.386298 ARP, Reply 192.168.1.101 is-at 00:22:43:96:0b:7d (oui Unknown), length 34
16:29:11.386873 ARP, Reply 192.168.1.1 is-at 00:22:43:96:0b:7d (oui Unknown), length 34
====================
其中 192.168.1.192 是我的 MacBook 的地址,00:22:43:96:0b:7d是攻击者的 MAC,红色标出了正确的网关 MAC。

然后把正确的 MAC 地址,在终端中输入命令:
sudo arp -S 192.168.1.1 00:25:86:2c:16:6e pub
这条命令的作用是把 IP 192.168.1.1 的 MAC 设置为 00:25:86:2c:16:6e 并不理会其它主机发送的 ARP 包中的信息。

绑定完成,试一下上网,还是不行!tcpdump 抓包看了一下,发现:
====================
17:25:18.725671 ARP, Reply 192.168.1.192 is-at 00:22:43:96:0b:7d (oui Unknown), length 34
====================
原来攻击者不但伪装网关,而且伪装主机!不是一般的 ARP 攻击啊,双伪装,破坏力巨大,不过还是可以抵御的。方法很简单,不要 DHCP 获取 IP 地址,手动设置一下 IP,例如我改成 192.168.1.254,OK。

总结一下抵御方法

1、获得正确的网关 MAC 地址;
2、确保本机 MAC 地址表里网关的地址是正确的;
3、如果本机被伪装则更改本机 IP。

2 thoughts on “Mac OS X 遭遇并抵御 ARP 攻击”

  • 17:25:18.725671 ARP, Reply 192.168.1.192 is-at 00:22:43:96:0b:7d (oui Unknown), length 34

    如果是欺骗网关,伪装主机,这应该是发给网关的响应包,你本机可能抓的到吗?

  • 如果是只发给网关的欺骗包自然是抓不到的,可是它不但想欺骗网关,还想欺骗包括我自己在内的所有人。