基于强化学习的软件定义网络安全
2020-09-04万梅,曹琳
万 梅,曹 琳
(1.广州工商学院 计算科学与工程系,广东 广州 510850;2.南方医科大学 基础医学院,广东 广州 510515)
0 引 言
软件定义网络(software defined network,SDN)[1]将数据与控制分离,控制层通过控制器管理和配置网络结构,部署网络的协议,数据层的dumb交换机负责快速地转发匹配的数据包[2]。两层之间通过开放的接口交互(例如:OpenFlow[3]),控制器通过接口向交换机下发规则,交换机执行规则对应的动作。随着SDN的广泛应用,其安全性逐渐成为了当前互联网的研究热点[4]。
目前SDN安全领域的研究热点主要集中于异常检测[5]、攻击检测[6]、拒绝服务攻击和信息窃取[7]等方面,大多数SDN的异常检测方案在控制层实时提取交换机的流量表,构造整个网络的统计信息,再通过分类器将流量特征分类,分析正常流量和异常流量[8]。文献[9]采用5个流量特征的中位值作为正常流量类的中心点,再通过KNN分类器和欧氏距离度量各个样本和中心点的距离。该方案较好地实现了对DDoS攻击的检测效果,但是无法检测差异较小的异常流量。文献[10]提出了轻量级的在线恶意行为检测算法,该文总结了一组判定规则检测经过交换机的每个报文,该方案的响应速度较快,但是检测的准确率不够理想。文献[11]提出了SDN环境下异常流量的检测和解决方案,该文提取SDN控制层的参数,然后通过简单的孤立点检测技术提取异常的行为,该方案也仅仅适用于异常行为显著的恶意行为。
文献[12,13]研究了基于离散小波变换的流量数据分析,将数据的小波分解作为网络流量的特征,获得了较好的结果。此外,正常的网络流量在长时间范围内应当满足正态分布[14],本文将离散小波分解和网络流量的统计特征结合,提高流量特征的表达能力。
经典的分类器对于弱标记数据的分类准确率较低,直接影响异常流量检测的效果。强化学习在与环境的交互中学习,且无需教师信号和先验知识,具有较强的自适应能力[15]。本文采用强化学习作为监督学习方法,强化学习一般和真实的在线环境进行交互,而非预记录的数据集,所以本文将在线环境替换为训练集模拟的环境。最终将强化学习的策略函数作为神经网络的分类函数,实现了较强的分类能力。实验结果表明,本方案对于SDN的异常流量实现了较高的检测准确率,并且提供了攻击行为的解决方案。
1 软件定义网络的异常检测
DWT能够快速地提取数据特征,本文将正态分布和DWT结合,快速分类网络流量并检测孤立点。
1.1 安全系统的结构设计
SDN包括数据平面、控制平面和应用平面,如图1所示。从控制平面提取网络的统计参数,数据平面与控制平面之间通过SDN控制数据平面接口(control-data-plane interface,CDPI)进行通信,目前主流的CDPI协议是OpenFlow协议。控制平面与应用平面之间由北向接口(northbound interface,NBI)负责通信,NBI由用户自主开发。控制平面包含逻辑中心的控制器,负责控制逻辑策略和维护全网视图。
图1 本文SDN异常流量检测系统的总体设计
1.2 数据采集和数据预处理
通过OpenFlow协议从数据平面采集数据。每隔30 s(1个周期)发送一次OpenFlow请求,交换机收到请求后通过OpenFlow消息向请求控制器返回响应消息,响应消息中包含了流量表的详细内容。本文以30 s为一个周期,不仅能够及时检查出异常流量,而且能够运行全部的异常处理程序。
在预处理阶段提取并分析了以下6个流量属性:比特流长度、报文数量、源IP地址、目标IP地址、源端口、目标端口。最后4个属性为非量化指标,采用香浓熵理论对这4个网络流量属性做量化处理。设一个流量特征为Y={y1,y2,…,yn},其中yi表示在一个周期内第i个值的出现次数,如果是计算源端口和目标端口熵值的情况,yi表示第i个端口在样本数据集中出现的次数。流量特征Y的熵H定义为
(1)
式中:pi=yi/n是Y值为yi的概率。
通过上述的预处理可观察流量属性值的集中程度。例如:在DDoS攻击下流量属性的集中程度会发生变化。如果某个源IP地址创建大量的连接,则短时间内该源IP地址将会变得十分密集。
1.3 提取网络流量的特征
采用DWT的正态分布提取数据的特征并检测异常数据,DWT将信号分解为频谱集[16]。DWT在每个分解层将数据划分为小波系数djk,小波系数是上一层数据的高频部分,近似系数ajk是低频部分。
DWT的数学表达式f(t)定义为
(2)
其中,φj0k(t)为尺度函数,aj0k为近似系数,Ψjk(t)为小波函数,djk为DWT每个分解层的细节系数,两个系数均包括K个元素,其中K=N/2,N为输入的数据量。
将DWT考虑为滤波器,输出为高通滤波器和低通滤波器的矩阵乘法运算。设输入数据为F,滤波矩阵F为高通滤波器和低通滤波器乘法运算的结果。将F和x相乘获得近似系数和细节系数的向量coef,该运算产生第1层的系数。后续每层将近似系数作为输入数据x。该过程的数学表达式定义为式(3)和式(4)
Fx=coef
(3)
(4)
采用小波函数[17]作为DWT的滤波器,通过高通滤波器获得细节系数djk,通过低通滤波器获得近似系数ajk。近似系数是信号与尺度函数的内积,细节系数是信号与小波函数的内积。DWT的一个关键属性是如果原数据为正态分布,则变换后的数据也为正态分布,即小波系数也为正态分布,本文利用该属性分析数据小波变换的统计分布。
首先基于DWT提取正常流量的模式:
步骤1 检测正常流量。检测的流量属性包括:每秒的报文数、比特率、源端口的熵和目标端口的熵,源IP地址熵和目标IP地址熵。正常流量检测主要采用Shapiro-Wilk(SW)检验工具,检测结果显示比特流和各个统计的熵值均服从正态分布。基于该观察结果,本文应用正态分布的属性分析SDN数据流的样本。
步骤2 选择最佳的Wf窗口。使用Shapiro-Wilk (SW)检验分析满足正态分布的最佳Wf窗口,该窗口作为时间t的流量分析数字签名(digital signature of network segments using flow analysis,DSNSF)[18]。
随之使用K-means分类相似的流量,定义正常流量的模式,然后使用神经网络将实际流量和正常流量比较,为实际流量分配类标签。
1.4 流量分类
采用K-means将所有的元组分类,K-means的目标是最大化类内的相似性、最小化类间的相似性,目标函数定义为
(5)
因为网络流量具有高度的自相似性,大多元组的元素值相似,所以网络流量的分类结果应该是一个极为密集的分类和若干极为稀疏的分类,密集类为正常流量,稀疏类为离群点。计算每个分类的加权平均值
(6)
式中:p(j)为分类cj的元素数量,N为窗口t的元组总量,dt定义了窗口t的正常流量行为特征。假设矩阵D=[d1,…,dt,…]为全天DSNSF的期望流量行为,dt=[d1,d2,…,d6]表示时间t的6个流量特征。
1.5 异常检测
将异常流量检测考虑为一个流量分类问题,选出不同于期望流量行为的流量模式。该问题属于有监督分类问题,数据集是含有特征的观测数据,通过分类器预测每个到达样本的类标签。经典的分类器包括统计方法、决策树、K-近邻分类和人工神经网络等,这些分类器均为静态模型,需要对每个窗口的流量进行重新训练,无法适用于变化剧烈的SDN场景。本文将强化学习技术引入人工神经网络模型,将动态的流量数据作为强化学习的一个agent(环境),人工神经网络分类器作为第二个agent,并行地运行学习程序和环境调节程序。
2 基于强化学习的异常检测
本文采用强化学习作为监督学习方法,而强化学习一般和真实的在线环境进行交互,而非预记录的数据集,所以本文将在线环境替换为训练集模拟的环境。首先,从数据集随机采样生成新样本集,根据分类器的预测效果产生奖赏,然后,根据学习目标深入调节初始化的行为,修改环境来增加分类器的预测困难。环境是一个agent,分类器是另一个agent。
在强化学习的框架中,环境告知agent当前的环境状态,agent对该环境响应一个动作,该动作可能会引起环境发生变化,环境根据该动作引起环境的变化向agent返回一个奖赏。针对SDN的流量分类问题,本文对强化学习模型做如下3点修改:
(1)根据SDN问题模型模拟强化学习的环境,环境的状态是网络攻击的类型。
(2)agent是一个人工神经网络分类器,其目标是根据模拟环境的状态预测流量的类标签。
(3)环境根据agent是否预测正确产生奖赏。
将上述3点修改应用于强化学习的Q-learning算法,预测流量数据的类标签。Q-learning的目标是寻找agent的最佳Q()函数,Q()函数为每对状态-动作产生一个估计值,该值等于该状态的全部奖赏之和。Q()函数的计算方法为
(7)
式中:St为当前的状态,At为当前的动作,At+1为下一个动作,Rt+1为下一个奖赏值,α为学习率,γ为折扣因子。因为本文每个状态之间的没有相关性,所以无需记忆之前的状态,本文将折扣因子设为接近0。参数α和γ分别设为1和0.001。
采用一个完全连接神经网络(neural network,NN)作为分类器,NN的输入为当前状态,即从标记数据集提取的特征,NN的输出为Q()函数。因为网络流量是高度不平衡数据,正常数据的比例远高于异常数据,所以本文对上述分类框架进行修改,提高环境模拟的智能性。本文并行地训练环境agent和分类器agent,分类器agent的输出结果是对输入样本预测的类标签,环境agent的动作是攻击的类型,训练程序中采用这些攻击类型生成新的样本。分类器agent和环境agent是两个基于奖赏的对手模型,环境通过选择样本来增加分类器agent的误差,提高分类器的分类难度。
因为异常流量的出现概率极低,分类器agent的所有正奖赏对于环境agent为副作用,所以本文通过产生分类器失败率高的样本,提高了环境agent采样的平衡性。环境agent学习分类器agent失败率高的分类,然后增加这些样本的出现频率。设计了两个不同的Q()函数:Qc(s,a)函数负责分类器的优化,Qe(s,a)函数负责环境的优化。两个函数均评估了s状态下a动作所产生的益处,差别在于两个函数的可选动作数量不同。
算法1所示是基于强化学习的流量分类程序。该程序分为以下的步骤:
步骤1 环境agent和分类器agent的Q()函数均初始化为随机值。
步骤2 环境agent基于策略和当前状态选择一个动作aet。
步骤3 环境从数据集st随机选择当前的状态,其动作对应环境agent的选择样本。
步骤4 确定了环境agent的状态,分类器agent尝试分配一个动作act。
步骤5 动作act被发送到环境agent,并与正定标记比较,如果两者相同,则分类正确,并且向分类器agent返回一个正反馈,如果不同,则向环境agent返回一个正反馈。
步骤6 环境agent基于其动作函数和策略选择下一个特征-标签对(st+1,aet+1)。奖赏函数的取值为1或0,1表示正奖赏,0表示负奖赏。
算法中实现了3个优化机制:①采用了两个独立的网络选择和评价动作的质量。②采用Huber损失作为损失函数,Huber损失是鲁棒回归的损失函数,对数据游离点的敏感度低。③采用两个神经网络实现了两个不同的agent,环境agent的Q-learning epsilon值设为0.8,分类器agent的Q-learning epsilon值设为0.01。
算法1:基于强化学习的流量分类算法。
随机初始化Qc(s,act)和Qe(s,aet);
foreach 流量窗口:
初始化状态s0; //随机采样流量数据
使用策略Qe(st,aet)选择环境的初始动作aet;
将st替换为random(S(aet));//S(aet)表示标签为aet的样本,random()表示随机采样。
foreach 时间t=0 toT:
使用策略Qc(st,act)选择agent的动作act;
运行强化学习程序,获得(rct,ret,st+1);
/*获取下一个状态*/
使用策略Qe(st,aet)选择环境的下一个动作aet+1;
将st+1替换为random(S(aet+1));//S(aet+1)表示标签为aet+1的样本,random()表示随机采样。
/*运用梯度下降法更新Q()函数*/
图2是强化学习的结构,环境agent和分类器agent均为神经网络,如图3所示。环境agent和分类器agent的神经网络隐层分别为1层和3层,隐层均为100个节点。神经网络的结构简单,响应时间较短,通过强化学习调节神经网络的权重和偏差。分类器agent的输出是预测的攻击类型,而环境agent的输出是23个所有可能的攻击类型。分类器agent的神经网络是分类器,环境agent的神经网络不是分类器,而是攻击类型的产生器。
图2 强化学习的结构
图3 强化学习两个agent的神经网络结构
3 异常处理机制
如果系统发现一个异常事件,系统收集该事件的相关信息,例如:攻击的IP地址、攻击主机和端口,然后运用一些策略放弃异常的流量。主要设计了报文转发和报文丢弃两个异常处理策略,报文转发策略处理良性流量,报文丢弃策略处理恶意流量。将两个异常处理策略通过控制层传至交换机,异常处理机制如算法2所示。
算法2:异常处理程序。
(1)识别被攻击的目标和端口;
(2)产生一个阻塞流量的入口;
(3)将流量的目标IP设为被攻击目标的IP;
(4)将流量的目标端口设为被攻击目标的端口;
(5)交换机中设置恶意处理策略;
(6)为异常流量分配高优先级(SDN中为65535);
(7)设置流量的空闲期限为61 s;
(8)通过OpenFlow协议将良性流量发送到数据平面。
4 仿真实验和结果分析
4.1 实验环境和实验方法
采用Mininet仿真平台模拟真实的SDN网络,创建一个虚拟网络,网络由虚拟主机、交换机、控制器和网络连接组成。选择Mininet模拟器的原因主要有:①Mininet是一个开源软件,该软件的更新频率较高。②Mininet支持常见的SDN协议,例如:OpenFlow协议。③在Mininet平台开发的应用经过微小的修改即可在实际场景下运行。④Mininet支持配置网络的不同参数,并能够实时监控网络的参数变化。
在OpenFlow模拟平台创建一个深度为2的树状SDN网络,根交换机连接4个叶交换机(编号为2,3,4,5),图4是在Mininet上模拟的SDN网络拓扑结构。
图4 Mininet平台模拟的SDN网络拓扑结构
仿真实验采用Open vSwitch作为网络交换机,该交换机支持OpenFlow协议。在POX控制层实现了DWT算法、异常检测程序和异常处理程序。基于Python语言开发了SDN应用程序的框架。
采用可编程工具Scapy发送报文序列作为历史流量(滑动窗口),基于历史流量创建一个标准的网络配置文件。仿真实验模仿真实环境的情况,正常流量的构成为85%的TCP流量、10%的UDP流量和5%的ICMP流量。报文的大小和流量速率均服从正态分布。
通过合成的异常流量模拟各种攻击行为,采用的工具为hping3软件。合成的DDoS攻击对流量的4个网络属性产生影响:报文数量、目标端口熵、源IP地址和目标IP地址。hping3向目标主机发送SYN报文,源IP地址和端口为随机值,总体的流量数据包括了正常流量和攻击流量。将图4中的交换机5设为被攻击的目标,其IP地址设为10.0.0.78。异常流量出现在下午1∶00-2∶00和7∶00-8∶00。
4.2 性能指标和对比方法
采用5个常用的网络安全性能指标,分别为:精度P、准确率A、F-measure、召回率RC和AUC指标,精度P、准确率A、召回率RC、F-measure分别定义为
P=TP/(TP+FP)
(8)
A=(TP+TN)/(TP+TN+FP+FN)
(9)
RC=TP/(TP+FN)
(10)
F-measure=2×(P×RC)/(P+RC)
(11)
式中:TP表示预测为正实际也为正的比例,TN表示预测为负实际也为负的比例,FP表示预测为正而实际为负的比例,FN表示预测为负而实际为正的比例。
为了从不同的角度评估本算法的效果,选择了5个不同类型的SDN安全方案,分别为:DWTNN、DWTkNN、ATLANTIC[19]、ADSAN[11]、SADMA[20]、DLF[21]。DWTNN是离散小波变换和一般神经网络组合的方案,该方案与本方案的主要区别在于未使用强化学习技术,从而观察本文强化学习机制的有效性。DWTkNN是离散小波变换和k-近邻分类器组合的方案,观察不同分类器对于安全性能的影响。ATLANTIC、ADSAN和SADMA是3个异常SDN的异常分类和处理方案,这两个方案通过流量的中值作为正常流量的中心,与本文采用的正态分布统计思想存在差异,由此评估本文统计分布思想的有效性。DLF是一种基于深度学习技术的异常流量自适应检测算法,将该算法与本方案比较,评估本文强化学习的优劣。
4.3 实验结果和分析
图5是各个安全方案对于异常事件的处理结果。ATLANTIC取得了较好的检测效果,与DWT方法较为接近,DWTNN、DWTkNN、本方案与ATLANTIC的结果较为接近,但DWT方案明显优于ADSAN、SADMA和DLF这3个安全方案。可以总结出基于正态分布分析正常流量和异常流量具有明显的优势。DLF算法的检测性能较弱,该算法采用了多层神经网络,但是在网络流量动态变化过程中难以确定精确的超参数,因此DLF的深度神经网络稳定性较低,导致其检测的性能较低。将本算法与其它两个DWT算法相比,本算法依然具有一定的优势,主要原因在于本方案通过强化学习和神经网络并行的学习策略,有效地提高了动态分类的效果。
图5 不同安全方案的实验结果
实验主要测试了DDoS和端口扫描攻击的检测效果,分别统计了本方案对于正常流量、DDoS攻击和端口扫描攻击的检测结果,观察检测的检测率、漏检率、误检率和查全率,结果如图6所示。图中结果显示,DWTNN对于DDoS攻击的检测效果较好,但是将36个正常流量检测为了扫描端口攻击,这是DWTNN的一个不足之处。本方案的混淆矩阵优于其它两个安全方案。
4.4 算法的复杂度分析
5 结束语
采用强化学习作为监督学习方法,强化学习一般和真实的在线环境进行交互,而非预记录的数据集,所以本文将在线环境替换为训练集模拟的环境。最终将强化学习的策略函数作为神经网络的分类函数,实现了较强的分类能力。实验结果表明,本方案对于SDN的异常流量实现了较高的检测准确率,并且提供了攻击行为的处理机制。
图6 3个基于DWT算法的混淆矩阵
本文在SDN的控制层提取了6个流量属性,分别为比特流长度、报文数量、源IP熵、目标IP熵、源端口熵、目标端口熵。未来将考虑引入其它的SDN网络流量属性,分析不同流量属性和不同网络攻击之间的相关性,增加对网络攻击行为的判别能力。