PaperNote - 基于时空特征融合的入侵检测系统模型

。_饼干妹妹 提交于 2020-03-09 15:25:58

原文标题:Model of the intrusion detection system based on the integration of spatial-temporal features

原文作者:Jianwu Zhang, Yu Ling, Xingbing Fu, Xiongkun Yang, Gang Xiong, Rui Zhang

原文来源:Computers & Security 2020

原文链接:https://www.sciencedirect.com/science/article/pii/S0167404819302214

1 简介

传统的机器学习方法,如SVM、贝叶斯网络、聚类等,当数据集的规模较小、维度较低时,具有较好的分类效果。但是,在实际的网络环境中,存在大量的高维、无标签、非线性数据,这就要求我们建立新的入侵检测模型。

本文提出了一种模型,将多尺度卷积神经网络长短期记忆相结合(Multiscale Convolutional Neural Network with Long Short-Term Memory,MSCNN-LSTM)。模型首先使用多尺度卷积神经网络(MSCNN)分析数据集的空间特征(spatial features),然后使用长短期记忆(LSTM)网络处理时间特征(temporal features)。 最后,该模型利用时空特征(spatial-temporal features)进行分类。 在实验中,使用公共入侵检测数据集UNSW-NB15作为实验训练集和测试集。 与基于传统神经网络的模型相比,MSCNN-LSTM模型具有更好的准确性,误报率和误报率。

2 相关工作

2.1 入侵检测系统

IDS分类:

  • 基于特征的检测系统(signature-based)

通过分析已知的攻击模式,提取流量特征;然后将这些特征与后续检测系统提取的特征进行比较,以发现后续的攻击流量并发出警告。 基于特征的检测系统的优点是准确率高,但无法分析未知的攻击方式,如0-day漏洞攻击和APT(Advanced Persistent Threat)攻击 。

  • 基于异常的检测系统(anomaly-based)

也称为基于网络行为的检测系统,主要依赖于传统的机器学习和深度学习算法。 在这种方法中,首先提取部分流量特征;然后使用有监督或无监督的学习方法,基于这些特征来构建学习框架。 基于网络行为的检测系统可以检测正常和恶意网络流量, 这种方法的好处是它可以检测未知攻击。但该方法的困难的是,设计一组代表性的特征来检测网络流量并训练模型。

2.2 深度神经网络

  • 卷积神经网络CNN

主要用于提取数据集的空间特征

  • 递归神经网络RNN

为神经网络中的每个节点添加了一个自相关加权值作为记忆单元,可以记忆神经网络之前的状态

  • 长短期记忆网络LSTM

LSTM在RNN的结构中中添加了忘记门,因此LSTM网络可以有效地从长序列中提取时间特征

时空特征是入侵检测系统中最常用的两个检测特征。目前的研究方法都应用CNN或RNN来构建单个模型,这显然不够全面。

数据流量中的“字节、数据包、数据流”和自然语言处理中的“字符、句子、段落”非常相似。因此,对网络流量的分类类似于将自然语言中的段落分为正样本和负样本。

3 MSCNN-LSTM设计

MSCNN—LSTM模型学习过程

3.1 数据选择

由于KDDCUP99和NSL-KDD年代过于久远,本文采用公开数据集UNSW-NB15.

3.2 数据处理

包括数据标准化和数据格式转换。原始数据中,每条数据都有49个特征和1个标签,其标签为“attack”和“normal”,为了以数据流的形式将数据输入到神经网络中,必须要将字符型属性转化为数值型。

数据集包括9中类型的异常行为:Fuzzers, Analysis, Backdoors, DoS, Exploits, Generic, Reconnaissance, Shellcode and Worms

特征可以分为以下几类:流量特征,基本特征,内容特征,时间特征,附加生成的特征、标签特征。

数据集的49个特征中,显然存在一部分冗余。因此使用前人所得出的特征子集,这些特征子集是通过使用遗传算法作为特征搜索策略,并使用逻辑回归作为分类器来获得的,如下表所示:

在这里插入图片描述

3.2.1 数据标准化(standardization)

特征‘proto’、‘state’、‘service’、‘attack_act’的值都是字符型的,我们将其转化为数字型。比如特征‘proto’,将其三个最重要的值‘tcp’、‘udp’、‘icmp’分别映射为1、2、3,其余协议映射为4.

3.2.2 数据归一化(normalization)

通过线性转换,将特征值归一化到[0, 1]区间内:

f(x)={xxminxmaxxmin,xmaxxmin0,xmax=xminf(x)=\left\{\begin{array}{ll}\frac{x-x_{\min }}{x_{\max }-x_{\min }}, & x_{\max } \neq x_{\min } \\ 0, & x_{\max }=x_{\min }\end{array}\right.

3.3 特征学习过程

整个数据流图像的空间特征,是CNN从单个的p×qp \times q图像中学到,如下图所示,然后MSCNN的输出结构是单个的数据流向量。

LSTM从多个数据流向量中学习时间特征,如下图所示,输出是代表网络数据流时空特征的、单个的数据流向量,它将根据提取出的特征被进行分类。

在这里插入图片描述

3.4 多尺度卷积(multiscale convolution)

对于网络流量的识别,不仅需要分散的局部特征(local feature),也需要将多个局部特征联合起来进行分类,因此将CNN调整为MSCNN。本文使用多个大小不同的卷积核来提取特征,并将它们组合以获得多组局部特征。MSCNN结构将基于三个原始的多尺度卷积层(每层有多个卷积核进行采集),三个卷积层一个池化层三个全连接层, 网络结构参数如下表所示:

在这里插入图片描述

MS卷积采用了三个不同尺度的卷积核,因为2×2、3×3的卷积是比较耗时的,所以在之前先进行1×1的卷积操作来降低特征空间的维度:

在这里插入图片描述

  • 关于1×1卷积核

如果当前层和下一层都只有一个通道,那么1×1卷积核确实没什么作用,但是如果它们分别为m层和n层的话,1×1卷积核可以起到一个跨通道聚合的作用,所以进一步可以起到降维(或者升维)的作用,起到减少(或增加)参数的目的。

3.5 LSTM网络

3.5.1 RNN

首先介绍一下传统的递归神经网络Recurrent neural network: RNN):

  • xx为当前状态下数据的输入
  • hh表示接收到的上一个节点的输入
  • yy为当前节点状态下的输出
  • hh^{\prime}为传递到下一个节点的输出

通过上图的公式可以看到,输出 h’xh 的值都相关。而 y 则常常使用 h’ 投入到一个线性层(主要是进行维度映射)然后使用softmax进行分类得到需要的数据。这里的y如何通过 h’ 计算得到往往看具体模型的使用方式。通过序列形式的输入,我们能够得到如下形式的RNN:

3.5.2 LSTM

LSTM是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。

LSTM结构(右图)和普通RNN(左图)的主要输入输出区别如下所示:

相比RNN只有一个传递状态hth^t,LSTM有两个传输状态,ctc^t(cell state)和hth^t(hidden state)。其中ctc^t改变得很慢,通常输出的ctc^t是上一个状态传过来的ct1c^{t-1}加上一些数值。而hth^t则在不同节点下往往会有很大的区别.

  • 首先使用LSTM的当前输入xtx^t和上一个状态传递下来的ht1h^{t-1}拼接训练得到四个状态:

其中,zfz^fziz^izoz^o是由拼接向量乘以权重矩阵之后,再通过一个sigmoidsigmoid激活函数转换成0到1之间的数值,来作为一种门控状态。而zz则是将结果通过一个tanhtanh激活函数将转换成-1到1之间的值(这里使用tanhtanh是因为这里是将其做为输入数据,而不是门控信号)。

  • 下面开始进一步介绍这四个状态在LSTM内部的使用

其中, 是Hadamard Product,也就是操作矩阵中对应的元素相乘,因此要求两个相乘矩阵是同型的。 则代表进行矩阵加法。

LSTM主要有三个阶段:

  • 忘记阶段

这个阶段主要是对上一个节点传进来的输入进行选择性忘记。简单来说就是会 “忘记不重要的,记住重要的”。具体来说是通过计算得到的zfz^f(f表示forget)来作为忘记门控,来控制上一个状态的ct1c^{t-1}哪些需要留哪些需要忘。

  • 选择记忆阶段

这个阶段将这个阶段的输入有选择性地进行“记忆”,会对输入xtx^t进行选择记忆。哪些重要则着重记录下来,哪些不重要,则少记一些。当前的输入内容由前面计算得到的zz表示。而选择的门控信号则是由ziz^i(i代表information)来进行控制。

将上面两步得到的结果相加,即可得到传输给下一个状态的ctc^t,也就是上图中的第一个公式。

  • 输出阶段

这个阶段将决定哪些将会被当成当前状态的输出。主要是通过zoz^o来进行控制的。并且还对上一阶段得到的ctc^t进行了放缩(通过一个tanh激活函数进行变化)。

与普通RNN类似,输出yty^t往往最终也是通过hth^t变化得到的

3.6 池化层

池化的目的是减少训练参数,加快网络训练速度,其主要作用是执行下采样(down-sampling)。通过池化可以降低模型的过拟合,提高模型的泛化能力。池化包括两种:

  • 最大值池化(max-pooling):通过subsample数据,主要选择那些具有更好的分类和标识的特征,因此总的来说,其效果比较好
  • 均值池化(mean-pooling)

但是特征提取的误差主要来自于两方面:由于邻域大小的限制,估计值的方差增大;卷积层参数的误差导致估计值的偏差。均值池化可以缓解第一种,最大值池化可以缓解第二种。

即均值池化可以保留更多的背景特征信息,它强调整体的特征信息;而最大值池化可以保留更多的纹理特征信息,它强调局部的重点。

因此均值池化在信息的完全传递中会更有用,而使用最大值池化会丢失许多特征信息。因此本文选用均值池化

3.7 模型反馈

模型在CNN中使用反向传播算法(back propagation:BP)。

  • 残差网络Residual NetworkResNet

随着神经网络层数的加深,会产生梯度爆炸(激活值变为无穷大)和梯度消失(激活值变为无穷小)问题。残差网络通过跳跃连接,将前面的激活值跳过中间的网络层,直接传递到更后面的网络层中去,以此来避免梯度消失和梯度爆炸。从而使得训练更深层次的神经网络成为可能

4 实验

4.1 实验数据

训练集中包含175341条数据,测试集中包含82332条数据。采样需要遵循大样本平均采样小样本完整采样的原则。 通过采样获得的测试集为Test_Set_A。 下表中显示了每个数据集中的异常行为类别和分布。

在这里插入图片描述

为了进一步测试模型的泛化能力,这项工作中使用了一个新的测试集Test_Set_B。 观察数据集,我们可以发现网络流量的正常行为大约占总流量的三分之一,而罕见的攻击类别“Worms”和“Shellcode”仅占很小的比例。因此,在Test_Set_B中,“Worms”和“Shellcode”类型的比例有所增加。 下表展示了测试集Test_Set_B的具体分布:

在这里插入图片描述

4.2 实验过程

每个MS卷积层使用三种不同大小的卷积核,padding方法使用“same padding”,损失函数使用“Categorical_crossentropy function”,优化器使用“AdamOptimizer”,权重和偏移量使用0均值的高斯初始化。

使用dropout来避免过拟合,其连接概率p在通过实验探索后选取p=0.5

4.3 实验度量

在这里插入图片描述

4.4 实验结果

设置了三个对照实验:

在这里插入图片描述

下图比较了在罕见攻击情况下这四个模型的检测能力。检测罕见攻击情况的重点是减少误报率

在这里插入图片描述

5 总结

  • 尽管使用神经网络不需要太多的关注特征工程,但是在面对众多的特征时,需要进行进一步的特征选择
  • 现实中,恶意软件流量相对于正常流量来说占比很小,而且不同而已流量所占的比例也不同,因此提高模型的泛化能力是关键
  • 学习点:MSCNN-LSTM集成模型
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!