郭楠馨, 林宏刚, 张运理, 陈 麟
(1.成都信息工程大学网络空间安全学院,四川 成都 610225;2.成都信息工程大学先进密码技术与系统安全四川省重点实验室,四川 成都 610225;3.网络空间安全态势感知与评估安徽省重点实验室,安徽 合肥 230027)
由于互联网的普及,各种网络攻击也日益频繁[1],攻击者利用僵尸网络执行各种网络犯罪活动[2]。近年来,僵尸网络的对抗性有所提升,针对蜜罐开源项目采取反制措施,在漏洞利用方面更加迅速[3]。现有的僵尸网络家族正在不断进化,各种新型攻击层出不穷[4]。因此,为保障网络环境的安全,对僵尸网络的检测至关重要。
国内外研究者提出了众多基于机器学习算法的僵尸网络检测的方案。周昌令等[5]通过研究校园网上的DNS流量后,提出了18个相关特征,并采用随机森林算法实现FFSN的检测。Khan等[6]提出了一种多层混合技术,根据僵尸网络流量的会话特征,采用基于机器学习的分类器,识别僵尸网络流量。上述方案基于传统机器学习算法,通过人工提取特征实现僵尸网络的检测。然而,面对复杂多变的网络世界,人工提取特征存在难度大、通用性不够等缺点。因此,有研究者提出基于深度学习的僵尸网络检测方法。McDermott等[7]使用双向长期短期记忆递归神经网络(BLSTMRNN),并结合词嵌入实现Mirai僵尸网络的检测。Chen等[8]使用CNN进行特征提取,并使用决策树算法进一步提高检测率,实验结果表明,卷积特征对于僵尸网络检测是有效的。牛伟纳等[9]提出了一种结合CNN和RNN两种神经网络的方法,可以提取时间与空间两个维度上的特征。
基于深度学习的僵尸网络检测方法虽然取得好的效果,但依赖大量的样本训练[10]。然而在现实的网络环境中标记的僵尸网络样本不够充分,且占比很低。例如,零日僵尸网络是在漏洞发现当天发起的僵尸网络攻击,短时间内难以获取足够多的攻击样本,可以将其视为小样本僵尸网络检测问题。小样本学习旨在通过几个甚至一个样本完成任务,现在常用元学习方法来解决小样本问题[11]。元学习能够通过学习大量的任务,获得足够的先验知识,从而快速学会新的任务[12]。Koch等[13]提出了孪生神经网络(siamese neural networks),将两个结构相同的神经网络拼接,且共享权值,比较输入两个样本的相似度。Snell等[14]提出了原型网络(prototypical networks),通过神经网络将D维数据映射到M维的特征空间,新的特征向量的均值心作为每类数据的原型点,并用欧几里得距离计算原型点之间的距离。Sung等[15]提出了关系网络(relation network),通过特征嵌入模块提取样本特征,并用关系模块计算样本特征之间的相似度,两个模块都采用CNN。该方法在计算样本间度量没有预定义一个固定的度量方法,而是通过神经网络学习一个度量函数,使模型表达更准确。Vinyals等[16]提出了匹配网络(matching network),该方案将注意力机制和长短期记忆网络(long short-term memory,LSTM)相结合,将支持集和查询集输入CNN提取图像特征,然后输入双向LSTM中获取图像的特征向量,最后用余弦距离注意力判断样本相似度。上述方法都是基于度量的元学习,在小样本分类问题上取得了不错的成果。
近几年,注意力机制在小样本学习中的应用也越来越广泛。注意力机制的核心思想是忽略无关信息关注重点信息[17],能够增强模型的鲁棒性、泛化性和可解释性[18]。Ren等[19]提出了注意力吸引网络,在预训练好的初始分类器面对新的分类任务时,会训练一组新的权重,在不遗忘旧的分类任务的前提下实现对新类型的分类。Gao等[20]提出了一种基于混合注意力机制的原型网络,包括实例级注意力用于在支持集中选择拥有更多信息的实力,降低噪声干扰的问题;特征级注意力着重关注特征的重要维度,缓解特征的稀疏性。Wu等[21]在关系网络的基础上引入自注意力机制,用于获取特征的非局部信息。
为解决传统深度学习对未经学习的任务泛化能力不足、依赖大量标记数据的问题,本文根据关系网络[15]的思想,提出基于度量的元学习的僵尸网络检测方法。通过简单的卷积神经网络提取网络流量特征,并学习出一个度量函数,用于比较样本间的相似度。在面对未知的僵尸网络类型时,能通过少量的样本信息快速完成分类任务。由于卷积神经网络中的感受野仅覆盖局部信息,因此在提取特征时引入非局部注意力机制[22],可以提取网络流量特征的全局信息,考虑网络流量各点之间的联系,使僵尸网络的检测结果更加准确。
提出基于元学习和注意力机制的僵尸网络检测方法,整体流程如图1所示。首先对网络流量数据进行预处理,将处理后的数据输入特征提取模块,在得到特征图后还需将其输入比较模块,获取两个样本之间的相似度。当模型获得足够多的先验知识,便能利用很少的样本完成新的分类任务。
图1 检测方法流程图
元学习在训练和测试阶段的基本单元为元任务,而非单个样本。元任务可以表示为N-way、K-shot小样本问题,其中N-way表示N个类型的数据,K-shot表示每种类型数据包含K个样本数量,且K较小。本文数据集区别于传统机器学习的数据集,由多个元任务组成元训练集和元测试集,其中元训练集和元测试集的样本类型不同。每个元任务包含支持集,查询集0,1)。支持集表示N×K个已知标签的样本,查询集表示N×B个待检测的样本。
Vinyals等[16]提出了一种用于元学习模型的训练策略。在训练阶段,每个元任务都模拟测试阶段的N-way、K-shot问题,进行周期性的迭代训练,学习足够的元任务T={task1,task2,…,taskn},直至收敛。在面对新任务时,通过极少量的新样本,便能快速学会新任务taskn+1。
1.1 数据预处理
1.1.1 网络流量处理
实验使用的数据为原始的网络流量,需经过预处理后输入模型,具体流程如图2所示。将原始流量按照五元组(源IP、目的IP、源端口、目的端口、协议)切分为多个子集[23],每个子集包含多个数据包,按照时间顺序排列组成一个数据流。由于每条数据流的大小不一,而检测模型要求输入固定大小的数据,因此还需对数据流进行采样。数据流的前面部分包含了主要的建立连接过程和内容交换信息,后面部分能提供的特征信息较少,所以本文截取数据流的前784字节,不足则补0x00。此外,还需对数据流进行匿名化和图像化处理。
图2 数据预处理流程图
数据匿名化:本文使用的数据集为实验室网络采集的流量数据,IP地址和MAC地址单一且固定,在模型进行特征提取时会干扰实验结果,因此对IP地址和MAC地址进行随机化处理。
转换为灰度图:将统一大小后的数据按照每个字节二进制值转换为灰度图,其中0xFF代表黑色,0x00代表白色[23]。
1.1.2 小样本数据集构造
在僵尸网络检测中,每次训练都从元训练集中任意选取一种僵尸网络类型,并从选取的僵尸网络类型中随机采样K+B个恶意样本。再从元训练集中随机采样K+B正常样本。其中,K个恶意样本和K个正常样本作为支持集,剩下的2B个样本作为待检测的查询集。这样的一次采样训练过程称为一个episode。
元测试集中的任务是在训练过程中没有出现的新任务,其支持集和查询集构造方法与元训练集相同。
1.2 模型总体框架
本文提出的僵尸网络检测模型分为特征提取模块和比较模块两个部分,模型总体框架如图3所示。将通过预处理后的查询集中的样本xi和支持集中的样本xj输入特征提取模块中,生成特征图f(xi)和f(xj),再将特征图串联得到[f(xi),f(xj)]。将[f(xi),f(xj)]输入到比较模块中,得到两个样本的相似性得分g([f(xi),f(xj)]),范围是[0,1]。样本集包含正常流量样本(负样本)和僵尸网络样本(正样本),标签分别为0和1。
图3 模型总体框架
查询集中的样本会和支持集中的样本一一比较,得到与K个正样本的相似性得分均值:
与K个负样本的相似性得分均值:
式(1)、(2)中xjm和xjn分别表示正样本和负样本。
在训练过程中得到Cm和Cn后,进行误差反向传播,直至收敛(见图1)。在测试过程中,将元测试集输入训练好的模型中,得到Cm和Cn后,比较Cm和Cn的大小。若Cm大,预测标签为1;反之,标签为0。
1.3 模型网络结构
特征提取模块和比较模块都由卷积神经网络实现,网络结构如图4所示。特征提取模块由4个卷积层和注意力机制组成,其中Block表示卷积层,Attention Block为非局部注意力机制。图4中“Conv,3×3,64”表示卷积操作,卷积核的大小为3×3,通道数为64;“BN,64”表示批量标准化,通道数为64;“ReLU”表示使用修正线性单元作为激活函数;“Max-Pool,2”表示最大池化,池化核大小为2×2。比较模块中“Concatenation”表示将特征提取模块输出的两个特征图串联起来;“FC,8”和“FC,1”表示全连接层维度分别为8和1;输出层通过Sigmoid函数得到一个实数。训练过程中,不使用预设的固定的线形度量算法,如欧式距离、余弦距离等,而是学习出一个非线性的相似度度量,使模型在面对多种僵尸网络类型时效果更好。
图4 僵尸网络检测模型网络框架图
特征提取模块是一个双路处理的卷积神经网络,将两个尺寸为28×28×1的样本图片输入到特征提取模块中得到两个尺寸为5×5×64的特征图;再将特征提取模块输出的两个特征图输入到比较模块中,通过Concatenation将两个特征图串联,得到尺寸为5×5×128的特征图;特征图经过两个卷积层和两个全连接层,最后得到两个样本的相似度得分。
1.4 非局部注意力机制
在卷积神经网络中,感受野只考虑了局部范围,如卷积和池化操作。为捕获远距离位置的依赖关系,通常做法是叠加多个卷积模块。但导致感受野的效率低,且增加网络层数会提高网络设计难度,因此本文在特征提取模块引入非局部(Non-Local)注意力机制[22]。Non-local操作对于二维图片,可以捕获空间位置的长范围依赖,实现远距离的信息传递,获取更多信息,具体的实现为
式中:X表示输入特征图,Y表示输出特征图,且两者大小相同;i表示X某一像素点的索引,j表示除i外所有位置的索引;N表示X中像素点个数,用来进行归一化处理。函数f计算i和j之间的相似关系,采用嵌入高斯公式:
式中,公式嵌入项 θXi=WθXi,φ(Xj)=WφXj。
函数 g 用来计算j在X中的特征表示,可以看作1×1的卷积:
图5展示了Non-Local模块实现的具体过程。输入特征图X的长和宽分别为H、W,通道数为C,批量大小为N。X首先经过3个1×1的卷积核,即经过3个线性变化 θ、φ、g 得到 θ(Xi)、φ(Xj)、g(Xj),使通道数减半,减少计算量;对θ(Xi)、φ(Xj)进行维度变换,再用softmax函数进行归一化处理:
图5 Non-local模块示意图
对得到的g(Xj)先进行维度变换,再和f'进行矩阵相乘得到Y;最后将Y再进行维度变换,并经过一个1×1的卷积核得到Z:
Z和X的大小和通道数相同,这样便于将Non-Local块引入现有的网络结构中。
2.1 实验数据与环境
实验使用的数据集为ISOT Botnet数据集[24]和CTU-13数据集[25]。ISOT Botnet数据集包含了P2P僵尸网络和正常流量。CTU-13数据集包含了13个不同场景下的僵尸网络流量。本文实验采用其中的正常流量和部分僵尸网络流量(Neris、Rbot、Waledac、Zeus、Virut、Fast-Flux)。
实验环境为:深度学习框架Pytorch;处理器是CPU:i7-7700,GPU:1080TI。
2.2 评价指标
本文采用准确率(accuracy,ACC)、检测率(detection rate,DR)、误报率(false alarm rate,FAR)作为评价指标。
式中:TP表示僵尸网络流量被分类为僵尸网络流量个数;FP表示僵尸网络流量被分类为正常流量个数;TN表示正常流量被分类为正常流量个数;FN表示正常流量被分类为僵尸网络流量个数。
2.3 实验设置
实验采用2.1节的数据集,其中Neris和Rbot为IRC僵尸网络;Waledac和Zeus为P2P僵尸网络;Virut和Fast-Flux为HTTP僵尸网络。为了模拟小样本场景下的僵尸网络检测,训练数据和测试数据不能重叠,且僵尸网络类型不能相同。因此将上述按照协议分类的3种僵尸网络中的1种作为元测试集,剩余2种僵尸网络作为元训练集,共有3种组合方式。例如,将P2P僵尸网络(Waledac、Zeus)和 HTTP僵尸网络(Virut、Fast-Flux)作为元训练集,IRC僵尸网络(Neris、Rbot)作为元测试集。由于在训练过程中没有使用IRC僵尸网络样本,因此在测试过程中将IRC僵尸网络视为新的僵尸网络类型,即小样本场景下的僵尸网络检测。
在训练和测试过程中,设置K=2,N=1、5,B=10。通过完成2-way、1-shot和2-way、5-shot的小样本实验,来验证小样本场景下僵尸网络检测的可行性。
虽然将僵尸网络检测看作二分类问题,最后输出0或1,但是比较模块输出的是预测的相似度得分,不是标签,可以看作回归问题。因此,使用均方误差(MSE)训练模型:
式中,N为episode个数,K为小样本数据集中每类样本个数,为模型预测的待测样本相似度得分,yij为待测样本标签。训练过程中使用Adam优化算法,并将学习率设置为0.001。图6表示在训练过程中准确率的变化曲线,在150个episode左右时,模型已接近收敛。因此,采用150个episode训练模型。
图6 训练准确率变化曲线注意力机制设置
为了选择合适的位置引入Non-local注意力机制,在2-way、5-shot的小样本场景下做了实验验证。Baseline,不引入注意力机制。为了验证注意力机制位置对模型的影响,在特征提取模块的不同位置引入注意力机制。
模型1:在第1个卷积层后引入一个Non-local注意力机制;模型2:在第2个卷积层后引入一个Non-local注意力机制;模型3:在第3个卷积层后引入一个Non-local注意力机制;模型4:在第4个卷积层后引入一个Non-local注意力机制。
实验结果如图7所示,引入Non-local注意力机制模块对模型的检测准确率有所提升,在第一个卷积层后引入Non-Local模块,即模型1的效果最好。
图7 不同位置的Non-local模块测试结果对比图
为验证注意力机制个数对模型的影响,在特征提取模块中引入不同个数的Non-Local注意力机制。
模型5:在第1个卷积层后引入一个Non-local注意力机制;模型6:在前2个卷积层后都引入一个Non-local注意力机制;模型7:在前3个卷积层后都引入一个Non-local注意力机制;模型8:在前4个卷积层后都引入一个Non-local注意力机制。
实验结果如图8所示,Non-local注意力机制模块数量增加到2个以上时,对模型的检测准确率提升很小。根据图7和图8的结果对比,考虑到模型检测效果和计算复杂度,选择模型6作为本文方法,具体的网络结构如图4所示。
图8 不同数量的Non-local模块测试结果对比图
2.4 实验结果
实验采用2.2节的3个指标,将2way-1shot和2way-5shot小样本场景下的僵尸网络检测进行100次实验,将平均值作为最后的结果汇总于表1。对于IRC僵尸网络和HTTP僵尸网络的检测,1shot和5shot实验都取得了较好的结果。但对于小样本场景下P2P僵尸网络的检测准确率还有待提高。在1shot的僵尸网络检测任务中,平均准确率为96.79%,平均检测率为96.68%,误报率为3.32%。在5shot的僵尸网络检测任务中,平均准确率为98.06%,平均检测率为98.58%,平均误报率为2.43%。从实验结果来看,对于缺少样本的情况下,小样本场景下的僵尸网络检测是可行的。
表1 小样本场景下的僵尸网络检测结果汇总表 单位:%
由于基于小样本的僵尸网络检测还处于比较新的领域,目前还没有相关研究成果进行直接对比。因此,将本文方法与其他基于深度学习并使用ISOT Botnet数据集和CTU-13数据集的僵尸网络检测方法进行比较,对比结果如表2所示。Ahmed等[26]采用简单的人工神经网络(artificial neural network,ANN),对僵尸网络的检测准确率仅95%。牛伟纳等[9]和 Nugraha等[27]将CNN和LSTM算法相结合,用来提取流量的空间和时间两种特征,虽然取得了不错的效果,但这需要大量的标记数据训练,且模型的计算复杂度较高。而本文方法在面对新的僵尸网络类型时,仅需5个样本便能取得很好的检测效果,相对于其他方法不需要太多标记样本。
表2 本文方法与使用相同数据集的其他方法对比
为检测小样本场景下的僵尸网络,提出了一种基于度量元学习僵尸网络检测模型。该模型通过卷积神经网络学习一个非线性的相似度度量算法,能更加准确地表达样本之间的相似度关系。同时,为了在获取网络流量特征的全局信息,引入了非局部注意力机制,进一步提升了对僵尸网络检测的准确率。在后续的研究工作中,还会继续改进和优化模型,特别是提高对P2P僵尸网络的检测效果。
猜你喜欢僵尸注意力卷积让注意力“飞”回来小雪花·成长指南(2022年1期)2022-04-09基于3D-Winograd的快速卷积算法设计及FPGA实现北京航空航天大学学报(2021年9期)2021-11-02笔记本电脑“僵尸”英语文摘(2020年2期)2020-08-13卷积神经网络的分析与设计电子制作(2019年13期)2020-01-14从滤波器理解卷积电子制作(2019年11期)2019-07-04基于傅里叶域卷积表示的目标跟踪算法北京航空航天大学学报(2018年1期)2018-04-20你愿意当吸血鬼还是僵尸?新世纪智能(英语备考)(2018年12期)2018-03-14“扬眼”APP:让注意力“变现”传媒评论(2017年3期)2017-06-13A Beautiful Way Of Looking At Things第二课堂(课外活动版)(2016年2期)2016-10-21在舌尖上筑牢抵御“僵尸肉”的防火墙IT时代周刊(2015年7期)2015-11-11