李道全,杨乾乾,鲁晓夫
(青岛理工大学 信息与控制工程学院,山东 青岛 266520)
入侵检测系统(intrusion detection system,IDS)是一种针对网络可能出现的各种类型的攻击进行不断监控,尽最大可能发现各种网络攻击类型,并制定安全策略以确保网络系统资源的机密性与可靠性的安全机制。入侵检测系统不同于传统的防火墙,它是一种旁路监控技术,不需要流量经过链路,也不需要跨接在其它的链路上,就可以很好对网络攻击进行检测。目前,对网络攻击检测的研究主要集中在利用特定的安全机制作为进入网络的切入点。
软件定义网络(software defined networking,SDN)[1]与传统网络不同,它将网络的控制平面与数据平面进行分离,并实现可编程化的集中控制,成为目前比较流行的网络架构。软件定义网络将紧紧耦合在一起的传统网络设备架构拆分成应用平面、数据平面、控制平面3个分离的架构,通过一个集中的控制器对网络中的各种资源合理分配利用。近年来,研究人员将SDN作为一种集中控制网络的技术来解决一些潜在的安全问题,包括分布式拒绝服务(distributed denial of service,DDoS)的攻击检测[2,3]、蠕虫传播[4]和僵尸网络保护[5]。在实际应用中,防御者通过分析源与目的主机之间的网络流,根据不同的攻击模式对网络攻击的类型进行分类,制定安全高效的防止入侵的策略。
在本文中,我们提出了一种基于决策树的SDN网络入侵分类检测模型。使软件定义网络能够更好检测和防御各种攻击,从而使网络更加稳定。
在SDN环境中,通常对数据包的标头及其内容进行彻底检查来防止攻击,若发现网络异常,可以快速做出反应,还有通过熵值来判断是否遭受攻击。与这些方法相比,基于机器学习的检测方法检测成功率相对较高,错误分辨率相对更低,因此被广泛应用在攻击检测方面,选择一个好的机器学习的算法可以进一步提高检测效率。例如,文献[6]的作者就针对异常流量的分类与检测提出了新方法。该方法采用支持向量机(SVM)多分类器,首先利用信息熵理论分析网络属性,再使用改进的SVM多分类器将异常流量剥离。实验结果也验证了此方案的优越性。文献[7]中的作者则提出了基于卷积神经网络(CNN)的攻击检测模型,该模型把SDN特有的攻击样本形成流表数据集,可以同时检测SDN特有攻击及传统网络攻击。实验结果表明,所提出的入侵检测模型能有效地防御网络攻击,并且提出的概率加强学习的方法达到了99.34%的准确率。马琳等[8]提出了一种基于SDN的网络入侵检测模型,并针对需要分类的入侵流具有多特征、数据不平衡等特点,提出了一种改进的随机森林算法,使用KDD CUP99数据集进行性能仿真和对比分析,结果显示改进的随机森林算法在检测精度、代价等指标上都明显得到了提升。Santos da Silva A等[9]结合了信息理论计算流表熵的偏差以及一系列机器学习算法来对异常流量进行分类,提出了重量级算法与轻量级算法相互结合的一个异常数据检测的框架,通过一定的方式处理每个采集到的流量的轮廓。文献[10]提出了一种基于C4.5决策树的DDoS攻击检测方法,其中网络属性作为数据集进行了预处理,并通过实验将所提方法与其它机器学习检测算法进行比较。实验结果表明,该方法有更高的检测成功率,且检测时间相对也比较少。文献[11]则在入侵检测系统中引入了云模型,将原本连续的数据集离散化,再在决策树算法中引入遗传算法,以达到更好的检测性能。王挺等[12]提出了一种用于T/R元器件SRU级故障诊断的多级SVM算法,文章从理论层面对接收通道进行分析,在此基础上建立故障数据库,利用数据库中的数据对多类SVM进行训练和预测,获得了90%以上的准确率。可以看出,决策树算法用于多类学习的效果较好,且相关文献相对较少。因此,利用决策树算法进行多类学习具有广阔的研究前景。
本文采用了一个SDN网络入侵分类检测模型[13],通过北向接口与控制器进行通信,以进行异常攻击的检测。该框架主要可以分为基础设施层、控制层和应用分类层,在应用层主要包括各种服务和应用,如入侵检测系统。控制器是整个控制层中最重要的部分,SDN为控制平面和数据平面提供可以编程开放的互连接口,对底层设备进行集中控制,并通过北向接口与应用程序层进行通信。数据平面主包括路由器、交换机等网络传输设备,它们根据控制器发布的指导命令和流表信息完成下一步动作(丢弃或转发),并且通过南向接口向控制器发送网络拓扑信息。具体如图1所示。
图1 SDN网络入侵检测模型
在基础设施层,OpenFlow交换机中包含多个流表,它通过OpenFlow协议与控制器进行通信。而控制器通过OpenFlow协议可靠地与交换机等转发设备进行通信,实现交换机等转发单元流表的更新与删除。其中,每个OpenFlow交换机都由一个流表和一个组表,或多个流表和一个组表组成,OpenFlow交换机将数据包与一个或者多个用户自定义的流表内容进行匹配。一个流表中含有一组流条目,报文根据流表项的匹配优先级进行匹配。首先从Table0开始匹配,然后接着匹配管道的其它流表。数据包将首先从表0开始,并根据优先级检查那些条目,最高优先级将首先匹配(例如200,然后100,然后1)。如果流需要继续到另一个表,根据goto指令,把数据包转到goto指令指定的表中,如果我们转到的表中有与之匹配的流条目,那么就执行与这个流条目内容相关的命令。如果没有发现与之相匹配的流条目,那么就要观察Table-miss流条目的配置,Table-miss流条目是表中的最后一个条目,优先级为0,并且匹配任何内容。计数器主要用于与流条目匹配的数据包的计数,并以此指示接收到匹配数据后下一步要做什么。另外,控制器也可以通过下发报文来阻止入侵行为,并且对采集到的数据进行分析,从而要求交换机周期性的上报流量信息。在应用层,网络管理员通过在入侵检测框架中设置相关的参数或者部署相关分类检测算法,自动的对网络入侵类型进行分类和相关处理。同时,管理员会及时响应网络的变化,并及时处理各种网络攻击以及对攻击类型的错误判别。在分类层有3个主要模块,分别是定期对处理后的流量数据进行统计的模块,对流表中重要的特征进行提取的模块,以及部署机器学习算法进行分类检测的模块。进行流量统计的模块定期通过北向接口与控制器进行通信来获取流量数据,对获取的数据进行处理之后,将处理后的数据发送到用于提取特征的模块,该模块会提取这些数据中一些重要的数字特征,并根据设置的方法获取参数。这些参数最后被发送到分类检测模块。分类检测模块部署机器学习等异常检测方法,包括KNN、决策树和朴素贝叶斯等机器学习算法。这个模块主要根据用户选择的机器学习算法获取对数据集进行分类的分类规则,并准备进行下一次数据分类。
决策树是一种二叉树。它通过使用自顶向下的递归方法从根节点开始划分,通过比较样本的属性,选择一个最优的属性值作为根节点,然后依次来确定内部节点的分支,以新节点为根重复上述操作,直到不再进行属性划分。决策树只遵循一条规则,换句话说,决策树属于单个输出。也就是说,从根节点开始,只能到达一个叶节点。因此,决策树可以用于数据分类和预测。
本文将KDD CUP99数据集[14]用作网络入侵攻击检测的数据集。作为应用最为广泛的异常检测方法评价数据集,整个KDD CUP99数据集分为有标记训练数据和没有标记测试数据,由大约490万个单个连接向量组成。数据集中的每个向量都含有38个数值特征和3个非数值特征。KDD CUP99数据集大致可分为4种异常类型,即:DOS、R2L、U2R和PROBE。与文献[14]相似,本文使用KDD CUP99中的kddcup.data_10_percent_corrected训练数据集。数据集结构见表1。
由于3个非数值特征的存在,在进行聚类测试时,需要将非数值特征需要转化为数值特征。转化过程参考文献[14]。其次,当不同的特征放在一起时,由于特征本身的表达,绝对值的小数据会被大数据“吃掉”。在这种情况下,此时我们需要做的是对提取的特征向量进行归一化处理,进行处理后,将每个值都归一化到[0,1]范围内,以保证每个特征都被分类器同等对待。
归一化之后的数据集仍然有很多特征属性,这些特征属性对实验结果的影响很小,并且在大数据集上进行复杂
表1 kddcup.data_10_percent_corrected数据集
的分析需要很长的时间,严重影响实验的执行效率。因此,这里采用主成分分析(PCA)来优化数据集,使用数据降维可生成较小的新数据集,但其数据的完整性不会改变。处理后的数据,分析和挖掘效率都将大大提高。具体的处理如下,首先计算数据集的协方差、特征值和特征向量。对特征值从大到小的顺序进行调整,把前n个特征向量进行存储,最后使用这n个向量构建新的空间。这里特征向量的个数就是数据集的维数。数据集降维后,不仅减少了数据集自身的冗余,降低了无效、错误的数据对实验的影响,提高了实验的准确性,又大幅提高了实验的运行速度,且降低了存储数据的成本[15],进一步优化了实验效率。
决策树是一种二叉树结构。上层节点离根节点越近,分类性能越好,整个树的分类精度越高,因此,在分类预测的过程中,最好尽量减少上层节点的分类误差。在本文的分类检测模型中,对于训练集中分类精度最好的放在离根节点近的位置,先分离出来。然后选择一个分类性能次优的分离,以此类推,直到所有的类别都分离出来,保证可能出现的分类错误离根节点尽可能远,从而保证了决策树对网络入侵分类的性能。此次使用的网络入侵数据集分为5类,1类为正常(NORMAL),4类为异常(PROBE,DOS,U2R,R2L)。
本文选择使用类间距离来确定各种类型的分类顺序。类间距离是指不同类之间的距离,包括最远、最近、中心和重心等4种距离。由于本文使用了大量数据集,因此本文选择通过计算每个类别的中心距离,可以轻松地将每个类别分开。通过计算类中心所有数据点的平均值来获得类中心。其中,每个类别的类别中心定义如下:假设一个类别中有N(N=1,2,3,…,n) 个样本,每个样本具有i(i=1,2,3…,n) 特征,xi代表样本特征中的第i个样本,样本中第i个特征的平均值样本Axi为
(1)
其中,xij表示第j个样本中第i个特征的值,根据式(1),计算出该类中每个特征的所有样本的平均值,则该类的类中心样本为: (Ax1,Ax2,Ax3,…,Axn)。
确定类中心之后,计算类之间的类间距离。在本文中,训练集分为两个类别:一个类别和其它类别。也就是说,以上5个类别分为NORMAL和 {PROBE,DOS,U2R,R2L}, PROBE和 {NORMAL,DOS,U2R,R2L}, DOS和 {NORMAL,PROBE,U2R,R2L}, U2R和 {NORMAL,PROBE,DOS,R2L}, R2L和 {NORMAL,PROBE,DOS,U2R} 这5个类别,然后分别计算NORMAL,PROBE,DOS,U2R,R2L与其它类别之间的类中心距离Di(i=NORMAL,PROBE,DOS,U2R,R2L), 在本文中选择欧氏距离计算各类别之间的类间中心距离。欧氏距离可以计算多维空间两点之间的实际距离,同时,也可以计算在二维以及三维空间两点之间的实际距离,在数学中,欧几里得空间中两点之间的欧几里得距离是两点之间的线段长度。可以使用勾股定理从这些点的笛卡尔坐标中计算出来,因此有时称为勾股距离。n维空间中的欧氏距离公式为
(2)
本文使用式(2)计算5个类别与其它类别之间的距离DNORMAL、DPROBE、DDOS、DU2R和DR2L。 当Di较大时,类别的分离效果更好,应该考虑优先分离。
本文使用基于类间距离的决策树SDN入侵检测算法来解决网络入侵的多分类问题。基于决策树的SDN网络入侵分类检测的算法流程如图2所示,具体步骤如下。
步骤1 对原始KDD 99数据集进行数据处理,把数据集中的5种数据类型用数字替换,即将NORMAL,PROBE,DOS,U2R,R2L用数字1、2、3、4和5替代,并且把数字化的数据进行归一化处理,使其每个值都在[0,1]之间。最后,为了方便提取数据的主要特征,使用主成分分析(PCA),计算原数据特征值以及特征向量,通过将特征值从大到小排序,保留前6个特征向量,即对数据执行数据降维操作。
步骤2 将一个类型的样例用作正例,将所有其它类型的样例用作反例,即分为NORMAL和 {PROBE,DOS,U2R,R2L}, PROBE和 {NORMAL,DOS,U2R,R2L}, DOS和 {NORMAL,PROBE,U2R,R2L}, U2R和 {NORMAL,PROBE,DOS,R2L}, R2L和 {NORMAL,PROBE,DOS,U2R} 这5个类别,来训练这5个分类器,一共拆分成5个二分类任务。
步骤3 计算各类样本数据的类间距离。比较类间距离,按从大到小的降序(S1,S2,S3,S4,S5)对其进行排序,并且将它们分离。然后创建一个根节点,确定第一优先级分离类别C1,将训练集结果分为属于该类别(C1)和不属于该类别(非C1)的两个类别。
步骤4 设置Gini系数阈值,在步骤3的基础上根据以下顺序建立一个CART决策树:①对于目前节点的样本数据集M,在样本的数量小于临界值或者没有特征的情况下,目前这个节点不执行递归操作,而是返回到决策子树。②计算样本数据集M的Gini系数。比较Gini系数与临界值,若结果显示计算出的Gini系数小于临界值,仍然不执行递归操作,返回到决策子树。③接着计算各个特征对应的特征值对于数据集M的Gini系数。④在计算出来的各个特征对应的特征值对于数据集M的Gini系数中,选择最优的特征以及相应的最优的特征值,将样本数据集划分成M1和M2两部分,让M1为当前节点的左节点,M2为当前节点的右节点。⑤然后在依次形成的左右节点上递归调用步骤①~步骤④,形成CART决策树。
步骤5 训练完成后,输出预测结果作为C1类样本,删除C1样本训练集;根据第二优先级分离类别C2将剩余的训练数据集分为两个类别,分别属于该类别(C2)和不属于该类别(非C2),并继续构建用于训练划分的决策树。
步骤6 重复步骤3和步骤4的训练和删除操作,直到Ci(i=1,2,3,4,5) 中只有一个类别,输出两个最终分类预测结果。
本节在SDN环境下,对数据集494 021条连接记录(样本)进行预处理后,进行主成分分析(PCA)特征降维操作。考虑到要对数据集信息量尽可能保留,我们将原始的41维数据降为6维数据。首先计算NORMAL、PROBE、DOS、U2R、R2L和其它5个类别之间的距离,并确定每个类别的分离顺序,然后使用文本提出的基于决策树的SDN网络入侵分类检测算法,并与传统的迭代决策树方法比较分类检测的准确性。通过比较两种算法的检测精度,验证该算法在SDN网络入侵检测中的优越性。下面从分离顺序和检测性能两方面来分析。
对预处理后的494 021个样本按照提出的方法计算类间距离。具体计算结果见表2。
表2 各类之间的距离
考虑类间距离的内容,结合表2中的数据可以看出,NORMAL的类间距离为1.5663,明显大于其它类。因此,NORMAL类的分离性最好,应优先分离类,并将其放在离根节点最近的位置。在余下的4个类别中,DOS类与其它3类的类间距离最小,说明DOS类的分离性最差。如果把它安排在离根节点近的节点上,会产生更多的分类错误并导致多分类决策树的准确率下降,对整个分类过程的影响最大,应该最后时分离。其它3种类别的类间距离几乎相同,都在1.25~1.27之间。因此,构建的决策树优先级分离序列为:NORMAL,PROBE,U2R,R2L,DOS,如图3所示。
图3 分离序列结构
NORMAL类别被放置离根节点最近的位置上用于分离,R2L和DOS类别被放置在末尾用于分离。这样构造的决策树的分离顺序可以确保在整个分类过程中,错误类别越多,离根节点越远,从而将对整体分类性能的影响降到最低,进一步保证多类决策树分类的性能。
为了进一步比较决策树的分类检测性能,同样采用KDD CUP99数据集,本文选取分离顺序的逆序 (DOS,R2L,U2R,PORBE,NORMAL) 和传统的迭代决策树方法(即不采用类间距离来分离样本)进行了6次实验,我们取数据集和测试集分别为100 000和45 000,具体的实验结果见表3。
表3 检测精度比较
这3种方法都取相同的训练数据和测试数据,分别为100 000的训练样本和45 000的测试样本。由表3可以看出,与传统的决策树迭代方法相比,本文方法的平均检测错误数目明显减少。此外,与本文方法的对照组(逆序)相比,检测的平均数目也有所减少,平均减少8个检测误差。如果将其扩展到数百万甚至数千万的现代网络数据中,该方法具有更好的检测性能。
下面我们从检测成功率、误报率、测试集测试时间3个方面具体分析3种方法的性能。观察它们随着训练样本数量的增加,检测率、误报率、测试时间这3个方面具体的变化。
图4给出了在同样的实验环境下,本文方法、逆序方法和传统决策树迭代方法的分类结果随着实验数据的不断增加的变化趋势。本文方法、逆序方法以及传统迭代方法随着样本数量的不断增多,它们的性能都有显著的提升,并且本文方法的检测成功率一直优于对照组。即使在样本数较少的情况下,本文提出的基于类间间距分离的方法也能使检测成功率维持在较高水平。并且随着样本数量的增加,3种算法的性能逐渐趋于一致。由此我们可得出,基于决策树的SDN入侵检测算法建模更加适合网络入侵的检测。
图4 检测成功率比较
图5显示了这3种方法的误报率变化。在相同的SDN环境下,本文方法、逆序方法和传统迭代方法的误报率都在随着样本数量的增加而增加。本文方法与两个对照方法的误报率比较接近,大都处于较低的水平。总体来看,随着样本数量的增加,基于决策树的入侵检测算法的误报率一直处于最低的水平。
图5 误报率比较
图6显示了这3种方法的测试集检测时间变化的曲线。在相同的SDN环境下,本文方法、逆序方法和传统迭代决策树方法随着样本数量的增加测试集的测试时间都有不同程度的增加。此外,两组对照方法的曲线斜率明显高于本文方法,在样本数量较多时,对照组方法的检测时间也上升的更快。也就是说,本文提出的方法不是很复杂,一般而言,基于决策树的SDN入侵检测算法的时间较少,检测性能较好。在后续研究中,可通过优化决策树的剪枝算法来简化模型,并减少时间开销。
图6 测试时间比较
本文介绍了根据类间距离确定分离顺序的网络入侵检测模型。此模型利用欧式距离计算每个类别和其它类的类中心距离,并构建决策树。类间距离越大,离根节点越近,则应该优先被分离。实验结果表明,利用本文提出的决策树分类检测模型,决策树可以扩展到多类预测,并具有较好的预测性能。同时,决策树算法对新鲜样本的适应能力较弱,即泛化能力较弱,容易发生过拟合现象。一般情况下,可以通过修剪来简化模型,或者以最少的节点数设置样本数,来限制决策树的深度。在后续工作中,我们将从多维度提高决策树多类检测算法的性能入手,提高算法的稳定性和运行效率。