APP下载

基于Linux的ARP检测与防御系统

2018-06-29陈军孙义博岳婷

网络空间安全 2018年1期

陈军 孙义博 岳婷

摘 要:ARP协议,即地址解析协议,由于协议存在的漏洞导致ARP欺骗几乎无法避免。为探讨如何解决这一问题,通过理论研究和实证,论文从主动和被动两个模块提出了ARP检测与防御的方法。主要思路是利用基于Linux的开源路由器系统OpenWRT定制路由器,对网络流量进行监测,一旦主机网络流量达到一定阈值时,通过对其进行检查来判断源主机是否遭受ARP欺骗,以维护局域网的安全运行。

关键词:ARP检测与防御;主动检测;被动检测与防御;Netfilter;OpenWRT

中图分类号:TP393 文献标识码:A

ARP detection and defense system based on Linux

Abstract: ARP, the Address resolution protocol, owing to the loopholes of the protocol, leads to ARP spoofing almost impossible to avoid. In order to explore how to solve this problem, through theoretical research and empirical analysis, this paper puts forward ARP detection and defense methods from two modules of active and passive. The main idea is to use the open source router system customized OpenWRT router based on Linux, monitoring the network traffic.Once the host network traffic reaches a certain threshold,,we will examine and determine whether the host is deceived, to maintain the safe operation of LAN.

Key words: ARP detection and defense; active detection; passive detection and defense; netfilter; openWRT

1 引言

在局域网中,每台计算机都拥有两个地址,即IP地址和MAC地址。实际应用时,若想根据一台机器(主机或路由器)的IP地址找出该台机器相应的硬件地址(MAC地址),则需要使用地址解析协议ARP。对于每台装有TCP/IP协议的计算机,均存在一个ARP缓存表,表里存放着对应的IP地址和MAC地址。同时,计算机中的ARP缓存表是动态变化的,会根据所收到的ARP应答不断地进行更新,以保存最近的IP地址和MAC地址。然而,对于大多数操作系统,它不会去判断自己是否发送了ARP请求,而会根据所有接收到的ARP应答对ARP缓存进行更新,这便对计算机造成了潜在的安全威胁。攻击者利用这一漏洞,并伪造IP和MAC进行ARP欺骗,对攻击目标(受害方)实施恶意攻击,截获通信过程传输的信息。因此,为了更好地保障网络的安全,需要在攻击者对源主机成功实施ARP欺骗之前,检测到ARP欺骗并采取防御措施。

2 ARP欺骗

2.1 ARP欺骗原理

数据包在以太网中传输,寻址依据是计算机的物理地址(MAC地址)。ARP协议就是通过目的主机的IP地址查询其MAC地址,动态生成ARP缓存表,从而使通信顺利进行。因此,若想要得到目的主机的MAC地址,首先,需要知道其IP地址。而ARP协议是一种无状态协议,源主机收到ARP应答包之后,不会主动验证它的真实性,而是直接将其中的MAC地址更新到ARP缓存表中。因此,攻击者可以通过发送大量的ARP欺骗报文来淹没正常的ARP报文,使得源主机在接收ARP应答包后,将欺骗报文中的MAC地址更新到源主机ARP缓存表中,以达到后续实现ARP欺骗的目的。

2.2 ARP欺骗实现

假设主机C已经知道主机B的IP地址,则主机C可通过伪造成主机B的IP对主机A发起ARP欺骗。假设当前情况下,主机A的ARP缓存记录中没有主机B的记录,则主机A将在局域网中广播包含主机B IP的ARP请求,此时事先将自己的IP伪造成主机B的IP的主机C也能接收到ARP请求包,并对主机A做出应答,主机A在接收到來自于主机C的ARP响应报文时,不会对该报文的正确性进行核实,而会直接将ARP应答包里的MAC地址更新到自己的ARP缓存表中。此后,主机C便可监听主机A和主机B之间的通信,甚至阻断主机A和主机B之间的通信。

3 ARP检测与防御

按照检测ARP欺骗的方式,将检测系统分为两个模块,即主动模块和被动模块。

3.1 ARP检测

3.1.1 主动检测

程序从计算机中将ARP项导入内存,根据ARP项中的IP地址向局域网发送ARP 请求包,然后通过Windump、Snifferpro等抓包软件,抓取 ARP 的Reply包,通过分析ARP应答包里的信息行来判断源主机是否遭受ARP欺骗。如果最后的MAC地址并非网关的真实MAC地址,则说明存在ARP欺骗,而且进行ARP欺骗的主机的MAC地址即为ARP应答包里的MAC地址。这种主动检测源主机是否遭受ARP欺骗的方法简单有效,但必须在局域网内部听包,而且人的工作量也较大。

3.1.2 被动检测

断网时,删除主机已经存储的ARP缓存,减少主机遭受ARP攻击的概率。程序在计算机联网的瞬间获取新的网关IP地址和MAC地址映射对,将其存储在文件中并且对其进行加密,之后不停地抓取来自网络的ARP请求包。

对于主机端,一定时间内,若出现包含同一源IP地址或者同一源MAC地址的ARP请求包超过某一特定阈值或者出现大量包含不同IP和MAC的ARP请求包的情况,则系统将发出警示,触发内核层过滤驱动,对ARP请求包实施拦截;若发现与网关的IP地址相同但是MAC地址不同,则使用存储在文件中的ARP项对被污染的ARP项进行覆盖,保证ARP项的正确性。

对于路由器端,通过对ARP请求包的流量监测来判断源主机是否遭受ARP欺骗。若来自同一IP地址或MAC地址的ARP请求包或者应答包,以及去往同一IP地址或MAC地址的ARP请求包或者应答包的数量剧增,则意味着可能存在ARP欺骗。

3.2 ARP防御

3.2.1主动防御

最常见的方法是对IP和MAC做静态绑定。

在源主机的ARP中设置静态地址映射记录,这个记录是永不过期的,因此源主机在向目的主机发送数据前不再需要通过广播ARP请求,可直接通过查询ARP静态记录来获得目的主机的MAC 地址。若此時攻击者仍用伪造的MAC地址对源主机做出应答,源主机将不会更新ARP 缓存的静态记录。显然,静态绑定的方法存在局限性,这种方法要求目的主机的IP地址永远不变,这对绝大多数计算机来说是无法实现的。一旦IP地址出现变动,就需要及时更新,工作量大而且繁琐,这对很多人来说都是一件不可行的事情。

3.2.2 主机端的被动防御

主机端的被动防御依靠使用Netfilter钩子函数进行实现驱动过滤。

Netfilter所提供的Hook函数管理机制,可以实现数据包过滤和基于协议类型的连接跟踪等功能。在ARP的处理过程中有三个hook,分别是NF_ARP_IN,NF_ARP_OUT,NF_ARP_FORWARD。这三个Hook允许用户注册钩子函数,然后实现自己的功能。若要过滤或者拦截ARP数据包,必须要从arp_rcv函数进入,才会走这三个Hook的钩子函数。

当收到应用层传来的通知时,用所注册的钩子函数对ARP包进行判断,并与规则比对后,接收符合规则的ARP包,其余的一律丢弃,从而完成包的过滤。

3.2.3 路由器端的被动防御

OpenWRT是Linux的嵌入式发行版本。OpenWRT支持多种处理器架构,且有多达3000多种软件包,从工具链(Toolchain),到内核(Linux Kernel),到软件包(Packages),再到根文件系统(Rootfs)。一个简单的make命令就可以方便、快速地定制出一个具有特定功能的嵌入式系统,用于制作固件,极其方便。

无线路由器是无线局域网的中枢,所以无线路由器必须在系统的控制范围之下,只有这样系统的安全才能保证。无线路由器承担着给局域网中主机分配IP的职能,相当于DHCP服务器,自然会有局域网中每一台主机的IP、MAC地址映射,因此,可以据此过滤ARP包。由于频繁检测会降低转发效率,所以应该在主机网络流量达到一定阈值时,对其进行检测。

(1)针对同一IP或同一MAC地址,是否大多数数据包都是ARP请求包或者应答包。若是,拒绝转发数据包。

(2)ARP请求包的源ARP项是否与其在路由器中留下的信息相同。若不同,将其丢弃。

在此基础上,可以基于OpenWRT定制过滤ARP包的功能模块。将过滤函数及过滤规则编写进入OpenWRT的内核文件,编译之后将其移植到路由器上。

4 算法实现

目前,系统已经实现了主动检测模块。被动检测和被动防御模块的结构已经明确,正在着手解决。其中主动检测部分使用Libpcap库,进行网络流量分析。主机端被动检测模块则写成守护进程的形式,从计算机一开机,就开始运行(同时由于只抓ARP包,所以平时根本不会担心占用系统太多资源),不用耗用人力资源,减少成本。被动防御由主机端和路由器端的双重防御组成,主机端被动防御使用Netfilter框架,使得代码量减小,同时更加贴合系统底层,路由器端被动防御模块是基于OpenWRT的开发的,这使得对路由器硬件本身的要求并不严格,减少了系统的布置成本,也是模块定制更加自由。

为了更清晰地现实系统对规则的使用逻辑,给出如下伪代码:

//主机网络流量被动检测和防御模块

ger_gateway(); //获取网关ip、mac地址映射并进行存储

capture_packet(); //开启抓包线程,抓包并存储check();

//开启检测线程,检查所抓包

//的存储若有过期的,进行清理

//若发现网络异常,则报警,

//通知内核层进行过滤,并且使用

//getgateway()获得的ip、mac

//地址映射与arp缓存进行比对,

//若出现差异,使用其进行覆盖

//路由器网络流量被动检测模块

if(size_measure_max() == true) //流量检测,如果流量较大,则检测是

filter() //否符合过滤规则,若符合,则对其ARP包进行过滤。

5 结束语

本文通过对ARP包的定性分析和定量分析,检测局域网中是否存在ARP欺骗,并提出了相应的防御方案。一方面,以主机端和网络转发端结合的方式对ARP包进行过滤,减轻了主机端单独过滤ARP包的压力。另一方面,以路由器为出发点,基于OpenWRT定制过滤ARP包的功能模块,当攻击者以洪泛的方式进行ARP攻击时,路由器将拒绝对拥有相同源ARP项、相同目的ARP项或者相同目的IP地址的绝大多数数据包的转发。

互联网在满足人们信息需求的同时,也引起了很多网络安全上的问题。一些组织或者个人出于某种特殊目的,故意侵犯他人的隐私甚至国家机密,对网络空间进行恶意攻击和破坏。因此,需要不断地去研究更好的防御手段,来维护网络空间的安全。

参考文献

[1] 史隽彬,秦科.ARP攻击现状分析及一种应对ARP攻击的方法[J].陕西理工学院学报(自然科学版),2013,29(02):45-49.

[2] 朱钱广.基于深度包过滤的网络入侵检测系统的设计与实现[D].东华大学,2010.

[3] 徐亮,梁华庆.Netfilter防火墙抗ARP攻击的防御特性设计[J].科学技术与工程,2009,9(13):3889-3892+3900.

[4] 孙名松,刘鑫,耿姝.基于Linux的ARP防火墙的研究与实现[J]. 自动化技术与应用,2008,(12):63-66.

[5] 林宏刚,陈麟,王标,吴彦伟.一种主动检测和防范ARP攻击的算法研究[J].四川大学学报(工程科学版),2008,(03):143-149.

[6] 王燕,张新刚.基于ARP协议的攻击及其防御方法分析[J].微计算机信息,2007,(36):72-74.

[7] 邱浩.带入侵检测的Linux个人防火墙的研究与实现[D].贵州大学,2006.

[8] 方山. 网络防火墙状态检测技术的研究与实现[D].暨南大学,2003.

[9] 邢金阁,刘扬. ARP欺骗攻击的检测及防御技术研究[J].东北农业大学学报,2012,43(08):74-77.

[10] 李筱楠,刘洋,李德雄.ARP攻击防御与检测[J].石家庄铁路职业技术学院学报,2008,(01):56-59.

[11] 邓婉婷.校园网ARP攻击检测系统设计与开发[D].电子科技大学,2011.

[12] 李启南.基于FARIMA的ARP欺骗入侵检测[J].计算机工程,2011,37(02):139-140+142.

[13]陆炯.一种OpenWrt物联网家庭网关服务质量的研究与设计[D].西安电子科技大学,2014.