2. 华东理工大学 信息科学与工程学院, 上海 200237
2. College of Information Science and Engineering, East China University of Science and Technology, Shanghai 200237, China
随着深度学习研究与应用的快速发展,深度学习在网络异常检测领域表现出了不俗的性能和实验结果。2013年Fiore等[1]提出了基于离散受限Boltzmann机的半监督学习,用来提升误用检测的性能;2016年Yadav等[2]提出用堆自动编码器来检测DDoS攻击,利用含有8个特征维度的AL-DDoS数据集进行实验,分析表明该算法在检测该数据集的多个分类上精度都达到98%以上;2017年Yin等[3]在NSL-KDD数据集上利用循环神经网络(RNN)来进行入侵检测技术研究,其精度、漏报率和误报率都优于传统机器学习方法;同年,Yuan等[4]利用LSTM在ISCX2012数据集上进行了时间序列的分类器实验,通过在数据集上添加滑动窗口,构成三维立体数据用以分类器训练,对比了GRU、CNNLSTM等算法,验证了LSTM在精度和召回率上都相对更优;此外,Li等[5]提出了将NSL-KDD数据集的41维特征通过编码形式转换为8×8的图像,利用卷积神经网络(CNN)进行训练,在NSL-KDD的2个测试集上检测率平均达到了80%。2017年Wang等[6]提出了将DARPA1998和ISCX2012的原始网络流量直接进行独热编码,再使用CNN和CNN-LSTM算法分别进行分类器训练,得到的分类器效果优于传统机器学习方法在特征数据集上的实验性能。
虽然研究显示深度学习在入侵检测公开数据集上有了较好的实验效果,但是由于大部分公开数据集提供的都是数据挖掘处理后的特征数据,当无法获知或者还原数据挖掘过程的情况下,难以将研究算法应用在真实网络流量监测中。此外,大部分研究都是基于1998年的KDDCUP99和2012年的NSL-KDD数据集进行实验研究,对于不断变化的网络攻击而言,这些数据集所包含的攻击类别比较老旧,且与当前实际网络环境相比差距较大。因此本文提出了基于原始流量数据包的深度学习方法,利用澳大利亚网络安全中心(ACCS)于2015年制作的UNSW-NB15数据集[7-8],采用独热编码对原始流量包进行维度重构,形成二维矩阵。采用CNN进行特征提取并训练分类器,并与DBN和LSTM方法进行对比。实验表明:基于独热编码和CNN的深度学习方法有更高的精度以及较低的漏检率和误检率。
1 相关理论 1.1 卷积神经网络CNN是多阶段全局可训练的人工神经网络模型,它可以针对具体问题设计具体网络结构,通过预处理从原始数据中学习到抽象的、本质的和高阶的特征。
典型的CNN如图 1所示,由卷积层、下采样层、全连接层和分类器构成。在输入层输入原始图像,其大小决定了输入向量的尺寸。神经元自动提取图像的局部特征, 每个神经元都与前一层的局部感受域相连,每层中各平面的神经元提取图像中特定区域的局部特征如边缘特征、方向特征等。卷积层的运算为一个平面到下一个平面的映射,而采样层可看作是模糊滤波器,起到二次特征提取的作用。隐层与隐层之间的空间分辨率递减,而每层所含的平面数递增,这样可用于检测更多的特征信息。最后全连接层连接所有的特征,将输出值送给分类器如Softmax分类器等。较为经典的CNN包括LeNet和AlexNet。
![]() |
图 1 CNN结构图 |
在卷积和下采样过程中,分为工作信号正向传播和误差信号反向传播。在正向传播方向,每个卷积层后面都会进行下采样处理。在卷积层中,由于存在多个卷积核,因此当前卷积层会输出多个特征图Xj,
$ X_j^l = f\left( {\sum\limits_{i \in {M_j}} {X_i^{l - 1}} k_{ij}^l + b_j^l} \right). $ | (1) |
其中: Mj为第(l-1)层中选择的输入特征图集合,Xijl-1为集合中的特征图, kijl为输入的第i种特征图和输出的第j种特征图之间连接所用的卷积核,bjl为第j个特征图对应的偏置, f为激活函数。
在下采样层中,特征图Xj的输出由下式决定:
$ X_j^l = f\left( {W_j^l{\mathop{\rm down}\nolimits} \left( {x_j^{l - 1}} \right) + b_j^l} \right). $ | (2) |
其中: down(·)为下采样函数,缩小图片在2个维度上的倍数; W为乘性偏置; b为加性偏置; f为激活函数[9]。
在卷积层需要计算误差来更新权值偏置b和卷积核k,式(3)和(4)分别代表偏置的梯度和卷积核的梯度。
$ {\frac{{\partial E}}{{\partial {b_j}}} = \sum\limits_{u, v} {{{\left( {\delta _j^l} \right)}_{uv}}} , } $ | (3) |
$ {\frac{{\partial E}}{{\partial k_{ij}^l}} = \sum\limits_{u, v} {{{\left( {\delta _j^l} \right)}_{uv}}} {{\left( {p_i^{l - 1}} \right)}_{uv}}.} $ | (4) |
其中: δjl=βjl+1(f′(ujl)·up(δjl+1))为通过上采样(l+1)层的灵敏度计算l层的灵敏度,β为一个常数,即下采样层中的权值。(pjl-1)uv是Xil-1在卷积的时候与卷积核kijl逐元素相乘的patch。
卷积层的权值调整由式(5)进行更新,
$ \Delta {b_j} = - \eta \frac{{\partial E}}{{\partial {b_j}}}, \quad \Delta k_{ij}^l = - \eta \frac{{\partial E}}{{\partial k_{ij}^l}}. $ | (5) |
其中η为学习率。
同理,在下采样层需要计算误差来更新权值加性偏置b和乘性偏置W,加性偏置b的梯度由式(3)所得。乘性偏置W的梯度计算由下式所得:
$ \frac{{\partial E}}{{\partial {W_j}}} = \sum\limits_{u, v} {{{\left( {\delta _j^l{\rm{o}}d_j^l} \right)}_{uv}}} . $ | (6) |
其中,djl=down(Xjl-1)为正向传播时的下采样特征图。下采样层的灵敏度由式(7)计算,通过互相关计算得到旋转卷积核。对缺失的输入像素补0操作。
$ \delta _j^l = {f^{'} }\left( {u_j^l} \right) \cdot {\mathop{\rm conv}\nolimits} 2\left( {\delta _j^{ + 1}, {\mathop{\rm rot}\nolimits} 180\left( {k_j^{l + 1}} \right), {\;^{'} }{\rm{ful}}{{\rm{l}}^{'} }} \right). $ | (7) |
典型的GoogLeNet[10]网络结构有参数计算的网络层数共有22层。相对于AlexNet和VGG直接增加网络深度和卷积层数量,GoogLeNet在整体网络结构上不仅在深度上进行了加深,同时引入了Inception结构来扩展网络的宽度,避免了单纯的网络深度加深导致的梯度消失、梯度爆炸和过拟合等问题。此外,网络最后使用全局平均池化层(即将图片尺寸变为1×1)来取代全连接层,使得收敛更快并且减轻了过拟合。
Inception结构采用了NIN(Network in Network)思想[11],在多个尺度上同时进行卷积,从而能提取到图像的不同尺度的特征, 特征更为丰富也意味着最后分类判断时更加准确。如图 2所示,Inception结构共有4个分支:第1个分支对输入进行了1×1卷积;第2个分支先使用1×1卷积然后连接3×3卷积,相当于进行了2次特征变换;第3个分支先使用了1×1卷积,然后使用5×5卷积;第4个分支使用3×3最大池化后用1×1卷积。每个分支都引入1×1卷积核,在提升卷积核感受同时,也进行降维来加快网络计算,减小计算复杂度,从而用很小的计算量就能增加一层特征变换和非线性化。特征级联层将1×1、3×3、5×5的卷积结果连接起来,防止了层数增多带来的计算资源的需求,使网络的宽度和深度均可扩大。
![]() |
图 2 Inception V1结构 |
2 基于独热编码和深度学习的异常检测算法
本文基于原始网络包进行网络攻击检测,其目的在于能够自动学习提取原始网络包中特征,并根据特征进行分类器分类,从而减少使用数据挖掘提取原始网络特征,再利用算法进行训练分类的复杂过程。
2.1 数据包约简TCP/IP协议下的数据包分为Ethernet帧头、IP头部、TCP/UDP头部、上层数据以及帧校验序列(FCS)。其中,Ethernet帧头为链路层数据、IP头部为网络层数据。TCP头部为传输层数据,最后的应用数据则是在应用层传输的数据。如果直接对原始数据包进行编码会存在2个问题:1)固定MAC地址和IP地址在编码后的图像信息会对CNN深度学习特征提取造成影响,即分类器会对地址信息敏感;2)只含有头部信息的数据包在数据集中会对特征学习造成干扰,即正样本和负样本都存在此类编码数据,会影响模型的特征学习和泛化能力。
为了避免这2种情况,本文提出如下数据包约简方式:1)去除数据包中的Ethernet头部和IP头部,防止模型的泛化能力因IP地址等因素受限;2)舍弃只包含数据头部,而没有实际数据包内容的空数据包。
2.2 基于独热编码的特征维度重构独热编码又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有独立的寄存器位,并且在任意时候,其中只有一位有效。其优点在于能够处理非连续型数值特征且易于设计实现,不需要解码器等操作,同时在一定程度上进行了特征的扩充。
数据包在链路层上传输时的最终形式是以十六进制表示的,将获取的十六进制数据逐个转换为十进制数据。每个数据信息是由两位十六进制数表示,即最大值为ff=255,范围为0~255。
对数据包进行独热编码,即一个长度为N的数据包可以编码为一个N×256的二维矩阵。由于以太网的物理特性决定了数据包在链路层上的最大长度为1 500+18,其中的18是数据帧的头和尾,1 500为数据帧的最大内容长度(不包括帧头和帧尾),即MTU(maximum transmission unit)为1 500,因此编码后的二维矩阵最大尺寸为1 500×256。对于数据帧内容不足1 500的数据包, 在编码中将自动扩充到1 500,并全部置零填充,编码过程如图 3所示。采用独热编码后,数据包特征重构为二维矩阵,图 4为某个数据包实际数据内容编码后的稀疏图像。
![]() |
图 3 数据包独热编码转换图 |
![]() |
图 4 数据包内容独热编码后的二维稀疏图像 |
以下为原始数据包独热编码的伪代码。
原始数据包编码伪代码 |
1 输入:网络原始流量包(pcap文件) |
2 输出:二维编码矩阵 |
3 for循环遍历pcap文件 |
4 将流数据转换为十六进制 |
5 if流数据含有TCP头部: |
6 去除TCP头部,提取数据部分 |
7 elif流数据含有UDP头部: |
8 去除UDP头部,提取数据部分 |
9 else |
10 提取应用数据 |
11 if提取数据部分非空: |
12 利用独热编码对提取数据部分进行编码 |
13 if二维矩阵宽<1 500 |
14 填零补充至1 500 |
15 保存为PNG图像 |
2.3 基于ROG的异常检测算法
独热编码后的二维图像大小为1 500×256,由于每一个状态只有一个有效位,因此编码后为稀疏矩阵。传统的CNN算法中的卷积层只使用一种尺度的卷积核对图像进行卷积,输出固定维度的数据,所有输出特征基本上是均匀分布在这个单一尺度范围上,因此仍然得到一个稀疏分布的特征集;而GoogLeNet的Inception模块采用不同卷积核尺度来获取不同的稀疏分布的特征集,由于在多个尺度上提取特征,因此输出的特征就不再是均匀分布,而是相关性强的特征聚集在一起,而不相关的非关键特征就被弱化。这样,即使输出同样数量的特征,Inception方法输出的特征冗余信息较少,收敛速度快。因此,本文采用GoogLeNet深度学习模型。
基于数据约简、独热编码和GoogLeNet的网络异常检测算法(Reduce-OHE-GoogLeNet,简称ROG)主要技术路线如图 5所示。
![]() |
图 5 基于ROG的异常检测技术路线 |
该算法利用独热编码对经过数据约简后的原始数据包进行维度重构,再利用GoogLeNet进行卷积的稀疏特征学习,最后通过Softmax分类器进行分类,并对结果进行统计。
3 实验及结果 3.1 数据集描述实验采用UNSW-NB15数据集,该数据集的原始网络包是ACCS网络范围实验室于2015年使用IXI PrimeSturf工具创建的,包含了真实网络正常活动和合成的当代攻击行为[7-8]。该数据集含100 GB的原始流量(PCAP文件),有9种类型的攻击,即Fuzzers、Analysis、Backdoors、DoS、Exploits、Generic、Reconnaissance、Shellcode和Worms。除了原始数据包外,ACCS还使用ARGUS、BRO-ID工具,并结合12种数据挖掘算法来生成含有47个特征加上2个标签的特征数据,如表 1所示。9大攻击类别又分为6 845个攻击小类,其中有3 068个攻击被CVE漏洞库收录,漏洞年限主要分布在2004—2014年之间,有很强的时效性和研究价值。
特征类型 | 特征名称 |
流量特征 | srcip, sport, dstip, dsport, proto |
基本特征 | state, dur, sbytes, dbytes, sttl, dttl, sloss, dloss, service, sload, dload, spkts, dpkts |
内容特征 | swin, dwin, stcpb, smeansz, dmeansz, trans_depth, res_bdy_len |
时间特征 | sjit, djit, stime, ltime, sintpkt, dintpkt, tcprtt, synack, ackdat |
连接特征 | ct_srv_src, ct_src_dst, ct_dst_ltm, ct_src_ltm, ct_src_dport_ltm, ct_dst_sport_ltm, ct_dst_src_ltm |
其他特征 | is_sm_ips_ports, ct_state_ttl, ct_flw_http_mthd, is_ftp_login, ct_ftp_cmd |
攻击类别及标签 | attack_cat, label |
对UNSW-NB15特征数据(命名为Extract-data),除去其目的IP(dstip)、源IP(srcip)、目的端口(dsport)、源端口(sport)、开始时间(stime)、结束时间(ltime)外,其余41维特征为本文对比实验实际使用训练特征。
利用特征数据和原始网络包的对应关系,获取对应原始数据流量包,经过独热编码后生成Raw-OHE二维矩阵数据集;经过数据约简、独热编码后生成Reduce-OHE二维矩阵数据集。
根据上述3个数据集,分别构成训练集和测试集,其中攻击样本和正常样本数量如表 2和3所示。
样本类别 | Extract-data | Raw-OHE | Reduce-OHE |
攻击样本 | 21 279 | 314 415 | 234 234 |
正常样本 | 35 873 | 270 000 | 150 397 |
样本类别 | Extract-data | Raw-OHE | Reduce-OHE |
攻击样本 | 21 017 | 274 593 | 204 810 |
正常样本 | 50 230 | 265 573 | 14 4781 |
3.2 实验环境及评价指标
实验所用机器配置为GTX1060显卡,16 G内存,i5-6500 3.2 GHz处理器,操作系统为Ubuntu16.04 LTS,CNN采用Caffe深度学习平台,其他深度学习方法使用Tensorflow平台。
针对网络异常检测所采用的评价指标为检测率(accuracy, ACC)、误检率(false positive rate, FPR)和漏检率(miss rate, MR)。其计算公式分别如下:
$ {\rm{Accuracy}} = \left( {1 - \frac{{{\rm{ Sum\_error }}}}{{{\rm{ Sum }}}}} \right) \times 100\% , $ | (8) |
$ {\rm{FPR}} = \frac{{{\rm{ Attack _{error} }}}}{{{\rm{ Sum}}\_{\rm{Normal }}}} \times 100\% , $ | (9) |
$ {\rm{MR}} = \frac{{{\rm{ Normal _{error} }}}}{{{\rm{Sum}}\_{\rm{Attack }}}} \times 100\% . $ | (10) |
其中: Sum_error为总的检错数,Sum为检测总样本数;Attackerror为误检数,Sum_Normal为总的正常样本数;Normalerror为攻击漏检数,Sum_Attack为总的攻击样本数。
3.3 实验 3.3.1 实验1本实验为了验证Raw-data和Reduce-data两者对深度学习提取特征过程中的影响,使用LeNet网络统一对Raw-OHE训练集和Reduce-OHE训练集分别进行特征提取和训练,学习率均为0.001。由于UNSW-NB15数据集是由同一网段IP地址的机器产生的网络数据包,因此无论是训练集还是测试集,IP地址都极为相似,为了验证基于Raw-OHE训练的模型对IP地址敏感,在测试集方面改动了Raw-data测试集的IP地址再进行独热编码生成Raw-OHE Test,而Reduce-data测试集本身已去除了包含IP地址的IP头部,因此无需改动IP地址。实验结果如表 4所示。
% | |||
算法 | ACC | MR | FPR |
Raw-OHE+CNN | 83.89 | 3.01 | 29.65 |
Reduce-OHE+CNN | 98.55 | 0.22 | 3.19 |
从表 4数据可知,Reduce-OHE方法的检测效果、精度、误检率和漏检率都优于Raw-OHE方法。主要原因在于测试集对原始数据包进行了IP地址改动的操作,使得IP地址不再是Raw-data训练集中固定的范围,这对于基于Raw-OHE训练集学习所得的模型是一种对抗样本,即数据包内容没有改变,只是更改了IP地址就会对模型的判断造成影响,说明在这种情况下训练所得的模型泛化能力较差。同时,由于Raw-OHE中有大量的空数据包同时存在于正样本和负样本中,因此在训练过程中,此类编码数据会使得深度学习网络难以进行参数权值更新和调整。
3.3.2 实验2本实验用于对比LeNet、AlexNet和GoogLeNet 3种深度学习模型的分类效果,采用不同网络对Reduce-OHE进行特征提取和分类。Reduce-OHE数据集中训练集与验证集比例为3:1。实验结果如表 5所示。
% | |||
算法 | ACC | MR | FPR |
LeNet | 98.55 | 0.22 | 3.19 |
AlexNet | 98.58 | 0.21 | 3.13 |
GoogLeNet | 99.22 | 0.09 | 1.75 |
从表 5数据可知,3种网络对测试集的精度都达到了98%以上,而漏检率都低于0.5%,误检率低于4%。GoogLeNet在3个指标上更加优于其他2个卷积神经网络,漏检率达到了0.09%,误检率降低到1.75%。原因在于GoogLeNet在网络深度上更深,同时其采用Inception结构,可以通过多个卷积核获取多种特征信息,从而使得分类器能够更加准确地进行检测分类。
3.3.3 实验3本实验验证提出的ROG算法的性能,并与DBN和LSTM算法进行对比。实验结果如表 6所示,受试者工作特征(receiver operating characteristic, ROC)曲线如图 6所示。
% | |||
算法 | ACC | MR | FPR |
DBN | 73.08 | 7.31 | 35.33 |
LSTM | 79.04 | 8.47 | 26.23 |
ROG | 99.22 | 0.09 | 1.75 |
![]() |
图 6 3种分类模型的ROC曲线 |
从表 6数据可知,ROG算法在精度、漏检率和误检率上都优于DBN和LSTM算法。其主要原因在于ROG算法直接对原始数据包进行编码,充分保留了数据包中的所有信息,在使用CNN进行特征学习的过程中,所获得的特征信息更加完备,从而有利于对攻击流量的检测和识别。
3.3.4 实验4本实验使用ROG算法来对UNSW-NB15测试集的10大数据包类别进行多分类实验。数据集情况及实验结果如表 7所示。
攻击类别 | 训练集数量 | 测试集数量 | 检测率% |
Analysis | 118 | 194 | 2.06 |
Backdoors | 158 | 132 | 30.30 |
DoS | 37 684 | 34 854 | 62.80 |
Exploits | 152 305 | 138 696 | 96.68 |
Fuzzers | 29 400 | 21 370 | 96.88 |
Generic | 10 622 | 6 532 | 39.19 |
Reconnaissance | 3 457 | 2 676 | 96.79 |
Shellcode | 444 | 318 | 95.60 |
Worms | 46 | 38 | 63.16 |
Normal | 150 397 | 144 781 | 98.25 |
从表 7数据可知,在多分类的情况下,对Exploits、Fuzzers、Reconnaissance、Shellcode和Normal类别的检测率都达到了90%以上。对DoS和Womrs攻击的检测率达到60%以上。对于Analysis、Backdoors和Worms攻击,由于训练样本的数量少,出现数据不平衡,影响了分类效果。Generic作为通用泛型攻击,其主要攻击对象为服务器,与Exploits攻击特性接近,同时与Exploits之间存在数据不平衡,因此在结果上更多地被误判为Exploits攻击。
4 结论本文针对原始流量包,提出了使用独热编码进行维度重构,利用GoogLeNet来对重构数据进行特征学习提取并训练Softmax分类器。在编码过程中丢弃数据包的IP头部以及空数据包内容,防止数据集在训练过程中形成特征干扰。实验结果表明:该方法不仅能直接有效地处理原始数据包,并且在检测精度、漏检率和误检率等指标上,都优于其他基于特征数据的深度学习方法。未来的工作将注重解决多分类场景下小样本数据的分类检测以及对DOS攻击的检测。
[1] |
FIORE U, PALMIERI F, CASTIGLIONE A, et al. Network anomaly detection with the restricted Boltzmann machine[J]. Neurocomputing, 2013, 122: 13-23. DOI:10.1016/j.neucom.2012.11.050 |
[2] |
YADAV S, SUBRAMANIAN S. Detection of application layer DDoS attack by feature learning using stacked AutoEncoder[C]//Proceedings of 2016 International Conference on Computational Techniques in Information and Communication Technologies. New Delhi, India: IEEE, 2016: 361-366. https://ieeexplore.ieee.org/document/7514608
|
[3] |
YIN C L, ZHU Y F, FEI J L, et al. A deep learning approach for intrusion detection using recurrent neural networks[J]. IEEE Access, 2017, 5: 21954-21961. DOI:10.1109/ACCESS.2017.2762418 |
[4] |
YUAN X Y, LI C H, LI X L. DeepDefense: Identifying DDoS attack via deep learning[C]//Proceedings of 2017 IEEE International Conference on Smart Computing. Hong Kong, China: IEEE, 2017: 1-8. https://ieeexplore.ieee.org/document/7946998
|
[5] |
LI Z P, QIN Z, HUANG K, et al. Intrusion detection using convolutional neural networks for representation learning[M]//LIU D, XIE S, LI Y, et al. Neural Information Processing. Cham: Springer, 2017: 858-866.
|
[6] |
WANG W, SHENG Y Q, WANG J L, et al. HAST-IDS:Learning hierarchical spatial-temporal features using deep neural networks to improve intrusion detection[J]. IEEE Access, 2018, 6: 1792-1806. DOI:10.1109/ACCESS.2017.2780250 |
[7] |
MOUSTAFA N, SLAY J. UNSW-NB15: A comprehensive data set for network intrusion detection systems (UNSW-NB15 network data set)[C]//Proceedings of 2015 Military Communications and Information Systems Conference. Canberra, ACT, Australia: IEEE, 2015: 1-6. https://ieeexplore.ieee.org/document/7348942
|
[8] |
MOUSTAFA N, SLAY J. The evaluation of network anomaly detection systems:Statistical analysis of the UNSW-NB15 data set and the comparison with the KDD99 data set[J]. Information Systems Security, 2016, 25(1-3): 18-31. |
[9] |
BOUVRIE J. Notes on convolutional neural networks[Z]. Neural Networks, 2006.
|
[10] |
SZEGEDY C, LIU W, JIA Y Q, et al. Going deeper with convolutions[C]//Proceedings of 2015 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). Boston, MA, USA: IEEE, 2015: 1-9. https://ieeexplore.ieee.org/document/7298594
|
[11] |
LIN M, CHEN Q, YAN S C. Network in network[Z]. arXiv: 1312.4400, 2013.
|