如同现实社会一样,网络虚拟社会也存在着各式各样的虚假信息,从******掉网络钓鱼甚至社会工程学欺诈,我们所要面对的安全问题比比皆是。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病毒才会被彻底挡住。