摘要:本文以局域网中常见的ARP攻击出发,分析了ARP的原理和攻击的实施手法,指出了不安装防火墙“裸奔”上网的危害,也讨论了一些实用的防御措施。作为示范,还介绍了攻击程序的编写。
关键字:ARP 攻击 防御 编程

零、给读者的话
这篇文章是作者数月之前写的,当时主要的目的是介绍ARP攻击程序的编写,起到对在LAN内使用黑客程序(IP剪刀手、网络执法官、P2P终结者)的人的示威作用。随着作者对技术的认识也在不断深入,在为文章里增加新内容。如果你使用LAN,这篇文章将会很有用。
现在LAN内关于抢IP、上不了网、频繁断网、网速缓慢、网页挂木马、游戏密码被盗等的话题层出不穷。本文试图总结已经知道的知识,澄清一些误会,目的是为大家安全舒适的使用LAN和Internet尽量提供帮助。如果你在LAN内经常遇到上不了网的情况,那么本文章可能会有一些作用。作为一般的人士,请阅读一、三、五、六节,这些是关于ARP的背景知识和防御手段的介绍,还引用了一个ARP防火墙的评测结果;如果有兴趣,可以进一步阅读二、四节,主要介绍ARP的原理和攻击程序的编写。

一、背景
平时上网,大家常常谈论的主要是IP、TCP、HTTP,如果没有近年出现的ARP病毒,也许没有人会去关注ARP的原理和漏洞。ARP一直在IP的后面默默的工作着,很少有露脸的机会,直到ARP病毒、IP剪刀手、网络执法官、P2P终结者等软件的出现,局域网中密码嗅探器和木马大行其道,人们才开始注意到幕后的ARP。

作者大一进入学校时,尚不知ARP攻击为何物,觉得学校的局域网很安全,终于有一天DHCP分配不到IP地址了,开始手动设IP地址,再接下来,发现手动设的地址会被人抢,开始用ARP防火墙,最后发现,在厉害的攻击软件面前,原来防火墙也是没有用的……

经过网络中心的整顿,现在IP地址冲突有所缓和,但还是有部分同学使用一些不良软件,或者有人中了病毒而自己不知道,放任病毒攻击网络。于是出于实验和防御的目的,作者研究了ARP攻击程序的原理,总结成一篇小文章。为了向使用黑客程序的现象示威,又编写了一个高速发送自定义ARP包的程序,可以发送伪造了IP地址和MAC地址的包,可以选择广播或单播,也可以选择发送的是ARP请求还是应答。发送ARP数据报的速度在我笔记本电脑上达到了3万个每秒,并且还有继续提升的可能。这个程序可以用于防御,但也可以用于攻击。实验时攻击宿舍内两台打开了AntiARP防火墙的电脑(事先说好的),令其不能上网。

要明白ARP攻击程序是怎样运作的,首先需要清楚ARP的原理。

二、ARP在TCP/IP协议栈中的地位和原理
IP作为网络层的协议,包含了许多强大的功能,譬如全球定址和路由。尽管连在一起的网络的体系结构不同,但是IP屏蔽掉了这些差异,让我们使用统一、抽象的方式定址,因此IP地址实际上只是一个逻辑地址。每块网卡有一个全球范围内唯一的硬件地址,也叫MAC地址,而一块网卡可以有几个IP地址,一个IP地址也可以先后被不同的网卡占用。要在局域网内传送数据,必须把网络层的IP地址转换成链路层的网卡硬件地址,这个工作就是由ARP完成的。

根据《计算机网络》[1],ARP的工作流程如下,为了便于理解,加上了我的举例:
事实上,每一个主机都设有一个ARP高速缓存(ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。当主机A欲向本局域网上的某个主机B发送IP数据报时,就先在其ARP高速缓存中查看有无主机B的IP地址。如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC帧,然后通过局域网将该MAC帧发往此硬件地址。

如果在A的ARP缓存中没有关于B的表项,A的操作系统会自动在局域网内发一个广播包,询问道“我是的IP地址是IPa,硬件地址是MACa,占有IP地址IPb的机器的MAC地址是多少?”。这时网内所有机器都会收到此ARP请求,而B发现其中有自己的IP地址,因此B会根据MACa向A发送一个单播ARP应答,回答道“我是IPb,MAC地址是MACb”.由于既然A向B发送的信息,B不久后也可能将向A发送信息,因此B顺便把A的(IPa,MACa)的对应关系写入自己的ARP缓存。A在收到回答后将(IPb,MACb)写入A的ARP缓存,这样一来A与B互相知道了MAC地址,就可以通信了。

由于不断有机器加入和退出网络,ARP缓存表的每一项都有生存时间,过期后就自动删除。从IP地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。

如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器(或者网关)的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。

地质大学学生宿舍的网络正是由许多局域网构成的,每一或两层作为一个局域网。譬如我这一层的网络是219.225.53.0,掩码为255.255.255.0,我们的数据全部都先发送到IP为219.225.53.254的网关,再由此网关转发出去。
查看arp缓存用命令arp -a,清除arp缓存用命令arp –d

 

三、ARP攻击的原理
ARP欺骗是发送有错误信息(假的IP地址或者假的MAC地址)的ARP请求或者应答。具体情况分为三类。

1、肇事者冒充网关以欺骗受害者
我们往互联网发送的数据都是首先发到学校的网关,再由网关转发出去,进来的数据也是先到网关,才分发到我们的机器。假设本来网关的MAC地址是MACw,如果有人图谋不轨,此人使用MAC地址为MACb的机器,就可以不断的发送(网关IP,MACb)的请求或者应答包到受害者机器上,向受害者冒充网关,这样受害者就把本来发给网关的数据全发给肇事者了,结果不能正常上网。这种欺骗可以用被动防火墙防御。 肇事者还可以发送一个根本不存在的MAC,这样被害者受欺骗了也不知道是谁干的。


图1(原图位于AntiARP.com)

图1简单的表达了PC03向PC02冒充网关后的局面,PC02将原本直接发往网关的数据全部都发给了PC03,PC03再转发给网关。在此过程中, PC03可以窥探数据中的内容,包括个人隐私、QQ密码、游戏密码等等,而PC02很难察觉到自己的数据被中转了。PC03还可以简单的不转发数据,或者限制转发的速度,这样PC02就会出现上不了网的情况或者上网缓慢。
肇事者还可以发送广播类型的包含了虚假信息的ARP应答包,以达到欺骗局域网内所有机器的目的。
危害:盗号、盗密码、窥探隐私、限制上传速度。

2、肇事者冒充受害者以欺骗网关
假设受害者的IP和MAC地址为IPa,MACa,图谋不轨的人的MAC地址为MACb,图谋不轨者可以不断的向网关发送(IPa,MACb)的询问或者应答包,向网关冒充受害者。


图2(原图位于AntiARP.com)

图2清楚的阐释了这种局面,PC03向网关冒充PC02,使得网关把本该发往PC02的数据全发往PC03,PC03才将数据转发到PC02。在这个过程中,PC03可以窥探数据中的隐私或者篡改数据的内容,比如,可以在网关发送的正常的网页数据中增加木马的数据,让PC02一浏览网页就中木马。如果PC03干脆不转发数据,PC02就收不到外界的通信,出现上不了网的情况,PC02的IP就好象被抢走了一样。我们俗称抢IP或踢IP。PC03还可以限制转发数据的速度,PC02的下载速度就变慢了。
危害:网页挂马、踢IP、限制下载速度。

3、肇事者向网关冒充受害者并且同时向受害者冒充网关
这只是一种特殊情况,把方法1和方法2结合起来使用,就可以达到这种效果,如图3。


图3(原图位于AntiARP.com)

受害者的网络通信完全被攻击者所掌握。打个比方,就好象一个人发送出去和接收的信件在不知情的局面下,全部都要经过第三者,那么这位第三者会在通信上作什么手脚,读者尽可以发挥自己的想象力。
危害:包括了1、2的所有危害。

 

现在颇为著名的IP剪刀手、网络执法官、P2P终结者等软件使用的就是上述的方法。还有一些盗号木马和嗅探器也使用了ARP攻击。需要注意的是前文提到的几种危害不止可以通过ARP攻击实施,因此在防御时不光要防御ARP攻击,也要安装好必要的补丁、杀毒软件和防火墙。

 

四、ARP攻击程序的制作
1、限制
无论是哪种攻击方式,要发动ARP攻击,就得自行构造ARP数据包,放入自定义的ARP信息,然而,在第二节中已经提到,ARP是系统自动完成的,也就是说一般用户是无法干预的。写过网络程序的同学肯定也知道,Windows提供的系统调用,在关于网络方面主要是Windows Socket和Windows Socket2,而这两组接口皆只允许使用IP之上的TCP、UDP,无法操作IP之下的ARP协议。
WinSocket2还支持原始套接字功能,可以自己构造IP头部和负载,系统会为我们加上以太网头部发送出去,因此我们可以不去构造IP数据头部,而是直接构造出ARP格式的数据报,再由系统帮我们构造好完整的以太网桢,发送出去。这里面存在两点限制,首先,系统出于安全考虑,会检查原始套接字的内容是否合法,若不合法便无法发送,其次由于以太网桢是系统构造的,会包含本机的真实信息,且无法修改,对于发送ARP攻击是不利的。因此仅仅使用标准的系统调用是不能达到目的了。我转而使用别的方法。

2、Windows的网络程序的层次
要说明白我使用的方法,首先讨论一下Windows网络程序的层次,从高到低是:
用户——网络应用程序(如IE、QQ)—Windows Socket—网络协议驱动——数层中间驱动——网卡驱动。
Windows Socket是提供给程序员编写网络程序的系统调用接口,以一组函数、结构体、常数等定义的形式展现给程序员。
在驱动层次,有专门的标准,NDIS,它描述了协议驱动如何以统一的方式操作网卡驱动。NDIS标准涉及到三种形式的驱动:
协议驱动是TCP、UDP、IP这样的驱动,定义了数据传输的逻辑,不同种的协议驱动之间可以是平等的,也可以是有依赖关系的,比如TCP和UDP是平等的,两者都依赖IP;
网卡驱动是最底层操作网卡的程序,与硬件有关,响应中断,处理同步等问题,以NDIS的形式向操作系统提供统一的调用接口;
中间驱动在协议驱动看来像是网卡驱动,在网卡看来像是协议驱动,并且中间驱动可以堆叠,形成链。顾名思义,它负责一些中间的事务,譬如,把老的协议的数据转换成新近开发出的网络的网卡要求的形式,比如TCP/IP协议可以运行在以太网卡或者ATM网卡或者别的网卡上,这就要靠中间驱动屏蔽掉他们之间的差异。

3、ARP攻击程序的制作
(1)WinPcap程序库
我可以绕过Windows Socket,自己写一个驱动,构造出包含ARP数据的以太网桢,让网卡发送出去。这要求对Windows核心编程非常熟悉,工作量也比较大,对于不同版本的Windows,还需要写不同版本的驱动。
幸好有人已经做了这个工作。WinPcap,衍生自Unix下的libpcap,它是提供一个网络开发程序库,程序员可以使用它捕获流经网卡的数据报,并制作嗅探器,分析数据报中的数据,还可以向网络注入自定义的数据报,它工作在协议驱动层。
WinPcap的核心是一个叫NetGroup Packet Filter Driver的驱动,简称npf,位于:
c:\windows\system32\drivers\npf.sys
安装好WinPcap后,这个驱动就被加载到操作系统内核里了。此外,主要还包括两个dll,Wpcap.dll和Packet.dll。一般的程序员用WinPcap写程序,主要使用Wpcap.dll提供的函数,此dll提供设备无关和系统无关的网络调用原语。Packet.dll是一个低一层的dll,提供对npf驱动的直接访问,实际上Wpcap.dll就是在调用它。由于核心工作在驱动层,所以WinPcap效率很高。
网络执法官、P2P终结者等软件正是使用WinPcap编写的,我制作的攻击程序也是。

(2)程序的关键代码
由于是自己构造整个以太网桢,所以首先要定义一下以太网桢头部和ARP数据报的格式,用结构体的形式定义。
#pragma pack(push, 1) //设置结构体按字节对齐

//以太网桢头部
typedef struct ehhdr
{
unsigned char eh_dst[6]; //目的MAC地址
unsigned char eh_src[6]; //源MAC地址
unsigned short eh_type; //上层协议的类型
}EHHDR, *PEHHDR;

//ARP数据报的格式
typedef struct arphdr
{
unsigned short arp_hrd; //硬件地址类型
unsigned short arp_pro; //协议地址类型(协议是指IP等协议)
unsigned char arp_hln; //硬件地址长度
unsigned char arp_pln; //协议地址长度
unsigned short arp_op; //发送的ARP/RARP操作类型

unsigned char arp_sha[6]; //源MAC地址
unsigned long arp_spa; //源协议地址
unsigned char arp_tha[6]; //目的MAC地址
unsigned long arp_tpa; //目的协议地址
}ARPHDR, *PARPHDR;

//两者合在一起
typedef struct arpPacket
{
EHHDR ehhdr;
ARPHDR arphdr;
}ARPPACKET, *PARPPACKET;

#pragma pack(pop) //还原对齐方式

当然还有一些符号常量的定义
#define EPT_IP 0x0800 //类型:IP
#define EPT_ARP 0x0806 //类型:ARP
#define EPT_RARP 0x8035 //类型:RARP
#define ARP_HARDWARE 0x0001 //类型:802.3桢格式
#define ARP_REQUEST 0x0001 //ARP请求
#define ARP_REPLY 0x0002 //ARP应答

接着,要使用WinPcap里的一些函数,根据《WinPcap Documentation 》[3],用到的函数的功能如下:
pcap_findalldevs_ex()获得计算机中所有网卡的列表,
pcap_freealldevs ()释放该列表;
pcap_open()打开网卡驱动;
pcap_close()关闭网卡驱动;
pcap_sendpacket ()发送构造好的数据报。

枚举和选择网卡的过程省略,用户输入输出的过程也省略,下面讨论怎样构造ARP数据报。
首先定义一个数据报的结构体变量:
ARPPACKET ARPPacket;
然后用适当的数据填充此结构体就可以了。
ARPPacket.ehhdr.eh_type = htons(EPT_ARP);
ARPPacket.arphdr.arp_hrd = htons(ARP_HARDWARE);
ARPPacket.arphdr.arp_pro = htons(EPT_IP);
ARPPacket.arphdr.arp_hln = 6;
ARPPacket.arphdr.arp_pln = 4;
ARPPacket.arphdr.arp_op = htons(ARP_REQUEST);
结构体中的硬件地址和协议地址根据网络的具体情况,由用户输入,再填入结构体即可。构造好此结构体后,就可以将其发送出去了。发送函数要求的数据是数组(指针),所以我取了ARPPacket的地址并进行了强制类型转换。发送函数被写到了一个死循环中,每发送一次,进程休眠k毫秒:
while(1)
{
if(pcap_sendpacket(fp,(u_char*)&ARPPacket,sizeof(ARPPacket))==-1)
{
printf(“发送过程中出现错误,程序退出。\n”);
break;
}
if(k!=0)
{
Sleep(k);
}
}
若令k等于0,则不停向网络发送数据,根据抓包测试,发送速度在自己的笔记本电脑上达到了3万个/秒以上。另外,在循环中,每发送一次ARP数据报,就得调用一次发送函数,比较浪费时间。WinPcap提供一次发送一组数据报的功能,只调用一次函数,就可以发送一系列的数据报,如果使用这种功能,估计发送速度还能够提高数倍。

(3)制作攻击程序的目的
这其实不是一个ARP攻击程序,只是一个向网络高速发送自定义的ARP包的程序,因为可以自定包含的信息,所以可以用前面说的方法进行攻击。写程序的目的不是参加黑客程序的军备竞赛,只是为了研究网络、实践理论和向滥用黑客程序的行为示威。

 

五、防御ARP攻击
下面讨论如何防御ARP攻击。要做好防御工作,首先要了解对方是如何进攻的,根据前面的讨论,有两种攻击方式(第三种是结合,只要防住前两种就防住了第三种),下面分别讨论防御措施。

 

1、防御肇事者冒充网关
第一种攻击手段的本质是让受害者的机器上的ARP缓存包含错误的信息。我们可以将ARP缓存的生存时间设置得短一些,让这些错误信息更快失效,但是如果对方大量发送错误信息给我们,就无能为力了。防御这种攻击,最有效的手段莫过于获取了网关的正确MAC后锁定ARP缓存表,不允许更改。

在Windows中,可以通过“ARP”命令对缓存表进行清空、删除某项或者添加某项。命令“arp -s IP地址 MAC地址”可以把arp缓存里的IP对应到MAC地址上且不允许修改,这样可以达到绑定网关IP的目的。然而,Windows的一些版本对arp -s的执行有问题,在接受到新的ARP包以后,虽然我们已经用-s来设置静态映射,但Windows还是会更改新它,所以达不到绑定的目的,微软已经出了补丁改正了此错误,但大多数人没有装此补丁。

在目前的条件下,防范这种攻击最佳的措施是安装一种ARP防火墙,获取了正确的ARP信息后就过滤掉伪造的ARP信息。还可以使用上文提到的自制程序,每隔一段时间,就以ARP应答的形式向局域网发送包含了正确的网关MAC信息的广播包。

若各种防范措施都无效了,最好的情况是受害者无法上网,最坏的情况是受害者可以上网,但是传输的数据全部被肇事者嗅探到了,为了防御这种情况,最好平时就用SSH代替telnet和ftp,使用SSL代替http。

2、防御肇事者向网关冒充受害者
这种攻击手段的本质是让网关的机器上的ARP缓存包含错误的信息。最简单的防御方法是在网关上绑定网内所有IP与MAC的对应,不允许修改,但是对于像宿舍这种同一台机器的IP经常变化的场合不适用。还有一种方法是网关开启粘性学习的功能,从网关的DHCP列表读取MAC,只要不是同一个端口上的,想攻击直接封死,听说19楼现在就是这么设置,限制是网关的端口太少,作用范围有限。

因为这种手段是欺骗网关,所以要真正解决问题,必须在网关上做合理的设置。但对于一般用户来说,是无法直接操作网关的,如果使用的网关没有任何防御措施,用户只能进行主动防御。有的ARP防火墙增加了主动防御功能,也就是向网关发ARP包,声明自己的IP、MAC地址,其实这正是欺骗程序欺骗网关的手段。如果有两个同学抢同一个IP,那么向网关发送ARP包更快者的信息在网关的ARP缓存上保存更久,网关的流量就都分给它了。这就导致了恶性循环,要抢到IP,就要比别人用更快的速度往网关发ARP询问或者应答包,最后的结果是整个网络瘫痪。为了防止滥用,正规的放火墙对主动防御的速率都有限制,彩影软件的AntiARP的主动防御就限制在50个/秒以下,虽然用户可以通过手动更改其配置文件单方面提高发送速度,但实际上无论怎样改高速度,发送速度一般都在100个/秒以下。

上文提到的自制程序就可以作为主动防御程序使用。

 

3、防止在中毒后攻击网络
(1)dll文件替换法
有的同学并不是有意攻击网络,而是中了ARP病毒,自己不知道。现在的病毒非常多,杀毒软件并不能全部都认出来,所以需要一种特别的方法,让ARP病毒根本无法工作。
根据《ARP病毒的彻底解决思路》[2],介绍一种比较实用的免疫方法:
用记事本等做一个空白文件,然后重命名为npptools.dll,然后替换windows\system32文件夹里的同名文件(可以先备份之),别忘了把windows\dllcache里的同名文件也替换了,要不windows的文件保护会重新覆盖这个文件。npptools.dll的作用本人尚不清楚,从签名看,是微软的dll,应与网络数据包的操作有关系,通过Dependency Walker查看它提供的函数列表,也确实如此。这个dll许多arp病毒会用到,但是个别防火墙也会用到这个文件,如果要使用此方法,意味着放弃那款防火墙。
如果不想替换,可以利用组策略中的软件限制策略设置任何用户禁止访问此dll。

 

(2)组策略中的软件限制策略法
什么是组策略和软件限制策略?下面请允许我引用百度百科[4]中的一段介绍:
“所谓组策略(Group Policy),顾名思义,就是基于组的策略。它以Windows中的一个MMC管理单元的形式存在,可以帮助系统管理员针对整个计算机或是特定用户来设置多种配置,包括桌面配置和安全配置。譬如,可以为特定用户或用户组定制可用的程序、桌面上的内容,以及“开始”菜单选项等,也可以在整个计算机范围内创建特殊的桌面配置。简而言之,组策略是Windows中的一套系统更改和配置管理工具的集合。”
“软件限制策略是 Microsoft Windows XP 和 Microsoft Windows Server 2003 中的一项新功能。它们提供了一套策略驱动机制,用于指定允许执行哪些程序以及不允许执行哪些程序。软件限制策略可以帮助组织免遭恶意代码的攻击。也就是说,软件限制策略针对病毒、特洛伊木马和其他类型的恶意代码提供了另一层防护。”

下面作者以在软件限制策略中禁用npptools.dll为例子介绍软件限制策略的使用。
a.点击“开始”、“运行”,输入“gpedit.msc”(输入不包含引号,下同),点“确定”,出现组策略编辑器;

b.找到“计算机配置”(在这下面进行的设置会对所有用户生效,相对的“用户配置”只对当前用户生效),展开“Windows设置”、“安全设置”,找到“软件限制策略”,右击之,选“新建软件限制策略”。如图4;


图4

c.点击“软件限制策略”,在右侧的窗格中双击“强制”,在弹出的对话框中选择“所有软件文件”以及应用到所有用户,点“确定”,如图5;


图5

d.展开“软件限制策略”,在“其他规则”上右击,选“新建哈希规则”(若出现Hash、散列等字眼,其实是与哈希的意思相同),在弹出的对话框中找到“文件哈希”,输入要禁止的文件的哈希。如果不知道哈希,可以点击浏览,找到c:\windows\system32\npptools.dll,再点确定,会自动计算出它的哈希并填写在输入框中,这时在“安全级别”中选择“不允许”,再点“确定”,就可以了,如图6;


图6

e.关闭组策略编辑器,再次点“开始”、“运行”,输入“Gpupdate /Target:computer /force”(注意空格),以刷新组策略设置,然后注销自己,再重新登入,新的设置就生效了。
注意,如果没有进行深入的了解,凡是本文没有提到的设置请不要更改,如果不慎改错,可能导致系统无法正常运行。这时可以用安全模式启动,以Administrator登录,再次运行组策略编辑器,把设置改回来就可以了。

再用同样的方法,禁用WinPcap的wpcap.dll和packet.dll。有的病毒是用WinPcap写的,会自带这些dll。但是各位的机器上面可能并没有安装WinPcap,无从计算,所以我直接给出这两个dll的哈希值,只要粘贴到“文件哈希”中就可以了。
wpcap.dll的是“5fbd592ae4704045eec712c5aebb6419:240248:32771”;
packet.dll的是“3711ae663975041e0f2958a6226d9660:88696:32771”。

 

这个方法的原理基于MD5、SHA一类的散列函数。哈希也称散列,通过把一系列数据或者一个文件输入给散列函数,可以得到一个摘要。此摘要很短,但即使两个文件只有一个字节不同,计算所得的摘要也会产生很大的变化,所以摘要可以代表这个文件,也称为哈希值。由于我们在组策略中禁止了某个摘要所代表的文件,所以无论该文件放在系统的哪个目录中,都是无法运行的。值得注意的是,这种做法会在加载dll时损失一定速度。要知道软件限制策略对哪些类型的文件起作用,可以在“软件限制策略”中查看受指派的文件类型,设置添加或者删除自定义的文件类型。

 

4、ARP防火墙的选择
有些ARP防火墙是网络应用程序级别的,而ARP协议是协议级别的,因此这种防火墙,只能在收到攻击后去修改ARP缓存,而实际上无法阻止伪造的ARP包进入系统。好一点的防火墙都是NDIS级别或者至少是比ARP协议级别要低的,比如彩影的AntiARP防火墙,安装以后可以在本地连接里看到增加了新的协议和服务,这样的防火墙才能真正阻止伪造的ARP包进入系统。防火墙越接近底层,效果越好,尤其是对方发起大量ARP攻击时,从源头就把这些垃圾信息给拦截,减少系统资源消耗,也减少了被攻击后系统变慢或者死机的可能。
被动防火墙只能防第一种欺骗,主动防火墙会主动向网关发送自己的IP、MAC信息,为了防止滥用,一般都设置了发送速度的限制。

2008年07月25日,华军软件园测评中心对现在常见的ARP防火墙软件进行了一次评测[5],在P2P终结者的攻击下,其结果如下:


图7(原图位于news.newhua.com)

可以看到瑞星、×××都败下阵来,而360ARP防火墙无法防御P2P终结者的速度限制,只能勉强维持。而风云、彩影、金山的防火墙表现较好,其中使用金山时的下载速度较慢是由于网络拥塞而不是P2P终结者的攻击。我相信这个评测的结果让大家选防火墙时都心里有数了。

 

5、其它学校的解决方法
作者在今年7月底曾拜访过北京邮电大学的网络中心,他们的做法是监控ARP协议的流量,如果发现流量异常就按照网络端口追查到引发异常的个人并进行处理。这种办法可以大大遏制校园网内使用黑客软件的现象。
我们学校的网络中心对这一现象还缺乏有效的管理手段,目前主要靠同学们的自觉。

 

六、小结
本文讨论了ARP的工作原理和流行的黑客程序利用ARP进行攻击的原理,结合Windows网络软件层次的特点,示范了ARP攻击程序的编写过程,最后讨论了各种类型ARP攻击的防范。事实上,对每一种防范的方法来说,都有攻击破解它的手段,攻防的矛盾随着技术的发展,是永远存在的。还是那句老话,技术本身是没有对错的,但是如何去使用它是有对错的。希望每个人都安分守法,自觉抵制黑客软件。上网时一定要安装好各种补丁、防火墙和杀毒软件,而不是开着没有防护的机器“裸奔”。也许裸奔可以节省系统资源,节省自己安装补丁的精力,但是这种机器在网络上很容易就被攻击,中了病毒和木马也难以察觉,接着会作为新的攻击点进一步危害网络。地大的网络已经饱受ARP摧残之苦,希望诸位对自己,对他人负责,为维护网络和谐尽自己的一点努力。

七、参考文献
[1]计算机网络(第4版),谢希仁,p184
[2] ARP病毒的彻底解决思路,
http://hi.baidu.com/kulanlan/blog/item/b9aafb1345bd06075baf5357.html
[3] WinPcap Documentation,WinPcap开发包下载后提供给开发者的文档
[4]百度百科的组策略条目,
http://baike.baidu.com/view/983.htm
[5] 华军软件园测评中心在2008年7月25日的对目前流行的ARP防火墙的评测结果,http://news.newhua.com/news1/Eval_Virus/2008/725/08725912478AJC02K228DGAFD1I171I5C266CI06BEI2K12H0CD0310.html