毛 臣,谢铠宇,高 镭
(新疆大学 信息科学与工程学院,新疆 乌鲁木齐 830046)
随着针对物联网的攻击愈加频繁,物联网安全正越来越受到关注[1]。从技术方面看,物联网存在网络安全隐患。由于物联网在很多场合需要无线传输,这种暴露在公共场所之中的信号容易被窃取,也容易被干扰,将直接影响到物联网体系的安全。针对此方面的不足,在参考了文献[2-3]的相关工作后,本文在FCM算法基础上提出RFCM算法框架与实现。在此基础上训练出的半监督学习模型在物联网入侵检测方面有良好的表现。
在数据集的选择上,本文选择使用NSL-KDD数据集。NSL-KDD数据集是在KDD99数据集基础上改进得来的,解决了KDD99数据集中存在的固有问题。此数据集的优点包括:在NSL-KDD数据集的训练集中不包含冗余记录,所以分类器不会偏向更频繁的记录;在测试集中没有重复的记录,使得检测率更为准确;来自每个难度级别组的所选记录的数量占比与原始KDD数据集中的记录所占百分比成反比,因此,不同机器学习方法的分类率在更宽的范围内变化,这使得对不同学习技术的准确评估更有效;训练和测试中的记录数量设置合理,这使得在整套数据集上运行实验成本低廉而无需随机选择一小部分。因此,不同研究工作的评估结果将是一致的和可比较的。
由于数据集中包含有符号型的数据属性,不适合聚类测试,对于连续型特征属性,各属性的度量方法不一样。一般而言,所用的度量单位越小,变量可能的值域就越大,对聚类结果的影响也越大,即在计算数据间距离时对聚类产生的影响越大。为了避免由于属性度量的差异对聚类产生的影响,需要对属性值进行标准化。
首先需要将数据集训练集中的第2、第3、第4、第42列标记数据分别提取出来单独制成一维列表,然后依据该标记在列表中的位置将文件行中3种协议类型、70种网络服务类型、11种网络连接状态、23种攻击类型(训练集中共出现了22种攻击类型,还有1种正常类型标记,而剩下的17种只在测试集中出现)转换成数字标识。
(1)
(2)
然后对每条数据记录进行标准化度量,即:
(3)
其中,zik表示标准化后的第i条数据记录的第k个属性值。
将标准化后的每个数值归一化到[0,1]区间,即:
(4)
其中,max为样本数据的最大值,min为样本数据的最小值,x为标准化后的数据。
在充分研究NSL-KDD数据集后,在特征提取上有两种方法:
(1)用Wireshark捕获流量包,通过Python开源库Scapy读取Pcap文件,分析流量包内容,统计特征输出特征矩阵。
(2)继续沿用LEE W[4]教授提出的,即采用基于Linux系统下的IDS——zeek(Bro)的特征提取方法。
由于Scapy库对于流量包对主机权限命令的试调用、登录状态的获取不准确,且分析速度慢,使其效率相对于Bro来说大打折扣,因此对于U2R(user to root)和R2U(remote to user)攻击不能起到很好的检测作用,所以本文选择第二种方案。
站点部署Bro最直接的好处就是获得日志文件的扩展集,在高层次记录网络的行为。这些日志文件不仅全方位地记录了所有线路上可见的每个连接,还记录了应用层传输,例如HTTP会话以及请求的URL、关键头、MIME类型、服务器反馈、DNS请求及反应、SSL证书、SMTP会话的关键内容等。默认情况下Bro将这些信息结构化写入,用Tab键分隔日志文件内容的格式使其他软件的后续处理更方便。也可以选择其他输出格式和后端来与数据库对接。
此外,除了日志,Bro还有内建函数来完成分析和检测任务,包括在HTTP会话中抽取文件、在与其他注册点对接时检测恶意软件、报告脆弱的软件版本、识别Web应用、检测SSH暴力破解、认证SSL证书链等。
特征提取工作具体流程如图1所示。
图1 Bro捕获数据包
Bro通过脚本运行提取出特征矩阵所需要的数据,再通过Python的多个函数库的加工处理,最终形成所需要的特征矩阵。
特征矩阵第一部分是流量包的基础信息,包括主机端口、服务类型等一系列参数,主要通过Python中的list数据结构记录并存储。
特征矩阵第二部分是统计该链接对于主机的异常行为,所以要用Bro脚本分析流量包的信息,提取出对于shell命令的敏感字段,通过Python的os和cell库进行分析、计数和存储。
特征矩阵第三、四部分是统计该链接在特定链接时间和特定链接数量下的异常行为。
RFCM(Random Fuzzy C-means)算法是本文的核心部分,本节着重介绍RFCM算法的整个框架以及数据处理的流程。
RFCM主要分为两部分:
(1)第一部分,使用监督学习算法对少量有标记的样本进行学习。在经过对不同分类器分类效果的对比后,本文对这一部分的实现使用随机森林来得到初步的模型。
(2)第二部分,参考PAL N R的工作[5]实现SFCM算法,针对没有标记的样本,通过指定两个置信度参数,每轮得到分类结果可信度高的无标记样本。再将这些样本加入到原始有标记的样本集合里进行模型的二次训练,从而缓解标签样本数量少的局面。模型最后在测试集上取得了良好的效果[6]。RFCM算法的流程图如图2所示。
图2 RFCM流程图
随机森林的基础是决策树(Decision Tree)算法,决策树是一种常见的机器学习方法,在已知各种情况发生概率的基础上,通过树的结构进行分类决策。其基本思想是每次选取一个最优划分属性,再迭代这个过程直到生成一个完备的决策树结构。决策树使用信息增益或者信息增益率作为选择属性的依据,以信息增益为例,先计算每个属性的信息熵,再计算其信息增益,即:
(5)
(6)
其中,D表示当前样本集合,k表示分类类别的第k类,pk表示当前样本集合D中第k类样本所占的比例。|Y|表示样本类别数目,用aV表示离散属性取值为第V个值,|DV|表示第V个分支节点包含了D中所有在属性值上取值为aV的样本。生成决策树以后,每层根据属性的取值进行划分,最终遍历到树的某一个叶节点,得到分类结果。
随机森林(Random Forest,RF)就是通过集成学习的思想将多棵树进行集成的一种算法,它的基本单元是决策树。随机森林是机器学习方法中集成学习方法思想的体现。
RF是Bagging的一个拓展变体,它由若干个树形结构构成森林,在每个决策树的训练过程中引入随机属性构建决策树。实践证明,由于样本扰动和属性扰动的作用,它们使得最终集成的RF分类器泛化性能比一般的决策树效果更好。
本文随机森林方法的实现是导入了已经开发并成熟的Sklearn库里的随机森林方法RandomForestClassifier,其内置的主要参数为随机状态random_state和子树个数n_estimators。
SFCM(Semi-supervised Fuzzy Cluster-Means)是对FCM的改进,FCM是一种基于划分的聚类算法,其思想就是使得被划分到同一簇的对象之间相似度最大,而不同簇之间的相似度最小。本文考虑有标记样本和未标记样本,最终生成SFCM模块。
给定一个总的数据集D,它由部分有标签和无标签的数据组成。有标签的数据集为DL,没有标签的数据集为DUL。SFCM对每个数据点属于每个类别生成关联置信度u,每个样本对每个类别的关联程度和为1。它可以很好地识别出不属于类别集合的样本,对属于某个集合的样本分类精度较高。
给定数据集合A={a1,a2,…,an},每个样本是d维的,即在样本集合里每个样本由d个特征唯一标识,在FCM要最小化的目标公式为:
(7)
其中,P是类别集合里的数目,每一个类都有一个样例vi,每个类别的样例集合V={v1,…,vn}构成了整个类别集合的样例样本。数据集合中的每个样本和每个类别的样例样本的第二范式即代表这个样本到这个类别的距离,也就是关联程度。uij代表第j个样本到第i个类别的关联程度。显然uij≥0,且和为1,如式(8)、式(9)所示。每轮训练时需要构建关联矩阵U,这里需要引入在已标记的数据集中获取的关联矩阵M,关联矩阵M的模糊度一般取值为1~2。
0≤uij≤1
(8)
(9)
半监督聚类方法[7]是建立在使用不同类别的先验知识去增强聚类性能这一事实的基础上的。在入侵检测问题上,本文使用原始已有的信息构建入侵模型,而不同类别的先验知识就是依靠样本里的少量标记样本。此处使用SFCM[8],它的目标函数是:
(10)
其中,u′ij要满足以下两个条件:
(11)
(12)
这个问题是有约束条件的优化问题,使用拉格朗日乘子对模型的参数进行了相应的推导,对有标记样本:
(13)
对无标记样本:
(14)
对每个类别集合的样本实例:
(15)
模型的超参数有M的取值和迭代的次数,把每一次模型训练后经过比较置信度得到的样本加入到原始有标记的样本集合里进行模型的二次训练。
算法伪代码如下:
While (DUL!= 0) do
Initialize:setS1←{},S2←{}
M= RandomForest(DL) /* 使用随机森林在有标记数
据集合上进行训练*/
U= SFCM(DL+DUL) /* 获得未标记数据集合的关
联矩阵*/
for all instanceajin theDULdo
if(uij≥r1) then
S1←aj
end if
end for
ExamineM(S1)
/* 使用S1集合测试模型*/
for all instancexin theS1do
if(F(x)≥r2) then
S2←x
end if
end for
UpdateDL←DL∪S2
UpdateDUL←DUL-S2
if (S2!=0) then
Reduce (r1)
end if
end while
ExamineM(DT)
/*使用DT对M进行训练*/
本文提出并实现了RFCM算法,通过使用半监督学习算法对未标记数据进行训练和检验,完成了物联网环境下入侵检测部分。本文将从另外两个闭源测试集合里分别使用查准率、查全率、F-Score来描述算法的性能指标。
在本文的实验中,分类模型评价术语的混淆矩阵如表1所示。
表1 分类混淆矩阵
准确率(accuracy)的计算:
(16)
召回率(recall)的计算:
(17)
F-score值的计算:
(18)
为了验证RFCM算法的有效性,分别将其与随机森林(RF)、逻辑回归(LR)、神经网络(MLP)三种算法的分类结果做对比,结果如图3所示。
图3 检测结果比较
由图3可以看出,在查准率、召回率、F-Score三个评价指标对比中,RFCM算法均有更好的表现。实验结果表明,RFCM算法可以更好地捕捉特征所包含的有用信息并对其更正确地分类。
本文提出了一个基于半监督学习的入侵检测框架RFCM。该算法是通过将SFCM算法与随机森林算法相结合,来应用于检测框架。算法对NSL- KDD数据集的实验评价表明,框架实现了较好的性能。
但是,无论使用监督学习方法还是非监督学习方法,都需要复杂的特征工程过程,需要人为进行特征设计和提取。为了解决这个问题,未来的研究方向是通过使用深度学习算法来设计模型,以消除手动设计特征工程的要求并提供自学习和压缩功能,从而产生更快的处理速度、更高的准确率。