黄益群, 潘泽强
(江西中医学院 计算机学院,南昌 330006)
随着计算机网络的普及,网络安全日益受到人们的关注,但由于网络本身的复杂性,其管理难度也越来越大,任何一个小的问题都可能影响到整个网络的正常运行。如最近流行的ARP欺骗攻击,它可以在很短的时间内使整个网络陷于瘫痪。因此,如何有效地防范ARP欺骗攻击成为了人们研究的一项重要课题。本文主要从ARP原理、ARP欺骗过程和如何防御等三个方面进行简单的介绍。
源主机在传输数据前,首先要对初始数据进行封装,在该过程中会把目的主机的IP地址和MAC地址封装进去。在通信的最初阶段,我们能够知道目的主机的IP地址,而MAC地址却是未知的。这时如果目的主机和源主机在同一个网段内,源主机会以第二层广播的方式发送ARP请求报文。ARP请求报文中含有源主机的IP地址和MAC地址,以及目的主机的IP地址。当该报文通过广播方式到达目的主机时,目的主机会响应该请求,并返回ARP响应报文,因而源主机可以获取目的主机的MAC地址,同样目的主机也能够获得源主机的MAC地址。如目的主机和源主机地址不在同一个网段内,源主机发出的IP数据包会送到交换机的默认网关,而默认网关的MAC地址同样可以通过ARP协议获取[1]。经过ARP协议解析IP地址之后,主机会在缓存中保存IP地址和MAC地址的映射条目,此后再进行数据交换时只要从缓存中读取映射条目即可。ARP工作原理如图1所示。
图1 ARP工作原理
在Ethernet中,任何一台主机当收到一个ARP报文之后更新自己ARP缓冲区。但由于主机无法验证报文的真实性,当收到欺骗性的报文时,它也会更新本身的ARP缓冲区,这样就造成“IP—MAC”的映射错误,使主机之间无法通信[2]。以表1为例,假设有三台主机A、B、C,具体信息如表1所示。
表1 三台主机A、B、C的具体信息
B为攻击者,A、C为被攻击者。首先B分别向A、C发送ARP请求报文,当A、C收到以后分别向B发送一个ARP响应报文,B收到后更新A、C的“IP—MAC”映射,并不断地向A、C发送ARP响应报文,发送给A报文中的发送方的IP地址为10.30.5.4,MAC地址03-03-03-03-03-03,发送给C报文中发送方的IP地址为10.30.5.2,MAC地址03-03-03-03-03-03;当A、C收到以后分别更新本机的ARP缓存这样主机A、C就会误认为B就是对方,造成了A、C之间不能通信。这种攻击方法也称为中间人攻击。还有一些其他的攻击方法,但这些攻击都有一个共同特点就是发送一些欺骗性的ARP报文。
当主机B想要获取主机A对外通信的内容时,会分别给主机A和网关D发送一个ARP应答包,让A和D都把第三方监听者误认为是对方,这样,主机A看似成功的实施了对外通信,而实际上中间夹着监听主机B。此时,主机B不仅可以完成监听,而且还可以随意更改数据包中地某些信息,并成功完成数据包转发。
简单说,ARP欺骗的目的就是为了实现全交换环境下的数据监听。大部分的木马或病毒使用ARP欺骗攻击也是为了达到这个目的。
当局域网中有ARP攻击时,它一般不会单独的攻击某一台机器,而是整个局域网,涉及面积比较大,可以在很短的时间内使整个网络瘫痪。因此及时地发现ARP攻击源是非常重要的。一般可以采用以下几种方法:
1)使用“ARP -a”命令
如上文中提到的中间人攻击,当我们在主机C上输入此命令时,显示本机的ARP缓存:缓存中10.30.5.2所对应的MAC地址与真正的MAC地址不符,说明攻击源的MAC地址为22-22-22-22-22-22。另外,还有一种情况比较具有迷惑性,当主机C除了向网关A没有向其他主机发出连接,主机C的ARP缓存如下所示:
ARP缓存没有任何异常,但主机C和网关A之间无法通信,这主要是由于主机B不断的向本网段内的主机发送ARP请求报文,其他主机向主机B发送一个响应,这样主机B就可以用主机C的信息向网关A发送伪造的ARP报文,该报文的源MAC地址为主机C的地址,当交换机收到该帧时,交换机把指向主机C端口改到和主机B相同。查看网关D的ARP缓存,会看到指向主机B和很多主机都指向了同一个端口。
2)监听数据报
当有ARP攻击的时候,攻击源一般会向本网段内的所有主机发送ARP请求报文。因此可以利用一些抓包工具,如用Sniffer等进行抓包,如发现有大量的ARP请求报文从某一台机器发出,那么这台机器极有可能就是攻击源。
3)查看网关ARP缓存
ARP攻击时最主要的攻击对象就是网关。因此可以查看网关的ARP缓存,如果有很多个IP地址都指向同一个MAC地址,那么就说明存在A R P欺骗攻击,这个MAC地址对应的主机就是A R P攻击源。
由于ARP攻击主要利同ARP协议的漏洞,因此目前没有彻底的方法来防御ARP攻击。我们可以通过一些安全措施提高网络的安全性。
3.2.1 在客户端绑定网关和ARP服务器的真实MAC地址
在本文设计的方案中,通过在客户端的主机上静态绑定网关和ARP服务器的MAC地址,来防范第三方对源主机与网关和ARP服务器之间的通信进行监视,这样设置的结果是主机发送数据前不需要通过向所在的局域网广播请求来得到网关的MAC地址,它会直接查询静态记录以获得的地址。攻击者若在没有收到ARP请求的情况下仍发送伪造的ARP应答数据包企图实施欺骗时,源主机将拒绝用伪造的数据更新ARP缓存表的静态记录[3]。即不再对ARP缓存表中对信息进行更新,这样可以防止第三者对主机与网关之间的通信信息进行窃听,也能保证定时发往ARP服务器的ARP应答包没有经过第三者转发,所以通信是可靠的。可以参照下面的例子对局域网内的主机进行静态的MAC地址绑定。
例如:假设计算机所处网段的网关为10.30.5.1,本机地址为10.30.5.3,在“开始”-“程序”-“附件”菜单下调出“命令提示符”,输入:arp-a,在计算机上运行arp -a后显示如下信息:
其中,01-01-01-01-01-01就是网关10.30.5.1对应的MAC地址,类型是动态(dynamic)的,因此是可被改变的。
手工绑定的命令为:
arp-s 10.30.5.1 00-01-02-03-04-05
绑定完后,可再用arp -a查看arp缓存::
这时,型变为静态(static),就不会再受攻击影响了。但是需要说明的是,手工绑定在计算机关机重启后就会失效,需要再次重新绑定。所以,要想永久绑定可以将上面的命令做成批处理文件,在计算机启动时便已对网关和ARP服务器的MAC地址进行了绑定,编写一个批处理文件aarp.bat,内容如下:
保存为:aarp.bat。
运行批处理文件将这个批处理文件拖到“Windows→开始→程序→启动”中,如果需要立即生效,请运行此文件。
通过以上的设定,能有效的阻止攻击者对用户和网关之间实施ARP欺骗,本方案在设计的时候,之所以没有对局域网内的其他主机的MAC地址没有实行静态绑定,是考虑到在局域网内的用户经常会处于各种原因对主机的IP地址进行修改如果每个主机都采用静态记录,那么当对主机的IP地址进行正当调整后,如果忘记重新设置该静态记录,局域网内部就会出现混乱。因此不宜对局域网内其他主机的MAC地址进行静态绑定。
3.2.2 设置ARP服务器
ARP服务器的主要功能是接受局域网内的所有主机定时发送的ARP应答数据包,对各个主机的ARP请求进行应答,然后对接收到的所有应答包的信息进行分析判断,看是否存在相同的IP地址对应不同的MAC地址,如果存在,对发生矛盾的信息暂时不进行更新,然后服务器将判断的结果再发送给网关,网关通过这个MAC地址查出用来实施ARP欺骗攻击的主机在交换机上所对应的物理端口,从而进行控制。在服务器和网关之间实行联动机制,使得ARP攻击能及时被发现并被及时被清除[4]。系统要求网内各个主机发往ARP服务器的数据要定期主动发送,即使在没有收到ARP服务器发送的ARP请求时也要进行发送,其发送周期要尽量小,原则上不能超过服务器对ARP缓存表进行更新的周期(一般为2分钟),这样设置的理由是周期越小,服务器越能即使发现企图实施攻击的计算机,以便通知网关对其通信端口进行控制。
3.3.3 设置主机的ARP请求
当源主机要和局域网内的一台主机进行通信时,源主机就发送一个ARP请求数据包给ARP服务器,服务器对接受到的信息进行行分析,分别发送给要通信的两台主机一个ARP应答数据包,内容就是对方的IP地址和对应的MAC地址。由于两台主机对服务器的地址都进行了绑定,所以受到的信息是可靠的,两台主机收到这个信息后就可以进行通信了,ARP服务器设置于网关的前端,对客户端来说是透明的。
上述的几种防御措施也存在各自的局限性,一般是多种方案配合使用,可以最大限度的阻止ARP欺骗攻击的出现,但是还有以下问题需要继续研究,一是如何设置主机定时向ARP服务器发送一个ARP应答包来报告自己的IP地址和MAC地址的对应关系,二是如何实现ARP服务器和网关之间的联动机制,三是如何让主机只识别来自ARP服务器的ARP应答数据包。从根本上解决这一问题,最好的方法是重新设计一种安全的地址解析协议。在IPv6中人们已经考虑到了这个问题,不再使用ARP和RARP协议,而采用了更安全的NDP,从而杜绝了来自底层的攻击。
[1] 任侠,吕述望.ARP协议欺骗原理分析与抵御方法[J].计算机工程, 2003,29(9):127-128.
[2] 孟晓明.基于ARP的网络欺骗的检测与防范[J].信息技术,2005,(5):41- 44.
[3] 李海鹰,程灏,吕志强等.针对ARP攻击的网络防御式设计与实现[J].计算机工程,2005,31(5):170- 171.
[4] 徐功文,陈曙.ARP协议攻击原理及其防范措施[J].网络与信息安全,2005,(1):4- 6.