王文杰,张春英,2,王立亚,2,贾栋豪,郭雪飞
(1. 华北理工大学 理学院, 河北 唐山 063210; 2. 河北省数据科学与应用重点实验室, 河北 唐山 063210)
伴随信息革命的飞速发展,互联网、通信网、计算机系统、自动化控制系统、数字设备及其承载的应用、服务和数据等组成的网络空间,正在全面地改变当今社会人们的生产生活方式。与此同时,网络安全的形势也日益严峻,国家政治、经济、文化、社会、国防安全及公民的网络空间合法权益正面临严峻风险与挑战[1]。因此,当前的主要问题是如何全面提升网络的防御能力,并且能够识别当前出现的不同攻击类型,包括网络上产生的新型攻击。入侵检测技术作为网络空间安全基础架构的重要组成部分,从网络中收集信息后,再对其存在的攻击进行防御并且发出警报,以此增强网络的安全防御能力。入侵检测则是对采集的网络流量数据包进行分类,判断流量正常或者攻击,二分类是直接将网络流量判定为正常或异常,多分类是对网络流量进行类型划分,判断不同类型的攻击方式[2]。
入侵检测技术被提出至今已有20多年的历史,传统检测主要采用模式匹配、行为统计等技术,分析识别特定的模式,并且也取得了比较好的效果[3]。近年来,随着机器学习以及深度学习的发展,使得更多的学者开始寻求其算法的改进之处,并将改进后的算法应用到入侵检测中,以期提升检测的效率、准确率等[4]。目前一些机器学习算法,如支持向量机、神经网络、遗传算法和聚类算法等已经广泛应用于入侵检测中,通过这些算法从日益复杂的静态或者动态数据集中检测入侵行为[5]。当前不同检测模型的检测时间效率和准确率均有了一定程度的提升。然而,目前入侵检测中的数据海量且维数高,这使得许多算法在进行数据特征提取、数据降噪等方面应对困难,且分类的时间、准确率等方面的性能难以提升,使其在处理海量且高维数据时较为困难,因此对实现更高效地分类还有待探究。
深度学习自2006年由Hinton[6]提出之后,相关理论与实践研究成果层出不穷,在搜索技术[7]、自然语言处理[8]、计算机视觉[9, 10]、图像识别[11,12]、图像分类[13]等领域取得了显著成效,同样也引起了入侵检测研究人员的重点关注。时东阁等[14]将卷积神经网(Convolutional Neural Networks, CNN)应用到了入侵检测中,首先对数据集进行标准化以及one-hot预处理,再将处理后的样本输入CNN-Focal模型,在卷积层采取小卷积核缓解了卷积冗余的影响,最后多分类输出时应用Softmax回归进行分类,该模型取得了较高的分类精度。陈红松等[15]对循环神经网络(Recurrent Neural Network,RNN)进行研究实验,希望得到更好的检测结果。在对数据集进行处理后,提出利用基于窗口的实例选择算法对数据集进行精简,最后对模型中的不同参数进行综合优化实验,得到最终优化模型后,进行入侵检测实验,最后实验表明该模型的综合性能有明显提升。
深度学习目前作为机器学习的一部分,目前已经大规模地应用到不同领域当中,相较于传统机器学习也取得了更好的效果。当前入侵检测的数据集维数和数据量不断增加,神经网络的结构也会越来越复杂,实验过程中数据集训练难度提升,流量数据中存在的问题较多,因此当前检测的准确率难以提升,这也是一直以来入侵检测研究的重点内容。武晓栋等[16]提出了DT-PCA-DNN检测模型,其中DT指决策树(Decision Tree, DT),DNN为深度神经网络(Deep Neural Networks, DNN),PCA为主成分分析,运用DT对数据进行初步判断和处理,数据降维采用PCA算法,处理降维后的数据送入DNN模型,得出分类的最终结果,实验采取了ReLU激活函数以及adam优化算法,提升了模型的速率,并且取得了较高的检测率。因此,有研究者将降维方法与深度学习模型进行融合,以降低数据样本的复杂性,改善当前入侵检测数据集数据量大且维数高难以处理的问题。高忠石等[17]提出了一种PCA与长短期记忆网络(Long Short-Term Memory, LSTM)结合的入侵检测模型,先经过PCA进行降噪处理后,接着用长短期记忆网络的记忆功能和学习能力进行学习,最终该模型取得了比传统模型更高的准确率。
当网络环境中的流量数据不固定,且能不断地产生新的流量样本时,此时检测模型难以实现快速且有效的更新,即没有充分考虑到模型的自适应性。而增量学习则是一种能够很好地应对新增样本变化的方法[18],当模型在训练的过程中,既能够对新出现的类型进行学习,又不会遗忘已经学过的知识。付子爔等[19]也考虑到目前入侵检测数据存在的实时性的问题,将传统机器学习算法支持向量机以及K最近邻(k-nearest neighbor, kNN)进行融合,加入了增量学习的思想并且考虑了知识库的扩展,在不同的数据集上进行对比实验,实验结果表明,融合增量思想后的模型不仅很好地应对了实时性问题,准确率也有了较为明显的提升。YI等[20]提出了一种改进的增量支持向量机算法,考虑到改进前的算法未考虑到原来的非支持向量,容易造成一些信息的丢失,且增量学习又无法允许所有非支持向量的加入,因此提出保留集策略保留最有可能成为支持向量的非支持向量,在原始的算法上实现了改进以及增量学习,进行网络入侵检测实验后结果表明该算法极大地节省了训练和预测时间。
因此,提出一种基于增量主成分分析和卷积神经网络的入侵检测模型,通过IPCA对样本进行切割分块特征降维,降低特征之间的冗余度,在通过CNN对数据进行分类,降低数据样本的负载型,提高入侵检测的准确性。
IPCA使用独立于样本量的内存容量,以小批量的方式处理数据,基于从本地硬盘或网络数据库中连续获取的数据块之上,在稀疏矩阵或内存映射文件上调用其拟合方法,为了增量式的更新每个特征的方差贡献率,仅需要存储估计出的分量和噪声方差。IPCA模型主要是包括2种:一种为协方差相关模型,另一种为协方差无关模型。协方差相关IPCA模型,需要随着样本的增加而增量的估计协方差矩阵,再由此计算出新的主成分;协方差无关IPCA模型则直接采用新样本对得到的PCA主成分进行增量式的修正,可以减少模型的计算和存储的开销[21]。WENG等[22]中所提到的CCIPCA算法即一种无需估计协方差矩阵的算法,采用了一种不计算协方差矩阵的方式,逐个样本对数据集的均值和特征向量进行更新,当前特征值计算是对特征值上一个状态的进一步评估:
(1)
(2)
其中样本向量为x(1),x(2),…,an为特征向量,ai(n)是第i个主特征向量的估计值,xi(n)为样本减去均值后的残差量,t为遗忘方程,第2个式子中,x1(n)=x(n),得到残差x2(n)用作迭代步骤的输入数据,剔除当前残差量在前一个特征向量上的投影量,去除掉当前残差量与当前特征向量之间的关联,这样,就降低了特征向量之间关联,使得特征向量间彼此正交,CCIPCA算法的目的是找到前k个特征向量,进而实现对数据的降维处理。
CCIPCA的算法过程如下所示:
输入:样本数据集x(1),x(2),…,x(n);主特征向量数k。
输出:前k个特征向量,α1(n),α2(n),…,αk(n)。
(a)x1(n)=x(n)
(b)fori=1,2…,min{k,n} do
IFi=n,将第i个特征向量初始化为αi(n)=xi(n)。
Otherwise,
CNN是一种深度学习模型,类似于人工神经网络的多层感知器,目前在多个图像处理领域取得了巨大的成果,例如物体分类[23],目标检测[24,25]等。近年来LeCun在1998年提出的LeNet模型第一次定义了CNN结构包括卷积层、池化层和全连接层,如图1所示。卷积层利用滤波器,设置一系列的参数进行特征提取;池化层主要用于压缩参数数量;全连接层计算出每个所属类别的概率。通常卷积层、池化层、全连接层的数量可以有一个或多个,且出现顺序不固定,一般全连接层跟随在卷积层和池化层后面,而卷积层和池化层可交替出现,相互配合,逐层提取出特征,再通过全连接层完成分类任务。CNN的基本结构如图1所示。
图1 CNN基本结构
将IPCA和CNN进行融合,设计的IPCA-CNN入侵检测模型,如图2所示。首先对采集到的原始数据集进行预处理,包括2个方面:一是将数据集中字符型特征转化为数字型特征;二是对数据归一化,运用IPCA算法对预处理后的数据集进行降维操作,再将数据转化成二维矩阵,作为CNN模型的输入,最后得出分类结果,判断该数据属于正常还是攻击,最后测试模型的检测结果。
图2 IPCA-CNN模型图
(1)符号数字特征化
由于数据集里包含的是多维特征的网络流量,内含部分特征是字符串类型的,因此需要进行符号数字特征化,将相应的非数字类型转换为数字标识符[26]。
(2)数据归一化
因为不同评价指标的量纲和量纲单位往往是不同的,会影响到最终数据分析的结果,因此需要进行数据归一化处理,方便数据之间的比较,提升可比性。
模型采用的是Max-min归一化方法,如式(3), 是特征归一化之后的值,min为样本中的最小值,max为样本中的最大值,转换函数即
(3)
对于当前入侵检测的数据集,数据的维度相对较高,并且数据量非常庞大,所以在进行入侵检测实验时,就出现了特征维数高、数据量过大、运行时间相对较长的现象。因此,针对这些问题,使用了IPCA算法,对数据集KDD-CUP99数据集,进行了降维,传统的PCA算法要将所有处理的数据都存放在主存中,这显然十分消耗主存容量,一旦数据集缺失数据,或者在面对流数据的时候,算法就需要重新进行计算,繁琐耗时,且当入侵检测数据过大无法容纳在内存中时,IPCA这种小批量的方式处理数据的操作,达到增量更新模型的效果,使模型拥有持续的学习能力。它使用独立于样本量的内存容量,允许以小批量的方式处理数据,基于从本地硬盘或网络数据库中连续获取的数据块之上,然后在稀疏矩阵或内存映射文件上调用其拟合方法,Incremental类为了增量式的更新explained_variance_ratio_即每个特征的方差贡献率,仅需要存储估计出的分量和噪声方差。
IPCA算法在RossD等[27]提出的特征基和均值更新方法基础上,改用QR分解[28]减少计算复杂度完成增量降维操作,不仅能更好地处理大规模数据集而且能够实现数据的增量学习,它可以分批读取训练集即允许部分计算,一次只对当前批量进行计算,实现增量学习的同时极大地节省了数据样本占用的内存量。IPCA使用与输入数据样本数无关的内存量为输入数据建立低秩近似,它依赖于输入数据功能且更改批量大小可以控制内存使用量,计算时仅需要存储估计出的成分和噪声方差。
原始采集的静态数据集为矩阵A=[I1,I2,…,In],后续新数据到来得到矩阵B=[In+1,In+2,…,In+m]。降维操作要需要同时根据已知静态样本集合A和新增样本集合B计算求解。结合当前数据,使用一种特定情况下使用的QR分解方式[28]完成降维计算。计算矩阵A的QR分解时,表示为:
A=QR
(4)
在计算完全正交分解前,首先对矩阵A进行上三角化,得到更快的双对角化方法,减少计算复杂度。设计算正交Q∈Rm×n使得:
(5)
是上三角形,对方矩阵R1进行双对角化为:
(6)
UR和VE是n×n正交的,E1是n×n上对角矩阵,若UE=Qdiag(UR,Im-n),则:
(7)
是A的双对角化。结合新样本B增量更新其成分和噪声方差,直至所有数据输入完成,依据降维参数k计算得到降维后的数据子集。IPCA算法用与输入数据样本数量无关的内存量为输入数据建立低秩近似,通过不断地进行更新迭代,使IPCA模型拥有持续的学习能力,实现对流数据的增量式学习。最终经过不同特征维数对结果的影响对比,选取矩阵前25维特征,进行入侵检测的实验。
考虑到CNN的输入一般为图像,此处入侵检测的实验采取方矩阵作为CNN模型的输入,首先是借助先前研究者的研究结论,选取新矩阵前25维特征,并且在实验部分进行了不同特征维数的分类结果对比。模型首先将25维特征转换成矩阵,再输入CNN模型,25维特征对应一个 的矩阵,因此采取 的矩阵,实验过程中,若降维后的特征维数数量不足25维,转换成矩阵后,设置空缺位置依次全部补0。
CNN的模型设置如图3所示。
图3 CNN模型设置
2.4.1 输入层
第一层为输入层,入侵检测的数据集经过数据标准化、降维,最后转化成矩阵的方式作为输入,矩阵的维数可变,这里设置填充后的矩阵维度是5×5,通过调用填充函数,对当前矩阵中的空缺值进行补齐0。
2.4.2 卷积层
模型的第2、第4层都是卷积层,卷积层的激活函数都采用的ReLU。不少文献的实验中发现,卷积核较小时局部特征以及分类性能相对较为优异,可以在一定程度上缓解卷积冗余对模型性能的影响,因此在实验过程中,CNN采用的是小卷积核的策略,卷积核大小为3×3,卷积核的个数分别为16和32。
2.4.3 Dropout层
CNN模型在训练过程中容易出现过拟合现象,即训练集上面效果较好,但是测试集上表现效果较差,泛化能力相对差,由此可见过拟合对模型实际性能的影响非常大。为了缓解此问题,CNN模型中采用了2个Dropout层。根据CNN模型实际的分类效果,Dropout值的大小分别设置为0.6和0.5。
2.4.4 池化层
由于当前不同领域的实验数据集存在数据量过大且维数高的问题,因此对于CNN,池化层作为处理这个问题的重点措施,它的主要作用是对特征进行压缩,简化网络的复杂度,减少计算量,并减少过拟合等。最常见的池化操作有平均池化(average pooling)以及最大池化(max pooling),最大池化使用相对较多,它意味着提取更加突出的特征。IPCA-CNN检测模型使用的最大池化窗口大小为3×3,移动步幅大小为2。
2.4.5 全连接层
全连接层位于CNN的最后一层,起到了"分类器"的作用,它将之前提取到的特征综合起来,然后传递给分类器,进行分类。模型中2个全连接层的神经元的个数分别为128和2。模型还用到了1个flatten层将接收到的数据"压平"即一维化,然后传递给第一个全连接层。
实验采用了2个数据集,KDD-CUP99数据集以及UNSW-NB15数据集,KDD-CUP99数据集采集数据时间相对久远,因此该实验同时采用UNSW-NB15数据集进行实验,观察不同数据集下的实验结果,对不同的数据集的检测结果进行了对比。
3.1.1 KDD-CUP99数据集
KDD是数据挖掘与知识发现(Data Mining and Knowledge Discovery)的简称,KDD-CUP99数据集是从一个模拟的美国空军局域网上采集来的网络连接数据。该数据集早已广泛地应用在不同的入侵检测模型中实验中,是机器学习应用于入侵检测研究中的一个重大挑战[29]。该数据集是由9个星期的网络连接数据和系统审计数据组成,其中模拟了各种用户类型、网络流量和攻击手段。该数据集每个网络连接被标记为正常(normal)或异常(attack),异常类型被分为共4类39种攻击类型。数据集里面的每个连接记录包含了41个固定的特征属性以及1个类表示,标识表示该条记录属于正常或者某一种具体攻击类型。在41个固定的特征属性中,9个特征属性为离散型,其他均为连续型。数据集数据分布见表1所示。
表1 数据集分布
3.1.2 UNSW-NB15数据集
在2015年发布的UNSW-NB15数据集,它距今时间短,内含有非常全面的攻击场景,除去正常的流量类型外,另含有9种不同的攻击类型,其中含有大约250万个数据包被抓捕并公开可用。在该实验中,使用其中42个特征进行入侵检测实验,这42个特征被分成3个分类特征以及39个连续特征。UNSW-NB15数据集的特征分为6组,即基本特征、流程特征、时间特征、内容特征、附加生成特征和标记特征。该数据集对应的特征类型描述见表2。
表2 UNSW-NB15数据及特征类型
3.2.1实验环境
实验硬件环境:Windows10操作系统、AMDRyzen53500UCPU、8G内存。软件环境:python3.6,基于TensorFlow的keras深度学习框架,研究了IPCA-CNN模型的性能。
3.2.2评价指标
采用入侵检测系统常用的标准进行评估:准确率(accuracy)、精确率(precision)、和召回率(recall)、F1-score、误报率(FPR)、漏报率(FNR)。其中TP(true positive)、FN(false negative)、FP(false positive)、TN(true negative),分别表示的是正确预测的正样本数、错误预测为负类的正样本数、错误预测为正类的负样本数、正确预测的负样本数。实验终选取10次运行结果的平均值进行对比。
(8)
(9)
(10)
(11)
(12)
(13)
其中F1值能综合描述精确率和召回率的结果,对于一个入侵检测模型来说,实验的准确率、精确率和召回率越高,以及误报率、漏报率越低,则可知入侵检测模型更优。
为了探究不同特征维数对实验最终结果的影响,在KDD-CUP99数据集上进行了不同特征维数对比,见图4所示,该数据集共有41维特征,经过IPCA降维后转成矩阵输入CNN模型,且实验中默认采取特殊矩阵即方阵作为特征的输入方式,因此在KDD-CUP99数据集上选取9维、16维和25维特征进行对比实验,用来对比不同尺寸矩阵输入对最终检测结果的影响,由图4可知,经过IPCA特征降维后,不同尺寸的特征矩阵输入CNN模型后实现入侵检测结果不同,从图4中得出25维特征的准确率以及精确率均高于其它特征维数,召回率相对较平稳;总体来看25维特征矩阵取得的检测结果优于其它2种特征维数。
图4 不同特征维数对比
在数据集KDD-CUP99上面做二分类实验同时,在UNSW-NB15数据集上做二分类实验,UNSW-NB15数据集特征属性更多,有9个大的攻击类型,仍旧把正常样本normal标记为0,把其余入侵的样本标记为1,之后经过数据预处理后进行检测分类,得到数据集UNSW-NB15的分类结果,数据集KDD-CUP99和UNSW-NB15的分类结果如图5所示,可以从图5中看出,UNSW-NB15数据集的检测结果的主要评价指标准确率以及精确率均达到了90%以上,模型在不同数据集上都实现了较好的分类结果。
实验首先采用的是KDD-CUP99数据集,在IPCA-CNN模型上进行了二分类和五分类实验。在二分类实验中,针对不同样本的攻击类型,将正常样本normal标记为0,把其余入侵的样本标记为1,41维特征经过IPCA降维得到 25维特征,然后将这25维特征转换成5×5的矩阵,输入CNN模型,最后输出分类结果;而在五分类实验中,则将正常样本normal标记为0,将PROBE、DOS、U2L、R2L攻击下的攻击类型依次标记为1、2、3、4,然后经过同样的处理,得出分类结果。图6是IPCA-CNN模型在KDD-CUP99数据集上进行二分类实验以及五分类实验的结果对比。从图6中得出,IPCA-CNN模型在进行入侵检测实验时,二分类和五分类均取得良好的检测结果,两者的准确率、精确率、召回率和F1-score值均保持在0.99以上,其中二分类的实验结果略优于五分类。
图6 多分类对比
将IPCA-CNN模型与传统机器学习算法高斯朴素贝叶斯、支持向量机、CNN算法和PCA-CNN算法进行对比实验。高斯朴素贝叶斯、支持向量机常用于入侵检测实验中,高斯朴素贝叶斯适用于连续变量,它的各个特征在不同类别下服从正态分布;支持向量机是一种二分类模型,其工作原理是寻找一个超平面对样本进行分割,在分割时尽量保证间隔最大化。IPCA-CNN增量入侵模型能实现增量读取数据进行学习更新,节约内存占用同时训练分类时间相对较短。通过比较得出,IPCA-CNN模型相较于对比模型,准确率、精确率、F1-score指标均有提升,误报率和漏报率较低,进一步验证了IPCA-CNN模型的有效性。IPCA-CNN模型和对比算法的正确率、精确率、召回率、F1值、误报率以及漏报率的对比图如图7所示。通过实验结果可知,IPCA-CNN模型的准确率提升至99.7%,F1值提升至99.3%,误报率和漏报率分别为0.24%和0.29%,进一步验证了IPCA-CNN模型的有效性。
图7 不同算法对比
除去IPCA-CNN模型外,对比算法中SVM和CNN也表现出较良好的检测性能,优于高斯朴素贝叶斯和PCA-CNN算法。SVM算法的准确率达到了99%以上,单一的CNN模型召回率表现较优。因此,对IPCA-CNN、SVM和CNN这3种模型的检测时间进行了对比实验,结果如图8所示。通过取10次运行结果进行比较,检测结果显示IPCA-CNN模型检测时间较短,单一CNN模型和SVM模型检测时间较长,IPCA-CNN模型整体性能较优。
图8 运行时间对比
(1)针对当前的网络入侵检测的数据集维数较高、检测时间较长问题,提出了一种IPCA算法和CNN融合的增量入侵检测方法,主要是在KDD-CUP99数据集上面进行了研究以及查验其对入侵行为的检测能力。
(2)融合IPCA和CNN的检测模型在优化检测准确率的同时保证了检测速率,并且在不同数据集上具有良好的入侵检测分类能力。