Press "Enter" to skip to content

利用AI检测IoT恶意流量

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

0 1

 

前言

 

目前大量物联网设备及云服务端直接暴露于互联网,这些设备和云服务端存在的漏洞(如:心脏滴血、破壳等漏洞)一旦被利用,可导致设备被控、用户隐私泄露、云服务端数据被窃取等安全风险,甚至会对基础通信网络造成严重影响。为了促进物联网领域的安全研究,研究人员制作了 UNSW-NB15 数据集,这是一个基于物联网的网络流量数据集,对正常活动和恶意攻击行为进行了不同的分类。本文将基于该数据集,应用 AI 领域的典型技术,包括决策树、随机森林、逻辑回归、多层感知器等进行检测,希望师傅们可以从中了解 AI 技术应用于安全领域的典型流程,包括数据预处理、数据转换、交叉验证等,同时提升对物联网安全的新的认识。

 

0 2

 

数据集

 

本次用到的数据集是 UNSW-NB15 ,这是一个基于物联网的网络流量数据集,由新南威尔士大学堪培拉网络靶场实验室的 IXIA PerfectStorm 工具创建,用于生成真实现代正常活动和合成当代攻击行为的混合数据集。它们使用 tcpdump 工具捕获 100 GB 的原始流量(例如 Pcap 文件)。

 

 

该数据集有九种类型的攻击,即 Fuzzers 、 Analysis 、 Backdoors 、 DoS 、 Exploits 、 Generic 、 Reconnaissance 、 Shellcode 和 Worms ,当然为了方便大家使用,已经做了整理,把特征、标签都统计到了 csv 文件里。

 

如果希望详细了解该数据集的信息的话,可以参考 [2][3][4] 论文

 

该数据集中的一部分被做为训练集和测试集,即 UNSW_NB15_training-set.csv 和 UNSW_NB15_testing-set.csv 。训练集中的记录数为 175,341 条记录,测试集中的记录数为 82,332 条记录,分别来自不同攻击类型、恶意和正常数据。

 

0 3

 

数据预处理

 

导入所需库文件

 

 

数据集中的数据包括 9 种攻击类型,分别是 Fuzzers, Analysis, Backdoors, DoS, Exploits, Generic, Reconnaissance, Shellcode 和 Worms 。在 csv 文件最后的一列是标签, 0 代表郑, 1 代表攻击

 

加载训练数据 UNSW_NB15_training.csv ,检查前 5 行

 

 

可以看到前 5 行的记录都是正常的

 

 

加载数据后我们首先检测是否存在缺失值

 

 

面对存在缺失值的情况,最简单的方法就是直接启用包含缺失值的整行和整列

 

 

然后看看数据是否平衡,一方面是看 9 种攻击类型是否平滑( y1 指代这方面的标签),一方面是看正常和恶意的数据量是否平衡( y2 指代这方面的标签)

 

 

结果如下

 

 

可以看到数据集并不平滑,不过并不严重,我们继续往下分析

 

本来是需要手动拆分训练集和测试集的,不过 UNSW_NB15 已经拆分好了,比率为 7:3

 

训练集和测试集分别在 UNSW_NB15_training-set.csv 和 UNSW_NB15_testing-set.csv

 

如果需要手动拆分的话,使用下面的代码就可以了

 

 

我们加载测试集供后续使用

 

 

0 4

 

数据转换

 

接下来需要转换数据

 

首先需要确定哪些列是分类数据( categorical ) , 哪些列是数值数据 (numerical) (分类数据也叫 qualitative data 或是 Yes/No data ,是定性的,而数值数据是定量的)

 

 

分别将其打印

 

 

对于分类数据应用 OneHotEncoder ,将其编码为独热数值数组

 

对于数值数据应用 StandardScaler ,通过去除均值和缩放到单位方差来标准化

 

构造 ColumnTransformer 对象,在 X_train 上进行 fit 即可

 

 

每个 transformer 分别转换 x ,将结果拼接起来

 

 

对测试集也进行同样的处理

 

 

转换后的数据不再是 dataframe 结构,而是类似于数组的结构

 

 

我们同样还需要转换 y1 , y1 中一共有 9 类

 

 

我们直接用 LabelEncoder 就可以了,其用于 规范化标签,使 处理对象 仅包含 0 和 类别数 -1 之间的值

 

 

截止目前,数据部分已经处理完成了,接下来就是训练模型了

 

0 5

 

交叉验证

 

我们训练模型后,会使用 5 折交叉验证( cross validation,CV )进行验证,评估模型的指标包括准确率、准确率、召回率、 F1 分数、 ROC 的 AUC 值;然后使用测试集评估模型看看效果如何

 

我们以逻辑回归分类器为例

 

 

查看交叉验证结果

 

 

因为是 5 折交叉验证,所以每个指标都有 5 组数据,基本上我们会使用平均值来衡量校验验证的评估结果

 

比如打印出平均的准确率

 

 

0 6

 

模型测试

 

在测试集上进行测试

 

 

结果如下

 

 

precision 是精确率,也称作查全率,等于 tp/(tp+fp); 这是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本

 

recall 是查准率,也称召回率,等于 tp/(tp+fn) ;这是针对我们原来的样本而言的,它表示的是样本中的正例有多少被预测正确了

 

从计算公式可以看出,其实就是分母不同,一个分母是预测为正的样本数,另一个是原来样本中所有的正样本数

 

如果看单个指标都过于片面,可以通过 f1 分数来评估模型性能, f1 是 recall 和 precision 的加权平均,在上面可以看到在 0.64 左右

 

0 7

 

其他机器学习方法

 

在 sklearn 已经实现了很多机器学习模型,我们只需要一条代码就可以换模型,除了逻辑回归之外,还可以试试决策树和随机森林

 

 

打印出模型的超参数

 

然后重复之前的步骤,来看看结果

 

 

如何

 

 

可以看到,随机森林的效果是相对而言比较好的

 

0 8

 

多层感知器

 

以上三个分类器都属于传统的机器学习方法,那幺接着我们试试 MLP ,这是一种前向结构的神经网络。

 

 

结果如下

 

 

把这四种分类器放在一起看看哪种效果更好

 

 

可以看到随机森林的效果还是最好的。这也给我们一个提示,虽然现在深度学习、神经网络

 

是 AI 的最火热的技术,但是这并不意味着在所有任务上都是万能的,它们更大的优势是在处理海量数据、复杂任务上,对于一些基础的任务,可能传统的机器学习方法会有更好的效果。

 

0 9

 

参考

 

1.https://www.unsw.adfa.edu.au/unsw-canberra-cyber/cybersecurity/ADFA-NB15-Datasets/

 

2.UNSW-NB15: a comprehensive data set for network intrusion detection systems (UNSW-NB15 network data set).

 

3.The  evaluation of Network Anomaly Detection Systems: Statistical analysis  of the UNSW-NB15 dataset and the comparison with the KDD99 dataset

 

4.Novel geometric area analysis technique for anomaly detection using trapezoidal area estimation on large-scale networks

 

5.http://www.caict.ac.cn/kxyj/qwfb/bps/201809/P020180919390470911802.pdf

 

6. 《机器学习》

 

10

 

实操推荐

 

机器学 习之RF:https://www.hetianlab.com/expc.do?ec=ECID4bd7-5a7d-4ee5-9ecd-1b35a7abfd92&pk_campaign=weixin-wemedia#stu

 

Random Forest(随机森林)是Bagging的扩展变体,它在以决策树 为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机特征选择。顾名思义其是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。通过该实验了解随机森林算法,并能够解决实际问题。

 

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注