王 军,黄 皎,吴 穹,雷 鸣,卢 程
(河海大学,常州 213022)
随着网络的普及和发展,越来越多的嵌入式设备具备了网络通信的能力。信息在方便快捷传输的同时,其通信的质量和安全也面临着挑战。ARP(Address Resolution Protocol)[1]地址解析协议属于TCP/IP协议族中网络层协议,通过使用ARP协议能够获取局域网内其他设备的IP地址和MAC地址的映射关系,从而使网络设备之间能够相互通信,所以在嵌入式网络设备通信过程中,ARP协议扮演着十分重要的角色。但是ARP协议是无状态协议,很容易受到恶意设备的攻击和欺骗。通过ARP攻击,攻击方能够阻塞网络,窃取重要信息。所以寻求一种有效的抵御ARP攻击的方法尤为重要。针对这一问题,从网络化嵌入式设备出发,在原有的地址解析协议基础上加以补充,提出了一种能有效抵御ARP攻击的解决方案。
ARP的功能分为两部分:一部分在发送数据包时请求获得目的方的物理地址;另一部分向请求物理地址的设备发送解析结果[2]。通过使用ARP协议,局域网内的设备能够获得给定IP主机的MAC地址。MAC地址唯一的标识每台网络设备,在局域网通信中,每个以太网帧的头部都包含有接收方的MAC地址,因此用于获取接收方MAC地址的ARP协议在网络通信中至关重要。
ARP协议的安全缺陷来源于协议自身设计上的不足。ARP协议工作在局域网中,早期的协议设计者认为局域网是可信赖的,同时为了考虑传输效率,没有加入安全机制。在通常情况下,每个设备的ARP缓存表中都保存有正确的IP地址和MAC地址的映射关系,设备间能够正常通信。但是,当网络中的设备接收到其它设备发送的ARP回应信息后,不论之前是否发送过ARP请求,它自身的ARP缓存表都会得到更新。在这种情况下,如果恶意设备B向设备A发送伪造的ARP回应信息,设备A在接收到ARP回应信息后,ARP缓存就会得到错误的更新。
此外,当向指定的IP设备发送ARP请求时,接收方在接收到ARP请求后,为了方便后期通信,也会更新ARP缓存。这种缺陷,同样也会给恶意攻击设备留下可乘之机。
设备在接收到网络中的ARP请求或者ARP应答后会更新本地的ARP缓存。利用这一规则,恶意设备可以发送包含有伪造IP地址和MAC地址映射关系的ARP请求或者ARP应答,其他设备在接收到该请求或者应答后,由于无法检查地址的正确性,就会错误的更新本地的ARP缓存。中毒的设备在利用错误的缓存表项时,由于表项中的MAC地址不存在,就会造成信息无法送达接收方。
恶意设备监听到局域网中设备A向设备B发送ARP请求后,向A连续多次发送ARP应答信息或请求信息,在应答或者请求信息中,携带有接收方B的IP地址和恶意设备的MAC地址。此时A利用恶意设备发送过来的伪造的IP地址和MAC地址映射进行更新。此后,A向B发送信息时,信息将全部被恶意设备截获。利用这种方法同样也可以欺骗两台主机,使两台主机的流量都流经恶意主机,这样恶意主机就可以获取这两台主机的通信内容。APR攻击是其他恶劣攻击的组成部分,比如DoS攻击,MITM攻击。因此抵御ARP攻击十分重要。
文献[3]提出的Arpwatch监测软件能够监测可疑的ARP信息。当IP地址和MAC地址映射发生改变时,监测软件以电子邮件的形式发出警报。但是它依赖于网络管理员能否准确判别非恶意事件和ARP攻击事件的能力,并且在发生攻击时能否采取及时有效的措施。文献[4]提出的Snort也能进行ARP攻击监测,当攻击发生时能够产生警报通知管理员。但是Snort有很高的误报率。此外以上采用监测软件的方法适合运行在计算机中,由于嵌入式设备的资源有限,难以运行。RFC 2390[5]提出了向某个MAC地址发送“逆ARP”请求来避免MAC地址欺骗攻击。根据响应来判断某个MAC地址是否被克隆。但是这种方法抵御攻击的种类有限。文献[6]提出在交换机中安装OpenWrt,并且在局域网中增设服务器用于保存IP地址和MAC地址,通过修改交换机的固件,使原来广播的ARP请求全部转发到服务器中,通过服务器进行应答。这种方法的缺点在于增设了额外的服务器,增加了网络成本。
以上方法可以分为两类:一类通过运行监控软件来监测ARP攻击,并由管理员作出决策,这种方式依赖于管理员的经验而且不适合应用于嵌入式设备中;另一种是在网络中增设监控硬件,缺点是增加了原有网络的成本。由于嵌入式设备代码透明,开发人员可以十分方便的对网络协议部分进行编写和修改,利用此特点,提出了一种在原有的ARP协议基础上进行改进的方法,通过改进的协议来抵御ARP攻击。
原ARP缓存表项的更新完全依赖于接收到的ARP请求和回应信息,不论接收到的信息正确与否,都将被用来直接更新本地的ARP缓存表。改进方法,从处理ARP请求和回应信息角度出发,借助于原有的ARP请求和回应报文格式,重新设计了ARP请求和回应规则。具体的规则如表1所示。下面对ARP请求和回应规则进行详细阐述。
ARP缓存表的每个表项中设有3个元素:IP地址、MAC地址和生存时间。IP地址和MAC地址是一一对应的关系,生存时间表示每个表项的生存时间,其中网关表项的生存时间设定为T,其他表项的生存时间设定为2T。由于每台设备都在特定的局域网中,因此设备所在网络网关的IP地址和MAC地址也就唯一确定,将设备所在网络网关的IP地址和MAC地址写入设备中,并作为信任地址,确保设备对网关的可靠绑定。
ARP缓存表中每一表项包含有生存时间,当生存时间到期后,主动发送ARP请求。当设备中网关表项的生存时间到期后,所做的处理流程如图1所示。首先向网关发送ARP请求,此时ARP请求以正常的广播形式向外发送,网关收到请求后,发送回应报文。发送设备在接收到ARP回应信息后,利用已保存的网关IP地址和MAC地址,核对帧头中源MAC地址以及报文中源MAC地址、源IP地址是否均为网关地址,若三个地址都正确,则将缓存中网关表项的生存时间更新为T;如果回应的以太网帧中的源MAC地址和网关实际的MAC地址不符,说明有恶意设备克隆了网关的IP地址和MAC地址,如果ARP回应帧中的源MAC地址和源IP地址不匹配,则说明有恶意设备试图修改ARP表项,以上情况都不更新网关表项的生存时间,也不更新IP地址和MAC地址,继续向网关发送ARP请求。
表1 改进的ARP协议规则
图1 网关表项生存时间到期后处理流程图
当设备ARP缓存表中普通表项的生存时间到期后,例如A表项在2T的时间内未得到更新,在2T时间到来时,将发送针对A的单播的ARP请求,如果接收到A的回应请求,则更新ARP表项,否则将A的ARP表项删除。流程如图2所示。
图2 普通表项生存时间到期后处理流程图
通常情况下,如果网络中广播了ARP请求,当发出请求的一方接收到该请求之后,其ARP缓存表项就会得到更新,其他设备即使接收到了ARP请求,也不会进行任何操作。与上述更新ARP缓存表项的方法不同,修改的规则中,对ARP缓存更新的方法进行了重新设计,具体方法如下:每个设备的ARP缓存表中都保存有生存时间为T的网关映射表项,假设A中网关表项生存时间T到期后,A向网关发送ARP请求,由于该请求是广播形式,局域网中所有设备都可以接收到,其他设备在监听到该请求后,判断该请求是否是向网关发送的ARP请求,如果是,则向A发送单播的ARP请求(封装在以太网帧中的单播ARP请求报文格式如表2所示)。设备A在接收到请求后发送ARP回应信息,其他设备在收到ARP回应信息后更新本地缓存表中A对应的ARP表项,并且生存时间更新为2T,如果没有收到ARP回应报文则不做任何处理。对于来自其它设备的ARP请求,该设备在接收到后同样会进行回应,但不更新本地缓存。上述过程的流程如图3所示。
表2 单播ARP请求报文
在ARP缓存表中,网关表项的生存时间为T,其他表项的生存时间为2T。在本规则的设计中,当设备A中网关表项的生存时间T到期后,会以广播形式发送针对网关的ARP请求,此时其他设备中A的缓存表项就会在T时间时得到更新,表项的生存时间更新为2T。实际上每个设备缓存表中每个表项在间隔T时间后都会得到更新,设置2T的生存时间实际上是考虑到设备在收到针对网关的ARP广播请求后,从发送ARP单播请求到最后接收到ARP回应信息要花费一段时间,2T时间留有了充足的裕量。
图3 ARP回应信息处理流程图
与通常情况下接收到任意的ARP请求立即更新缓存不同,在本设计中ARP缓存的更新全部依赖于每个设备向网关发送的ARP广播请求,但是每个设备在接收到ARP请求后,同样会发送回应信息。
为了测试上述方案抵御ARP攻击的能力,将两个EasyArm8962开发板和一台主机接入局域网中。在开发板上将上述方案实现,并通过串口将ARP缓存表中的表项实时显示在上位机中。接入局域网的主机上运行有ARP攻击软件WinArpAttacker,用来对两个开发板进行ARP攻击。通过观察开发板发送到上位机中的ARP缓存表项来对该方案进行测试。
试验中,将两个开发板分别编号为设备A,设备B。A 的IP 地址为10.4.100.154,MAC 地址为00-14-97-F0-07-73;B 的 IP地址为 10.4.100.155,MAC地址为00-24-81-38-9B-08。网关的 IP地址为10.4.100.254,MAC 地址为00-1A -A9-15-FD-42。
WinArpAttacker中的Send功能能够发送内容任意的ARP请求和回应报文。利用该功能分别不间断的发送冒充来自网关和其他主机的ARP请求和回应报文,发送不存在的IP和MAC地址映射表项,通过观察上位机接收到的ARP缓存表项,未发现有异常的表项出现。实验结果如图4、图5所示。
图4 设备A中的ARP缓存
针对嵌入式网络设备易于遭受攻击的问题,从嵌入式设备的角度考虑,利用其代码透明易于修改的特点,在原有的ARP协议基础上,设计出了适用于网络化嵌入式设备的改进版本的ARP协议。通过实验验证,具有一定的抵御ARP攻击的能力,为网络化嵌入式设备抵御ARP攻击提供了一种可行的方案。
图5 设备B中的ARP缓存
[1]David C.Plummer.Ethernet Address Resolution Protocol[DB/OL].SanDeigo,Calif:IETE,1982[June17,012].http://www.rfc - editor.org/pdfrfc/rfc826.txt.pdf.
[2]兰少华,杨余旺,吕建永.TCP/IP网络与协议[M].北京:清华大学出版社,2006.
[3]L. N. R. Group.Arpwatch,the ethernetmonitor program;for keeping track of ethernet/ip address pairings[J/OL].2001[June 17,2012].ftp://ftp.ee.lbl.gov/arpwatch.tar.gz.
[4]Martin Roesch.The Snort:The open source network intrusion detection system[DB/OL].1998[July 20,2012].http://www.snort.org.
[5]T.Bradley.Inverse address resolution protocol[DB/OL].SanDeigo,Calif:IETE,1998[July20,2012].http://www.rfc - editor.org/pdfrfc/rfc2390.txt.pdf.
[6]Ortega A P,Marcos X E,Chiang L D,Abad C L.Preventing ARP cache poisoning attacks:A proof of concept using OpenWrt[A].In:Network Operations and Management Symposium[C].2009:29-31.