面向软件定义网络架构的入侵检测模型设计与实现
2020-03-06池亚平莫崇维杨垠坦陈纯霞
池亚平,莫崇维,杨垠坦,陈纯霞
(1.北京电子科技学院 网络空间安全系,北京100070; 2.西安电子科技大学 通信工程学院,西安710071)
0 引言
软件定义网络(Software Defined Network, SDN)是一种新兴的网络架构,已逐渐成为云计算环境所依赖的重要技术之一[1],但SDN架构本身也存在安全问题,国内外相关研究人员也更加关注SDN本身带来的安全问题。文献[2]从SDN特有/非特有的安全威胁两方面分析和归纳了SDN中存在的典型安全问题。文献[3-5]以流量为出发点,分析了可能出现的攻击方式,并提出了相应的解决方法。SDN的安全问题主要分布在控制层和数据转发层,而控制层和数据转发层的很多安全问题都可以用入侵检测的技术手段来解决[2,6]。
文献[7-8]综述了近年来国外研究人员采用机器学习或深度学习手段展开的网络入侵检测领域的研究。其中,文献[7]对常用的机器学习和深度学习算法进行归类。文献[8]分析了9种不同机器学习和深度学习算法应用在网络入侵检测中的优缺点,对比了多种多算法结合的网络入侵检测算法,详细说明了数据集的选择方法和入侵检测评判标准。文献[7-8]指出卷积神经网络(Convolutional Neural Network, CNN)算法具有良好的分类特性和特征学习能力,但目前仍较少地用于网络入侵检测领域。文献[9]中提出一种基于多层感知机的SDN入侵检测模型,选取了特征数据的6个特征作为输入,最终识别准确率为75.75%;文献[10]采用信息增益和支持向量机(Support Vector Machine, SVM)结合的方式实现了SDN环境下入侵检测算法;文献[11]针对SDN固有特性,通过流表项提取特征数据作为输入数据,并实验对比了5种不同算法的准确率、训练时间、检测时间等属性。
通过分析现有研究发现,入侵检测算法验证时多采用KDD Cup99数据集或NSL-KDD数据集,而这两个数据集都是传统网络下采集的数据集,并不能有效反映SDN环境下的真实安全需求[7-12]。文献[12]虽然通过采集流表项进行改进,但也只适用于检测传统网络下的分布式拒绝服务攻击(Distributed Denial of Service, DDoS)。本文设计基于流表项的特征提取方法,采集SDN特有攻击下的数据样本并形成流表数据集,入侵检测模型利用该数据集检测SDN特有攻击,采用NSL-KDD数据集检测传统网络攻击。鉴于文献[9-11]中的算法对小概率攻击检,例如远程到本地的非授权访问攻击(Remote-to-Login, R2L)和非授权提升用户权限攻击(User-to-Root, U2R),测效果较差。本文设计一种加强训练方法用以提升对此类攻击的检测率。
1 相关工作
1.1 SDN特有攻击行为分析
文献[2]中指出了两种典型的SDN特有网络攻击行为,分别为交换机流表攻击和控制域带宽攻击。这两种攻击都不能被传统网络下的入侵检测系统识别。
在数据获取过程中,只关注了数据转发层的数据信息,忽略了南向通道可能发生的交换机流表攻击。
图1所示为交换机流表攻击的原理:受控终端向交换机发送大量未知目的的虚假请求,而交换机流表中没有与之匹配的流规则,该交换机便将请求转发给控制器,由控制器制定相应的应答策略。当攻击者通过不同交换机向控制器发送大量虚假请求信息时,控制器会一直忙于处理虚假请求信息,并消耗大量链路资源,而正常的请求无法及时处理,当短时间内虚假请求信息量超过某一阈值时,便会导致整个SDN的瘫痪。与此同时,短时间内过多的交换机未记录的数据请求,会引起交换机流表溢出,导致交换机崩溃,因此,该模型仅适用于检测传统网络架构下的网络攻击。
图1 交换机流表攻击原理Fig. 1 Principle of switchboard flow table attack
若控制器被入侵者控制或因物理因素失效,则该入侵检测系统(Intrusion Detection System, IDS)引擎将无法正常运行,安全策略也无法正常下达。如图2所示是控制域带宽攻击基本原理:攻击者通过被控制的SDN控制器向部分交换机下发虚假流规则,交换机执行新的流规则,产生大量错误的数据包,从而导致链路堵塞和网络瘫痪。
针对上述问题,本文从流表项入手,采用数据原始特征和人工特征合成基于流表项的特征向量,并在此基础上生成流表项数据集。本文采用mininet仿真网络环境,并在此环境中模拟上述两种攻击行为,这两种攻击下采集得到的特征向量标记为“异常”。
1.2 卷积神经网络
卷积神经网络是一种深度前馈神经网络,是深度学习中的一种重要模型,被广泛地应用于计算机视觉、自然语言处理等领域。卷积神经网络通过模拟生物视觉机制构建,利用局部感知进行特征提取,其突出特点便是“权共享”,即让一组神经元使用相同的连接权。图3所示是CNN的典型结构。从图3可以看出,一个完整的CNN包括数据输入层、特征提取层和全连接层三个部分。输入层利用“局部感知”从原始数据中提取局部数据;特征提取层经过多次卷积核池化最终得到一个特征向量;输出层根据特征向量判决输出结果。
图3 卷积神经网络典型结构Fig. 3 Typical structure of CNN
2 流表项数据采集和基本特征
根据OpenFlow协议,每个流表由多个流表项组成,原始的流表项由多个功能部分组成,并不是所有的部分都可以用于入侵检测。从流表项中直接提取出的流表特征如表1所示。
表1 流表项中的流表特征 Tab. 1 Flow table features in flow entry
同时,为了提高检测的精度,根据匹配域和计数器信息人工构建额外的可能区分攻击的流表特征,并将其作为输入特征数据集的一部分,构造特征如表2所示。
表2 流表项数据集特征 Tab. 2 Flow entry dataset features
1)平均流包数(Average Number of Packets in per Flow, APF)。
攻击时为了提高伪造源IP和目的IP的速度,一般会减少流中数据包的数量,因此,正常状态下的流包数和被攻击时的流包数是不同的。
(1)
其中:FlowNum是抽样周期内流表总数;PacketNumi是第i个流表内的数据包数。
2)流表匹配成功率(Match/Lookup Ratio, MLR)。
数据包到达OpenFlow交换机时,都要进行匹配和查找操作。大量不同的新的流表会导致OpenFlow交换机流表溢出,此时若再收到新的流表,会引起流表匹配成功率急速降低:
(2)
其中:Match是匹配流表数;Lookup是总流表数。
3)对比流(Percentage of Pair-Flow, PPF)。
网络在正常提供服务时,网络中的对流数和单流数的比例较为稳定。在攻击状态下存在大量的伪造目的IP地址,会造成这种稳定性受到破坏:
(3)
其中pair是交互流表的对流数的个数。
4)平均流比特数(Average number of Byte in per Flow, ABF)。
受到攻击时,为了提高发包速度,会减小数据包的字节数,平均流比特数往往是检测攻击的重要特征:
(4)
其中ByteNumi是第i个流表中数据包字节数。
5)端口增速(Port Generating Rate, PGS)。
正常网络状态下,端口增速较为稳定,攻击时会随机生成端口号,端口增速会明显增大:
PGS=PortNum/T
(5)
其中PortNum是端口号的新增量。
6)目的IP增速(Destination IP Growing Speed, DIGS)。
攻击时,大量伪造目的地址会导致目的IP大量增多,因此目的IP增速是检测攻击的重要特征:
DIGS=DIGSNum/T
(6)
其中DIGSNum是周期T内是目的IP地址增量。
7)源IP增速(Source IP Growing Speed,SIGS):
SIGS=SIGSNum/T
(7)
其中SIGSNum是周期T内是源IP地址增量。
8)流表项速率(Rate of Flow Entries, RFB)。
受到攻击时流表项请求数目会有所增加,因此,可选择流表项速率作为数据特征:
RFB=FlowsNum/T
(8)
其中FlowsNum是采样周期内流表项请求数目。
3 入侵检测模型设计与算法优化
3.1 入侵检测模型设计
因为存在两种不同的输入数据,因此设计了分流检测结构。同时,由于在NSL-KDD数据集中U2R攻击、R2L攻击是小样本攻击,因此在入侵检测算法中,这几类攻击往往是产生误报或漏报的集中点,SDN特有攻击和传统网络攻击具有不同的数据特征,因此应当进行分开训练,如图4所示。
图4 入侵检测模型结构设计Fig. 4 Structure design of intrusion detection model
在入侵检测模型中,分流器通过识别输入数据的特征维数对输入数据进行分流,左侧为SDN特有攻击单元,右侧为传统网络攻击检测单元。在SDN特有攻击检测单元中,由于针对SDN特有攻击的种类有限,并没有较为成熟的异常分类体系,因此在该单元,设计基于CNN的二分类算法,用于区分正常和异常行为。在传统网络攻击检测单元,针对4种攻击和正常行为设计具有5种分类情况的分类器。检测结果处理单元负责将原始输出数据转换为标记信息。SDN特有攻击检测单元和传统网络攻击检测单元使用相同的入侵检测算法,但采用不同的数据集进行算法训练。
3.2 入侵检测算法流程及优化方法
3.2.1 入侵检测算法流程
基于卷积神经网络入侵检测算法是检测模块的核心,入侵检测模型的实现即入侵检测算法和加强训练方法的实现,算法流程如图5所示。
图5 CNN算法执行流程Fig. 5 Execution flow of CNN algorithm
在图5中,首先经过输入数据集、初始化卷积神经网络、采集样本子集等操作,然后判断是否需要加强训练。若是,合并样本子集和错误样本集,否则,采用样本子集执行正常训练;之后采用小批量训练,并采用交叉熵损失函数计算本次训练损失值,并判断是否继续训练。若是,采集新的样本子集,Adam算法更新模型参数,执行统计本次训练错误样本,并执行加强训练决策单元,判断是否加强训练;否则,结束训练。本文对入侵检测算法的优化包括卷积神经网络的结构、加强训练方法两方面。
CNN各层具体参数如表3,其中,n为输入特征矩阵的宽度。
表3 CNN参数配置 Tab. 3 CNN parameter configuration
基于以上述算法流程和配置参数,设计CNN算法核心代码如下:
if __name__==′__main__′:
load_data()
feature_test=feature
feature_train=feature_full
label_test=label
label_train=label_full
init_model()
with tf.Session() as sess:
#初始化所有张量
sess.run(tf.global_variables_initializer())
#将神经网络结构画出来
writer=tf.summary.FileWriter("resout/",sess.graph)
#记录中间值
merged=tf.summary.merge_all()
train_writer=tf.summary.FileWriter("resout/train",
sess.graph)
test_writer=tf.summary.FileWriter("resout/test",sess.graph)
#训练
for step in range(1000):
f_t_batch,l_t_batch=next_batch(feature_train,label_train,1000) #小样本梯度下降训练,每次选大小为1 000的batch
#错误数据采集
a=sess.run(tf.argmax(prediction,1),feed_dict={xs:
f_t_batch,ys:l_t_batch,keep_prob:1})
b=sess.run(tf.argmax(ys,1),feed_dict={xs:f_t_batch,
ys:l_t_batch,keep_prob:1})
train_plus,label_plus=Plus_learning(a,b,f_t_batch,
l_t_batch)
sess.run(train_step,feed_dict={xs:f_t_batch,
ys:l_t_batch,keep_prob:0.5})
#加强训练
if train_plus and label_plus:
sess.run(train_step,feed_dict={xs:train_plus,
ys:label_plus,keep_prob:0.5})
if step %5==0:
train_writer.add_summary(sess.run(merged,feed_dict=
{xs:f_t_batch,ys:l_t_batch,keep_prob:1}),step)
print(step,sess.run(accuracy,feed_dict={xs:f_t_batch,
ys:l_t_batch,keep_prob:1}))
其中,init_model()函数初始化神经网络,sess.run(tf.global_variables_initializer())函数初始化神经网络中的所有张量,配置了表3中的基本参数;next_batch()函数进行小样本采样,可自行选择采样大小;tf.train.AdamOptimizer()函数表示采用Adam算法进行梯度下降优化;tf.nn.softmax()函数调用Softmax算法优化输出;Drop值为0.5,表示在本层保留50%神经元,此时神经元之间的组合方式最多;运行train_step表示开始本次训练,每5次训练记录一次中间数值;Plus_learning()函数调用加强学习决策算法,对应流程图中加强训练决策单元。
3.2.2 卷积神经网络结构优化设计
在卷积神经网络结构方面,针对入侵检测特征向量的特点,对CNN模型的结构进行优化,如图6所示。
图6 CNN结构Fig. 6 CNN structure
卷积神经网络结构改进主要表现为两个方面:其一,对卷积层和池化层的连接结构进行优化;其二,在全连接后面添加Softmax输出层进行优化。
在基于CNN图像识别领域中,直接将图像作为输入数据,并具有多通道特性,因此在卷积操作后面紧跟着池化操作,以减少中间参数量。相比之下,入侵检测领域的特征向量维度较低,信息容易提取,过多的池化操作反而会引起特征模糊,难以提取,因此,采用改进卷积层和池化层的连接结构,减小池化频率,每两次卷积操作后再进行池化操作,并采用均值。同时,为了使优化算法输出结果更具解释性,使用和CNN结合最多的Softmax分类器作为输出层。
3.2.3 加强训练方法设计
针对入侵检测模型训练过程中存在小样本攻击类型不易检测的问题,利用小批量梯度下降方法具有样本抽样的特点,设计了一种加强训练方法,进行CNN模型训练。图7所示为加强训练方法处理流程,这里以传统网络分类器为例介绍训练流程。
图7 加强训练方法处理流程Fig. 7 Process flow of reinforcement training method
1)为了提高输入数据的随机性和小样本攻击的占比,对训练集进行随机采样,形成子样本集V,V既是小批量梯度下降的一个batch,又是一个加强训练单元;
2)输入训练子集D,初始化时D=V;
3)检测是否训练结束,若是,输出模型,否则执行4);
4)在低频攻击检测器中,需要神经网络对U2R攻击和R2L攻击更敏感,搜集分类错误的这两种攻击,形成错误样本集v。同时执行1),得到子样本V′;
5)以概率P∈[0,1]合并V′和v,形成新训练子集D′=V′∪v,最后执行2)。其中,P的初始值为1,若错误样本集减小则P=P-ΔP,否则,P=P+ΔP,ΔP为一较小常量。
加强训练方法可以有效解决低频攻击类型不易检测的问题,可以根据实际需要设计不同敏感偏向的分类器。利用以概率思想在合并训练子集时引入随机性,减小因大量重复训练引起的模型过拟合。该方法具有思想简单,易于实现、加速收敛、减小过拟合,有效提高入侵检测精度等优点。加强训练方法算法伪代码如算法1所示。
算法1 加强训练算法。
Process:Function improved_train (D)
initializeP=1
initialize ΔP
while not stop do
train CNNModel_Generate(Vt′)
Statistical error samplevt
Ifvt≥vt-1:
P=P-ΔP
else:
P=P+ΔP
Calculating the combination factor
α~Bernoulli(P)
Ifα=1:
Vt′=Vt′+vt
else:
continue
end while
Output:final CNN
4 实验结果与分析
4.1 实验环境及评估方法
实验环境采用在Linux下运行Tensorflow深度学习框架,Tensorflow是谷歌研发的人工智能系统,采用基于数据流图的计算,广泛地应用于机器学习或深度学习领域,Tensorflow支持英伟达图形显卡加速,实验采用Python语言编写算法,采用的硬件设备型号分别是CPU为Intel i7 2600,内存为DDR3 1 333 MHz 16 GB,操作系统为Ubuntu16.04,GPU为NVDIA GTX960。
实验采用入侵检评估标准为准确率(ACcuracy,AC)、误报率(False Positive Rate,FPR)、召回率(Recall)、精确度(Precision,PR)、混淆矩阵等,准确率、误报率、召回率和精确度通过量化归一评价检测结果,混淆矩阵通过观测预测值与真实值的统计分布判断分类器性能。
(9)
(10)
(11)
(12)
其中:TP(True Positive)表示被正确分类的正常行为样本数量;TN(True Negative)表示被正确分类的异常行为样本数量;FP(False Positive)表示被错误分类的正常行为样本数量;FN(False Negative)表示被错误分类的异常行为样本数量,表4展示了各种分类情况。
表4 实验结果分类 Tab. 4 Classification of experimental results
4.2 CNN算法优化对比实验
本实验采用控制变量法进行实验,每次都采用最终算法和缺少某一项优化的算法进行实验对比。为了验证多分类下的性能,使用数据集NSL-KDD在图4的传统网络攻击检测单元模型进行实验。基本参数设置为:学习率为0.001;CNN小批量训练的batch为500;总迭代次数1 000次,每5次迭代记录一次中间值。
4.2.1 加强训练方法实验
加强训练方法的概率因子g设置为0.01,本实验对比了使用加强训练和未使用加强训练的实验结果,如图8所示。
图8 加强训练方法实验结果Fig. 8 Experimental results of reinforcement training method
图8(a)为准确率随着训练次数增加的变化,其中,hard train曲线采用了加强训练方法,normal train曲线未采用加强训练方法,明显可以看出,采用加强训练方法时CNN模型在训练前期的收敛速度更快;图8(b)为损失值与训练次数的关系,采用加强训练后,损失值降低得更快;图8(c)中加强训练图为采用加强训练方法的模型处理训练集得到的混淆矩阵,后面的实验中也采用该矩阵进行实验对比。考虑到精确度可以更直观反映多分类的分类精度,因此,计算出正常类型的精确度为99.85%,DoS攻击的精确度为99.95%,Probe攻击的精确度为98.67%,R2L攻击的精确度为96.48%,U2R攻击的精确度为94.23%;图8(c)中未加强训练图是未采用加强训练的混淆矩阵,可以计算出正常类型的精确度为99.63%,DoS攻击的精确度为99.20%,Probe攻击的精确度为96.60%,R2L攻击的精确度为75.28%,U2R攻击的精确度为21.15%。可以看出:训练前期模型尚未成熟,加强训练可以在一定程度上提高收敛速度;训练中期,加强训练的小样本数据较多,因此有效提升小样本数据的精确度;训练后期,加强训练的P值会逐渐收敛至0,此时不再具有加强训练的效果,因此,此时准确率和损失值会在一个稳定区间内小幅波动。
4.2.2 卷积神经网络结构优化实验
本实验中均值池化与最大值池化、多池化层进行实验对比。如图9,two avg pool曲线代表多个池化层,max pool曲线代表最大值池化,avg pool曲线代表均值池化。从图9(a)准确率对比和图9(b)损失值对比可以看出,采用多池化层时收敛最慢且收敛时抖动较大,印证了多池化层会模糊数据特征的猜想;均值采样的准确率收敛速度和损失值收敛速度略优于最大值采样。图9(c)中more pool图为多池化层的混淆矩阵,可以计算出正常类型的精确度为99.27%,DoS攻击的精确度为99.81%,Probe攻击的精确度为96.67%,R2L攻击的精确度为48.64%,U2R攻击的精确度为0%;图9(c)中max pool图为最大值采样的混淆矩阵,可以计算出正常类型的精确度为99.77%,DoS攻击的精确度为99.74%,Probe攻击的精确度为98.70%,R2L攻击的精确度为91.16%,U2R攻击的精确度为82.69%。从精确度来看,多采样层模糊了小样本数据的特征,导致R2L攻击和U2R攻击的检测率低;均值池化略优于最大值池化。
图9 池化层实验Fig. 9 Pooling layer experiment
4.2.3 流表项数据集实验
本实验展示SDN特有攻击下的CNN算法训练过程,9 000条流表项数据取80%进行实验,剩下20%下一节进行交叉验证。图10(a)、(b)及(c)分别展示了训练过程准确率和损失值随迭代次数的变化以及输出结果的混淆矩阵,可以看出模型训练200次左右便趋近稳定,准确率和损失值都接近于收敛值。根据混淆矩阵可以计算出准确率为99.34%,误报率为0.43%,召回率为99%。
图10 流表项数据集训练Fig. 10 Flow table entry dataset training
图11是流表项测试数据集的混淆矩阵,可以计算出准确率为98.83%,误报率为1.28%,召回率为98.72%。各项检测数据略低于训练集。
图11 流表项测试集混淆矩阵Fig. 11 Confusion matrix of flow table entry test set
4.2.4 NSL-KDD数据集测试集实验
本实验为了验证本文所提算法具有较高的准确率、较低的误报率和较高的召回率,并具有较强的泛化能力,故与其他文献中的入侵检测模型进行对比。
图12所示为本文CNN在NSL-KDD测试集上的混淆矩阵,可以计算出正常的精确度为98.97%,DoS攻击的精确度为99.81%,Probe攻击的精确度为96.90%,R2L攻击的精确度为94.19%,U2R攻击的精确度为92%。
表5所示是本模型的实验结果,其中,二分类表示SDN特有攻击的检测,可以计算出其在训练集上的准确率为99.34%,误检率为0.43%,召回率为99%,在测试集中准确率为98.83%,误检率为1.28%,召回率为98.72%;可以看出本文模型能有效检测SDN特有攻击,且具有较强的泛化能力。对比文献[10,12]的入侵检测算法,可见本文所提算法具有较高的准确率、较低的误报率和较高的召回率,并具有较强的泛化能力。
图12 NSL-KDD测试集混淆矩阵Fig. 12 Confusion matrix of NSL-KDD test set表5 入侵检测模型实验结果
单位:% Tab. 5 Experimental results of intrusion detection model unit:%
5 结语
本文针对SDN架构特有的安全隐患,设计基于卷积神经网络的入侵检测模型,该模型可以同时检测SDN特有攻击及传统网络攻击。本文依据入侵检测的特点设计适用于入侵检测的卷积神经网络结构,针对小样本攻击识别率低的问题,设计加强学习方法。实验结果表明,该模型具有较高的检测性能,加强训练算法能有效提升小样本攻击的识别率。