一次 ARP 攻击

在另一台电脑上使用 ettercap(一款用于中间人攻击的工具) 对我的电脑发起 ARP 欺骗,使我的电脑不能访问任何远程主机。这时使用 arp -a 命令查看:

gateway (192.168.1.1) at 18:5e:0f:54:6b:0e [ether] on wlp9s0

跟我的路由器 MAC 地址不符。
再用 sudo tcpdump -i wlp9s0 arp 抓包:

20:44:45.922892 ARP, Reply gateway is-at 18:5e:0f:54:6b:0e (oui Unknown), length 28
20:44:55.932845 ARP, Reply gateway is-at 18:5e:0f:54:6b:0e (oui Unknown), length 28
20:45:05.943995 ARP, Reply gateway is-at 18:5e:0f:54:6b:0e (oui Unknown), length 28
20:45:15.954167 ARP, Reply gateway is-at 18:5e:0f:54:6b:0e (oui Unknown), length 28
20:45:25.963578 ARP, Reply gateway is-at 18:5e:0f:54:6b:0e (oui Unknown), length 28
20:45:35.973785 ARP, Reply gateway is-at 18:5e:0f:54:6b:0e (oui Unknown), length 28
20:45:45.985955 ARP, Reply gateway is-at 18:5e:0f:54:6b:0e (oui Unknown), length 28
20:45:56.067127 ARP, Reply gateway is-at 18:5e:0f:54:6b:0e (oui Unknown), length 28
20:46:06.004289 ARP, Reply gateway is-at 18:5e:0f:54:6b:0e (oui Unknown), length 28

是 ARP 欺骗,再明显不过了,而且是直接伪装成网关。
所以,用ARP 欺骗伪装成网关的原理就是强行发起高频的 ARP Reply,使目标主机误以为这才是网关,于是错误的修改 ARP 缓存记录,使得流量全部流向发起攻击的 MAC 地址。

防范

最简单的防范措施就是,设置静态 ARP 缓存(假设网关地址是 192.168.1.1):

sudo arp -s 192.168.1.1 aa:bb:cc:dd:ee:ff

其中 aa:bb:cc:dd:ee:ff 是已连接到的网关的硬件地址,然后再 arp -a 就可以看到:

gateway (192.168.1.1) at aa:bb:cc:dd:ee:ff [ether] PERM on wlp9s0

多了 PERM 字段,这表明该记录是永久的(permanent),不会受 ARP Reply 的影响,所以也就自然防范了。

另一种方法是,在路由器设置里绑定 MAC 地址和 IP,这样就可以保护已绑定的主机不受 ARP 欺骗了。