一、什么是ARP协议
要想了解ARP欺骗攻击的原理,首先就要了解什么是ARP协议。 ARP是地址转换协议(Address Resolution Protocol)的英文缩写,它是一个链路层协议,工作在OSI 模型的第二层,在本层和硬件接口间进行联系,同时对上层(网络层)提供服务。我们知道二层的以太网交换设备并不能识别32位的IP地址,它们是以48位以太网地址(就是我们常说的MAC地址)传输 以太网数据包的。也就是说IP数据包在局域网内部传输时并不是靠IP地址而是靠MAC地址来识别目标 的,因此IP地址与MAC地址之间就必须存在一种对应关系,而ARP协议就是用来确定这种对应关系的 协议。
ARP工作时,首先请求主机会发送出一个含有所希望到达的IP地址的以太网广播数据包,然后目标IP的所有者会以一个含有IP和MAC地址对的数据包应答请求主机。这样请求主机就能获得要 到达的IP地址对应的MAC地址,同时请求主机会将这个地址对放入自己的ARP表缓存起来,以节约不必要的ARP通信。ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用(windows系 统这个时间为2分钟,而Cisco路由器的这个时间为5分钟),就会被删除,这样可以大大减少ARP缓 存表的长度,加快查询速度。通过下面的例子我们可以很清楚的看出ARP的工作机制。
如上图所示,假如我们有两个网段、三台主机、两个网关、分别是:
主机名 IP地址 MAC地址
网关1 192.168.1.1 01-01-01-01-01-01
主机A 192.168.1.2 02-02-02-02-02-02
主机B 192.168.1.3 03-03-03-03-03-03
网关2 10.1.1.1 04-04-04-04-04-04
主机C 10.1.1.2 05-05-05-05-05-05
假如主机A要与主机B通讯,它首先会通过网络掩码比对,确认出主机B是否在自己同一网段内,如果 在它就会检查自己的ARP缓存中是否有192.168.1.3这个地址对应的MAC地址,如果没有它就会向局域 网的广播地址发送ARP请求包,大致的意思是192.168.1.3的MAC地址是什么请告诉192.168.1.2,而 广播地址会把这个请求包广播给局域网内的所有主机,但是只有192.168.1.3这台主机才会响应这个 请求包,它会回应192.168.1.2一个arp reply包,大致的意思是192.168.1.3的MAC地址是 03-03-03-03-03-03。这样的话主机A就得到了主机B的MAC地址,并且它会把这个对应的关系存在自己的ARP缓存表中。之后主机A与主机B之间的通讯就依靠两者缓存表里的MAC地址来通讯了,直到通 讯停止后两分钟,这个对应关系才会被从表中删除。
再来看一个非局域网内部的通讯过程,假如主机A需要和主机C进行通讯,它首先会通过比对掩码发 现这个主机C的IP地址并不是自己同一个网段内的,因此需要通过网关来转发,这样的话它会检查 自己的ARP缓存表里是否有网关1(192.168.1.1)对应的MAC地址,如果没有就通过ARP请求获得,如果 有就直接与网关通讯,然后再由网关1通过路由将数据包送到网关2,网关2收到这个数据包后发现 是送给主机C(10.1.1.2)的,它就会检查自己的ARP缓存(没错,网关一样有自己的ARP缓存), 看看里面是否有10.1.1.2对应的MAC地址,如果没有就使用ARP协议获得,如果有就是用该MAC地址将 数据转发给主机C。
二、ARP欺骗原理
在了解ARP协议后我们再来看看什么是ARP欺骗,它的目的又是什么?通过上面的例子我们知道了 在以太局域网内数据包传输依靠的是MAC地址,IP地址与MAC对应的关系依靠ARP表,每台主机(包括网关)都有一个ARP缓存表。在正常情况下这个缓存表能够有效的保证数据传输的一对一性, 也就是说主机A与主机C之间的通讯只通过网关1和网关1,象主机B之类的是无法截获A与C之间的 通讯信息的。但是在ARP缓存表的实现机制中存在一个不完善的地方,当主机收到一个ARP的应答 包后,它并不会去验证自己是否发送过这个ARP请求,而是直接将应答包里的MAC地址与IP对应的 关系替换掉原有的ARP缓存表里的相应信息。
如下图所示: 这就导致主机B截取主机A与主机C之间的数据通信成为可能。首先主机B向主机A发送一个ARP应答包说192.168.1.1的MAC地址是03-03-03-03-03-03,主机A收到这个包后并没有去验证包的真实性而是直接将自己ARP列表中的192.168.1.1的MAC地址替换成03-03-03-03-03-03,同时主机B向网 关1发送一个ARP响应包说192.168.1.2的MAC是03-03-03-03-03-03,同样网关1也没有去验证这个 包的真实性就把自己ARP表中的192.168.1.2的MAC地址替换成03-03-03-03-03-03。当主机A想要与 主机C通讯时,它直接把应该发送给网关1(192.168.1.1)的数据包发送到03-03-03-03-03-03这个 MAC地址,也就是发给了主机B,主机B在收到这个包后经过修改再转发给真正的网关1,当从主 机C返回的数据包到达网关1后,网关1也使用自己ARP表中的MAC,将发往192.168.1.2这个IP地 址的数据发往03-03-03-03-03-03这个MAC地址也就是主机B,主机B在收到这个包后再转发给主 机A完成一次完整的数据通讯,这样就成功的实现了一次ARP欺骗攻击。
因此简单点说ARP欺骗的目的就是为了实现全交换环境下的数据监听与篡改。到这里我们可以知道要完成一次有效的ARP欺骗的关键点就是双向欺骗,也就是说欺骗者必须同时对网关和主机进行欺骗。
三、ARP欺骗病毒
首先需要说明的是,这里说的ARP欺骗病毒并不是特指某一种病毒,而是指所有包含有ARP欺骗功 能的病毒的总称。由于ARP欺骗到目前为止依然是一种难以控制且非常有效的攻击手段,在今后很长一段时间它都会被病毒、木马程序等利用。这也加大了我们对这类病毒的控制难度。
ARP病毒的危害 影响局域网正常运行——局域网内一旦有ARP的攻击存在,会欺骗局域网内所有主机和网关,让所 有上网的流量必须经过ARP攻击者控制的主机。其他用户原来直接通过网关上网现在转由通过被控主机转发上网,由于被控主机性能和程序性能的影响,这种转发并不会非常流畅,因此就会导致用 户上网的速度变慢。而由于ARP表存在老化机制,这就导致在某段时候主机能获得正确的网关MAC直 到新的欺骗完成,这两种情况的交替过程中,主机显示的状况就是时断时续。 泄露用户敏感信息——大部分时候这些信息是黑客们所感兴趣的东西(如游戏帐号和密码、QQ号 和密码、网银帐号和密码等)
ARP病毒的传播方式 前面讲过ARP欺骗是一种攻击方式,所有的病毒都可以采用这种方式,因此ARP病毒传播的方式 包括现有大部分病毒传播的方式,从前我们掌握的情况来看,主要为以下几种: 通过网页下载传播(目前大部分ARP木马的传播方式) 网络共享传播(弱口令共享等) 移动存储介质传播(如U盘、移动硬盘等)文件感染
ARP病毒的查杀 对于已知的ARP病毒,可以使用杀毒软件或者是专杀工具进行查杀,而对于一些杀毒软件无法查杀的未知ARP病毒,建议用户重新安全系统并及时升级补丁程序!
四、ARP欺骗的检测与控制办法
目前比较有效的检测ARP欺骗攻击的方法主要有两种,一种是在局域网内部使用抓包软件进行抓包分析、另一种是直接到到三层交换机上查询ARP表,这两种方法各有优缺点,具体分析如下:
1、抓包分析 方法——使用抓包软件(如windump、sniffer pro等)在局域网内抓ARP的reply包,以windump为 例,使用windump -i 2 -n arp and host 192.168.0.1(192.168.0.1是您的网关地址)抓下来的包我们只分析包含有reply字符的,格式如下: 18:25:15.706335 arp reply 192.168.0.1 is-at 00:07:ec:e1:c8:c3 如果最后的mac不是您网关的真实mac的话,那就说明有ARP欺骗存在,而这个mac就是那台进行 ARP欺骗主机的mac。 优点——简单易行,无需特别权限设置,所有用户都可以做,误判率较小!缺点——必须在局域网内部(广播域内部)听包才有效。
2、三层交换机上查询ARP缓存表 方法——登陆局域网的上联三层交换机,并查看交换机的ARP缓存表(各种品牌的交换机命令有差异) 如果在ARP表中存在一个MAC对应多个端口(请注意是一个MAC对应多个端口,而不是一个端口上 存在多个MAC)的情况,那么就表明存在ARP欺骗攻击,而这个MAC就是欺骗主机的MAC。 优点——可以远程操作,无需到局域网内部,可以通过脚本来自动分析。缺点——需要特殊权限,普通用户无法进行操作。
ARP欺骗的控制方法
1、主机静态绑定网关MAC 方法——使用arp命令静态绑定网关MAC,格式如下:
arp -s 网关IP 网关MAC
如果觉得每次手动输入比较复杂,您可以编写一个简单的批处理文件然后让它每次开机时自动运行, 批处理文件如下:
-----------------------------------
@echo off echo "arp set"
arp -d
arp -s 网关IP 网关MAC
exit
------------------------------------
优点——简单易行,普通用户都能操作
缺点——只能单向绑定。需要跟网关绑定MAC结合使用。
2、网关使用IP+MAC绑定模式 方法——交换机启用静态ARP绑定功能,将用户的IP与MAC进行静态绑定,防止ARP欺骗发生。
优点——效果明显
缺点——操作复杂,工作量巨大。无法保证主机端不被欺骗,需要与主机端绑定网关MAC结合使用。
3、使用ARP服务器 方法——在局域网内架设ARP服务器,替代主机应答ARP包。 优点——效果明显 缺点——配置复杂,需要改变客户端设置。成本高,需要大量的服务器。
4、使用防ARP攻击的软件 方法——下载和使用防ARP攻击的软件,如ARPFix或者是AntiARP等。优点——简单易行 缺点——需要用户端都安装,无法保证网关不被欺骗。
总结:因为ARP欺骗利用的是ARP协议本身的缺陷,所以到目前为止,我们依然没有一个十分有效 的方法去控制这种攻击。目前难点主要集中在网关交换机上,我们还没有找到一个很有效的方法来防范网关上的ARP列表不被欺骗修改。所以当前最有效的办法还是迅速阻断这种攻击的来源。 这就要求能够快速检测到攻击并定位出攻击主机位置后加以处理。
五、防范ARP欺骗的常用工具
ARP防火墙——ARPFix 这是我们CCERT为了解决ARP病毒所开发的一个小防火墙软件,当它被安装在正常主机上时,它能有效地防范自身被ARP欺骗并能检测出感染主机的MAC地址,如果它被安装在感染主机上时它可以阻断感染主机对外发起的ARP欺骗攻击。
需要说明的是这只是一款防火墙软件,它不具备查 杀ARP病毒的能力,如果需要查杀ARP病毒,您还是需要专业杀毒软件。
windump软件——windump tcpdump软件在windows系统下的版本,简单易用!需要winpcap的支持。
sniffer pro软件——sniffer windows系统低下功能最强大的抓包分析软件。
趋势的ARP专杀工具——TSC_ARP 趋势提供的最新的ARP专杀工具,解压缩后直接运行TSC.exe即可。
AntiARP软件——AntiArp 网络上比较流行的防范ARP欺骗攻击的软件。软件的下载地址和详细信息请参见: http://www.antiarp.com/
推荐安装360安全卫士,并手工开启局域网ARP防护功能。
六、ARP欺骗病毒的最新状况
以往的ARP病毒使用ARP欺骗的目的绝大多数都是为了窃取用户的敏感信息,但是我们最近监测到 ARP欺骗在病毒中又得到了新的应用,那就是作为传播网页木马病毒的传播手段,当一台主机感染带有这种ARP欺骗功能的病毒后,会在局域网内发动ARP欺骗,它会监听局域网内所有主机的数据包,一旦发现其它主机有访问WEB网页的行为后,就会通过修改相应的数据封包在你访问的网页代 码里加入包含有木马程序的网页链接。从而导致局域网内其它主机不管访问什么网站都会被导引到含有木马病毒的网站上去的。当您访问任何网站您的杀毒软件都在报该网页有毒的话,很可能您的局域 网内就存在这种攻击。
七、其他相关
ARP在注册表中的项:
1、关于arp缓存表项的生存期(有效时间) 在默认情况下,Windows Server 2003家族和Windows XP中,ARP缓存中的表项仅存储2分钟。 如果一个ARP缓存表项在2分钟内被用到,则其期限再延长2分钟,直到最大生命期限10分钟为止。 超过10分钟的最大期限后,ARP缓存表项将被移出,并且通过另外一个ARP请求——ARP回应交换 来获得新的对应关系。
ARP缓存表项的存放时间可以通过改变ArpCacheLife和ArpCacheMinReferencedLife的注册表 值来重新设置。
ArpCacheLife
Location:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Data Type: REG_DWORD
Valid range: 0-0xFFFFFFFF
Default value: 120
Present by default: No
ArpCacheLife设置了未被使用的ARP缓存表项可以被保持的时间。
如果注册表中没有ArpCacheLife项, 则ArpCacheLife的默认值是120秒(2分钟)。
ArpCacheMinReferencedLife
Location:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Data Type: REG_DWORD
Valid range: 0-0xFFFFFFFF
Default value: 600
Present by default: No
ArpCacheMinReferencedLife设置被重复使用的表项可以在ARP缓存中存放的时间。
ArpCacheMinReferencedLife的默认值是600秒(10分钟)。
在注册表中ArpCacheMinReferencedLife和ArpCacheLife的值的使用方法如下: 如果ArpCacheLife比ArpCacheMinReferencedLife的值大或与之相等,则被使用和未被使用的ARP 缓存表项可存储的时间都是ArpCacheLife。
如果ArpCacheLife比ArpCacheMinReferencedLife的值小,则未被使用的ARP缓存表项在 ArpCacheLife秒的时间后就过期了,被使用的表项的生存期为ArpCacheMinReferencedLife秒。
2、无偿ARP和重复的IP地址检测 ARP可以被用来检测重复的IP地址,这是通过传送一种叫做无偿ARP的ARP请求来完成的。无偿 ARP就是一个发往自己IP地址的ARP请求。在无偿ARP中,SPA(发送者协议地址)和TPA(目标协议地址)被设置成同一个IP地址。 如果节点发送一个发往自己IP地址的ARP请求,就不应收到任何一个ARP回应帧,这样节点就可以判断没有其他节点使用跟它相同的IP地址。如果节点发送一个发往自己IP地址的ARP请求,结果收 到ARP回应,这样此节点就可以判断有另外一个节点使用同样的IP地址。
注册表中对ArpRetryCount 的设置控制了无偿ARP的发送数量。
ArpRetryCount Location:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Data Type: REG_DWORD
Valid range: 0-3
Default value: 3
Present by default: No
ArpRetryCount设置了当初始化某个IP地址时,发送的无偿ARP的次数。如果发送了ArpRetryCount 个无偿ARP后,都没有收到ARP回应,IP就假定此IP地址在此网络段中是唯一的。
提示:无偿ARP试图检测在同一个网络段中的IP地址重复。由于路由器并不转发ARP帧,无偿ARP 并不能检测在不同网络段之间的IP地址冲突。个人感觉这种无偿ARP是不是能够用在开发检测ARP 病毒的机制上?
八、讨论
目前我们还没有一个针对该种攻击方式特别行之有效的办法,如果您在处理ARP病毒的时候有什么好的方法和经验,欢迎您与大家分享!