电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 1600 人浏览分享

利用AI检测IoT恶意流量

[复制链接]
1600 0
前言

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

数据集

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

9994.JPG

该数据集有九种类型的攻击,即 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 条记录 分别来自不同攻击类型 恶意和正常数据。

数据预处理

导入所需库文件

9993.JPG

数据集中的数据包括9种攻击类型 分别是Fuzzers, Analysis, Backdoors, DoS, Exploits, Generic
Reconnaissance,Shellcode和Worms。在csv文件最后的一列是标签 0代表郑 1代表攻击
加载训练数据UNSW_NB15_training.csv 检查前5行

9992.JPG

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

9991.JPG

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

9990.JPG

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

100.JPG

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

99.JPG

结果如下

98.JPG

可以看到数据集并不平滑 不过并不严重 我们继续往下分析
本来是需要手动拆分训练集和测试集的 不过UNSW_NB15已经拆分好了 比率为7:3
训练集和测试集分别在UNSW_NB15_training-set.csv 和 UNSW_NB15_testing-set.csv
如果需要手动拆分的话 使用下面的代码就可以了

97.JPG

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

96.JPG

数据转换

接下来需要转换数据

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

93.JPG

分别将其打印

92.JPG

对于分类数据应用OneHotEncoder 将其编码为独热数值数组
对于数值数据应用StandardScaler通过去除均值和缩放到单位方差来标准化
构造ColumnTransformer对象 在X_train上进行fit即可

91.JPG

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

90.JPG

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

89.JPG

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

88.JPG

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

87.JPG

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

86.JPG

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

交叉验证

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

83.JPG

查看交叉验证结果

82.JPG

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

比如打印出平均的准确率

81.JPG

模型测试

在测试集上进行测试

80.JPG

结果如下

79.JPG

recision是精确率 也称作查全率 等于tp/(tp+fp);这是针对我们预测结果而言的它表示
的是预测为正的样本中有多少是真正的正样本
recall是查准率 也称召回率 等于tp/(tp+fn);这是针对我们原来的样本而言的它表示的
是样本中的正例有多少被预测正确了
从计算公式可以看出 其实就是分母不同 一个分母是预测为正的样本数 另一个是原来样本中所有的正样本数
如果看单个指标都过于片面 可以通过f1分数来评估模型性能 f1是recall和precision的加权平均 在上面可以看到在0.64左右

其他机器学习方法

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

78.JPG

打印出模型的超参数

77.JPG

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

76.JPG

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

多层感知器

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

75.JPG

结果如下

74.JPG

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

73.JPG

可以看到随机森林的效果还是最好的。这也给我们一个提示 虽然现在深度学习 神经网络
是AI的最火热的技术 但是这并不意味着在所有任务上都是万能的 它们更大的优势是在处理海量数据 复杂任务上
对于一些基础的任务 可能传统的机器学习方法会有更好的效果。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.