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

2023-11-01 23:58

本文主要是介绍PaperNote - 基于时空特征融合的入侵检测系统模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文标题: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 简介
  • 2 相关工作
    • 2.1 入侵检测系统
    • 2.2 深度神经网络
  • 3 MSCNN-LSTM设计
    • 3.1 数据选择
    • 3.2 数据处理
      • 3.2.1 数据标准化(standardization)
      • 3.2.2 数据归一化(normalization)
    • 3.3 特征学习过程
    • 3.4 多尺度卷积(multiscale convolution)
    • 3.5 LSTM网络
      • 3.5.1 RNN
      • 3.5.2 LSTM
    • 3.6 池化层
    • 3.7 模型反馈
  • 4 实验
    • 4.1 实验数据
    • 4.2 实验过程
    • 4.3 实验度量
    • 4.4 实验结果
  • 5 总结

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 ) = { x − x min ⁡ x max ⁡ − x min ⁡ , x max ⁡ ≠ x min ⁡ 0 , x max ⁡ = x min ⁡ f(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. f(x)={xmaxxminxxmin,0,xmax=xminxmax=xmin

3.3 特征学习过程

整个数据流图像的空间特征,是CNN从单个的 p × q p \times q p×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):

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

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

3.5.2 LSTM

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

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

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

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

其中, z f z^f zf z i z^i zi z o z^o zo是由拼接向量乘以权重矩阵之后,再通过一个 s i g m o i d sigmoid sigmoid激活函数转换成0到1之间的数值,来作为一种门控状态。而 z z z则是将结果通过一个 t a n h tanh tanh激活函数将转换成-1到1之间的值(这里使用 t a n h tanh tanh是因为这里是将其做为输入数据,而不是门控信号)。

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

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

LSTM主要有三个阶段:

  • 忘记阶段

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

  • 选择记忆阶段

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

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

  • 输出阶段

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

与普通RNN类似,输出 y t y^t yt往往最终也是通过 h t h^t ht变化得到的

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集成模型

这篇关于PaperNote - 基于时空特征融合的入侵检测系统模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/326669

相关文章

在Linux系统上连接GitHub的方法步骤(适用2025年)

《在Linux系统上连接GitHub的方法步骤(适用2025年)》在2025年,使用Linux系统连接GitHub的推荐方式是通过SSH(SecureShell)协议进行身份验证,这种方式不仅安全,还... 目录步骤一:检查并安装 Git步骤二:生成 SSH 密钥步骤三:将 SSH 公钥添加到 github

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

C++ 检测文件大小和文件传输的方法示例详解

《C++检测文件大小和文件传输的方法示例详解》文章介绍了在C/C++中获取文件大小的三种方法,推荐使用stat()函数,并详细说明了如何设计一次性发送压缩包的结构体及传输流程,包含CRC校验和自动解... 目录检测文件的大小✅ 方法一:使用 stat() 函数(推荐)✅ 用法示例:✅ 方法二:使用 fsee

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

HTML5 中的<button>标签用法和特征

《HTML5中的<button>标签用法和特征》在HTML5中,button标签用于定义一个可点击的按钮,它是创建交互式网页的重要元素之一,本文将深入解析HTML5中的button标签,详细介绍其属... 目录引言<button> 标签的基本用法<button> 标签的属性typevaluedisabled

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定