网络入侵检测 Network Intrusion Detection System (NIDS)
1.学习内容
入侵检测技术被分为基于主机的入侵检测(HIDS)和基于网络的入侵检测(NIDS)。按照数据分析的方法差异,可以分为基于特征的检测和基于异常的检测。本质上都是在建立一个分类器模型,把输入的数据识别为不同的分类结果输出。
分类学习算法的主要思想是:基于训练数据构建一个能分类正常(和异常)事件的模型,基于该模型可以对新的事件进行分类。分类模型对输入数据的类别分布应具备较强的适应能力,处理输入数据(集合)可能存在的类不平衡(class imbalance)现象(例如网络在遭受攻击时,恶意流量占比可能会大大高于正常流量占比,而模型在训练时使用的训练数据可能恶意流量占比远远小于正常流量占比)。
2.数据集说明
在网络安全领域,类似规模的公开数据集虽然也可以找到一些,例如SecRepo.com - Samples of Security Related Data上就收集了大量包括恶意代码、网络流量、系统日志等在内的多个有标记数据集,但对于入侵检测来说,由于网络数据中可能包含真实用户隐私数据、企业内部机密数据等原因,现有的可以被用于入侵检测领域使用的公开训练数据集普遍都采用的是流量发生软硬件模拟产生的网络抓包数据或者经过匿名化处理的网络抓包数据集合甚至是已预处理好的特征工程文件,无论是数据的真实性还是数据的多样性都被打了折扣。因此,基于这些公开数据集训练出来的分类器,很难在真实网络中表现出很好的分类性能。
3.NIDS组件
NIDS 有两个主要组件:特征提取器和异常检测器。特征提取器在接收数据包流并从中提取特征以将它们反馈到异常检测器。然后, 异常检测器 为它接收到的每个输入输出一个分数,并与阈值进行比较。如果分数小于阈值,则相应的输入将被预测为良性,否则将被预测为恶意。可以以两种不同的方式构建特征提取器。它可以为接收到的每个数据包输出一个特征向量。这个特征向量不仅仅基于当前的数据包;它还可以考虑之前看到的数据包的历史记录。在这种情况下,这些特征可以像从数据包头中提取的原始值一样简单,也可以像手动创建的复杂特征一样简单。
将去噪自动编码器用作异常检测器,根据自动编码器的输出和输入之间的差异计算的重建误差用作评价函数,以无监督的方式检测异常。
4.基于SDN的网络入侵检测
NIDS 被实现为 SDN 控制器上的应用程序。基于SDN的IDS架构如图所示。
它具有三个主要组件:流量收集器、特征提取器和异常检测器。
流收集器:当数据包输入消息到达时触发此模块。它将提取所有流统计信息,例如协议、源和目标IP以及源和目标端口。该模块还由定时器函数触发,向交换机发送ofp_flow_stats_request消息,请求所有流统计信息。收到请求后,将包含所有流条目的所有聚合统计信息的ofp_flow_stats_reply消息发送回控制器。
特征提取器:特征提取器接收数据流并从中提取特征以将它们馈送到异常检测器。
异常检测器:为它接收到的每个输入输出一个分数,并与阈值进行比较。如果分数小于阈值,则相应的输入将被预测为良性,否则将被预测为恶意。可采用 GRU/DNN/LSTM/RNN等算法作为 Anomaly Detector 模块的核心。异常检测器模块加载经过训练的模型,接收网络统计数据并确定流是否异常。
二分类神经网络模型
5.实验步骤
下载数据集
下载地址:NSL-KDD | Datasets | Research | Canadian Institute for Cybersecurity | UNB
这里采用NSL-KDD数据集而没有采用CICIDS2017数据集,因为CICIDS2017数据集太大了,本机电脑跑不动,NSL-KDD是轻量版的KDD-CUP-1999,去除了冗余字段和重复的流条目,便于测试。
官网首页
下载代码
https://github.com/mehrdadep/deep-learning-nids.git
配置环境
版本如下
库/工具 | 版本号 |
python | 3.7.10 |
joblib | 1.1.0 |
keras | 2.6.0 |
numpy | 1.21.5 |
pip | 21.2.4 |
scikit-learn | 1.0.2 |
scipy | 1.7.3 |
tensorflow | 2.6.0 |
结构目录
运行程序
python run.py
第一步,选择数据集类型是NSL-KDD还是CICIDS
第二步,选择分类器:二分类或者多分类器
第三步,选择网络模型
第四步,选择训练的轮数
训练轮数跑但如果过大了就超出了显卡内存报错
2022-02-20 19:41:06.145684: I tensorflow/stream_executor/cuda/cuda_driver.cc:732] failed to allocate 3.87G (4160159744 bytes) from device: CUDA_ERROR_OUT_OF_MEMORY: out of memory
训练结果
经典网络模型的训练结果如下,
逻辑回归
朴素贝叶斯
决策树
随机森林
6.总结
基于网络入侵检测(NIDS)的框架和代码实现如上,后面的要做的工作有:设计实现GRU/DNN/LSTM/RNN等网络模型作为异常检测器的算法部分,除了做流量检测的二分器还要做多分类器,另外将训练的结果通过Tensor Board的Graphic图形化的显示出来。设计实现能看到每一轮神经网络的中间训练的结果。后期加大训练轮数,来看网络的预测准确率,精确率,误识别率如何。
参考论文
[1] Albahar M A. Recurrent neural network model based on a new regularization technique for real-time intrusion detection in SDN environments[J]. Security and Communication Networks, 2019, 2019.
[3] Phan X T, Fukuda K. Sdn-mon: Fine-grained traffic monitoring framework in software-defined networks[J]. Journal of Information Processing, 2017, 25: 182-190.
[4] Cheng T Y, Jia X. Compressive traffic monitoring in hybrid SDN[J]. IEEE Journal on Selected Areas in Communications, 2018, 36(12): 2731-2743.
[5] Sultana N, Chilamkurti N, Peng W, et al. Survey on SDN based network intrusion detection system using machine learning approaches[J]. Peer-to-Peer Networking and Applications, 2019, 12(2): 493-501.
[6] Hashemi M J, Keller E. Enhancing robustness against adversarial examples in network intrusion detection systems[C]//2020 IEEE Conference on Network Function Virtualization and Software Defined Networks (NFV-SDN). IEEE, 2020: 37-43.
[10] Tang T A, Mhamdi L, McLernon D, et al. Deep recurrent neural network for intrusion detection in sdn-based networks[C]//2018 4th IEEE Conference on Network Softwarization and Workshops (NetSoft). IEEE, 2018: 202-206.
数据集
[2] Elsayed M S, Le-Khac N A, Jurcut A D. InSDN: A novel SDN intrusion dataset[J]. IEEE Access, 2020, 8: 165263-165284.
[7] Sharafaldin I, Lashkari A H, Ghorbani A A. Toward generating a new intrusion detection dataset and intrusion traffic characterization[J]. ICISSp, 2018, 1: 108-116.
[8] Gharib A, Sharafaldin I, Lashkari A H, et al. An evaluation framework for intrusion detection dataset[C]//2016 International Conference on Information Science and Security (ICISS). IEEE, 2016: 1-6.
[9] Panigrahi R, Borah S. A detailed analysis of CICIDS2017 dataset for designing Intrusion Detection Systems[J]. International Journal of Engineering & Technology, 2018, 7(3.24): 479-482.
–end–