2.2 ARP协议的弱点
由于ARP缓存表是动态刷新的。根据RFC826规定当主机接收到ARP应答时,主机的ARP表会立刻刷新而无需判断是否事先发过ARP请求。若主机长时
间没有收到ARP应答(一般是20分钟)它会自动刷新ARP缓存表,这样可以删掉那些过期的,已经不存在的表项。确保ARP缓存表的正确性。但是这样很容
易使主机的ARP缓存表被攻击者修改。使主机的ARP表项改成攻击者需要的表项。
3 ARP攻击
ARP攻击主要是就基于ARP缓存表的的弱点,攻击者非法篡改目标机ARP缓存表,使目标主机无法正常工作的行为。ARP攻击主要有拒绝服务攻击和ARP欺骗。
3.1 拒绝服务攻击
攻击者可以很容易的将目标主机中IP地址对应的MAC地址改成根本不存在的地址,这样计算机就会往这个根本不存在的地址发送数据包,导致目标机无法接收到数据包,中断了主机与外界网络的通信。
3.2 ARP欺骗
3.2.1 中间人攻击
这种攻击是网络监听的一种方式。攻击者进入两台通信的计算机之间,通过某种手段窃取一台机器给另一台机器发送的数据包,然后将数据包修改再转发给另一台机器,攻击者对这两台计算机来说是透明的。具体过程如下。
假设三台计算机A、B、C。机器C修改A的ARP缓存表,将表中B的IP地址对应的MAC地址改成C的MAC地址。当A给B发送数据时,就使用了B的IP
地址与C的MAC地址。使给B发送的数据全部发给了C。同理修改目标机B的ARP缓存表使A的IP地址对应的MAC地址改成C的MAC地址。最终A与B之
间通信的数据就全部经过C,之后C又把数据发给A和B。
3.2.2 克隆攻击
克隆攻击是另外一种ARP欺骗的方式。现在我们已经可以通过硬件或软件工具来修改网络接口的MAC地址,Linux用户甚至只需要用ifconfig命令
修改一个参数就能修改。攻击者通过拒绝服务攻击使目标主机与外界失去联系,然后攻击者将自己的IP和MAC地址改成目标机的IP和MAC地址,这样攻击者
的主机就成为和目标机一样的副本。
4 ARP欺骗的防范措施
4.1 MAC地址绑定
MAC地址与交换机绑定。一台高质量的交换机往往有一个功能就是不允许修改与交换机某个端口绑定的MAC地址。当确实需要修改时,只能被网络管理者修改。
4.2 静态缓存表
将ARP缓存表设置成静态,不允许其自动刷新。网络管理员负责对网络上的每台机器进行登记,记录每台机器的IP/MAC。这样在发送一个与ARP静态缓存
不一致的请求时目标机将不予理睬。但这种方法不适合于大型的网络,它需要定期维护ARP表,给管理员造成很大的负担。
4.3 RARP
RARP即地址反转协议。RARP协议用于知道一个MAC地址确定它的IP地址。在一个网络内部,主机向网内的所有计算机发送一个RARP请求,这时若一个MAC地址收到多个IP地址,就说明拥有该MAC地址的机器受到克隆攻击。
4.4 ARPWATCH
ARPWATCH 是一款用于查看IP地址与其对应的物理地址之间变化的软件。在用户启动时,ARP就收集本地网络上所有机器的ARP包并生成一个数据库文件来存储MAC/IP。
当开始运行时就会开始监听网络,将捕获的数据包与数据库中的内容进行比较,如果不一样的话就会发出一份EMAL警告,同时记录现场用来帮助追踪追击者的来
源。因此当有一个ARP欺骗发生时,当攻击者试图修改ARP表时ARPWATCH就会发现,并记录下来并发E-mail通网络管理员使其采取相应措施。
5 利用Libnet开发包构造ARP欺骗应答数据包
5.1 ARP报文格式
ARP的报文格式如图2所示。
硬件地址类型
|
协议地址类型
|
硬件地址长度
|
逻辑地址长度
|
操作
|
发送端硬件地址
|
发送端硬件地址
|
发送端IP地址
|
发送端IP地址
|
目标硬件地址
|
目标硬件地址
|
目标IP地址
|
|
|
|
图2 ARP的报文格式
图2中每行对应ARP消息32位。前两个16位字段的值用于指定协议地址和硬件地址的类型。例如,当ARP在以太网上时,硬件地址类型字段的值为1,当
ARP用在IP地址上时,协议地址字段的值就为0X0800。硬件地址长度和逻辑地址长度,用于指定硬件地址和协议地址中的字节数。操作字段用于指定该消
息是请求(值为1)消息还是应答(值为2)消息。
5.2 使用Libnet构造ARP应答数据包
Libnet是一个专业网络数据包构造和开发包。它是一个高层次的API函数库,允许开发者构造和发送网络数据包。Libnet提供了一个对底层网络数据
包进行构造,修改和发送的高级接口。Libnet主要提供了在IP层和链路层构造网络数据包的功能和一些非常有用的辅助功能。
构造ARP数据包的步骤如下:
(1)利用函数libnet_init()进行初始化操作。因为ARP协议是在网络层,所以必须先构造ARP协议块,也就是用函数libnet_build_arp()来构造ARP协议块。
(2)利用函数libnet_autobuld_Ethernet() 或 libnet_build_Ethernet() 来构造以太网协议块。
(3)利用libnet_write()发送数据包。
构造ARP数据包的流程如图3所示。
图3 ARP数据包的流程
构造ARP协议块
Libnet_build_arp()或
Libnet_autobuild_arp()
|
构造以太网协议块
Libnet_build_ethernet()或libnet_autobuild_ethernet()
|
制作ARP应答欺骗包。其中目的IP是210.40.7.183,源IP是210.40.7.186,目的MAC是主机210.40.7.183的MAC
地址00-1B-B9-7B-70-4C。而源MAC地址我们填充为210.40.7.181的MAC地址00-1B-B9-79-E0-4C。当我们发
给主机210.40.7.186时它会认为这个包是210.40.7.183发的但其实是210.40.7.181发送的,这时210.40.7.181
就可以监听210.40.7.183与210.40.7.186之间的通信。其主要实现过程用C语言描述如下:
#include
/*在 windows平台下必须包含此文件,文件libnet.h是Libnet开发包的头文件*/
main()
{
int packet_size;
libnet_ptag_t protocol_tag;
char *destination_ip_str ="210.40.7.183"; /*目的IP地址字符串变量*/
char *source_ip_str = "210.40.7.186"; /*源IP地址字符串变量*/
u_char hardware_source[6] = { 0x00,0x1B,0xB9,0X79,0xE0,
0x4C }/*源MAC地址*/
u_char hardware_destination[6] = {0x00,0x1B,0xB9,0x7B,0x70,0x4C }/*目的MAC地址*/
destination_ip = libnet_name2addr4(l,destination_ip_str,LIBNET_RESOLVE); /* 把目的IP地址字符串形式转化成网络顺序字节形式的数据 */
source_ip = libnet_name2addr4(l,source_ip_str,LIBNET_RESOLVE); /* 把源IP地址字符串形式转化成网络顺序字节形式的数据 */
/*定义所需变量,主要有:packet_size,存放数据包长度的变量。libnet_t,libnet句柄。libnet_ptag_t protocol_tag,协议块标记。device,设备名字。error_information,错误信息。等*/
l = libnet_init(LIBNET_LINK_ADV,device,error_information) /*初始化libnet,包括三个参数:libnet类型,网络设备,错误信息。*/
protocol_tag = libnet_build_arp(ARPHRD_ETHER,…….. (u_int8_t*)
&destination_ip……) /*根据ARP协议格式构造ARP协议块,其中参数主要包括硬件地址类型,协议地址类型等*/
protocol_tag = libnet_autobuild_ethernet(hardware_destination,ETHERTYPE_ARP,1);/*构造一个以太网协议块,参数包括目的硬件地址,以太网上层协议类型,*libnet句柄*/
packet_size = libnet_write(l); /* 发送已经构造的ARP数据包,注意此数据包应该包括两部分,一部分是ARP协议块,另外一部分是以太网协议块*/
libnet_destroy(l); } /* 销毁libnet */
运行此程序会发送一个ARP应答。我们用ARP卫士验证是否发生了ARP欺骗。当运行此程序时,ARP卫士会出现图4所示。可以看到这与我们构造的ARP
应答包一致。ARP卫士还会提示:这是发送的一个非法的ARP应答包,没有被规则允许,包的源IP为210.40.7.186,源MAC为00-1B-
79-E0-4C,这个源MAC地址对应的IP是210.40.7.181,出现这种情况说明210.40.7.181正在进行欺骗,试图使
210.40.7.186指向210.40.7.181。
ARP攻击是一种非常专业化的网络攻击方式,它会给网络管理员增加很大的负担,破坏主机数据,窃取主机信息。本文从ARP协议的功能,原理入手,分析出了
ARP协议的弱点以及由于这些弱点产生的攻击方式并且提出了有针对性的解决方案。最后根据ARP报文格式构造了ARP欺骗包。