当前位置: 首页 > 技术干货 > 利用AI检测IoT恶意流量

利用AI检测IoT恶意流量

发表于:2021-07-29 15:03 作者: mtr 阅读数(198人)

#前言

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

 

#数据集

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

 image.png

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

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

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

 

#数据预处理

导入所需库文件

 image.png

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

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

 image.png

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

 image.png

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

 image.png

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

 image.png

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

 image.png

结果如下

 image.png

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

 

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

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

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

 image.png

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

 image.png

 

#数据转换

接下来需要转换数据

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

 image.png

分别将其打印

 image.png

 

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

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

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

 image.png

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

 image.png

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

 image.png

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

 image.png

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

 image.png

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

 image.png

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

 

#交叉验证

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

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

 image.png

查看交叉验证结果

 image.png

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

比如打印出平均的准确率

 image.png

#模型测试

在测试集上进行测试

 image.png

结果如下

image.png 

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

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

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

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

 

#其他机器学习方法

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

 image.png

打印出模型的超参数

 image.png

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

 image.png

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

 

#多层感知器

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

 image.png

结果如下

 image.png

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

 image.png

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

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

 相关实验:机器学习之RF

#参考

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.《机器学习》