注:本文摘自轩辕实验室成员程乾阳的硕士毕业论文《基于机器学习的CAN总线入侵检测方法》第五章
在机器学习中,有很多用于评价二值分类模型的指标,包括假阴率、假阳率、准确度、精确度等。与之类似,在入侵检测系统中,往往将准确度、假阴率和假阳率作为重要的评价标准。将异常定义为阳性,正常定义为阴性,那么漏报率和误报率分别对应于假阴率和假阳率。如果一个异常的样本被判断成正常,则产生一个假阴例;反之如果一个正常的样本被判断成异常,则产生一个假阳例。P表示异常样本数量,N表示正常样本数量,FN表示假阴例的数量,FP表示假阳例的数量,TP表示真阳例的数量,TN表示真阴例的数量。准确度、假阴率和假阳率的计算公式如下:
对于CAN总线入侵检测系统,保证高准确度是最为基础的要求。但实际检测过程中异常报文数据可能只占汽车运行产生报文的极小部分,为了应对这种数据偏斜的情况,对于漏报率的评估就显得非常重要。一个好的入侵检测系统的准确度应尽可能高,而误报率和漏报率尽可能低。
本文使用的数据集来自文献,包含针对汽车CAN总线的拒绝服务攻击、模糊攻击、重放攻击、正常数据四类数据,每类数据每条记录都包含标识符、数据场和类别三部分信息。数据场按字节被切分为8列,类别“A”表示该记录为注入的攻击数据,类别“N”表示正常。如表1为部分拒绝服务攻击数据。
在正常数据集中,共包含35种ID,这些ID的分布如图1,通过OBD口向CAN总线注入全零ID的帧得到DoS攻击数据,注入随机ID的帧得到模糊攻击数据,注入有关于发动机、车身控制的帧得到重放攻击数据。
在CAN数据帧中,数据场中包含的指令一般与ID紧密相关,除ID外,可以将数据场的8个字节作为候选特征。对于有监督学习,可以通过各个特征和类别的相关性对特征进行筛选,将与类别相关度低的特征去除,既可以降低输入特征向量的维度,也可以消去数据中的噪声。互信息是度量两个变量相关性的一种指标。使用 d1,d2,…,d8依次表示数据场的8个字节,对于远程帧这样数据场为空的帧,这8个字节可以采用填零处理。
从表2可以看出d7,d8与类别的互信息明显小于其它字节,这表示对分类器区分数据的正负类别帮助不大,而d1,d2,…,d6与类别的互信息较大,其包含更多有助于分类的信息。d7,d8将从候选特征中剔除。简单选取与类别互信息最大的几个特征会忽略信息的冗余。如表3,d4虽然与类别的相关度较高,但它与剩余五个字节的互信息均超过0.5,将其从候选特征中剔除。综合考虑两者,保留f={ID,d1,d2,d3,d4,d5,d6}用以构建特征。
CAN通信时,有部分ID的分布在时序上会呈现周期性。但由于在CAN中帧有周期型和事件型两种发送方式,存在另一部分非周期发送的CAN帧,所以ID分布的周期性并不严格,相同ID的时间间隔也可能由于汽车状态的变化会出现一定的波动。因此直接使用时间间隔作为特征来构建入侵检测系统并不可靠。
但是,这种周期性依然意味着CAN帧的分布在时序上存在一定规律。可以通过分割数据集的方式得到时间片,进而借助统计学或信息学手段从分割后的时间片中提取特征。这样提取的特征受汽车状态的波动影响相对较小,而如DoS这样的攻击则会导致时间片内的数据发生变化,从时间片中提取的特征也会不同于正常情况。
因为正常情况下CAN报文发送间隔相对稳定,同时为了保证每个时间片中包含报文数相同,可以直接截取特定数量的报文作为一个时间片。本文在GBDT-IDS和IF-IDS中将每100个消息帧作为一个时间片,而在GAN-IDS中每36个消息帧作为一个时间片。
原始CAN报文在特征选择后划分成时间片,时间片包含的数据(ID和数据场的字节)都为十六进制表示的字符串,简单将这些字符串转化成对应的整型数值会导致特征的取值分布非常离散。另外时间片包含大量CAN帧,每个CAN帧包含多个字节,这使得每个时间片包含的数据量很大。如果将这些数据转换成整形或二进制作为特征,从每个时间片中提取的特征维度会变为高维稀疏向量,而GBDT和孤立森林算法并不适用于高维稀疏特征。为了降低模型输入特征的维度,可以通过计算每个时间片中每个字节的信息熵来构建GBDT和孤立森林模型的输入特征。如图2,将时间片分做六列,ID和d1,d2,d3,d4,d5,d6依次对应一列,对各列计算信息熵得到S={S1,S2,S3,S4,S5,S6}。通过计算熵,可以从每个时间片中提取一个6元向量作为特征,将这些特征作为GBDT和孤立森林模型的输入特征。
GBDT和孤立森林算法的输入特征都为向量,而GAN模型一般用于图片的生成和识别,需要将原始数据集转化为矩阵形式的特征,基于熵的特征构建方法不适用于GAN模型的输入特征构建。原始数据集中的每一列都是十六进制的字符串,因此每一列的取值个数有限。如表4,ID和数据场的各个字节取值种类在35和256之间。
这样取值个数有限的字符型特征可以看做类别型特征。类别型特征无法直接作为分类器的输入特征,需要将每一种类别编码成数值型特征。最简单的编码方法是不考虑类别之间的相关性,直接人工地编码,如将字符特征按其对应十六进制值的大小排序后编码。这样的编码方式忽略不同类别在时间片中的共现关系,无法表达不同类别之间的相关性。
参考文本分析时对单词向量化的处理方法,可以在时间片分割和特征选取的基础上引入词向量算法Word2Vec。
训练和模型参数对于机器学习实际性能影响非常大。在集成学习中,基学习器的数量对模型的影响常常大于基学习器本身的一些参数。对于深度学习,训练时的epoch和样本批次是除了网络结构和学习率外的重要参数。GBDT算法作为监督学习算法,其调参可以通过观察算法在不同参数下对攻击数据检测的准确率来完成,实际调参过程中可以结合网格搜索实现。对于孤立森林这样的无监督学习,很多情况下没有标签数据,调参和评估都非常困难。本文将GAN和孤立森林用于未知攻击检测,这两种模型的训练都基于正常数据,所以本文使用的攻击数据集对于这两种模型本身就是未知的。可以通过观察不同参数下,GAN和孤立森林在攻击数据集中的准确度来选择参数。调参时从三种攻击数据集中各随机取三分之一的数据用于监督学习,正常数据用于无监督学习。
所有参数中,决策树的数量和决策树的深度对GBDT性能影响最大,调节决策树的数量和决策树的深度来优化模型。初始化学习率α=0.1和决策树最大深度d=8,GBDT-IDS的准确率和基学习器数量的关系如图4所示,当决策树数量k小于100时,GBDT-IDS在训练集和测试集上的准确率都随着k的增大而快速增大;大于100后准确率增长变得很慢;当决策树数k大于260时,GBDT-IDS在测试集上准确率稳定在99.55%,在测试集上的准确率基本不再增加。
将孤立森林在三个攻击数据集上的准确率作为调参的指标。孤立树的数量k是影响孤立森林检测准确率的最重要参数,其次是训练每棵孤立树的样本数m和特征数d。初始化m=500和决策树最大深度d=4,IF-IDS的准确率和孤立树数量k的关系如图5所示,当孤立树数量k小于20时,IF-IDS在攻击数据集上的准确率随着k的增大而快速增大;当孤立树数量k大于20时,IF-IDS在攻击数据集上准确率在95.11%和97.43%之间波动,取准确率的相对高点k=190。
孤立森林和GAN-D(GAN中的判别器)使用正常数据训练,GBDT和Dpre分别在各个攻击数据上训练,将所有检测模型分别在四种攻击数据上进行评估。孤立森林、GBDT和Dpre可以使用模型调参部分内容确定的模型参数。因为本节主要评估的是独立模型在各个已知攻击上的表现,需要调高GAN中的权重λ至1,这样可以使得GAN-D能更好地检测已知攻击。调整后的GAN-D可以根据模型调参部分内容所述过程再次调参。如表12为检测模型在各个攻击数据上的效果。孤立森林在重放攻击上的检测效果相对较差,准确率小于99.00%而误报率和漏报率均超过1.00%,在DoS攻击和模糊攻击上具有较高的准确率。其他模型在所有攻击数据上的准确率均大于99.00%而误报率和漏报率均小于1.00%。在所有模型中,Dpre检测效果最佳,准确率接近于100%而误报率和漏报率接近于0%。除Dpre的其他模型误报率都相对较高,由此可知误报率是限制这些模型准确率的主要因素。
将模糊攻击和DoS攻击作为已知攻击,将重放攻击作为未知攻击。基于这一假设,使用已知攻击的数据集训练GDBT和,Dpre使用正常数据训练孤立森林和GAN-D,分别使用这些模型以及它们的组合去检测未知攻击,独立模型和组合模型的检测效果如表13。孤立森林在未知攻击的检测上表现最佳,GAN-D次之,Dpre基本不具备检测未知攻击的能力,而GBDT作为监督学习模型却对未知攻击有不错的检测效果,这可能是因为重放攻击数据和已知攻击数据有一定的相似性。
表13:组合模型评估表
两种组合模型均能检测已知攻击和未知攻击。相比于监督模型,它们在检测未知攻击时,能在保证误报率不受较大程度影响的基础上大幅降低漏报率。相比于无监督模型,组合模型通过降低漏报率使得其在已知攻击和未知攻击上的检测准确率得到不同程度的提高。GBDT和孤立森林的组合在两类攻击上的检测效果均优于Dpre和GAN中判别器的组合,前者在准确率明显高于后者而误报率明显低于后者。
参考文献
[1] SEO E, SONG H M, KIM H K. GIDS: GAN Based IntrusionDetection System for In-vehicle Network[C] // 2018 16th Annual Conference onPrivacy, Security and Trust (PST). 2018 : 1 – 6..
已完成
数据加载中