【转】谈谈arp欺骗的那点破事

(一)ARP 工做原理、ARP 攻击分析叙述:
随着网络设备在接入市场的应用也愈来愈多;同时遇到的问题也愈来愈多样,其中最让人头疼的就是ARP的问题。
众所周知,ARP的基本功能就是在以太网环境中,经过目标设备的IP地址,查询目标设备的MAC地址,以保证通讯的顺利进行。但因为ARP的广播、动态学习等特性注定了它不是一种安全的协议,因此在实际应用中,会因为各类各样的缘由使ARP学习失败,从而影响网络的互通性,并进而影响用户的业务稳定运行。
因为ARP处于数据链路层,处于整个OSI开放式七层模型的倒数第二层,因此除了HUB等极少数的、几乎全部跟以太网接口有关的设备,都涉及到ARP处理的问题。若是ARP问题处理很差,带来的影响也是很是巨大的。
在整个internet网络体系中,网络设备主要分为两类:一类就是安装有各类操做系统平台的PC、服务器等host;而另一类就是负责网络互联的路由器、交换机、防火墙等数据通信设备。这些设备因为自身所处的网络位置的不一样、安全稳定程度的不一样、服务的不一样,在ARP机制的处理上也不尽相同,固然本文不是要全面阐述ARP的原理和实现,只是但愿可以说明并解决或规避在咱们的应用环境中出现的问题――咱们考虑的范围是Win2K/XP主机和路由器、交换机。
1 ARP 基础知识
通常的,正常的ARP过程只需ARP Request和ARP Response两个过程,简单的说就是一问一答,以下:
clip_image002
这记录了局域网内一台IP为192.168.19.180的PC与网关设备(IP为192.168.1.6)之间的ARP交互,该PC发送请求以后,在0.000434秒以后,网关设备作出了回应,此时路由器就学习到了对方的ARP信息:以下:
clip_image004
咱们关注的是ARP的过程,而不是结果;来看一下ARP Request:
clip_image006
[Ethernet Header]能够看出,ARP请求的目标地市是全F,也就是广播地址;由于在请求以前,本PC不知道对方的MAC地址,为了确保ARP Request可以让对方收到,以广播形式方式是很天然的选择。在 [ARP]中能够看到,发送的源IP和源MAC都是本PC的网卡设置值,这是已知参数;目的IP地址是我要请求的地址,而目的MAC地址是全0,用于表示本PC不知道该参数,暂时忽略/ignore。
网关设备在收到ARP Request以后,会首先读取Sender的IP和MAC地址,并在存入本身的缓冲中,以备后用。由于ARP请求毕竟是广播性质的,若是每次通信都要完成一个ARP的流程,对于以太网的压力是很是巨大的,为了尽量减小这种广播的负面影响,这里引入了缓冲机制,这就是ARP Table。
ARP Response又是怎样回应的呢?
clip_image008
先看 [Ethernet Header],能够看到以太网目的MAC地址为PC的MAC地址,由于网关设备只要把回应的信息发送给请求者便可,局域网内的其余主机是没有必要同步知道的,这很好理解。在 [ARP]中,网关设备把本身的MAC地址填充在ARP Response中,发送给原请求者。
固然收到ARP Response以后也会把这个ARP信息缓存下来,这样一个ARP的过程就完成了。从中能够看出,不管是哪方先发起ARP Request,最终双方都会获得对方的MAC地址信息的。这也是处于减小网络上没必要要流量的考虑。
2 免费 ARP
整个ARP的体系里基本上就是由ARP Request和Response组成的,从上面的描述中,能够看出Request就是告知对方“我要什么”,而Response是回答“我是什么”。但有些时候也会例外,他们虽然从形式上仍是Request和Response的,但它们一般不会不是一问一答的,而是只有其中的一部分,因此一般被称为免费ARP或无为ARP(Gratuitous ARP)。
从做用而言,它们主要是能够分为两类:
一、以ARP Request的形式发送广播,请求本身的MAC地址,目的是探测局域网中是否有跟本身IP地址相同的主机,也就是常说的IP冲突,以下:
clip_image010
正常状况下,这样的报文是不会有回复的,若是有,则说明有冲突发生。
二、以ARP Response的形式发送广播,它一般只是为了把本身的ARP信息通告/更新给局域网全体,这种Response不须要别人请求,是本身主动发送的通告。报文结构以下。
clip_image012
这两种ARP帧虽然都是广播发送的,但目的不一样,从帧结构上来讲,前者注重的是Target Internet Address,然后者注重的是Sender Hardware Address和Sender Inteernet Address。
RG NBR系列路由器就采用上述第二种方式来发布本身的免费ARP,来防止网内PC机被其它中毒机器恶意修改其ARP Cache中保存的网关正确MAC地址信息;
3 触发 ARP动做的事件
固然,若是windows的应用须要经过IP与别的IP地址进行通信,并且本机ARP Table中没有对方的相应cache时,就会触发ARP自动学习。
另外,经过实验观察,咱们发现Wind2K/XP在设置/修改IP、网卡禁用/启用、网线拔插、系统重启的时候,都会连续发送三次免费ARP Request,目的显然是为了判断网络上是否存在IP地址冲突。
对于RG Routers和Layer 3 Switch来讲,若是存在上层IP通信,那么天然须要触发ARP学习过程,这一点跟windows是彻底相同的。
在以太网端口设置/修改IP时,路由器、Layer3 Switch会自动发送免费ARP Request报文来探测是否有IP冲突;而在端口shut/no shut、端口线缆拔插、系统重启的时候,路由器又会自动发送免费ARP Response报文,用以把本身的ARP信息通告全体主机。
同时,不管是那种免费ARP,路由器、Layer 3 Switch都只发送一次。
很显然,windows的ARP触发事件跟路由器、Layer 3 Switch是有差异的:
一、Windows/PC做为网络上的一个主机,它可能只是跟少数的几个PC进行信息交互,因此它在非必要状况下不(经过免费ARP Response)把本身的ARP信息广播给全部主机是合理、也是明智的。路由器、Layer 3 Switch虽然不直接参与应用层的处理,但它一般是一个局域网的网关,肩负则全部主机的数据转发任务,也就是说几乎全部的主机跟路由器、Layer 3 Switch之间都会存在ARP交互,与其被动的响应ARP请求,还不如主动的把本身的ARP信息广播给全部主机,这对于下降路由器、Layer 3 Switch的工做负荷、减小网络带宽占用都是有好处的。
二、从免费ARP报文的发送数量来看,Windows发送的免费ARP都是3次,这有利于确保对方成功收到,同时也有利于减小其余主机的免费ARP干扰;而RG路由器、Layer 3 Switch仅仅发送一次,并且任何状况都再也不重复,这显然是不够的。
4 异常状况下的 ARP处理机制
常见的局域网异常情况有:IP地址冲突、MAC地址冒用、ARP欺骗等,极端状况下还可能IP+MAC同时冒用,下面咱们就来具体分析。
4.1 IP 地址冲突
一、网关Router设置IP成某PC的地址
有些时候,如用户网络使用windows作代理(NAT),如今要用一个路由器 、Layer 3Switch(IP地址与网关windows相同)来替换当网关;当二者共存时,就会出现Windows IP地址与路由器、Layer 3 Switch冲突的状况。固然还有其余的可能性。
这里,若是路由器、Layer 3 Switch是调试完以后接入局域网的,按照前面的描述,RG路由器、Layer 3 Switch直接发送1个免费ARP Response,这样就强制局域网内的PC学习到路由器、Layer 3 Switch SVI接口的ARP信息,此时原有Windows网关没有任何响应,工做也正常;但此时局域网内的PC关于网关IP的ARP内容却发生了改变,路由器、Layer 3 Switch的SVI接口成为了实际意义上的网关。
clip_image014
若是路由器、Layer 3 Switch是接入局域网以后才开始配置和调试的,那么路由器、Layer3 Switch SVI接口设置IP以后会先发送1个免费ARP Request报文,探测有无地址冲突,若是有,则强制发送免费ARP Response;此时Windows主机提示地址冲突,网卡变为不可用状态,而路由器、Layer 3 Switch SVI接口则成为了实际的网关。
clip_image016
二、Windows设置IP成网关路由器、Layer 3 Switch SVI的IP地址
在网吧、企业网环境中,上点后,路由器工做正常,局域网中的PC学习到的网关ARP信息就是路由器、Layer 3 Switch对应端口的IP和MAC;假设此时内网中有一个Windows PC修改本身的IP地址,不慎和网关IP冲突,会发生什么呢?
clip_image018
从这个抓包状况看,PC修改IP以后,发送免费ARP Request,看是否有地址冲突,这显然是有的,从第二个包就能够看出来,RG Router、Layer 3 Switch SVI回复了一个ARP Response;此时PC桌面上提示IP地址冲突,网卡处于不正常工做状态,用户通常会修改IP地址再次尝试;
而紧随其后的是,路由器、Layer 3 Switch发送了1个免费ARP Request包,用来判断冲突是否继续存在?固然因为Windows对于网卡的管理,致使冲突自动消失,路由器、Layer 3 Switch也就再也不有后续动做了。但若是此时冲突继续存在呢?从上面的实验来看,路由器、Layer 3 Switch会强制发送1次免费ARP Response,用以让局域网的主机确认,我才是真正的网关。
显然,应付普通的非恶意的IP地址冲突,路由器、Layer 3 Switch现行的机制应足够了。
4.2 MAC 地址冒用
无论是处于什么目的,用户可能经过某种手段从新烧录本身网卡的MAC地址,若是这个地址正好和路由器、Layer 3 Switch的网关IP相同,会出现什么状况呢?
因为条件的限制,这个实验没有作成,但咱们能够分析一下:
根据前面的分析,网络设备是经过发送免费ARP Request报文,查询本身IP的对应MAC地址来确认是否存在冲突的,在单纯的MAC地址冒用的状况下,上述机制是探测不到任何异常的。
可是当两个设备的MAC地址相同时,最直接的影响就是局域网交换机(一般为二层)的MAC Table中,有两个端口学习到的MAC地址是彻底相同的,这有点相似环路发生的现象;但这确实不是环路,由于交换机生成树的BPDU报文不可能从其中的一个端口发出,从另一个端口收到,因此STP是探测不出什么的,也就是说这两个端口仍是会正常工做的。
此时交换机会作的就是,把发往该MAC地址的以太网帧同时发送到两个端口上,以求尽量的数据丢失;这看起来有点象“端口镜像”。
看来,单纯的MAC地址冒用/冲突是不会到路由器、Layer 3 Switch形成什么直接的影响的,不过它会把全部通过网关路由器的流量复制一份到某个特定的端口,若是这个端口链接的某个主机别有所图的话,后果仍是很严重的。不过这属于信息安全的范围了,这里再也不详细讨论。
4.3 ARP 欺骗
ARP自动学习的目的,就是通信的双方主机互相请求/告知MAC地址,并以此完成二层的以太网帧交换,因为通信的双向性,很显然若是任何一方的ARP信息是空或者错误的,那么通信就会失败。而ARP欺骗的目的就是频繁的发送错误消息欺骗网络通讯的任何一方,最终致使不能正常通讯。
那么怎样防止ARP欺骗呢?从根本上说就是双方的IP-MAC地址对应信息要正确,以前咱们说过,ARP是自动学习的,是经过ARP Request和Response报文的交互,由别人告知的,正是这个特性让ARP欺骗有了可乘之机,显然最有效的方法就是不采用“学习”机制,如今不少设备厂商都是这么实现的,但配置静态ARP工做量很是大,后期维护也极不方便,假设局域网内主机数量为N,那么最少要配置的ARP条目有N+(N-1)=2N-1个;若是N=200,也就是说最后总共要配置400条,这还不算原始IP、MAC地址信息的收集、校对和维护工做。若是要全网ARP绑定的话,总条目可达N(N-1),那就更惊人了。
是否能够避开静态ARP绑定这种烦琐的方式呢?对Windows主机是没有办法的;但咱们能够从路由器、Layer 3 Switch上着手,要回答这个问题,首先要弄清ARP欺骗的具体过程,先看实验拓扑结构:
clip_image019
因为很难找到合适的病毒重现真正的ARP欺骗,咱们采用安装聚生网管(也叫Netsense、P2P终结者)来模拟,其实现的基础就是进行ARP欺骗。
在这个环境中,使用路由器做为网关,进行NAT操做,内网中链接两个PC,其中一台安装聚生网管,进行ARP欺骗。开始时,PC的ARP表中192.168.1.6对应的MAC地址是正确的,而后启动聚生网管,来看看现象:
一、第一阶段,ARP Cheater会发送大量ARP Request来逐个扫描内网中的PC:
clip_image021
正常状况下局域网PC会回应ARP Request,ARP Cheater就是靠这个来确认并收集内网中已经启动的PC的,并在本地造成一个数据库。
二、第二阶段,Cheater就开始进行实质的欺骗了,其过程为就是向真实网关和PC同时发送免费ARP Response,强行更新其ARP Table。
其中,发送给PC的为:
clip_image023
显然,Cheater强行通告给PC的ARP内容是错误的,由于00-0D-60-8C-0D-C9和192.168.1.6分别是Cheater的MAC地址和路由器的网关IP。
其次,发给网关路由器的为:
clip_image025
在这个信息中,00-00-E2-58-AC-EA和192.168.1.158都是对应的普通PC,是一个正确的信息,Cheater代替PC向网关发送ARP强制更新信息,是为了确保通信可以正常完成。
欺骗完成以后,局域网中的全部PC都根据错误的ARP信息把数据包发给ARP Cheater,Cheater再经过路由器转发到公网真正的服务器上;当数据包从公网返回到路由器以后,路由器会把数据包直接返回到PC,中间再也不通过ARP Cheater(若是须要,也能够通过ARP Cheater),参阅前面的拓扑结构图。
这样,ARP欺骗就完成了,PC上面关于网关的ARP信息发生了改变;不过为了“巩固”成果,聚生网管每隔2秒再次进行欺骗。
clip_image027
固然,聚生网管不算是一种病毒、木马或者恶意程序,只是它利用了ARP欺骗,把全部的局域网全部的主机流量都导入的本身的网卡上,籍此,聚生网管就能够进行相应的过滤和限制了。
如今比较流行的窃取密码的木马程序就是按照这个原理来实现的,固然密码只是在用户登录的时候才输入的,因此木马程序会故意让本身的网卡失效又马上恢复,此时,内网的用户觉得是网络质量很差掉线,接着就是从新登录、输入密码……
上面两种状况虽然是ARP欺骗,但多数时间网络仍是正常运行的;若是只是要让网络中断,那么ARP Cheater只需频繁发送免费ARP Response便可,固然里面包含的Sender Address是错误的。
4.4 如何应对 ARP欺骗?
前面提到,ARP欺骗可能会欺骗网关路由器或者内网的PC,下面咱们就分这两种状况来分析一下。
4.4.1 避免 ARP欺骗PC
要找到应对方法,必须先识别出ARP欺骗的特色:
一、ARP欺骗发生时
不管出于什么目的, ARP欺骗最开始、也是最关键的一步就是经过免费ARP Response信息,发送错误的网关ARP信息给局域网主机,其方法不外乎两种:
n 在本网段首先发送大量的ARP Request扫描,经过Response报文收集当前活动的主机,随后给每一个主机发送免费的ARP Response;在这种状况下,路由器只能看到从一个固定的MAC地址发出大量ARP请求广播,并且这个过程可能会周期性重复。
n 第二,ARP Cheater不须要逐个找局域网的主机IP,它直接冒充网关,经过免费ARP Response广播通告全网;在这种状况下,路由器上应该能够观察到免费ARP Response报文,其Sender Internet Addr信息就是本身的IP地址,并且从上面的实验中能够看到,这种免费ARP Response广播报文是很是频繁的。
不管是那种状况,其目的都是欺骗PC,路由器虽然可能经过某些特征判断ARP欺骗的发生,可是根本没法制止,由于路由器对该PC是没有控制权的。
二、ARP欺骗发生后
ARP欺骗发生后的状况是怎样呢?固然是PC的ARP表被篡改了,固然咱们能够经过手工方式来清除ARP表项从新学习,但ARP欺骗是不断的重复进行的,人工维护的工做量恐怕远远大于前面说的“静态ARP”,显然可行性为零。
既然手工方式不行,那么自动方式怎么样呢?跟ARP Cheater同样,咱们能够考虑让网关路由器或者其余专用主机来发送免费ARP广播,把正确的网关ARP信息通报给全网。若是网内的ARP欺骗不是很频繁,这种是方法可行;但若是象聚生网管这样的状况,ARP欺骗为每2秒一次,要让PC的ARP表正确,路由器或专用主机发送的免费ARP Response广播必须更频繁,即使如此,内网PC的ARP表可能还会处于频繁变更的过程当中,致使其正常通信也会随之而产生丢包状况,同时整个网络上会所以而充满大量的以太网广播,我想这事谁也不肯看到的。RG Router的内网口上 arp gratuitous interval xx 的配置实际上就是按期向网内发送 arp Response;
综上,能够得出结论,对于内网主机的ARP欺骗,做为路由器自己基本上是无能为力的,至少效果很是有限。因此在对付ARP欺骗的时候,PC仍是乖乖的进行静态ARP绑定措施。好比在PC机上配置autoexec.bat批处理文件:
@echo off
Arp –d
Arp –s 192.168.1.1 00-d0-0f-23-44-89
使得在PC机上可以静态绑定网关的正确MAC地址,防止网关欺骗;
在RG 2126G交换机上能够采用在端口下,anti-arp-spoofing ip xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx是网关地址;RG 2126G将阻止源IP是本网段网关地址的报文从这个端口进入;达到防止该端口上链接的PC发出对其它PC进行网关欺骗的ARP Response、ARP Request报文;
4.4.2 避免 ARP欺骗路由器
跟PC的状况不一样,因为路由器、Layer 3 Switch是一款三层设备,几乎没有什么上层应用会跟内网主机直接通信,因此它的ARP表项一般不是主动请求得到的,而是被动学习到的,好比收到ARP Request或者免费的ARP Response前者是正常状况,不在咱们讨论范围以内;然后者就是ARP Cheater欺骗网关路由器的手段。
仍是分为两个阶段来分析:
一、ARP欺骗发生时
一般状况下下,ARP Cheater是经过单播性质的免费ARP Response把错误的主机ARP信息强制通告路由器、Layer 3 Switch的,并且因为内网的主机数量众多,路由器、Layer 3 Switch每次会收到大量的免费ARP Response单播报文。它们的Sender Internet Addr分别是局域网的主机IP地址,可是Sender Hardware Addr却都是ARP Cheater的网卡MAC地址。
显然,路由器、Layer 3 Switch彻底能够经过免费ARP Response报文的特征来肯定欺骗是否发生,但当肯定的同时,ARP欺骗的结果是已经形成了的。
二、ARP欺骗发生后
因为路由器、Layer 3 Switch的ARP表项是被动学习的,因此在ARP欺骗发生以后,路由器、Layer 3 Switch必须本身主动的去查询正确的ARP信息,方法恐怕只有一种:就是根据现有ARP表项中的IP地址列表,强制性的逐一发送ARP Request,经过对方的Response信息来更新校订本身的ARP Table。显然这个工做量是很大的。尤为是在ARP Cheater的欺骗很是频繁的时候,路由器、Layer 3 Switch的ARP“自我校订”机制显得太苍白无力了。
4.5 应对 ARP欺骗的其余方法
从前面的分析来看,单纯的经过ARP机制自己来防止ARP欺骗,几乎是不可能完成的任务。那么还有什么方法来避免呢?
4.5.1 硬件角度
路由器毕竟是一种三层设备,对于ARP二层协议的支持和处理老是有限的;咱们是否能够从局域网交换机来入手呢?
由于ARP发生以后的结果(错误的ARP信息)是存储在网关路由器和主机中的,跟交换机没有任何关系,因此要经过交换机来处理,重点就是一个字:“防”。从前面的分析来看,不管怎样欺骗,其关键的特征就是发送免费ARP Response报文,并且ARP字段的Sender信息与其自身MAC地址不相符合,若是二层以太网交换机可以进行ARP报文合法性的判断,那么就天然能够进行相应的屏蔽了;
这个技术看起来不是很难事先,但涉及到交换机ASIC芯片的支持和软件功能的增长,其可行性和性价比还须要考证;同时须要把宽带路由器和交换机做为一个总体推给使用者。如今锐利网络在网吧等宽带市场中的路由交换一体化解决方案就是基于这个原理的。
这种思路应该能够从源头上解决ARP欺骗的发生,但对于交换机的要求比较高,不只是功能方面,还同时涉及到性能、稳定性和性价比等特性。
在RG 2七、29系列交换机上就是从硬件架构上进行设计,使得交换机可以根据报文类型,好比对报文类型Type是0X0806的ARP报文会检查其Source IP和Source MAC,根据在该端口上绑定的IP地址与相应的MAC地址来将攻击者的欺骗性ARP Response过滤掉,从而达到从根源上防止了ARP Attacking的实现;
4.5.2 软件角度
单纯的利用ARP特性是解决不了ARP欺骗的问题的,那么在软件上还有什么出路呢?方法仍是有的,能够看一下艾泰的解决方案:
既然ARP欺骗最终影响的是ARP表项的内容,而表中的内容又是动态学习的,因此ARP机制才不安全,那么我为什么不摒弃ARP自动学习这种机制呢?固然咱们说的不是进行手工静态ARP绑定。其具体处理方法是把ARP表项的相关信息放到NAT的表项中一块儿处理。
原来NAT表项中的主要内容有:NAT转换前源IP地址、转换前源TCP/UDP端口、转换后源IP地址、转换后TCP/UDP端口、目的IP地址、目的端口等6项信息,而转换前IP地址和MAC地址的对应关系是靠ARP的动态学习机制来实现的。
如今,NAT表项的内容调整为:NAT转换前源IP地址、 转换前源 MAC 地址、转换前源TCP/UDP端口、转换后源IP地址、转换后TCP/UDP端口、目的IP地址、目的端口等7项信息。这个新增长的源MAC地址能够不做为NAT判断的依据,其做用是让数据包从公网一侧回到路由器,通过NAT转换以后,可以送回到正确的PC主机。
那么如何才能保证PC主机的数据包不受ARP欺骗的影响,正确的送到路由器呢?很简单,进行手工的静态ARP绑定。前面分析过,对于ARP欺骗PC主机的状况,路由器是无能为力的。
这样,PC能够根据静态(正确)的ARP信息把数据包发到网关路由器,路由器在记录必要的信息转存为NAT cache的时候,把该以太网帧的源MAC地址也异同记录,写到NAT cache中,做为数据包返回时的参考。
这种方式的优势是不用一来交换机,避免ARP的欺骗,但PC主机仍是须要进行手工的ARP绑定。能够说这是“硬件角度”的一种折中方案。其缺点是NAT存储和判断的因素较多,必然影响性能;并且这种机制只能避免PC和路由器之间的通讯免受ARP欺骗的干扰,对于PC与PC之间的通信则无能为力了。
4.5.3 消极角度
什么是消极角度?简单的说就是没有办法了,我不用ARP了,那么在以太网中怎么通信?PPPoE!在理论上,这的确能够彻底规避ARP的问题,但在实际应用的时候,须要让路由器来充当PPPoE服务器,这样全部局域网通信的流量都要通过路由器进行三层转发。对于路由器的处理压力可想而知――不过确实有这种网络的实际案例,好比ISP的运维办公网,但他们使用PPPoE的目的更重要的是为了网络信息安全和管理。
4.6 建议
对于ARP欺骗,仅仅从ARP自己恐怕是没有什么好的解决方案的,要解决或避免ARP欺骗的问题,须要动一番手术的。
而对于普通的ARP冲突,我到时以为还能够增强一下:
u 路由器、Layer 3 Switch在确认网络中有IP冲突后,会马上发送1个免费ARP Request,用以肯定冲突已经消失,若是冲突继续存在,则强制发送1个免费ARP Response。
ü 是否能够考虑延时一个时间段再发送免费ARP Request?用以免Windows主机没有及时处理处于“非正常”状态的状况;
ü 其次,若是冲突继续存在,发送1次ARP Response;更合理的应该是重复进行免费ARP Request探测,冲突存在则强制进行免费ARP Response通报,直到冲突消失。
4.7 总结
在主要的两类ARP问题中,通常的非恶意地址冲突不会对路由器、Layer 3 Switch形成实质性的影响。而对于各类目的的ARP欺骗机制,不管是从预防仍是后期干预上,路由器都没有直接有效的手段?
虽然如今可使用双向的静态ARP来避免ARP欺骗带来的影响,但就实施和后期的维护来看,都很是的不方便,并且也何尝容易出错。
比较好的出路在于从硬件结构上对交换机进行改良,实现成本与功能的平衡,才是防止ARP问题的根本之路
相关文章
相关标签/搜索