APP下载

ARP防火墙的设计与开发

2012-04-29柴王爱,黄文康

电脑知识与技术 2012年2期

柴王爱,黄文康

摘要:ARP(Address Resolution Protocol)基本功能是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。然而,一些非法的入侵者和网络监听者,利用各种技术和手段,篡改IP地址与MAC地址之间的对应关系,从而“冒名顶替”他人的MAC地址,以达到非法监听和获取他人在网络上传输的信息的目的,这种网络入侵方式为ARP欺骗入侵。它是近年来网络入侵攻击的主要形式之一,严重威胁着网络信息的安全。针对以上问题,该文开发了一套ARP防火墙系统,通过对局域网内ARP数据包的分析,实现对局域网内所有的主机进行检测和监控,及时发现局域网内的ARP攻击行为,将其广播给网关和局域网内所有主机,并对该攻击进行防御和处理,从而解决局域网内由于ARP攻击所造成的网络瘫痪问题。

关键词:MAC;ARP攻击;数据包捕获;ARP攻击的检测与防范

中图分类号:TP393文献标识码:A文章编号:1009-3044(2012)02-0269-03

随着现在社会信息技术的飞速发展,如今企业网络办公化也正式步入了无线网的领域中。构建无线网最大的好处就是组网无需布线,使用便捷,经济。所以对多数企业来说,无疑是组网方案的最佳选择。大量的无线路由器被用于企业中,使得针对无线网络的故障诊断和安全保障变得与有线网络一样重要。

ARP攻击以及非法入侵未设防的无线局域网已经是现在导致联网异常的典型案例了。由于安全设置的疏忽以及后期安全防护的不足,导致少数具有恶意的黑客对企业的重要信息及保密数据造成了极大的危害。

另一方面,在我们日常的上网过程中,我们经常会碰到诸如网络经常无缘无故的掉线,或者突然提示你IP有冲突,甚至网速慢得连网页都打不开等网络问题。这些问题的根源就是ARP攻击。ARP攻击已经成为困扰人们日常上网行为的主要黑客攻击。

本文研究的ARP防火墙系统可有效解决以上问题。

1基于ARP协议的网络攻击的原理

在TCP/IP网络环境下,一个IP包走到哪里、怎么走是靠路由表定义的。但是,当IP包到达该网络后,哪台机器响应这个IP包?则是靠该IP包中所包含的物理地址来识别的。也就是说,只有机器的物理地址和该IP包中的物理地址相同的机器才会应答这个IP包。因为在网络中,每一台主机都会有发送IP包的时候,所以,在每台主机的内存中都有一个IP地址到物理地址的转换表,它通常是动态的转换表(但在路由中,该ARP表可以被设置成静态)。

1.1 ARP协议的工作原理

从下面两种情况来探讨ARP的工作原理:

情况一:将本地网络的主机IP地址解析为MAC地址。ARP解析过程分4步进行:1)当一台主机要与别的主机通信时,初始化ARP请求。当该IP确定为本地IP时,源主机在ARP缓存中查找目标主机的硬件地址。2)若找不到映射,ARP就建立一个请求,源主机IP地址和硬件地址会被包括在请求中,该请求通过广播,使所有本地主机均能接收并处理。3)本地网上的每个主机都收到广播并寻找相符的IP地址。4)当目标主机断定请求中的IP地址与自己的IP地址相符时,直接发送一个ARP答复,将自己的硬件地址MAC地址传给源主机。以源主机的IP和MAC地址更新它的ARP缓存。源主机收到回答后便建立起了通信关系。

情况二:将远程网络的主机IP地址解析为MAC地址。当不同网络中的主机互相通信时,因目标IP地址是一个远程网络主机的地址,ARP将广播一个路由器(源主机的缺省网关)的地址。ARP解析过程分3步进行:1)初始化通信请求,得知目标IP为远程地址。源主机在本地路由表中查找,若无,源主机就认为是缺省网关。在ARP缓存中查找符合该网关记录的IP的MAC地址。2)若没找到该网关的记录,ARP将广播一个包含网关地址而不是目标主机的地址的请求。路由器用自己的硬件地址响应源主机的获取它的硬件地址MAC地址。3)如果此网关的硬件地址不在ARP缓存中,通过ARP广播获得。一旦它获得硬件地址,ICMP响应就送到路由器上,然后传回源主机。

1.2基于ARP协议的网络攻击过程

从ARP的工作原理可以看出,当计算机发送ARP请求,监听ARP回答,并定期更新ARP高速缓存时,一个黑客或恶意攻击者完全可能发送一个带有欺骗性的ARP请求和回答,以至于改变另一个主机的ARP高速缓存中的地址映射(即IP与MAC的对应关系),使得该被攻击的主机在地址解析时发生错误结果,导致所封装的数据被发往黑客所希望的目的主机,从而使数据信息被劫取。

可见,利用ARP欺骗,一个入侵者可以利用基于IP的安全性不足,冒用一个合法IP来进入主机,捕获专用的或者机密的信息;可以用来危害网络邻居的安全,或者用来获取更高级别的访问权限;分析网络结构,进行网络渗透。

2系统结构设计及实现

2.1系统结构

图1系统结构

2.2实现

2.2.1原始数据包捕获

原始数据包捕获技术是调用了一个开源包WinPcap包。WinPcap是一个Win32平台的,用于捕获数据包和进行网络分析的体系结构。它包括了一个内核级的数据包过滤器,一个低层动态链接库(packet.dll),一个高层的,依赖于系统的库(wpcap.dll)。Win? Pcap数据包捕获的主要过程:

首先,抓包系统必须绕过操作系统的协议栈来访问在网络上传输的原始数据包(raw packet),这就要求一部分运行在操作系统核心内部,直接与网络接口驱动交互。这个部分是系统依赖(system dependent)的,在Winpcap的解决方案里它被认为是一个设备驱动,称作NPF(Netgroup Packet Filter)。Winpcap开发小组针对Windows95,Windows98,WindowsME,Windows NT 4,Windows2000和WindowsXP提供了不同版本的驱动。这些驱动不仅提供了基本的特性(例如抓包和injection),还有更高级的特性(例如可编程的过滤器系统和监视引擎)。前者可以被用来约束一个抓包会话只针对网络通信中的一个子集(例如,仅仅捕获特殊主机产生的ftp通信的数据包),后者提供了一个强大而简单的统计网络通信量的机制(例如,获得网络负载或两个主机间的数据交换量)。

其次,抓包系统必须有用户级的程序接口,通过这些接口,用户程序可以利用内核驱动提供的高级特性。Winpcap提供了两个不同的库:packet.dll和wpcap.dll。前者提供了一个底层API,伴随着一个独立于Microsoft操作系统的编程接口,这些API可以直接用来访问驱动的函数;后者导出了一组更强大的与Libpcap一致的高层抓包函数库(capture primitives)。这些函数使得数据包的捕获以一种与网络硬件和操作系统无关的方式进行。

2.2.2数据包分析

以ARP数据包为例,介绍数据包分析的过程。

/*ARP协议分析函数*/

CString m_protocol_temp="ARP";

CString m_info_temp;//临时变量

CString m_data_temp;//临时变量

struct arp_header *arp_protocol;// ARP包头

u_short protocol_type;//协议类型

u_short hardware_type;//硬件类型

u_short operation_code;//操作:请求1,回答2

u_char *smac_string;//源主机MAC串

u_char *dmac_string;//目的主机MAC串

u_char *ip_str;// IP串

struct in_addr source_ip_address;//源主机IP地址

struct in_addr destination_ip_address; //目的主机IP地址

u_char hardware_length;//硬件长度

u_char protocol_length;//协议长度

arp_protocol = (struct arp_header *) (temp_data_arp+14);

//去掉以太网头

hardware_type = ntohs(arp_protocol->arp_hardware_type);

protocol_type = ntohs(arp_protocol->arp_protocol_type);

operation_code = ntohs(arp_protocol->arp_operation_code);

hardware_length = arp_protocol->arp_hardware_length;

protocol_length = arp_protocol->arp_protocol_length;

//打印源MAC地址和IP地址

smac_string=arp_protocol->arp_source_ethernet_address;memcpy((void *) & source_ip_address, (void *) &arp_protocol->arp_source_ ip_address, sizeof(struct in_addr));

//打印目的MAC地址和IP地址

dmac_string = arp_protocol->arp_destination_ethernet_address;

memcpy((void *) &destination_ip_address, (void *) &arp_protocol->arp_destination_ip_address, sizeof(struct in_addr)); switch(operation_code)

{

case 1: m_info_single = " ARP Request";

break;

case 2: m_info_single = " ARP Response";

break;

case 3: m_info_single = " ARP Request";

break;

case 4: m_info_single = " ARP Response";

break;

default:

break;

}

2.2.3问题ARP数据包过滤

在原始数据包捕获过程中,有一个循环缓冲区,用来保存数据包并且避免丢失。一个保存在缓冲区中的数据包有一个头,它包含了一些主要的信息,例如时间戳和数据包的大小,但它不是协议头。系统针对ARP数据包,对时间戳进行计算,判断来自同一计算机的ARP数据包发送是否过于频繁,进而通过WinPcap的过滤器对ARP数据报进行过滤。实现有效的防止ARP攻击(ARP欺骗)。

过滤规则设置:

struct bpf_program bpf_filter;// BPF过滤规则

char *bpf_filter_string= "";//过滤规则字符串

//设置过滤规则

if(pcap_compile(pcap_handle,&bpf_filter,bpf_filter_string,1,net_mask)<0)

{

AfxMessageBox("过滤规则出错!");

return 1;

}

//编译过滤规则

if(pcap_setfilter(pcap_handle, &bpf_filter)<0)

{

AfxMessageBox("过滤规则出错!将使用默认方式捕获数据包");

return 1;

}

//设置过滤规则

if (pcap_datalink(pcap_handle) != DLT_EN10MB)

{

AfxMessageBox("不在局域网内");

return 1;

}

3软件简介

以VC++ 6.0进行编译、运行,系统软件界面及数据包捕获过程,具体参数有本地连接、信息中的IP地址和子网掩码、数据包捕获、数据包信息以及数据包数据。

4总结

本系统主要实现两方面大的功能:

1)捕获数据包,分析数据包。这部分功能类似与网络上的协议分析软件,如Linux系统下TCPDump,Windows下的WinDump,主要是捕获本地计算机网络接口上的数据包,对数据报进行协议分析,判断数据包是何种网络数据。由于本系统是ARP防火墙的设计与开发,所以ARP数据包是重点分析的对象。

2)过滤问题ARP数据包。对于网络上广播的ARP数据包,系统需要即使对数据进行分析,判断数据包是否为ARP攻击数据包。进而采取相应的过滤规则将数据包过滤。

另外,本系统功能虽然单一,但是较有针对性,因此为较有效使用的软件。

参考文献:

[1]朱雁辉.Windows防火墙与网络封包截获技术[M].北京:电子工业出版社,2002.

[2]谢希仁.计算机网络[M].2版.北京:电子工业出版社,1999.

[3]张曾科.计算机网络[M].北京:清华大学出版社,2003.

[4]孟晓明.基于ARP的网络欺骗的检测与防范[J].信息技术,2005,29(5).

[5]刘文涛.网络安全开发包详解[M].北京:电子工业出版社,2005.