导航菜单

一种DDOS攻击的检测方法

李秀婷

(中国电子科技集团公司第二十研究所,陕西 西安 710068)

【摘要】状态协议分析通过对协议执行过程中状态的转换情况进行分析,将网络攻击过程转化为协议状态迁移,可有效检测DDOS等多步骤攻击。依据SYN Flooding的攻击原理,对TCP三次握手时状态转换过程进行分析,运用二叉排序树维护每一个TCP会话连接,并进行状态的转换更新,对异常会话状态进行统计来实现对SYN Flooding攻击的检测。在给出算法描述的基础上并测试验证了其有效性。

教育期刊网 http://www.jyqkw.com
关键词 DDOS;状态转换;SYN Flooding;二叉排序

1分布式拒绝服务攻击DDOS的原理

拒绝服务攻击DOS是黑客通过向网络发送大量数据,消耗系统资源或网络带宽,占用及超越受攻击服务器的处理能力,导致网络或系统不负重荷,停止对合法用户提供正常的网络服务。常见的拒绝服务攻击有SYN Flooding,teardrop,smurf,udp flood等[2]。分布式拒绝服务攻击DDOS是在传统DOS攻击的基础上演变而成的。DOS攻击一般采用一对一的方式,即从一个攻击源攻击一个目标。而DDOS采用多对一的方式,将多个计算机联合起来作为攻击平台,对目标发动DOS攻击,从而成倍的提高拒绝服务攻击的威力。

2一种DDOS检测方法

DDOS攻击通常采用多步骤攻击,我们采用状态协议分析进行DDOS攻击的检测。状态协议分析方法是将网络协议及其攻击看做一个有步骤的、连续的、前后相关的行为过程。我们以针对TCP三次握手建立连接的典型攻击SYN Flooding为例,给出具体的检测方法。

2.1攻击描述

TCP协议通过三次握手成功地在客户机和服务器之间建立连接。首先客户机向服务器发送一个设置SYN标志的TCP报文段,服务器以设置SYN标志和ACK标志的TCP报文段应答,最后客户机向服务器发送一个设置ACK标志的TCP报文段进行确认。这样客户机和服务器之间的TCP连接就建立起来了[3]。TCP三次握手中,如果客户机向服务器发送了SYN报文,服务器在发出SYN和ACK应答报文后,没有收到客户端的ACK报文,此时该连接将保持挂起状态,如果出现大量这样的恶意连接,服务器端将会为了保持一个非常大的半连接列表而消耗非常多的资源,从而导致服务器失去响应,造成SYN Flooding攻击。

2.2算法描述

检测SYN Flooding攻击的算法主要思想是:在限定的时间内,如果处于半连接状态的TCP会话数目大于设定的阈值后就进行报警。算法分为三个主要模块:抓包及协议解析模块,TCP会话树建立维护模块以及会话状态转换模块。

2.2.1抓包及协议解析模块

算法采用winpcap进行数据包的捕获,基于winpcap库捕获数据包的主要函数及流程[4]如图1所示:

数据包被捕获后进行协议解析,以得到每个数据包的具体协议信息。数据包的解析算法严格按照TCP/IP协议规定,依次分解出数据链路层,网络层,传输层各层协议首部,将结果存入预先定义的结构体中,协议解析的流程如图2。

2.2.2TCP会话树建立维护模块

对于客户端发起的每一个TCP会话连接,使用二叉排序树来存贮会话信息,每个会话节点都包括了此会话的IP地址、端口、会话状态、时间信息和唯一标示该节点的会话号。当系统收到一个TCP会话数据包后,首先根据会话的源、目的IP地址和端口来查看树中是否已存有此会话连接信息,如果没有则新建一个会话节点加入到会话树中,树中第一个节点的会话号为1,此后每增加一个会话节点其会话号都加1;如果已有此连接会话,则转入会话状态转换模块,本模块的执行过程如图3。

1)会话节点的加入和搜索

当收到新的待检测的数据包时,将会在当前的TCP会话树中根据包的源和目的地址信息查找相应的会话连接,若不存在则新建一个会话节点记录此连接,同时加到树中相应的位置。在加入会话节点时,与己有会话节点的服务器端IP地址,客户端IP地址,服务器端端口号及客户端端口号进行逐个比较,按照左小右大的原则,如果要加入节点的地址信息小于己有节点,则加入到此节点的左子树;如大于则加入到右子树;如果要加入节点的服务器与客户端的IP地址和端口号与已有节点完全相同,则为找到相应的会话连接,不加入新节点,转入会话状态转换模块。

由于我们根据数据包的IP地址和端口号进行节点的插入,在进行某一会话节点的搜索时可以使用二分法减少搜索时间,若搜索的节点地址小于当前节点,则搜索其左子树,否则搜索右子树,从根节点开始直至搜索成功。

2)会话节点的删除

当一个会话超时或完成三次握手成功建立TCP连接后,将该会话节点删除,使得TCP会话树中不存在无用的数据。删除会话树中的一个节点后仍要保持节点中地址信息的有序性,分三种情况讨论:

假设被删除的节点为*p,其双亲节点为*f,PL、PR分别表示其左子树和右子树。

(1)如果PL、PR均为空树,直接修改*f节点指针即可。

(2)如果*p节点只有PL或只有PR,并且*p为*f的左子树或右子树,此时只需令PL或PR直接成为*f的左子树或右子树。

(3)若PL、PR均不为空,此时不能如上简单处理。先中序遍历二叉树,得到中序遍历序列中*p的直接前驱*s,此时令PL为*f的左子树,PR为*s的右子树。

2.2.3会话状态转换模块

根据三次握手建立连接的过程构造状态转换图,如图4所示。q0为初始状态,客户端向服务器发送了一个SYN报文后转向状态q1,服务器向客户端发送了SYN和ACK报文后转向状态q2,客户端向服务器发送ACK报文后转向终止状态q3,完成了连接的建立。指定时间间隔阈值alert-t及连接数阈值alert-n,在某一TCP服务器的所有TCP会话连接的状态序列中,若在alert-t时间内大于等于alert-n个会话连接处于q2状态,则认为发生了SYN Flooding攻击。

当收到一个新的数据包时,找到相应的会话节点,判断接收包的TCP标志位和会话的当前状态依据状态转换图进行会话状态转换和时间更新,如果完成三次握手连接就从会话树中删除该会话节点,并对会话树中处于q2状态的会话数目进行统计,判断是否报警。

在统计处于q2状态的会话节点数目时需要定义一个时间链表,每当一个处于q1状态的会话收到相应数据包转向q2状态时,将该会话节点的会话号和当前时间信息存入时间链表中,当时间链表中的节点数目大于alert-n时,检查时间链表中第一个节点和最后一个节点的时间差,若小于等于alert-t则报警。当一个会话的三次握手完成后,根据会话号在时间链表中找到对应节点,将其删除。

3测试结果分析

在实验室子网中采用SYN Flooding攻击工具向服务器发起攻击。第一次采用的攻击源为192.168.1.33,发动攻击50次。第二次采用的攻击源为实验室子网中的五台不同主机,每台机器同时向服务器发动攻击50次。得到检测结果如下表:

通过检测结果可以看出,当攻击源只有一个时,本算法可以有效检测出网络中存在的SYN Flooding攻击,当攻击源有多个时,即存在有DDOS攻击,本算法也可以有效检测出攻击,但检测率稍有下降,主要原因在于存在有大量攻击时,TCP会话树变得过于庞大,从而影响了检测效率。此时应调整时间阈值以及判断TCP会话是否超时的时间值使得检测更加准确。

4结束语

本文提出了采用状态协议分析的方法来检测DDOS攻击,从最典型的DDOS攻击SYN Flooding入手,论述了算法的具体实现过程,这种方法主要采用协议实现过程中的状态信息,将网络攻击过程转换为协议迁移过程,当检测到状态转换出现异常时进行报警。实验结果表明算法还存在漏报,并且只考虑了一种攻击,今后的工作重点将放在对其他DDOS攻击进行会话状态的分析,并进一步提高检测效率。

教育期刊网 http://www.jyqkw.com
参考文献

[1]景蕊,刘利军,怀进鹏.基于协议分析的网络入侵检测技术[J].计算机工程与应用,2003(36):128-133.

[2]戚智见.分布式拒绝服务攻击检测与防范技术的研究与实现[D].东北大学, 2006.

[3]W RichardStevens.TCP/IP 详解卷1:协议[M].机械工业出版社,2000:176-191.

[4]Packet Capture With Libpcap and Other Low Level Network Tricks[OL]. http://www.cet.nau.edu/~mc8/Socket/Tutorials/section1.html.

[责任编辑:邓丽丽]

下载文本