一种面向SDN的跨平面协作DDoS检测与防御方法
2020-11-14曹永轶金伟正
曹永轶,金伟正,吴 静,罗 威,朱 博
(1.武汉大学 电子信息学院,武汉 430072; 2.中国舰船研究设计中心,武汉 430064)
0 概述
分布式拒绝服务(Distributed Denial of Service,DDoS)是一种具有高破坏性的网络攻击行为。DDoS攻击者通过多个分布式攻击源伪造出海量虚拟IP地址,并对服务器发起访问式攻击,消耗大量的服务器资源,导致受害服务器崩溃而无法响应正常用户的服务请求[1],这种在互联网发展初期已存在的网络安全威胁,至今仍是互联网上最流行、效率最高的攻击方式[2]。
软件定义网络(Software Defined Network,SDN)作为一种新兴的网络模式[3],引起了学术界和工业界的关注。SDN从底层网络设施中抽象出控制器,并解耦控制平面和数据平面,使得网络状态具有逻辑集中的特性[4]。SDN的出现提高了网络的可管理性、可扩展性、可控性和动态性[5]。然而,随着SDN应用的普及,SDN安全性问题成为SDN领域的关键研究课题之一。
由于SDN控制器灵活、可扩展以及集中控制的特点,在SDN下的DDoS攻击检测多数是在控制平面上进行的。传统的经典检测方法是在控制平面上进行熵值计算,从而判断流量中源IP的离散程度,并利用伪造数据包导致DDoS攻击流量中源IP地址复杂多样性的特点来检测出异常流量[6]。该检测系统的检测精度取决于熵的阈值,而阈值的选择是通过调整实验中参数大小而得到,因此该方法具有一定的片面性。还有一类方法是利用控制平面可扩展的计算能力,在控制平面的数据包头中提取DDoS流量的关键特征,利用基于概率的统计方法或机器学习算法进行检测[7]。文献[8]提出PacketScore方法,该方法对数据包包头中的某些属性值分布进行分析,并使用贝叶斯定理对数据包进行评分。PacketScore具有相当高的过滤精度,且易于部署,但由于其得分与攻击强度有关,因此不适用于处理大量攻击流量。此外,它在评分方面存在一些代价高昂的计算操作,导致处理效率低下,且难以及时防御。文献[9]提出一种基于支持向量机(Support Vector Machine,SVM)算法的网络入侵检测系统,但该系统存在检测时间较长、检测效率低等问题。文献[10]提出一种基于深度学习的多矢量DDoS检测系统,在SDN控制器上实现基于SAE模型的检测,对于从网络流量包头派生出来的大量特征,利用深度学习对其进行特征降维与分类。在控制平面上基于机器学习的DDoS检测方法可以达到较高的准确率,但普遍存在较高的控制器CPU消耗以及南向接口通信开销。
由于上述DDoS攻击检测机制均是基于控制平面,每次攻击流量到达控制器时均会产生大量的南向接口负荷以及系统开销,因此这些方法普遍存在检测时延长、检测开销大以及对新型DDoS攻击检测能力较弱等问题[11-12]。在数据包到达控制器之前,其转发在数据平面上的交换机中进行,文献[13]提出一种新的思路,即在数据平面上利用OpenFlow交换机CPU计算熵值,从而实现DDoS攻击检测,但是由于熵值仅代表源IP离散性的一个特征,因此该方法的准确率较低。
本文没有从单平面角度解决上述问题,而是采用一种跨平面协作方法来优化面向SDN的DDoS攻击检测方法。该方法提取更多的适合数据平面计算的DDoS流量特征,并将部分轻量级的DDoS检测机制下发给数据平面,同时保留控制平面的细粒度检测。经过数据平面的检测与过滤,到达控制平面检测的流量会减少,从而降低了南向接口通信开销。同时,本文方法除了利用数据平面以及控制平面两级检测之外,还采用了防御策略以及长期有效的黑白名单机制。
1 机制描述
在SDN架构中,数据包在被控制平面捕获之前,其是在数据平面上转发的,为了提高DDoS攻击检测的性能以及减少检测延迟,在传统的控制平面检测基础上,还应该考虑在数据平面上部署过滤功能。实际上多数支持OpenFlow协议的OpenFlow交换机或混合交换机均由一个或多个正在运行的CPU组成,且这些CPU具有丰富的计算资源,然而目前还未得到充分利用[14]。跨平面协作DDoS防御系统体系结构如图1所示,根据DDoS流量的显著特征,在交换机CPU上执行轻量级的数据平面检测算法。由于在数据平面上采用较为轻量的算法只能进行粗过滤,因此当数据平面检测产生告警后,将数据包包头信息发送至控制平面进行细粒度检测,得到更加准确的结果,数据平面的提前过滤为控制平面的检测减小了压力,这种跨平面两级协作的方法显著提高了检测准确率。在控制平面上选择聚类K-means算法对流量进行更细粒度的检测,该算法具有检测速度快、准确度高的特点。本文方案的控制平面检测基于事件触发而非轮询机制,只有当数据平面产生报警时,流量才会被发送到控制平面进行第二次检测,因此大幅降低了南向接口的通信负荷以及系统开销。在本文方案中还添加了黑白名单机制以及防误判模块。利用黑白名单在交换机入口过滤数据包,降低重复检测带来的开销。在控制平面完成细粒度检测之后,加入防误判模块,以进一步降低虚警率。下文将详细介绍系统的主要模块以及粗粒度和细粒度检测分别是如何进行的。
图1 跨平面协作DDoS防御系统体系结构Fig.1 Architecture of cross plane cooperation DDoS defense system
1.1 数据平面的粗粒度检测
OpenFlow交换机的计数器是计算通过的数据包和字节数。从OpenFlow协议1.0起[15],OpenFlow协议为每条流入口、流表和交换机端口等定义了一组计数器,并将它们的值称为三元组。如图1所示,计数器读取模块依次从交换机硬件中轮询计数器值,并将这些值设置为流监控器模块的输入。在流监控器模块,采用流量检测算法对计数器值进行处理,从而过滤出异常流。
数据平面流监控器流程如图2所示。其中,流监控器模块主要负责根据DDoS攻击流量的突出特性(如大流量和不对称特性)对异常流进行初步过滤,且其由以下3个部分组成:
1)元组解析器。它从计数器的三元组中提取出具体的计数器值。
2)监控线程。利用流监控算法对流量进行检测。
3)流状态采集器。它负责对检测到的异常流状态进行管理,且图2已经给出了流监控器的工作过程。
图2 数据平面流监控器流程Fig.2 Procedure of data plane flow monitor
元组解析器不断地接收由计数器Reader模块发送的三元组,然后包含在三元组中的计数器值根据其所属流(或端口)传递给特定的监控器线程,并利用流监控算法对监控线程进行异常流检测。本文设计一种轻量级的流监控算法,该算法用于数据平面的流量监控模块,检测出由DDoS攻击引起的异常流。与很多其他流监控算法不同,该轻量级算法的目的是利用普通OpenFlow交换机中的轮询计数器来提取DDoS攻击流量的关键特性。
1.1.1 轻量级算法的特征提取
突发的泛洪流量是DDoS攻击的一个重要特征,当DDoS攻击时,单位时间通过交换机的数据分组量以及平均字节数都远高于正常流量。在攻击期间,进入受害服务器的流与从服务器流出的流之间通常存在巨大的速率差异。对于给定的2条流,如果A流的目的地址等于B流的源地址,B流的目的地址等于A流的源地址,则称这2条流为对流。相反,如果只有一条流,且找不到它的对流,则称为单流。DDoS常以IP欺骗的方式发起攻击,因为它们使用假IP地址发送数据分组,所以当DDoS攻击发生时,单流的增长率迅速增大,对流所占比例很小,其原理如图3所示。当DDoS泛洪攻击发生时,不同IP对应的流持续时间较短,因此流的平均持续时间也是一个重要特征。与DDoS攻击产生的IP欺骗相同,攻击者也可通过随机生成端口进行扫描攻击,因此DDoS流量中端口的增长率远高于正常流量[16-18]。
图3 DDoS流量不对称特性示意图Fig.3 Schematic diagram of DDoS traffic asymmetry
通过轮询OpenFlow交换机计数器值,可由以下6个指标反映上述4个DDoS流量特性,具体表示方法为:
1)单位时间平均数据分组量(APPT)
(1)
2)单位时间平均字节数(ABPT)
(2)
3)对流所占的比例(PCPF)
PCPF=
(3)
其中,flow_numsT表示在时间周期T内采集的流数量,T表示采集周期,nums_single_flows表示每个周期T内采集到的流中单流的数量,nums_pair_flows表示每个周期T内采集到的流中双流的数量。
4)单位时间单流数目(SFPS)
(4)
5)流平均持续时间(ADPF)
(5)
其中,durationsi表示每条流表的持续时间。
6)端口增长率(GRDP)
(6)
其中,nums_different_port表示每个周期T内采集到的流表中不同端口号的流数量。
上述6个指标中,指标1与指标2从流量的体积特征来判断流量是否异常,指标3与指标4利用DDoS流量的不对称特性来评估流量,指标5与指标6分别显示了DDoS流量的短时多流以及伪造端口的特点。
1.1.2 数据平面轻量级算法描述
在监控线程中,本文提出一种轻量级算法,该算法可用于捕获上述6个指标的变化,从而对异常流量进行检测。该算法利用一段时间流量的6个指标值来估计预测值,如果下一个周期的6个指标实际值都落入预测范围内,则表示当前流正常,否则,预测值与观测值之间的偏差代表了网络行为的变化;如果6个指标观测值都超出了可接受范围,则将其确定为DDoS攻击造成的异常流量。
(7)
(8)
(9)
(10)
1.2 控制平面的细粒度检测
控制平面接收到报警消息后,将异常流状态存储在数据库中,触发事件通知基于控制器的DDoS机器学习细粒度检测模块,对特定的异常流进行深度检测。在系统中,如果接收到警报消息,控制器将向特定的交换机发出标准的OFPT_FLOW_MOD消息(从OpenFlow协议1.0开始定义)。该消息可以指示OpenFlow交换机从特定的异常流中缓冲数据包,将其发送到控制器并存储在数据库中进行细粒度分析。在控制平面,利用K-means聚类算法结合提取的相关特征进行细粒度检测,该方法的流程如图4所示,其中,虚线表示训练过程,实线表示检测过程。
图4 控制平面细粒度检测流程Fig.4 Procedure of fine-grained detection of control plane
1.2.1 特征提取
实验可以从数据平面发送的数据包中提取各种特征,并用于聚类算法。由于DDoS流量最显著的特征是发出大量伪造源IP和端口的数据包,五元组包含了多数DDoS特征信息,因此需要提取每个数据包的五元组信息。由于熵能够很好地表示不确定度,基于DDoS攻击随机伪造源IP和端口的特点,对这些字段分别计算熵并作为输入的特征值。根据相关工作,本文使用熵作为度量来帮助构造特征,以检测DDoS流量[19-20]。样本熵可定义为:
(11)
其中,S为数据包的总数,N为不同IP地址或端口的数目,其表示特定的指标(如某IP地址出现的次数)。
特征分布越集中,熵值越低。研究发现,DDoS流量对五元组(目的地址、目的端口、源地址、包大小与流的持续时间)的熵值有较大影响[21],这是由DDoS特性决定的。同时,使用SYN/SYN+ACK来描述DDoS引起的半连接状态。考虑到在高速网络中难以记录所有数据包大小,本文重新定义了如表1所示的数据包大小级别。
表1 数据包大小级别定义Table 1 Definition of packet size level
由于正常的突发大流量也会改变分组大小的熵,因此对分组大小熵进行如下改进,以区别于DDoS业务,具体如式(12)所示:
(12)
其中,imax是数据包的大小以及级别,且多数数据包都包含在这些级别里面。值得注意的是,指标1~指标6代表了DDoS的基本特征。包头信息和特征的对应关系如表2所示,虽然实验数据集只包含DDoS种类的一部分,但是本文方法仍可以用于检测各种类型的DDoS攻击。
表2 包头信息和特征对应关系Table 2 Correspondence between Baotou information and features
1.2.2 机器学习算法K-means分类及检测
在训练过程中,采用聚类方法对流量进行建模,并确定检测阈值。需要说明的是,所有的训练数据均只包含正常流量。本文使用机器学习算法K-means来满足实时检测的要求,因为该算法比其他机器学习分类算法快。使用欧氏距离来量化2个熵向量的相似性。此外,基于簇半径的加权平均值[21],本文方法能够找出最好分类的簇数k。使用上述特征组成的特征矩阵作为K-means算法的输入,输入处的m个节点表示具有m个特征的记录,如X={x1,x2,…,xm}。聚类完成后需要滤去噪声,而滤去噪声的方法是剔除稀疏的簇,并根据统计中常用的规则,即如果训练数据总共有n个点,则剔除那些不足0.05n个点的簇,且对于每个簇,实验均记录检验数据的中心C和半径r,C由所有点的平均值决定,r由C与集群中任意点之间距离的最大值决定。
控制平面上DDoS攻击的细粒度检测的具体步骤为:
步骤1对于在单位时间内检测到的可疑流量,计算其熵值,得到预处理模块中的熵向量X。
步骤2计算熵向量X与所有簇中心Ci之间的欧式距离,并将结果记录为di。
步骤3选择最小距离dt=min{di},并将样本熵向量X分配给相应的簇。
步骤4对dt和聚类半径rt进行比较,若dt