, ,
(湖北大学 计算机与信息工程学院, 武汉 430062)
分布式拒绝服务攻击(distributed denial-of-service attack, 简称 DDoS)是多年以来互联网最具有威胁性的攻击之一,DDoS攻击是指攻击者通过傀儡主机,消耗目标攻击目标的计算资源,阻止目标为合法用户提供服务。近年来物联网设备的广泛使用,物联网安全随之成为一个重要的问题,如今基于Linux内核的物联网设备已经变成了网络攻击者青睐的目标[1]。Rob Graham在个人SNS上展示了自己的网络摄像头在几十秒内被恶意软件感染并发起DoS攻击。2016年10月份欧洲因为嵌入式设备的DDoS攻击造成大面积断网。
DDoS防御根据部署位置可以分为源端网络防御、中间网络防御和末端网络防御三种类型。根据网络结构分类,DDoS防御可以分为网络层的防御和应用层的防御。末端网络防御主要是在被攻击的主机上建立防御措施。由于对于应用层的攻击较多,大多数研究基于各种机器学习算法,训练出一套区分正常流量和DDoS流量的模型,使用此模型进行对DDoS攻击的检测[3-5]。对于网络层的攻击,主要是通过被攻击端设备和主要网络设备对网络流量的变化进行监控和检测,并使用大量网络设备资源对攻击流量进行控制[6-8]。王睿提出一种将在应用层对DDoS流量检测技术和在网络层利用网络设备的回溯拦截攻击流量结合的方法[2]。在源端网络上,早期Mirkovic等人设计了D-WARD系统,可以在攻击端(僵尸网络)基于出入流量比例、流量速率和连接数量等信息判断此网络是否正在进行DDoS攻击,从而进一步控制流量[9-10]。于明等人说明了在源端网络匀速发送和组群式发送下 DDoS 攻击流的可检测性[11]。
DDoS作为经久不衰的互联网攻击手段,正是因为它的成本不高并且技术难度不高,但是造成的危害却极大。DDoS的攻防可以说是一场互联网资源的斗争,大多情况下被攻击的服务商只能通过投入大量的金钱去购买网络资源来填补被攻击资源的空缺。而在被攻击端的检测和防御手段也需要使用大量的计算设备,在回溯的方法中甚至还要动用ISP的设备来帮助控制攻击流量。在当今物联网设备大规模运用在生活中,大多数普通用户的互联网安全意识还不够健全的情况下,本文围绕僵尸网络,根据DDoS攻击的特征,提出一种成本相对低廉的DDoS源端的防御方法。
在发生DDOS攻击时,无论是网络层的攻击还是应用层的攻击,一个显著的特征是攻击流量都指向同一个IP地址,并且发向被攻击IP地址的流量速率增大。一般而言这种特征会持续一段时间直到被攻击主机瘫痪无法提供服务为止。在DDoS攻击中,攻击工具的编写者一般会使用伪造源地址的方法来混淆目标主机的判断,导致目标主机无法及时发现并防御攻击。而在源端网络中,可以在边缘路由器检测流量特征,边缘路由器可以有效提前过滤掉所有来源不属于自身网络的数据包。
熵主要指体系的混乱程度,它能够度量集合的离散程度。信息熵定义如下:
定义1:IP={ip1,ip2,…,ipn}表示单位时间内网络报文目的IP地址集合。
定义2:P={p1,p2,…,pn},pi表示第i个地址的概率,P为ip地址的概率分布。
定义3:E=-∑pilnpi表示单位时间内网络报文的目的ip地址的熵。
DDOS发生时,网络报文目的地址集中,单位时间内被攻击主机被访问的频率大大增加。而在正常情况下,网络报文目的IP应该是分散的而且熵值趋于稳定,波动较小。对荷兰的某大学宿舍区连向大学的核心网络的匿名数据集进行测试,该网络上约有2000名用户连接,每秒的报文数量达到2000个左右。图1是该网络上的报文IO速率统计图,由图3可以得知在一个局域网内,正常情况下网络流量速率是基本稳定的。在此数据集里,每隔10秒取该10秒内的流量数据,共取10段数据,计算其目的ip地址的熵值,其中每段数据的目的ip数量大约为500个,如图2所示。发现在正常流量环境下的目的IP的熵值没有大幅波动。
图1 网络上的IO统计
图2 正常流量环境下的目的IP熵值变化
在源端网络中,使用ip熵策略发现某个目标ip地址的流量突然集中,只能说明这属于可疑流量,还不能判断为攻击。造成ip熵减小的可能性除了攻击以外,还可能是流媒体传输、文件上传、p2p上传等大流量的操作。所以还需要对可疑流量进行进一步的分析。
根据TCP/IP协议,TCP传输的一端使用IP地址和端口号作为唯一的身份标识,客户端和服务端使用IP地址:端口号对作为一个连接的唯一标识,如图3所示。
图3 TCP连接的唯一标识
Linux内核的Netfilter子模块Connection Track中,用一个结构体描述一个连接, 每个连接都分为original和reply两个方向,每个方向都用一个元组(tuple)表示,tuple中包含了这个方向上数据包的信息,如源IP、目的IP、源port、目的port等。而对于源端DDOS检测系统而言,连接都是从普通终端发起,到服务器或被攻击终端,所以在这里可以不用区分连接的方向。在内核中,一个连接的可能状态可以被定义如下:
NEW:一个新建的连接。这个状态表明这个报文是有效的,假如Netfilter只看到一个方向上的流量(如,Netfilter没有看到任何回复报文),那么这个连接就处于NEW状态,也就是这个报文属于一个有效的初始化序列(如,在一个TCP连接中,收到一个SYN报文)。
ESTABLISHED:连接已经被建立了。换句话说,如果连接处于这个状态,就表明Netfilter看到了一个双向的通信。
RELATED:这是一个期望的连接。
INVALID:这是一种特殊的状态,来描述那些没有按照预期行为进行的连接。系统管理员可定义一些规则来记录这些报文 或者丢掉这些报文。
对于源端DDoS检测系统,我们只需要关心连接是否正常建立,所以只需要关注NEW和ESTABLISHED这两个状态。
我们对于每一个需要检测的报文,使用IP地址和端口作为特征进行哈希,使用散列表来存储对每一个连接的跟踪情况。
SYN flood或称SYN洪水、SYN洪泛是一种拒绝服务攻击,起因于攻击者发送一系列的SYN请求到目标系统。
当客户端试着与服务器间创建TCP连接时,正常情况下客户端与服务器端交换一系列的信息如下:
1)客户端通过发送SYN同步(synchronize)信息到服务器要求创建连接。
2)服务器通过响应客户端SYN-ACK以抄收(acknowledge)请求。
3)客户端答应ACK,连接随之建立。
TCP的三次握手是每个使用TCP传输协议创建连接的基础。
SYN flood攻击就是利用TCP建立连接的三次握手的漏洞,攻击端向被攻击端发送SYN连接请求后,不再向被攻击端发送ACK报文。被攻击端接收到SYN请求后,会建立一个半开通连接的缓存。攻击端不断地向被攻击端以这种形式发送报文,最后将会导致被攻击端资源耗尽。
根据近期在互联网上造成极大影响的物联网设备病毒程序mirai的源码[14],可以得知一个典型的SYN flood的实现方式与细节。mirai中使用linux的原生套接字(SOCK_RAW类型),从系统底层直接向服务器发送TCP SYN报文,并完全不做后续的处理,也就是不接收服务器返回的SYN+ACK报文。
Mirai TCP flood攻击模块关键代码如图4所示,其主要目的在于:
1)设置syn标志位为1
2)随机生成一个源IP地址
3)随机生成一个目的端口
1BOOLsyn_fl=attack_get_opt_int(opts_len,opts,ATK_OPT_SYN,TRUE);iph->saddr=rand_next();tcph->dest=rand_next();23
图4 mirai TCP flood关键代码
根据源代码得知,发生SYN flood攻击时,可以检测到很多只有一次发送SYN的TCP数据报。
一个包捕获机制包含三个主要部分:最底层是针对特定操作系统的包捕获机制,最高层是针对用户程序的接口,第三部分是包过滤机制。数据包常规的传输路径依次为网卡、设备驱动层、数据链路层、IP 层、传输层、最后到达应用程序。而包捕获机制是在数据链路层增加一个旁路处理,对发送和接收到的数据包做过滤/缓冲等相关处理,最后直接传递到应用程序。在linux系统上libpcap是一个典型的包捕获库。
伯克利数据包过滤器 (BPF, berkeley packet filter)是Libpcap使用的高效的数据包捕获机制。BPF主要由两部分组成,一是网络转发部分,二是数据包过滤部分。网络转发部分从链路层捕获数据包,并把它们转发给过滤部分;数据包过滤部分从转发部分接收过滤规则相匹配的网络数据包。
在源端网络的出口网关上部署流量检测系统,在使用linux操作系统的网关上,很容易实现对流量的监控以及自定义操作,如图5所示。同时出口网关也很容易判别来自内部网络的伪造源地址数据包,可以及时有效地进行拦截。
图5 在出口网关上部署sniffer
Linux内核网络栈依赖Iptables/Netfilter框架,任何经过Linux内核的数据包必须通过这套框架的规则判定,决定数据包的丢弃或是通过,因此在内核中拦截数据包具有绝对的实时性,不会漏放过任何一个报文。经过试验,在这套框架中增加自定义的规则,不适合进行大量的运算,否则会导致Linux内核的崩溃,但是对IP地址的过滤可以很高效的执行。因此我们可以使用这套成熟的框架过滤伪造的源地址。对于路由器而言,数据包在内核中的传输方向是INPUT链 -> FORWORD链 -> OUTPUT链,故伪造源地址的过滤规则应直接安放在INPUT链上可以使效率达到最高。具体方法如下:
获取源端网络的硬件端口ethi;
获取该端口的网络地址和掩码ipi,maski;
在INPUT链中增加规则:eth端口的ipi,maski数据包放行,余下的数据包全部丢弃。
在过滤掉第一批伪造源地址的数据报后,剩下的都是规则上合法的数据包,因为本文的分析系统构建在Linux用户空间上,所以这些数据包不会被及时拦截,但是会进入用户空间进行计算分析后延迟拦截。
首先是系统的初始化,需要运行较长一段时间获得该网络环境下数据包的IP熵的平均值。接下来开始对异常流量进行检测,计算一段时间内目的IP的熵并和平均值进行比较,如果发现低于平均值m倍,则认定为有可疑流量的发生,取该时间段频次最高的三个IP地址进行连接跟踪。由于网络数据包经过网关的速率很高,根据libpcap库的源码,在每一次捕获到数据包后的调用处理是单线程的方式,由于需要对数据包中的元组进行散列运算和对比,需要耗费一定的时间,单线程会对后续的流量处理造成阻塞,所以这里采用多线程的方式,如图6所示。
图6 多线程处理数据包
实验采用普通办公室的网络环境,约20台正常使用的设备连接同一个路由器。该路由器由Raspberry Pi 3B改装而成,该设备拥有ARM Cortex-A53 1.2 GHz 四核处理器,1 GB运行内存,一个10/100M自适应以太网接口,802.11n WiFi无线网卡,具有良好的性能,安装Openwrt系统,可以作为无线路由器使用。
实验环境拓扑如图7所示,Router0为安装系统的路由器,Server作为被攻击的服务器,两个局域网通过Router1接入互联网。使用DDoS攻击程序改写自Mirai源码的TCP SYN attack部分,分为随机源IP地址和使用真实源IP地址两种攻击方式。
图7 实验环境拓扑
在工作时间,测试到整个办公室的网络报文上传速率为800 Packets/s,将系统设置为每隔一秒计算一次目的IP熵值,系统运行5分钟后,得出这5分钟内的平均目的IP熵值为3.88,每秒计算一次目的IP熵值的上下波动不超过20%,在
不开启后续连接跟踪系统的情形下使用攻击程序的真实源IP地址方式向Server发起SYN流量,在测试中,攻击程序1秒内可以发送高达30000个数据包,此时的目的IP熵值降低至0.89,故在此环境中,人为设定当目的IP熵值达到1.00以下时,判定为初步检测到可以攻击流量。
后续开启连接跟踪模块,并设定目的IP熵值的临界点为1.00,测试结果如下。
表1 攻击检测延迟测试
从测试中可以看出,系统对伪造源IP地址的DDoS攻击可以很好的进行拦截,但是对真实源IP地址的DDoS攻击的检测有延迟。由于延迟只有数秒,因此在检测出攻击后,系统通过调用Netfilter模块在内核层面上拦截,并清空自身所使用的资源,对路由器后续正常工作基本没有影响。
本文提出在源端网络上利用网络流量目的IP熵的特性检测可疑的DDoS流量,并针对可能的误报行为提出使用连接跟踪的方法对可疑流量的进一步分析,发现TCP层的SYN flood攻击流量的方法。通过实验小规模局域网下某台机器向互联网上某台机器发送SYN攻击的情形,证实本方法的可行性。
[1] 李柏松. 物联网僵尸网络严重威胁网络基础设施安全[J]. 信息安全研究, 2016, 2(11): 1042-1048.
[2] 王 睿. 一种基于回溯的 Web 上应用层 DDOS 检测防范机制[J]. 计算机科学, 2013, 40(11A): 175-177.
[3] 王 进, 阳小龙, 隆克平. 基于大偏差统计模型的 Http-Flood DDoS 检测机制及性能分析[J]. 软件学报, 2012, 23(5): 1272-1280.
[4] 王风宇, 曹首峰, 肖 军, 等. 一种基于 Web 群体外联行为的应用层 DDoS 检测方法[J]. 软件学报, 2013, 6.
[5] 杨宏宇, 常 媛. 基于 K 均值多重主成分分析的 App-DDoS 检测方法[J]. 通信学报, 2014, 35(5): 16-24.
[6] 罗 华,胡光岷,姚兴苗. 基于网络全局流量异常特征的DDoS攻击检测[J]. 计算机应用,2007(2):314-317.
[7] Chen Y, Hwang K. Collaborative change detection of DDoS attacks on community and ISP networks[A].Collaborative Technologies and Systems, 2006. CTS 2006. International Symposium on. IEEE[C]. 2006: 401-410.
[8] Yuan J, Mills K. Monitoring the macroscopic effect of DDoS flooding attacks[J]. IEEE Transactions on Dependable and Secure Computing, 2005, 2(4): 324-335.
[9] Mirkovic J, Prier G, Reiher P. Attacking DDoS at the source[A].Network Protocols, 2002. Proceedings. 10th IEEE International Conference on. IEEE[C]. 2002: 312-321.
[10] Mirkovic J. D-WARD: source-end defense against distributed denial-of-service attacks[J]. 2003.
[11] 于 明, 王东菊. TCP DDoS 攻击流的源端网络可检测性分析[J]. 山东大学学报 (理学版), 2012, 47(11): 50-53.
[12] 江 健, 诸葛建伟, 段海新, 等. 僵尸网络机理与防御技术[J]. 软件学报, 2012, 23(1): 82-96.
[13] https://www.simpleweb.org/wiki/index.php/Traces Pcap_Traces[EB/OL].
[14] https://github.com/jgamblin/Mirai-Source-Code[EB/OL].