史隽彬, 秦 科
(电子科技大学信息与软件工程学院,四川 成都 610054)
随着互联网的发展与普及,网络安全成为了一个不得不重视的问题。局域网的ARP攻击就是一种来自内网的安全隐患,轻则可造成网络拥堵,干扰内网的正常通信;重则可造成数据被监听和记录或者局域网的崩溃,带来巨大的经济损失。因此,应对局域网ARP攻击是保障网络安全必不可少的环节。
ARP协议[1]即地址解析协议,用于实现IP地址到网络接口硬件地址的映射。每一台主机都有一个ARP缓存表(见表1),表中记录了局域网内的所有主机的IP地址与MAC地址的对应关系。[2]在以太网中,当一台主机想与另一台主机通信时,需要获取该主机的MAC地址,之后通信就依靠两者缓存表中的MAC地址,直到这个<IP,MAC>地址映射超时,才重新发起ARP解析请求。[3]ARP协议的主要功能即通过该表,解析IP地址来获取对应主机的MAC地址。
表1 ARP缓存表
ARP缓存表更新效率很高,但是存在一个致命漏洞,即没有身份认证机制。因为ARP是一个无状态的协议,所以对于大多数操作系统,如果收到一个ARP应答,它们不管自己是否在此之前曾经发出ARP请求,都会更新自己的ARP缓存。[4]这也是进行ARP攻击的漏洞基础。
2.1.1 中间人攻击
攻击者C可以通过对ARP广播包的分析,得知网内正在通信的A与B的IP和MAC。C向A发送一个ARP应答包,将存放在A缓存表里B的MAC刷新为自己的MAC,同时向B发送一个ARP应答包,将存放在B缓存表里A的MAC也刷新为自己的MAC,然后开启数据包自动转发,就可以对A与B的通信内容进行监听,而A与B却对此无法察觉。
2.1.2 对路由器欺骗攻击
攻击者通过向路由器发送ARP应答包,用错误的MAC地址来不断刷新路由器的ARP缓存表,路由器就会根据这个错误的缓存表来完成IP-MAC的映射,无法将数据包正常发送到网内的主机,导致内网机器无法通过路由进行正常通信。
2.1.3 伪造网关以及对用户的欺骗攻击
攻击者向被攻击目标发送错误的ARP应答包,该应答包会刷新被攻击目标的ARP缓存表,使得被攻击者的网关或待通信主机的MAC指向一个错误的或者不存在的地址,被攻击者就无法与网关或待通信主机正常建立通信。[5]
某主机在局域网检测自身IP地址是否被使用,是通过以下方法进行的:用本机IP作为目的IP地址,发送ARP请求包,如果收到应答,则提示该IP在网络已经存在,即IP地址冲突。攻击者只需要拟造一个MAC地址,并使用被攻击者的IP地址制作一个ARP应答包发送回请求端,即可造成对方IP地址冲突。
每台主机都有一个ARP缓存表,洪泛攻击即通过向网络发送大量的无用ARP报文,通过这些报文来让目标主机ARP缓存表表满并溢出,使目标主机无法正常使用ARP缓存表,待通信IP地址就无法解析为对应MAC地址,来达到干扰目标主机通信的目的,同时洪泛攻击带来的大量无用ARP报文,需要消耗目标主机很多的硬件资源来进行处理。
在路由器或交换机上用VLAN对当前局域网进行合理分段操作,这样既可以方便网络的管理,便于故障的排查,也可以有效减少局域网ARP攻击的作用范围。但网络分段并不能彻底解决局域网ARP攻击的问题。分段只能将局域网ARP攻击的影响范围从整个局域网缩减到攻击者所在网段,并且能更容易寻找到攻击源,解决网络故障,但是它并不能从根本上解决局域网ARP攻击。尤其是同时遭遇到多个攻击源的ARP攻击时,网络分段对ARP攻击影响范围的阻隔作用就微乎其微了。
在局域网的数据层中,A主机若要与B通信,则会根据自己的ARP缓存表,把B的IP地址对应的MAC地址找到,然后根据这个MAC地址发送数据包,与B建立连接。若将这个ARP缓存表设置成静态的,则攻击方利用ARP缓存表的刷新原理,向A主机发出错误的ARP应答包用以篡改A的ARP缓存表时,A会抛弃该应答包并保留原缓存表不变,也就不会受到攻击方进行的ARP欺骗攻击了。
设置静态ARP缓存表可以有效避免局域网ARP攻击,但是局限性也十分明显,首先每次重新启动都必须重新设置静态缓存,十分麻烦。其次,这一方案完全不适用于大型局域网或者主机流动性大的局域网。因为,这些网络每天都有大量的新机器进入网络,都需要重新给它们分配IP资源。如果对于这些机器,都一一进行双向的手动设置静态ARP缓存表,将带来巨大的人工成本。
一些防火墙在收到大量ARP应答包的时候,可以将那些没有ARP请求对应的应答包直接舍弃掉,并且防火墙可以同时进行IP地址与MAC地址的静态绑定,这样可以更完善地防御局域网的ARP攻击。
这类防火墙的使用,的确能够很大程度上改善局域网的ARP攻击问题,可以解决静态缓存表的自动绑定,并且可以对ARP报文洪泛攻击的错误应答包进行识别和筛选。但是,它和静态ARP缓存表具有一个相同的问题,就是不适合大型网络。同样的,该类防火墙并不能解决新进入网络的计算机的IP分配问题,在大型网络中仍然不适用。
根据现有解决方案存在的局限性,不难看出,它们都不适合大型局域网和计算机流动性较大的局域网。若要解决设置静态ARP缓存后,网络再次新进计算机的IP分配以及IP-MAC绑定,就要用到DHCP[6]。
在新进入网络的主机发出DISCOVER以后,DHCP服务器会根据主机的请求,将未被租用的IP地址分配给该新进主机。在检测到DHCP服务器发出OFFER,IP地址分配成功以后,即进行IP-MAC的路由和主机端双向绑定。
按上述步骤IP分配完成后,该IP地址即被租用。但由于静态ARP缓存设置,会导致该IP地址无论是否使用而一直被租用,无法得到释放,最终导致IP地址资源枯竭。所以,在通信中,当主机遇到网络无响应情况,则对ARP缓存表进行刷新。路由器在对该主机无响应的情况下,主动解除该IP与MAC的绑定关系,刷新ARP缓存表,释放该无效IP地址。
开启DHCP-Snooping功能可以很好地应对DHCP欺骗攻击。DHCP-Snooping会建立和维护DHCPSnooping缓存表,并根据该表对DHCP报文进行监听,若发现不可信任的DHCP报文则将其滤除,以此来预防DHCP欺骗攻击。
对于ARP报文洪泛攻击,可通过ARP防火墙的筛选功能,将没有ARP请求与之对应的ARP应答包直接舍弃掉。对于DHCP洪泛攻击,在短时间内收到来自同一MAC地址的大量请求IP的DISCOVER时,对该MAC地址进行一段时间的限制访问,即可避免DHCP洪泛影响DHCP-Snooping和造成网络崩溃的问题。
用多台机器及多个VMware虚拟机构建局域网。开启DHCP对网内主机分配IP,然后进行ARP攻击测试。攻击前通信测试结果如图1。
图1 进行ARP攻击前的通信测试结果
ARP欺骗数据包的代码构造:
ARP_Header ARPH;//发送的ARP包结构
//先初始化三层ARP的MAC
ARPH.DMac3.byte1=0;ARPH.DMac3.byte2=0;ARPH.DMac3.byte3=0;
ARPH.DMac3.byte4=0;ARPH.DMac3.byte5=0;ARPH.DMac3.byte6=0;//目标 MAC
ARPH.SMac3.byte1=0x00;ARPH.SMac3.byte2=0xE0;ARPH.SMac3.byte3=0x11;
ARPH.SMac3.byte4=0x01;ARPH.SMac3.byte5=0xD0;ARPH.SMac3.byte6=0x05;//源 MAC
//ARPH.FrameHeader.SMac.byte1=ARPH.SMac3.byte1;ARPH.FrameHeader.SMac.byte2=ARPH.SMac3.byte2;ARPH.FrameHeader.SMac.byte3=ARPH.SMac3.byte3;
//ARPH.FrameHeader.SMac.byte4=ARPH.SMac3.byte4;ARPH.FrameHeader.SMac.byte5=ARPH.SMac3.byte5;ARPH.FrameHeader.SMac.byte6=ARPH.SMac3.byte6;//源 MAC
ARPH.FrameHeader.SMac.byte1=0x00;ARPH.FrameHeader.SMac.byte2=0xE0;ARPH.FrameHeader.SMac.byte3=0x11;
ARPH.FrameHeader.SMac.byte4=0x01;ARPH.FrameHeader.SMac.byte5=0xD0;ARPH.FrameHeader.SMac.byte6=0x05;//源MAC
ARPH.FrameHeader.DMac.byte1=0xFF;ARPH.FrameHeader.DMac.byte2=0xFF;ARPH.FrameHeader.DMac.byte3=0xFF;
ARPH.FrameHeader.DMac.byte4=0xFF;ARPH.FrameHeader.DMac.byte5=0xFF;ARPH.FrameHeader.DMac.byte6=0xFF;//目标MAC
ARPH.FrameHeader.PType=htons(0x0806);//协议类型为 ARP
ARPH.HardWare=htons(0x0001);//10M Ethernet
ARPH.PType3=htons(0x0800);//协议类型为IP
ARPH.HLeng=6;//硬件地址长度
ARPH.PLeng=4;//IP地址长度
ARPH.Oper=htons(0x0001);//请求操作
ARPH.Daddr.byte1=172;ARPH.Daddr.byte2=18;ARPH.Daddr.byte3=19;ARPH.Daddr.byte4=110;//目标 IP
ARPH.Saddr.byte1=172;ARPH.Saddr.byte2=18;ARPH.Saddr.byte3=19;ARPH.Saddr.byte4=103;//源 IP
int i;
for(i=0;i<18;i++)
{ARPH.padding[i]=0;}
return ARPH;
欺骗攻击后,进行通信测试结果如图2,ARP缓存表内容如图3。
图2 攻击后的通信测试结果
图3 被攻击者的ARP缓存表
根据4所述,将所有设备重启,清空ARP缓存表,进行防御设置和防火墙开启以后,重新用DHCP分配IP,然后进行ARP攻击测试。
防御后通信结果如图4,此时ARP缓存表内容如图5。
由此可见,该方案对于有效预防局域网ARP攻击有一定效果。
图4 防御后的通信测试结果
图5 防御后的ARP缓存表
通过对于现有ARP攻击类型以及防御方案的分析,针对现有解决方案存在的局限性,提出了解决应对局域网ARP攻击时,静态缓存表和新进主机IP分配同时生效的方案。通过在局域网内的数台计算机用多个VMware虚拟机构建虚拟大型局域网进行攻击测试,发现不论对于原有主机,还是新入网的主机,该方案都能有效防御各种点对点的ARP攻击,这对于大中型局域网的管理存在较大的便利性,也能较好保证局域网的网络安全。事实上,对于不同类型的防御方案,总是有其缺陷的存在。应对不同类型的攻击,还要采取不同的方案。若要彻底杜绝ARP攻击,则必须解决地址解析协议本身没有身份验证性质的问题。
[1]David C Plummer.RFC826,An Ethernet Address Resolution Protocol[S].1982.
[2]唐玄,刘娟.局域网ARP攻击原理与防范[J].电脑知识与技术,2008,4(33):1320.
[3]秦丰林,段海新,郭汝廷.ARP欺骗的监测与防范技术综述[J].计算机应用研究,2009,26(1):30-33.
[4]任侠,吕述望.ARP协议欺骗原理分析与抵御方法[J].计算机工程,2003,29(9):127-128.
[5]吴许俊.校园网ARP攻击与防御技术[J].科技信息,2009(19):45-46.
[6]黄彩凤.DHCP基本原理及配置[J].铁道通信信号,2009,45(7):44-46.