基于生成对抗网络的异常行为模拟算法研究
2020-01-07赵维
赵维
(吉林警察学院,长春 130117)
随着网络的普及程度越来越高,网络攻击和异常行为的数量和破坏力也在显著增长[1]。思科VNS预测[2],2020年DDOS攻击事件数量将为2015年时的3倍。如何在异常网络流量中检测出恶意的攻击,成为网络安全领域关注的热点问题。
网络攻击发生时,其数据流量特征通常会进行伪装,直接将网络数据集提交给算法学习可能引起模式坍塌[3]。生成对抗网络(Generative Adversarial Network,GAN)最早于2014年由Goodfellow[4]等人提出,来源于博弈论中的零和博弈思想[5]。GAN首次应用于图像处理领域[6],并取得了显著的成效;借助于其学习能力强和应用灵活的特点,在网络安全领域的应用也日益增加。
针对当前网络攻击和异常数据检测算法中存在的异常行为数据量不平衡的问题,本文通过GAN迭代训练产生模拟异常行为数据,能够尽可能的接近原始数据。进一步采用K-means算法对生成数据进行聚类分析,分析模拟样本的特征和其包含的类别数量。实验表明,所提出的方法能够生成高质量的模拟样本,解决在异常检测中训练的异常样本过少导致的问题,提高异常检测的效果。
1 生成式对抗网络
生成式对抗网络模仿博弈论中的二人零和博弈[7]的模式,由一个生成器和一个判别器构成。生成器在接收真实数据样本之后,自我学习样本特征生成新的数据样本。判别器作为分类器,判断输入是真实数据还是生成的样本数据。和传统模型相比,GAN拥有如下优点:
(1)线性相关。GAN生成的数据复杂度和维度呈现线性相关。因此当通过GAN生成一个较大的图像时,可以避免指数级的计算量上升,而是呈现线性增长的过程。
(2)先验假设少。GAN不对数据进行任何的显式参数分布假设,对于使用者来说,不需要对学习过程进行过多干预,只需要在模型完成后对学习效果进行评估。
(3)样本质量高。GAN可以生成高质量的样本,即使无法获得概率密度,仍然可以学习后生成样本。
近年来针对GAN的研究逐渐增多[8]。美国的Mariz在2014年的神经处理国际会议上提出极大极小博弈,即GAN的训练目标是使生成器G与判别器D达到纳什均衡,此时生成模型G产生的数据分布完全拟合真实数据分布。2017年美国麻省理工学院的Léon Bottou等人提出对于生成样本和真实样本加噪声,并在训练过程中对噪声进行退火。结果表明此方法解决了训练器梯度消失的问题。同年中国科学院尝试使用GAN生成模拟攻击流量以欺骗防御系统,希望借此能发现新的网络防御手段[9]。中国自动化研究所王飞跃研究员认为,GAN通过真与假平行而立,将这一对矛盾对立统一,成为生产数据的一种有效手段。GAN网络的基本框架如图1所示[10]。
图1 GAN的基本框架
设变量zxGDz为随机噪声,x为输入的样本数据,G代表生成模型,D代表判别模型,将D作为一个二分类器,GAN可以表示为式:
其中,logD(x)是判别器的判断;log(1-D(G(z)))表示生成数据的判断,通过持续的极大极小值的相互博弈,循环交替不停优化G和D,直到两个模型到达纳什均衡。GAN的最小化目标函数可能会发生梯度弥散,使目标函数很难再去更新生成器,导致GAN的训练过程不稳定。LSGANs会惩罚远离决策边界的样本,解决上述问题。这些样本的梯度是梯度下降的决定方向。在LSGANs中交叉熵并不关心距离,而是仅仅关注于是否正确分类,其判别器的目标函数为:
生成器的目标函数为:
在训练模型的过程之中,abc满足b-c=1和b-a=2,模型可以缓解训练时的不稳定并且提高生成器的多样性。
2 基于GAN的模拟数据生成算法
KDD99数据集[11]是由美国国防部高级规划署1998年在MIT林肯实验室实行的入侵检测评估项目。实验室建立了一个为期九周的网络模拟环境,在该环境中收集每一个用户类型,所有的网络连接、每种不同类型的网络流量和攻击手段。数据集中包含约五百万条训练数据的网络连接记录,和约两百万条测试数据的网络连接记录。在训练数据和测试数据中,不同数据类型存在着不同的概率分布,其中测试数据中包含有一些并未存在于训练数据集中的数据,可以保证该数据集更具有现实性。NSL-KDD作为KDD99的改进,删除了原来的训练集和测试集中冗余的记录,使得数据集对于学习技术的评估更有效,它是入侵检测领域的标准数据集之一。本文采用NSL-KDD数据集训练生成对抗网络模型,训练集共包含125 972条数据。
2.1 数据样本特征分析
数据集中一个完整的网络连接,是指某一时间从开始到结束的TCP数据包序列。在一时间段内,数据通过网络协议之完成源IP到目的IP的传输。网络连接分为正常和异常两种类型。其中异常数据类型如表1所示。
表1 异常数据类型
典型的数据集中样本由41个特征表示,如下所示:
0,tcp,ftp_data,SF,491,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0.00,0.00,0.00,0.00,1.00,0.00,0.00,150,25,0.17,0.03,0.17,0.00,0.00,0.00,0.05,0.00,normal
0,udp,other,SF,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,1,0.00,0.00,0.00,0.00,0.08,0.15,0.00,255,1,0.00,0.60,0.88,0.00,0.00,0.00,0.00,0.00,normal
0,tcp,private,S0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,123,6,1.00,1.00,0.00,0.00,0.05,0.07,0.00,255,26,0.10,0.05,0.00,0.00,1.00,1.00,0.00,0.00,neptune
其顺序特征的含义如表2所示。训练集中不同攻击类型的比例如表3所示。
表2 数据的41种特征类型
表3 训练集中不同攻击类型的比例
2.2 数据集预处理
数据集的预处理主要包含如下步骤:
(1)标识统一化。将Normal、Dos、Probe、U2L、R2L分别表示为1、2、3、4、5,以便于在GAN网络中进行处理。
(2)数值化。将字符型特征转化为数值型特征,具体而言,分别将3种协议类型、70种网络服务类型、11种网络连接状态和所有攻击类型转化成数字标识。
(3)标准化。在分析过程中,为了降低原始数据值首先对数值化后的数据进行标准化处理,设X'ij为Xij标准化处理后的值,AVGj为平均值,STADj为平均绝对偏差,处理过程如下:
(4)归一化。将数值进行归一化处理至[0,1]区间,得到适用于GAN的数据集,从而适于在其中进行训练。
预处理后的数据如图2所示。
图2 预处理数据集结果
2.3 数据样本生成方法
在上述五种攻击类型中,U2L和R2L两种类型所占比例都极小。本文利用GAN对这两种类型数据进行生成增加其所占的比例。将这两种数据类型的潜在特征分次训练GAN,生成足量样本数据之后,再混入原始数据中,解决该类型样本较少的情况。
选定GAN的Batch_Size,即“尺寸”参数,Batch_Size有两种选择方式:一是选择全数据集,可以更好的进行训练代表样本特征;二是选择最小数量样本训练,即每次只训练一个样本,可以使函数达到最快收敛。结合这两种方法,由上面预处理过程可知,数据类型最少的为U2R仅有52份,从中随机选取50份作为整块数据输入至GAN的模型之中。根据初始数据设置不平衡比例为:
其中,N-为U2L样本数量;N+设置为NORMAL样本数量。在重复利用GAN生成样本过程中,num会随之不断增大,直到为一。此时停止样本生成,样本比例达到平衡。过程中对于不同类型样本进行迭代次数也不一样,需要GAN的迭代生成次数为:
其中,count为不同类型数据需要的迭代次数;N设置为需要生成的数据类型的初始样本数量;x为GAN设置的Batch_Size。在将U2L样本X+导入至GAN模型之后,目标函数变化情况为:
对于鉴别器来说,其数值根据样本的整体特征进行改变。当生成器恢复数据分布的时候,那么无论如何判别器都会表示为0.5。
在训练GAN的过程中,为了进一步加快GAN的收敛速度,采用RMSprop算法优化损失函数,产生数据的步骤和目标函数迭代变化如图3所示。
图3 D与G的目标函数迭代变化情况
在图3中可以看出,在对抗网络模型刚开始学习的时候,生成器和判别器的目标函数波动很大,此时对于特征的分析不够全面,损失函数逐步升至最大值。随着两者的持续博弈,G对于干扰特征逐一舍弃,提取正确的特征值生成数据,目标函数因此趋于稳定,损失函数逐渐减至最小值。经过三千次左右的训练之后,目标函数和损失函数基本维持不变。最终经过五千次训练之后,认为此时模型训练完毕。
所生成的模拟数据,如图4所示。
图4 生成模拟数据截图
通过对比样本特征,此时生成器已经训练完毕,可以利用生成器对于U2L数据类型再次进行生成运算,直到得到与NORMAL数量相同的数据量,此时运算结果数据特征可认为等同于真实数据。对于其他异常数据类型都进行和U2L的同样操作,最终获得所有数据类型平衡的生成样本。将生成数据与原始数据混合,通过统计标签得出混合之后数据集中每种类型所占比例。
3 数据质量评估
3.1 基于统计方法评估
通过GAN生成数据之后,将生成的模拟样本与原始真实数据集样本混合,选择分类器对二者的混合样本进行分类。如果分类器分辨不出两者,表示生成的模拟数据质量较好,反之,分类器的分类效果越好,则说明生成的数据质量不好。
收集所有生成数据,将数据集按照5大类型分类统计,并计算所有生成数据在生成样本中的比例。其中除去正常的NORMAL类型之外,PROBE中包含 ipseep,satan,nmap等类型,DOS 中包含apache2,back,nepture等类型,U2R 中包含 buffer_overflow,roorkit等类型,R2L中包含ftp_write,anmpgetattack等类型。
K-means聚类算法[12]将样本划分成具有不同特征的子集,随机选定K个聚类核心,利用欧式距离计算每个数据到各个聚类中心的距离。然后将数据聚集到与其特征最相近的聚类核心附近,在所有数据子集都分配结束后再重新计算每个子集的质心,不断重复这一过程直到算法趋向于某一数值时停止。
将生成数据和原始数据混合后的聚类中心特征值如表4所示,数据特征由聚类中心特征值表示。在通过K-means聚类算法分析后,在K=5时聚类效果最好,能够有效解决特定攻击类型样本数据不足问题,同时生成的样本数据和原本的数据特征相似,能够达到较高的数据质量。
表4 聚类不同类型特征值
3.2 基于深度学习模型评估
将GAN生成的异常数据混合到初始样本中,使原本不平衡的数据比例达到平衡,再导入分类器训练。由于数据集为一维数组,分类器使用的是三维数组,所以将数据从一维数组转换为三维数组后进行训练。
深度神经网络增加网络的深度和拓宽网络的宽度可以提高其性能和效率。但也会出现过拟合,相对而言,增加网络的大小会导致网络计算量的剧增。GoogleNet在卷积神经网络上采用了一种叫做Inception模块的网络结构,利用卷积层对特征降维,限制网络参数的大小,并在网络模型中添加一个归一化层(BN),用以消除如果前一次发生变化而导致接下来层数受到的影响。使用BN层可以有效的防止过拟合,有效的提高模型的泛化能力。分类器将一个相对较大的卷积拆分成几个更小的卷积,将n*n的卷积分别拆成n*1卷积和1*n卷积。分类器在计算的时候既可以节约大量参数,加速运算并减去过拟合,提高运算效率,又可以增加了一层非线性扩展模型表达能力。这样非对称的卷积结构拆分,结果比对称地拆分为几个相同的小卷积核效果更明显,可以处理更多、更丰富的空间特征、增加特征多样性。
在样本导入Googlenet之前,将样本分为训练集和测试集。训练过程应该为:
(1)设定训练样本数量,训练速率,样本最小误差。
(2)初始化卷积层和池化层的权值向量,随机将一组非零向量值赋值给该向量
(3)输入训练样本
(4)样本进行前向输出,得到输入输出数据,记录输出层的输出信号。
(5)利用输出信号的和期望值计算误差,与最小误差比较后,如果误差较小那么直接转入第七步,否则进入第6步。
(6)判断训练次数是否达到最大迭代次数,如果是进入下一步,否则重新更新权值向量
(7)判断是否完成所有样本的训练,如果是结束训练,如果未结束继续训练。
4 结论
采用机器学习方法进行网络攻击和异常行为检测,对训练数据的样本量依赖性高,不同攻击类型数据的不平衡,导致了对特定类型攻击的检测效果差。本文利用生成式对抗网络,生成特定攻击类型的样本数据,解决了NSL-KDD99数据集中特定攻击类型样本数据过少导致检测模型无法检测出这类攻击的问题。进一步改进了生成对抗网络,解决了数据生成器不稳定的问题。通过K-means算法验证了数据生成模型的有效性,生成的数据可以用于异常检测模型的训练。