基于系统调用行为相似性聚类的主机入侵检测方法研究

2021-08-23 06:03罗森林
信息安全研究 2021年9期
关键词:误报率检测时间调用

李 橙 罗森林

(北京理工大学信息系统及安全对抗实验中心 北京 100081)(lc_bitsec@foxmail.com)

恶意软件的数量随着网络技术的迅速发展在逐年增多,计算机也面临越来越多的病毒、木马和其他恶意软件攻击的威胁.赛门铁克2019年发布的互联网安全威胁报告中指出,赛门铁克全球情报网络日均拦截的威胁数量高达1.42亿个.因为收益高、成本低等原因,针对主机的挖矿劫持和勒索软件仍是网络犯罪分子首选的攻击手段[1].基于主机的入侵检测系统(host-based intrusion detection system, HIDS)用于检测入侵行为并发出警报,可以阻止恶意软件的恶意行为[2],从而保护主机的安全.

系统调用序列是由系统调用组成的包含顺序关系的序列,系统调用是操作系统实现并提供给应用程序调用的一系列内核函数,应用程序的行为目标几乎都是通过系统调用实现[3].系统调用表示应用程序的底层行为,是现阶段用于入侵检测的最佳数据粒度[4],并且系统调用可以实时的获取,从而完整地监视整个系统的行为.误报率是HIDS的重要衡量指标之一[5],较高的误报率会影响HIDS的检测性能,甚至使得HIDS失效[6].Murtaza等人[7]指出引起误报的其中一个原因是基于n-gram的入侵检测方法对原始系统调用序列进行特征提取是一种精确匹配方式,导致构建的模型泛化能力较弱,据此本文提出基于内核模块的系统调用抽象方法.该方法建立系统调用和系统内核模块的映射关系,根据该映射关系将系统调用序列转换为用内核模块表示的抽象系统调用序列,以提升模型的泛化性能,从而降低误报率.

基于内核模块的系统调用抽象方法将Linux操作系统中约300个系统调用抽象为8个内核模块表示,但同一内核模块的部分系统调用存在较大行为差异,且不同内核模块也含有行为相似的系统调用.例如系统调用子序列“open,llseek,read”和“chdir,lstat,chmod”使用相同的内核模块抽象表示,即“Kernel,Kernel,Kernel”,但2个序列表达的行为语义不同,前者每个系统调用的行为分别是打开文件、设置读取位置、读取内容,序列表达读取文件内容的行为语义;后者每个系统调用的行为分别是切换目录、获取文件状态信息、修改文件的权限,序列表达修改文件权限的行为语义,使用相同内核模块抽象表示不同行为的系统调用会导致系统调用序列的行为语义难以充分表达,影响入侵检测性能.

通过分析Linux操作系统中的系统调用,发现某些系统调用的行为非常相似,例如“getuid”和“geteuid”都表示获取用户ID,“stat”“fstat”“lastat”“fstatat”都表示获取文件的状态信息.不同内核模块的系统调用也存在相似的行为,例如分别属于“Kernel”和“File System”内核模块的系统调用“fchown32”和“setfsuid”都表示对文件权限的设置.针对上述问题和分析,本文提出一种基于系统调用行为相似性聚类的系统调用抽象入侵检测方法.

1 相关工作

受生物体的自然免疫系统启发,Forrest等人[8]首次提出将系统调用序列用于入侵检测,提出序列延时嵌入(sequence time delay embedding, STIDE)方法.STIDE通过在正常系统调用序列上滑动一个长度为n的窗口(即n-gram)来建立一个正常序列的数据库.然后从未知行为的序列中提取长度为n的序列,并将其与数据库进行比较,如提取的序列不在数据库中,则将其所在的序列视为异常序列.

Creech等人[4]提出一种新的基于语义的入侵检测方法来降低误报率,使用不同长度的系统调用组成单词,基于语义的短语字典又由单词组成,使用极限学习机进行异常检测,该方法在ADFA-LD[9]数据集上进行实验,结果显示当检测率为100%时,误报率为20%,但模型训练需要数周的时间.

Aghaei等人[10]通过提取正常和恶意系统调用序列上所有的n-gram(1

Zhao等人[11]提出了一种具有连续重叠子序列交叉熵的混合n-gram(H-gram)特征提取方法,该方法实现了对API调用或指令序列的语义分割,提取的API序列的特征维度非常大,于是使用基于联合熵的特征选择方法进行降维.实验结果显示使用混合n-gram的特征提取方法比使用固定长度的n-gram的特征提取方法能够得到更高的准确度和更低的误报率.

Murtaza等人[7,12]将系统调用按照其所属的内核模块分为8类(Architecture,File System,Inter Process Communications,Kernel,Memory Management,Networking,Security,Unknown),并将系统调用序列使用这8类内核模块进行抽象表示,然后将抽象的系统调用序列作为STIDE和马尔可夫模型的输入,结果表明该方法可以降低误报率并减少入侵检测的执行时间.

误报率是入侵检测系统重要的衡量指标之一,许多方法被提出用于降低误报率,基于内核模块抽象的主机入侵检测方法通过内核模块对系统调用行为进行抽象表示,但在同一内核模块的部分系统调用存在较大行为差异,且不同内核模块也含有行为相似的系统调用,造成行为抽象映射的混淆,影响检测效果.针对该问题,本文提出基于系统调用行为相似性聚类的主机入侵检测方法.

2 基于系统调用行为相似性聚类的主机入侵检测方法

2.1 原理框架

基于系统调用行为相似性聚类的主机入侵检测方法如图1所示.系统调用序列作为系统调用抽象步骤的输入,通过基于系统调用行为相似性聚类的系统调用抽象方法转换为系统调用抽象序列,然后使用系统调用抽象序列进行模型的构建与分类.

图1 主机入侵检测方法原理框架图

系统调用序列抽象步骤中,首先使用Word2Vec对原始系统调用序列进行词嵌入得到词向量,再使用k-means聚类算法对系统调用词向量进行聚类,得到系统调用抽象映射字典,最后使用抽象映射字典将系统调用序列转换为系统调用抽象序列.

2.2 系统调用序列抽象

2.2.1 Word2Vec相似性特征提取

Word2Vec是从大量文本语料中以无监督的方式学习语义知识的一种浅层神经网络模型,它被大量地用在自然语言处理中,通过学习文本来用词向量的方式表征词的语义信息,即通过一个嵌入空间使得上下文相似的单词在该空间内余弦距离很近.

使用Word2Vec对系统调用进行词嵌入,构建连续稠密词向量实现多维度系统调用行为语义相似性信息提取.将系统调用视为一个单词,根据其所要实现的功能来描述这个词的行为语义,不同的系统调用在不同维度上可能具有行为语义相似性.例如在某一维度上系统调用“chmod”“fchmod”“fchmodat”的功能都是更改文件的权限,在另一维度上系统调用“read”“write”“open”的功能都是对文件的操作.通过Word2Vec模型训练输出的连续稠密词向量可以在多个维度上表达这种行为语义相似性,具有相似行为语义的系统调用的词向量在空间上的余弦距离相近.

2.2.2k-means聚类

采用k-means算法对系统调用进行聚类.k-means是一种基于距离的无监督学习聚类算法,以欧氏距离作为相似性指标,将输入的样本按照指定的聚类簇数k,分为k个簇.算法具体描述如下:

步骤1.随机选取k个样本作为初始的聚类中心a=(a1,a2,…,ak);

步骤2.针对数据集中每个样本xi,通过式(1)计算它到k个聚类中心的距离,并将其分到距离最小的聚类中心所对应的簇中,其中Ci为样本xi被分到的簇,aj为第j个聚类中心:

Ci

(1)

步骤3.对每一个簇,通过式(2)重新计算其聚类中心aj,其中Ci为第i个簇.

(2)

然后重复步骤2和步骤3,直到达到终止条件(最大迭代次数、误差平方和局部最小、聚类中心不变或变化很小等).

(3)

由于k-means算法无法在计算中确定需要聚类的簇的数量,需要指定聚类的簇数,即聚类k值,在本文中使用轮廓系数法来确定最佳的聚类k值.轮廓系数法是聚类效果好坏的一种评价方式,该方法结合内聚度和分离度2种因素,当轮廓系数越大表示分类效果越好.

2.2.3 抽象映射

使用k-means算法对归一化后的系统调用词向量进行聚类,可以得到系统调用Si与其分类后所属簇Cj(j=0,1,…,k-1)的映射关系,如式(4),该映射关系构成的空间称为系统调用抽象映射字典.

f(Si)=Cj.

(4)

对于系统调用序列T={S1,S2,…,Si}(i等于系统调用序列T的最大长度),通过式(4)将其转换为抽象的系统调用序列AT={f(S1),f(S2),…,f(Si)}.

2.3 模型构建与分类

将抽象后的系统调用序列分为训练集和测试集,将训练集用于入侵检测模型的训练,测试集用于测试模型的分类性能.使用入侵检测模型BonG(bag ofn-grams)[13]进行模型构建.该方法提取窗口大小为6的n-gram短序列,然后将得到的所有n-gram按照tf-idf值进行排序,取tf-idf值排名前70%的n-gram作为系统调用序列的特征集.对于每个系统调用序列i,用xi={n1,n2,…,nm}表示n-gram的集合,其中m为系统调用序列进行处理后得到的n-gram的总数,每个n-gram用特征向量nj=(s1s2s3s4s5s6)表示,其中1≤j≤m.

BonG在随机森林算法上取得了最佳结果,因此实验使用随机森林对模型进行训练和分类,随机森林是一种集成学习分类器,它通过集成学习的思想将多棵决策树进行集成,相较于单分类器其性能更好.随机森林结合“bagging”和随机抽样的思想,使用bootstrap样本(从训练集随机抽样产生的训练子集)构建连续且独立的决策树,对于一个输入样本,N棵决策树会有N个分类结果,随机森林集成所有的分类投票结果,将投票次数最多的类别指定为最终的输出.与单分类器相比,随机森林会有更好的分类结果.

3 实验分析

3.1 实验目的

为了验证基于系统调用行为相似性聚类的主机入侵检测方法(system call abstract intrusion detection method based on system call behavior similarity clustering, BSC)能够提升检测效果,本文研究了不同聚类簇数k对入侵检测效果和入侵检测时间的影响,并与基于内核模块的系统调用抽象的方法(kernel module based system call abstraction method, KMBA)[7]和BonG[13]进行对比.

3.2 实验数据与实验环境

使用ADFA-LD[9], ADFA-WD[14]能代表当前攻击方法的数据集进行实验,2个数据集均由训练集(training data master, TDM)、验证集(validation data master, VDM)和攻击集(attack data master)组成,TDM和VDM由良性样本构成,ADM由恶意样本构成.ADFA-LD和ADFA-WD数据集的样本数量如表1所示:

表1 ADFA-LD和ADFA-WD数据集的样本数量

实验环境如表2所示:

表2 实验环境

3.3 评价方法

采用精度(Precision)、召回率(Recall)、误报率(FPR)、F值(F-Measure)和受试者工作特征(receiver operating characteristic, ROC)曲线的下面积AUC(area under roc curve)的值作为检测效果的评价指标,采用模型测试所用的时间作为时间效率的评价指标.

恶意的系统调用序列被标记为正样本,良性的系统调用序列被标记为负样本.TP表示正样本被正确分类为正样本的数量;FP表示负样本被错误分类为正样本的数量;TN表示负样本被正确分类为负样本的数量;FN表示正样本被错误分类为负样本的数量.

Precision的定义如式(5),它表示预测为正样本的数量中实际为正样本的比例:

(5)

Recall的定义如式(6),它表示预测为正样本的数量与正样本总数的比值:

(6)

FPR的定义如式(7),它表示分类器将负样本错误预测为正样本的比例:

(7)

F-Measure的定义如式(8),它是一种同时考虑Precision和Recall用于综合评价模型的指标.

(8)

ROC曲线通过改变决策阈值得到,ROC曲线的纵坐标为TPR,横坐标为FPR,当TPR达到100%(所有的恶意样本都被检测到)时,FPR的值越小越好,即良性样本被误判为恶意样本的数量越少越好.ROC曲线的下面积AUC是一种独立于决策阈值,用于评价模型性能的全局度量指标.该值越大越好,AUC=1代表理想模型,该模型可以实现100%的检测率和0%的误报率.AUC=0.5表示随机模型,AUC<0.5表示模型比随机模型更差,检测率低且误报率高.

3.4 实验过程

将数据集对应的所有词向量经过归一化处理后作为k-means算法的输入进行聚类,使用轮廓系数法评价不同聚类簇数的聚类效果.图2表示ADFA-LD和ADFA-WD数据集不同聚类簇数对应的轮廓系数,横坐标表示聚类簇数k,纵坐标表示轮廓系数,轮廓系数越大表示对应聚类簇数k的聚类效果越好.ADFA-LD数据集中共使用175个系统调用,当k=65时轮廓系数最大,ADFA-WD数据集共使用1 308个系统调用,当k=713时轮廓系数最大,故选取k=65和k=713分别作为ADFA-LD和ADFA-WD数据集由轮廓系数法确定的最佳聚类簇数.此外我们还选取k=100,k=20,k=8,k=4对ADFA-LD数据集的系统调用进行聚类,选取k=1 000,k=100,k=20,k=9,k=6对ADFA-WD数据集的系统调用进行聚类.

图2 ADFA-LD和ADFA-WD数据集不同聚 类簇数k对应的轮廓系数

对比方法中,基于内核模块的系统调用序列抽象方法[12]仅提出针对Linux操作系统进行抽象的方法,而ADFA-WD是基于Windows操作系统的数据集.为了将基于内核模块的系统调用序列抽象方法用于ADFA-WD数据集,我们根据基于内核模块的系统调用序列抽象方法的思想,将ADFA-WD数据集中的系统调用抽象表示为其所在的动态链接库(dynamic link Library, DLL),Linux操作系统中的内核模块与Windows操作系统中的动态链接库有相似的意义.实验中将ADFA-LD数据集和ADFA-WD数据集的TDM和VDM合并为正常样本(负样本)集,ADM为恶意样本(正样本)集,分别将正常样本集和恶意样本集按照7∶3的比例分为训练集和测试集,分别用于模型的训练和测试.

3.5 实验结果

表3列出不同入侵检测方法在ADFA-LD数据集上取得的检测效果评价指标,结果显示BSC(k=65)在所有评价指标上取得最佳结果,召回率为98.6%,误报率为10.2%,相比KMBA+BonG,召回率提高2.2%,误报率降低12.5%;相比于BonG,召回率提高3.4%,误报率降低13.4%.BSC(k=8)和KMBA以不同的式将Linux系统调用分为8类,BSC(k=8)和KMBA+BonG的召回率几乎相同,但BSC(k=8)的误报率更低,相比KMBA+BonG降低了10.1%.

表3 不同入侵检测方法在ADFA-LD数据集取得的检测效果评价指标

在选取的不同聚类簇数k中,BSC(k=65)在所有检测效果评价指标上取得最佳结果,其他聚类k值(k=100,k=20,k=8,k=4)的BSC评价指标较BSC(k=65)稍有下降,其中BSC(k=4)相比BSC(k=65)召回率降低了2.1%,误报率上升了2.6%,检测效果评价指标下降较小;相比KMBA+BonG召回率几乎相同,但误报率降低了8.8%;相比BonG召回率提高了1.3%,误报率降低了9.7%.

表4列出不同入侵检测方法在ADFA-WD数据集取得的检测效果评价指标,结果显示BSC(k=713)在所有评价指标上取得最佳结果,召回率为98.0%,误报率为5.5%,相比KMBA+BonG,召回率提高2.2%,误报率降低32.0%;相比于BonG,召回率提高1.1%,误报率降低15.5%.

在选取的不同聚类簇数k中,BSC(k=713)在所有检测效果评价指标上取得最佳结果,其他聚类簇数k(k=1000,k=100,k=20,k=9,k=6)的BSC评价指标较BSC(k=713)稍有下降,其中BSC(k=9)相比BSC(k=713)召回率降低了1.7%,误报率上升了4.6%,检测效果评价指标下降较小;与以不同方式将Windows系统调用分为9类的KMBA+BonG相比,召回率几乎相同但误报率降低了27.4%;相比BonG建模方法召回率几乎相同但误报率降低了11.2%.

表5显示不同入侵检测方法在ADFA-LD数据集上的检测时间.BonG的检测时间为14.63 s,KMBA+BonG的检测时间为0.58 s. BSC的检测时间随着聚类簇数k的减小而减少,其中检测效果最佳的BSC(k=65)检测时间为12.59 s,BSC(k=100)检测时间最长,为13.71 s,BSC(k=4)检测时间最短,为0.60 s.

表5 不同入侵检测方法在ADFA-LD数据集上的检测时间

表6显示不同入侵检测方法在ADFA-WD数据集上的检测时间.BonG的检测时间为5.49 s,KMBA+BonG的检测时间为0.45 s. BSC的检测时间随着聚类簇数k的减小而减少,其中检测效果最佳的BSC(k=713)检测时间为5.35 s,BSC(k=100)检测时间最长,为5.45 s,BSC(k=6)检测时间最短,为0.58 s.

表6 不同入侵检测方法在ADFA-WD数据集上的检测时间

4 讨 论

通过对实验结果分析发现,在ADFA-LD数据集和ADFA-WD数据集的实验中,BSC(k等于轮廓系数法确定的最佳聚类簇数)的所有检测效果评价指标均为最佳,与KMBA+BonG相比,在将系统调用聚类为相同簇数进行抽象表示时,BSC检测效果更好,说明BSC能够有效降低行为抽象表征的混淆,提升检测效果.

在不同聚类簇数k的BSC中,使用轮廓系数法确定的最佳聚类簇数的BSC在ADFA-LD和ADFA-WD这2个数据集上检测效果最佳,其他聚类簇数的BSC检测效果评价指标较BSC(k等于轮廓系数法确定的最佳聚类簇数)稍有下降,当k<轮廓系数法确定的最佳聚类簇数时,BSC各项检测效果评价指标随着k的减小而小幅度下降,但相比BonG和KMBA+BonG在误报率评价指标上仍有不小的改善.在ADFA-LD数据集的实验中,BSC(k=4)与BonG相比,检测时间取得了95.9%的增益(检测时间分别为0.60 s和14.63 s).在对ADFA-WD数据集的实验中,BSC(k=9)与BonG建模方法相比,检测时间取得了82.1%的增益(检测时间分别为0.98 s和5.49 s).在检测效果各项指标下降幅度较小的情况下,使用较小聚类簇数的BSC能够大幅减少入侵检测时间,提高检测时间效率.

综上所述,BSC能够有效降低行为抽象表征的混淆,提升检测效果.在检测效果各项指标下降幅度较小的情况下,使用较小聚类簇数的BSC能够大幅减少入侵检测时间,提高检测时间效率.

5 结 论

基于内核模块抽象的主机入侵检测方法将Linux操作系统中约300个系统调用抽象为8个内核模块表示,旨在提升模型的泛化性能,减少误报率,但在同一内核模块的部分系统调用存在较大行为差异,且不同内核模块也含有行为相似的系统调用,造成行为抽象映射的混淆,影响检测效果.针对该问题,本文提出基于系统调用行为相似性聚类的主机入侵检测方法.首先利用Word2Vec构建连续稠密词向量实现多维度系统调用行为语义相似性信息提取,再使用聚类算法对系统调用进行抽象表征,从而将系统调用序列转换为系统调用抽象序列,最后使用BonG[11]方法构建入侵检测模型.基于ADFA-LD和ADFA-WD数据集的实验结果表明,基于系统调用行为相似性聚类的主机入侵检测方法分别取得了召回率98.6%、误报率10.2%和召回率98.0%、误报率5.5%的最佳结果.基于系统调用行为相似性聚类的主机入侵检测方法有效降低行为抽象表征的混淆,提升检测效果.在检测效果各项指标下降幅度较小的情况下,使用较小聚类簇数的BSC在2个数据集上分别实现了95.9%和82.1%的检测时间增益,大幅提高了检测时间效率.

猜你喜欢
误报率检测时间调用
原始数据动态观察窗法在火灾特征信号融合提取中的应用研究
家用燃气报警器误报原因及降低误报率的方法
钻杆管体超声波探伤误报分析及措施
对两种细菌鉴定法在血液检验中的应用效果进行分析
核电项目物项调用管理的应用研究
新型溶血素与传统溶血素在临床血常规检验中的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
ABL90血气分析仪在急诊科的应用研究
不同检测时长对粉煤灰砌块放射性检测结果的影响
基于系统调用的恶意软件检测技术研究