APP下载

一种基于少样本且不均衡的网络攻击流量检测系统

2021-03-09石欣然张奇支赵淦森郑伟平

关键词:类别卷积流量

石欣然,张奇支,赵淦森*,郑伟平

(1. 华南师范大学计算机学院,广州 510631; 2. 广州市云计算安全与测评技术重点实验室,广州 510631)

随着信息技术的飞速发展,互联网规模正在逐渐扩展,网络中流量急剧增长,网络攻击问题愈发凸显. 网络中攻击流量通过各种手段隐藏在海量的网络流量数据当中,如何从海量数据中准确检测出攻击流量成为如今网络安全所面临的难题[1-3]. 近几年,随着云计算、大数据和人工智能等技术的发展,有监督的机器学习方法被广泛应用于攻击流量检测任务中[4-6]. 此类方法利用大量带标签数据训练模型,对已知类别的样本具有良好的分类效果. 但它基于一个假设前提:训练样本与测试样本属于同一分布. 这种假设使得有监督的分类方法无法对未知类别的流量进行预测,而且,若将一个已经训练好的模型放入新的网络环境中,则需要在该网络环境中重新进行数据采集,并且标注大量数据用于模型的训练.

除上述问题外,在真实网络中,还存在样本不均衡的问题,即存在正常流量规模远大于攻击流量规模的问题. 目前研究中,解决样本不均衡的问题手段主要有3种[3,7]:(1)调整样本权重:通过给少数类别的样本增加权重,或为多数类别的样本减少权重;(2)样本采样:利用过采样或欠采样的方法,构造均衡的训练数据;(3)生成攻击样本:利用GAN网络生成攻击样本,构造样本均衡的训练数据.

为了减轻数据标注以及样本不均衡对模型检测效果的影响,本文首先针对一种少样本且不均衡的攻击流量检测场景,即训练数据仅包含少量蜜罐捕获的攻击流量且无正常流量,设计了一个基于少样本且不均衡的网络攻击流量检测系统,并构建了基于孪生网络和深度学习的网络攻击流量检测模型(CNN-Siamese);然后,结合迁移学习、自编码器,构建了基于预训练的检测模型(AE-CNN-Siamese);最后,对孪生网络中常用的损失函数进行了改进.

1 相关技术

1.1 孪生网络

孪生网络[8]是少样本学习的一种解决思路(图1):将输入的2个样本通过子模型计算得到映射在高维空间的向量,通过对比向量间的欧氏距离,判断2个样本是否为同类(若距离相近则为同类样本,反之则为不同类样本). 在少样本的问题中,通过先将样本两两构造成样本对、再进行样本匹配的方式,有效地解决了样本量缺少的问题. 孪生网络最先被应用于图像分类领域,KOCH等[9]将其应用在Omniglot数据集中,在每个类别仅包含20个训练样本的情况下,达到了92%的分类准确率. 随着研究的深入,孪生网络在目标领域中取得了良好的成果并被广泛应用[10-11].

图1 孪生网络结构

1.2 迁移学习

迁移学习[12]是为了解决一些研究领域中由于数据采集成本昂贵而难以构造大规模高质量的数据集的问题. 其实现思路为:给定1个源数据集DS及1个学习任务TS、1个目标数据集Dt及1个学习任务Tt,将模型在DS和TS上学习到的知识应用在目标数据集Dt上,以提高预测函数ft(x)的效果. 一般通过参数或超参数的迁移,在原有的网络基础上增加新的网络层来实现. SUN等[13]将基于迁移学习改进的TrAdaBoost算法应用在网络流量分类任务中,提高了分类的准确率.

1.3 蜜罐技术

蜜罐技术[14]是为了扭转网络安全攻击事件中防御方与攻击方不对称的局面而提出的主动防御技术,本质上是对攻击方进行欺骗:首先,通过部署一些作为诱饵的主机、网络服务或信息,诱使攻击方对攻击者实施攻击,从而对攻击行为进行捕获;然后,分析攻击行为,了解攻击方所使用的攻击方法,推测攻击意图和动机,使防御方可以增强网络防护. 不同的蜜罐对应不同的网络服务,因此,可以通过蜜罐所应对的攻击类别标记对应数据的标签.

2 系统设计及模型优化

2.1 系统框架设计

为了解决网络安全检测中数据采集、数据标记费时费力以及样本不均衡的问题,本节提出一种基于少样本且不均衡的攻击流量检测系统(图2).

该系统包含4个模块:

(1)数据采集模块. 该模块包括2个功能:一是通过部署各类常见网络服务的蜜罐系统,捕获网络环境中的恶意流量;二是通过抓包软件获取网络环境中的全部流量数据. 其中,蜜罐所捕获的流量为本文研究问题中的训练数据.

图2 基于少样本且不均衡的攻击流量检测系统框架

(2)数据预处理模块. 该模块主要包括以下几个部分:

①流量切分. 根据五元组(源IP、源端口、目的IP、目的端口、传输层协议)的异同划分网络流量. 一般情况下,设置60 s或90 s的空闲时间表示流结束.

②流量清洗. 若训练数据与测试数据来自不同的网络环境,IP地址与MAC地址不具备显著的分类效果,则需要对这2个地址数据进行清洗. 清洗后需要注意,一些网络流的IP与MAC地址虽然不同,但其上层内容相同,导致产生相同的样本,为了减少训练误差,需要对样本进行去重操作.

③生成灰度图. 一般情况下,网络流具有前期可识别的特点,因此,将网络流的大小固定为784字节,如果长度大于784字节则截取多余部分,否则使用0x00在后面进行补充. 长度统一后,按照二进制格式转为28*28的灰度图片,其中每个字节对应灰度图的一个像素,0x00对应黑色,0xff对应白色.

(3)预测模型构造及训练模块. 主要分为2个部分:训练数据的构造以及模型的构造.

孪生网络训练数据需要构造为样本对的形式. 同类别样本对的标签为1,不同类别样本对的标签为0. 需要注意的是,若将已有样本两两构成样本对,会造成以下2个问题:一是样本数量发生组合爆炸的问题,二是不相似样本对的数量远大于相似样本对的数量,出现样本不均衡的问题. 因此,训练数据需要进行采样,以构造数量合理且均衡的训练数据.

模型的搭建主要在于子模型的结构设计. 传统有监督方法[15-18]中,卷积神经网络是最常用的网络,主要设计为卷积层-池化层-卷积层-池化层-全连接层的结构. 其中卷积层通道数通常设置为32、64或36、72. 这是因为传统有监督方法需要大量训练数据,在实现分类目标时,只需要对每个类别挖掘出一个或几个典型特征即可完成分类任务.

而孪生网络通过对比相似度,从而判断样本是否为同类别,这就表明其对特征挖掘的要求更高. 因此,本文设计了基于孪生网络的检测模型(CNN-Siamese). 图3为CNN-Siamese的子模型结构图,该结构在第2个池化层后再添加1层卷积层提取特征,并将3个卷积层的通道数调整为64、128、256,使CNN网络可以提取更多不同维度的特征. 通过将2个完全相同的子模型进行拼接,得到CNN-Siamese.

图3 CNN-Siamese的子模型结构

(4)预测模块. 孪生网络通过对比样本间的距离来分类:从每个已知标签的样本集合中,随机抽出一部分样本与待测试样本计算距离,根据待测试样本与每个已知类别的平均距离来判断该样本的类别归属. 具体预测步骤见算法1.

算法1孪生网络预测算法

输入:经过训练的模型M,已知标签的样本集合DH,其中包含K个类别(A1,A2,…,AK),待测试样本集合DTest.

输出:模型预测分类结果.

forSiinDTestdo

fork=1,2,…,Kdo

选择C个样本(a1,a2,…,aC)Ak

Dis(Si,K+1)=th∥设置第K+1类为未知类别样本,待测试样本与该类别样本的平均距离设置为判断阈值th

di=Dis(Si,1),yi=1

fork=2,3,…,K+1 do

if Dis(Si,k)

di=Dis(Si,k),yi=k∥说明Si属于第k类

返回DTest的预测结果.

2.2 基于预训练改进的孪生网络模型

CNN-Siamese虽然可以解决少样本且不均衡的网络攻击流量检测问题,但仍然存在一些缺陷:样本对的构造需要依赖样本标签,因此,训练中无法使用正常流量样本,从而无法充分挖掘此类样本的特征;预测效果受到训练样本对构造时采样质量的影响,造成模型预测的不稳定性.

为了解决以上问题,在CNN-Siamese的基础上,提出了一种基于预训练的改进模型(AE-CNN-Siamese):利用CNN-Siamese的子模型构造一个对称的自编码器,在使用完整的数据集对自编码器进行训练后,自编码器中的编码器可以作为一个良好的特征提取网络,直接迁移至孪生网络子模型中,最后通过冻结部分层的权重及微调其他层的权重来提高模型预测效果. 预训练的自编码器结构是以孪生网络子模型为基础所构造的对称结构(图4),其中编码器部分为:输入层-卷积层C1-池化层P1-卷积层C2-池化层P2-卷积层C3-Flatten层-全连接层FC1.

图4 自编码器的网络结构

本文选择保留卷积层之间连接的全连接层,主要原因如下:

(1)若没有增加全连接层,所构造的自编码器会出现3个卷积层相连的情况,则不能得到良好的特征提取效果.

(2)由于孪生网络子模型中带有全连接层部分,得到的权重可以作为初始化权重应用在孪生网络子模型中.

(3)若不加入全连接层,网络层与全连接层权重的训练需要依靠构造出的训练数据,则在训练数据中不包含正常流量样本的情况下,仍然会出现预测结果不稳定的问题.

改进后的攻击流量检测系统框架如图5所示.

图5 基于预训练改进的攻击流量检测系统

与图2相比,改动的模块包括:

(1)在数据预处理后加入预训练模块. 利用完整的数据集训练一个与孪生网络子模型相关的自编码器,并将预训练后的编码器权重迁移至孪生网络子模型中.

(2)模型训练步骤调整为模型的权重微调. 将卷积层与池化层之间的权重进行冻结,保持CNN特征提取的稳定性,仅训练卷积层与全连接层的权重.

2.3 改进损失函数

孪生网络的损失函数一般采用对比损失(Con-trastive Loss)[12],公式如下:

(1)

其中:N为样本对的数量;di=‖a-b‖2,表示第i个样本对中的样本a与样本b之间的距离,一般选用欧氏距离;yi为样本对Si的标签,对同类别样本,yi=1,否则yi=0;m是设定的参数,默认为1. 模型中还包含一个判断2个样本是否为同类别样本的阈值th:当di≤th时,2个样本视为相同类别,反之视为不同类别.

但Contrastive Loss存在以下问题:

(1)模型在训练的过程中,为了降低损失函数,训练目标设为:

d(y=1)→0,d(y=0)→m2.

(2)

在实际样本空间中,当y=1时,只有完全相同的2个样本才不会存在距离;当y=0时,由于平方计算的引入,训练目标受m值变化的影响较大. 如当m=1时,不相似样本的训练目标为d>1;当m=2时,不相似样本的训练目标扩大为d>4. 但样本特征空间在经过归一化操作后,即使是不相似样本也不会存在较大的距离.

(3)

由式(3)可发现:在梯度下降的计算过程中,m的取值会影响梯度的计算;由于平方计算的引入,梯度值随着迭代深入存在下降的趋势,这使得模型在后期的收敛速度减缓.

基于上述考虑,本文将Contrastive Loss改进如下:

(4)

改进后的损失函数与Contrastive Loss存在以下几点不同:

(1)对于相似样本对引入了参数m1,其目的是当相似样本对距离di

(2)去掉不相似样本对距离的平方计算,消除了参数对梯度计算的影响.

(3)梯度不会随训练轮数增加而减缓,加快了模型的收敛速度.

3 实验结果与分析

首先,在样本量缺少且类别缺失的情况下,对比CNN-Siamese、CNN、CNN-SVM的检测效果;然后,对比AE-CNN-Siamese与CNN-Siamese的稳定性;最后,对比本文改进的损失函数与Contrastive Loss的训练收敛速度以及训练效果.

3.1 实验数据集

实验选用USTC-TFC2016数据集[16],该数据集包含两部分:一部分是CTU研究人员在2011—2015年在实际网络中收集到的10种攻击软件流量数据;另一部分是IXIABPS采集的10种正常流量数据.

3.2 实验评价指标

采用准确率(Accuracy)、误报率(FPR,False Positive Rate)和漏报率(FNR,False Negative Rate)作为实验评价指标. 由于正常流量类别样本不存在标签,实验会将全部的正常流量归类为同一类样本,即未知流量. 准确率用于评价多分类情况,即模型能否一一区分已知的10类恶意流量样本和未知类别样本. 漏报率与误报率则用于评价二分类情况,此时我们将10类恶意流量样本视为一种类型,用这2个指标来评价模型能否区分恶意流量样本与正常流量样本.

3.3 实验设置

3.3.1 训练数据设置 由于本文的研究问题为少样本且类别缺失的网络攻击流量检测问题,实验将从攻击流量数据中抽取30%的样本假设为蜜罐捕获的带标签数据,剩余的数据作为测试数据. 实验中通过调整训练样本占比,分析训练数据数量对结果的影响. 为了避免单次实验结果不稳定的问题,采用多次实验的平均值进行记录.

3.3.2 主要参数

(1)Contrastive Loss参数m. 由式(1)可知m值将影响不相似样本对的损失值计算. 一般情况下,m默认设置为1,经实验证明本文研究问题下,m=2是一个较为理想的参数设置,因此,除结构对比部分采用m=1的默认设置外,其余实验均采用m=2的参数设置.

(2)预测阶段从已知样本中抽取的样本数量(记做C). 一般情况下,设置C=1,即从每个已知类别中抽取1个样本计算与待测试样本的距离,从而判断待测试样本的类别归属. 由于抽取样本具有随机性,导致预测结果出现波动,因此C可以设置为大于1的值,此时待测试样本类别归属根据该样本与某个类别中C个样本的平均距离来判断.

(3)训练样本构造时的采样次数(记做T). 训练样本构造时,为了保证样本对数量不会发生组合爆炸的情况,进行了采样处理. 在加入预训练方法后,权重微调的参数规模远大于样本量,所以需要提高采样次数以增加训练样本规模,提升模型微调效果.

3.4 结果分析

本文所有算法均采用Python开发工具Pycharm实现. 计算机配置如下:内存16G,双核CPU,单张GTX 1080Ti显卡.

3.4.1 子模型结构对比 将CNN[16]和LeNet[18]的网络结构分别作为孪生网络的子模型构建CNN2-Siamese和LetNet-Siamese,与CNN-Siamese的子模型进行对比. 实验结果(表1)表明:CNN-Siamese明显优于其他结构,当训练数据规模达到假设前提最大的情况时,CNN-Siamese的子模型结构更适用于孪生网络方法中.

表1 不同子模型结构的实验结果

3.4.2 与现有方法对比 将CNN-Siamese与CNN[16]、CNN-SVM[17]在检测的准确率、漏报率和误报率3个方面进行对比. 实验中参数设置如下:学习率=0.001,th=0.5,m=2,C=1,T=1. 由于CNN和CNN-SVM不支持未知类别的预测,因此在实验过程中进行了未知类别的阈值探索,以使2个方法均能适应本文的检测问题.

实验结果(图6)表明CNN-Siamese具有明显的优势:CNN和CNN-SVM虽然能够在已知类别上进行准确的分类,但在未知类别上的分类准确率仅70%左右,即存在30%左右的误报率,而CNN-Siamese可以将误报率降低至10%以下.

图6 3种模型的实验对比

3.4.3 预训练的实验结果与分析 将CNN-Siamese、AE-CNN-Siamese、DAE-CNN-Siamese在准确率、误报率、漏报率3个方面进行对比,其中,DAE-CNN-Siamese为降噪预训练模型,该模型与AE-CNN-Siamese的区别是在自编码器训练阶段对输入的数据增加了少量噪声. 对比实验中,CNN-Siamese仅研究了T=1的情况,因为无预训练操作,模型特征提取会随着输入数据而变化,仍然存在不稳定性;AE-CNN-Siamese、DAE-CNN-Siamese均研究了T=1和T=5的情况.

由实验结果(图7)可知:(1)预训练模型拥有更低的误报率,并且不存在明显波动. (2)由于预训练网络仅微调最后一层卷积层与全连接层的权重,参数量占比较大,所以当数据量较小时,预训练模型的漏报率较高,随着数据规模扩大,预训练模型的预测效果比无预训练模型更稳定,且在漏报率和准确率逐渐接近的情况下,将误报率降低至2%以下. (3)预训练模型受T的取值影响较大,当T提高时,预测效果明显提升,并且在数据规模大于20%后,该模型在准确率与误报率上的表现逐渐超过无预训练模型,漏报率也随着样本规模的扩大而逐渐降低. (4)降噪功能对预测效果有一定影响:当数据量较小时,无降噪的预训练模型(AE-CNN-Siamese)的准确率、漏报率、误报率均优于有降噪的预训练模型(DAE-CNN-Siamese);随着数据量的提升,误报率出现一定的波动,此时降噪的预训练模型(DAE-CNN-Siamese)表现了更好的鲁棒性.

图7 检测模型有无预训练的实验结果对比

3.4.4 损失函数的实验结果与分析 由于改进的损失函数引入了2个需要人工设置的参数,因此,本实验设置了3种参数组合,并与Contrastive Loss中参数m=2的结果进行对比. 具体设置如下:

(i)Contrastive Loss,参数m=2.

(ii)改进的损失函数,参数m1=0,m2=2.

(iii)改进的损失函数,参数m1=0.25,m2=2.

(iv)改进的损失函数,参数m1=0.5,m2=2.

在改进的损失函数中,m2与不相似样本相关,其作用等同于Contrastive Loss的参数m,均是调整模型对不相似样本在训练过程中的关注度. 此处对m2=2的设置不再进行过多的讨论.m1与相似样本相关:当m1=0时,代表训练过程中期望将相似样本的距离尽可能缩小,以降低损失;实验中根据距离判断样本是否相似的阈值th=0.5,设置m1=0.5,此时当样本被准确判断为相似样本时,该样本的损失值为0;根据3.4.1~3.4.3的预测结果分析,当y=1时,d基本集中在(0,0.2)的区间范围内,因此,设置m1=0.25的情况进行对比.

本节对比2种损失函数以及改进的损失函数在不同参数条件下的预测效果,实验均采用AE-CNN-Siamese的模型,且设置参数T=1. 由实验结果(图8)可知:(1)在前20轮迭代中,改进的损失函数在收敛速度上明显优于Contrastive Loss;(2)随着迭代深入,参数设置(ii)、(iv)下的预测准确率不再有明显的提升;(3)Contrastive Loss虽然在第20轮之后的迭代过程中逐步靠近参数设置(iii)下的实验结果,但前者仍然略低于后者;(4)改进的损失函数在收敛速度明显优于Contrastive Loss,预测效果取决于模型对相似样本的关注度.

图8 不同损失函数设置下模型预测准确率的变化趋势

3.4.5 模型运行效率实验 本节将对几种采样参数不同设置情况下AE-CNN-Siamese的运行效率进行分析. 由结果(表2)可知:参数C对预测阶段有着重要的影响;参数T对模型的训练时长产生影响,随着T的增加,训练时长有所增加;预训练增加了模型整体的运行时长. 本文研究问题是基于少样本的前提,因此训练时长占比较少. 预测和预训练时长与数据整体的规模直接相关,但预训练仅对整体数据训练一次,而参数C的增加则将增加待测试数据的计算次数,从而增加整体运行时长.

表2 AE-CNN-Siamese的运行效率分析Table 2 The analysis of AE-CNN-Siamese operating efficiency

4 结论

为了解决网络流量样本标注困难以及样本不均衡的问题,本文针对一种少样本且分布不均衡的网络攻击流量检测场景,设计了一个基于少样本且不均衡的网络攻击流量检测系统,并通过引入孪生网络,构建了基于孪生网络和深度学习的网络攻击流量检测模型(CNN-Siamese);针对CNN-Siamese因样本对构造采样造成预测结果的不稳定性问题,结合预训练方法,改进得到基于预训练的检测模型(AE-CNN-Siamese),最后改进孪生网络常用的损失函数.

实验结果表明:(1)CNN-Siamese在本文的研究问题下可以达到90%以上的分类准确率;与CNN、CNN-SVM等模型相比,在将漏报率保持在1%左右的前提下,将误报率降低至10%以下. (2)AE-CNN-Siamese通过调整训练样本对构造时的样本采样次数,将分类准确率提升到95%以上,并在漏报率仍保持在1%左右的情况下,降低了误报率,且不会产生明显波动. (3)在保证预测效果准确的前提下,改进的对比损失函数加快了AE-CNN-Siamese的收敛速度.

未来工作中,可以对未知攻击类型进行深入研究,或引入流量的时序特征,利用循环神经网络开展后续研究.

猜你喜欢

类别卷积流量
直播助农冲流量 勿忘质量
一种基于卷积神经网络的地磁基准图构建方法
基于3D-Winograd的快速卷积算法设计及FPGA实现
张晓明:流量决定胜负!三大流量高地裂变无限可能!
一种并行不对称空洞卷积模块①
寻找书业新流量
一起去图书馆吧
从滤波器理解卷积
过去的一年开启了“流量”明星的凛冬时代?
简析基于概率预测的网络数学模型建构