如同现实社会一样,网络虚拟社会也存在着各式各样的虚假信息,从黑客攻击掉网络钓鱼甚至社会工程学欺诈,我们所要面对的安全问题比比皆是。ARP(Address Resolution Protocol)是地址解析协议,是一种将IP地址转化成物理地址的协议。一些攻击者通过利用ARP欺骗技术实现对数据的截取和侦听。

一、ARP欺骗

ARP协议用于IP地址到MAC地址的转换,此映射关系存储在ARP缓存表中,若ARP缓存表被他人非法修改,则会导致发送给正确主机的数据包发送给另外一台由攻击者控制的主机。ARP欺骗(ARP spoofing),也叫ARP毒药(ARP poison),即可完成这些功能。

假设攻击者和目标主机在同一个局域网中,并且想要截获和侦听目标主机到网关间的所有数据。当然,对于使用集线器的局域网环境,攻击者只需要把网卡设置为混杂模式即可。但是现在的局域网都是交换机了,不仅可以提高局域网的容量,而且可以提高安全性。在这种情况下,攻击者首先会试探交换机是否存在失败保护模式(fail-safe mode),是交换机所处的特殊模式状态。交换机维护IP地址和MAC地址的映射关系时会花费一定处理能力,当网络通信时出现大量虚假MAC地址时,某些类型的交换机会出现过载情况,从而转换到失败保护模式。若交换机不存在失败保护模式,则需要使用ARP欺骗技术。

攻击者主机需要两块网卡,IP地址分别是192.168.0.5和192.168.0.6,插入交换机的两个端口,准备截获和侦听目标主机192.168.0.3和路由器192.168.0.1之间的所有通信。另外攻击者主机还需要有IP数据包转发功能,此项功能在Linux下只需要执行命令echo 1> /proc/sys/net/ipv4/ip_forward就可以。以192.168.0.4的网络通信为例,正常的ARP转换如下:

1.主机A192.168.0.4想要与路由器192.168.0.1通信,从而接入Internet。

2.主机A以广播的方式发送ARP请求,希望得到路由器的MAC。

3.交换机收到ARP请求,并把此请求发送给连接到交换机的各个主机。同时,交换机将更新它的MAC地址和端口之间的映射表,即将192.168.0.4绑定它所连接的端口。

4.路由器收到A的ARP请求后,发出带有自身MAC地址的ARP响应。

5.路由器更新ARP缓存表,绑定A的IP地址和MAC地址。

6.交换机收到了路由器对A的ARP响应后,查找它的MAC地址和端口之间的映射表,把此ARP响应数据包发送到相应的端口。同时,交换机更新它的MAC地址和端口之间的影射表,即将192.168.0.1绑定它所连接的端口。

7.主机A收到ARP响应数据包,更新ARP缓存表,绑定路由器的IP地址和MAC地址。

8.主机A使用更新后的MAC地址信息把数据发送给路由器,通信通道就此建立。

ARP欺骗需要攻击者迅速地诱使目标主机192.168.0.3和路由器192.168.0.1都和它建立通信,从而使自己成为中间人MiM(Man in Middle)。换句话说,攻击者的主机此时相当于一个被攻击者完全控制的路由器,目标主机和路由器之间的所有数据通信都要由攻击者主机转发,攻击者也就能对数据作各种处理。要达到同时欺骗目标主机和路由器的目的,攻击者应打开两个命令界面,执行两次ARP欺骗:一次诱使目标主机认为攻击者的主机有路由器的MAC地址,这可以利用IP地址欺骗技术,伪造路由器的IP地址,从攻击者主机的一块网卡上发送给目标主机ARP请求包,则错误的MAC地址和IP地址的映射将更新到目标主机;另一次使路由器相信攻击者的主机具有目标主机的MAC地址,方法和前面相似。

ARP欺骗的防范:

中毒的网络,就会一直有发送arp病毒包的,这些arp病毒包会误导你的机器对网关mac地址的解析。所以需要绑定mac地址。两种方法:

1、列出局域网内所有机器的MAC地址。

# arpAddress HWtype HWaddress Flags Mask Iface

192.168.1.1 ether 00:07:E9:2A:6F:C6,然后,绑定MAC地址, #arp -s 192.168.1.1 00:07:E9:2A:6F:C6

注意:假如用户的网关设置了hostname的话,这里192.168.1.1就有可能需要换成hostname。

2、创建一个/etc/ethers文件,比如你要绑定网关,那就在/etc/ethers里写上:192.168.1.1 00:07:E9:2A:6F:C6,然后执行 #arp -f ,每次重启机器后需要重新绑定MAC地址。

另外,mac地址的绑定需要双向的,即机器a绑定了机器b,机器b也要绑定机器a,这样arp病毒才会被彻底挡住