APP下载

一种双向采样的恶意PDF文档检测方法

2022-05-26杨淑群张新宇

软件导刊 2022年5期
关键词:类别分类器文档

李 睿,杨淑群,张新宇

(上海工程技术大学电子电气工程学院,上海 201620)

0 引言

在网络信息传递过程中,便携式文档格式(Portable Document Format,PDF)文档作为一种十分方便的跨平台文档交换文件格式,成为当今最通用的文档格式之一,这也使得PDF 文档成为攻击者的重点对象[1]。恶意PDF 文档在针对性攻击传播中,经常和高级持续性威胁(Advanced Persistent Threat,APT)攻击相结合[2],普遍采用恶意邮件的形式,通过在邮件中添加恶意附件或链接,选取特定的企业或机构组织,利用漏洞对目标系统进行攻击,以窃取商业机密等有价值的信息[3]。而针对PDF 文档的恶意性检测往往基于理想的均衡数据集进行研究。现实世界中,恶意PDF 文档数量远少于良性文档。因此,研究样本分类不均衡下的恶意PDF 文档恶意性检测具有现实意义。

1 相关工作

恶意PDF 文档检测早期采用静态的分析方法[4]。Laskow 等[5]提出PJScan 检测模型,通过提取恶意文档样本中的JavaScript 代码进行词法分析,利用单一类别支持向量机OCSVM 对未知文档样本进行分类,但该方法无法对代码本身做具体分析;Dabral 等[6]通过静态解析提取文档结构特征和JavaScript 特征,并对分类器进行组合来提高分类器的健壮性;李涛[7]通过静态分析提取JavaScript 特征,并利用OCSVM 算法对文档进行检测。动态分析检测中较经典的有Willems 等[8]提出的CWsandbox 动态分析方法,它是在沙盒环境中加载Adobe Reader 并执行PDF 文档,通过观察其系统调用和系统状态等行为信息来判断该文档是否为恶意文档;Snow 等[9]提出的ShellOS 系统则是基于ShellCode 进行检测,通过直接执行来检测缓冲区的Shell-Code。动静结合分析的检测模式利用了静态分析的高效率和动态分析的高准确度。杜学绘等[10]结合动静态分析提取常规信息、结构信息及API 调用信息对文档进行分类检测;李国等[11]结合文档结构和JavaScript 特征,在提取特征前加入信息熵差异检测步骤筛选可疑文档,对检测时间进行优化。

对近年的技术发展进行分析发现[12],基于机器学习的静态分析,无法检测经过混淆等技术手段处理过的文档,容易被绕过[13],从而使检测率降低;动态分析[14]的检测方法需要执行文件,检测开销大,会占用更多资源;动静结合分析[15]技术容易忽略元数据等特征,更关注PDF 文档的JavaScript 代码特征[16],对于没有内嵌JavaScript 代码的PDF 文档存在漏检问题。现有的检测技术主要集中在平衡数据集上[17],但这样的数据集不能代表真实世界的数据,且现有检测技术健壮性较差。因此,本文对不均衡样本数据集进行处理,改进BSMOTE 算法,利用近邻样本合成过渡间接样本,再利用过渡样本和原始样本合成新的数据样本,利用K-Means 聚类算法,对良性PDF 样本进行聚类欠采样操作,将过采样和欠采样进行结合,利用双向采样法对样本进行预处理,使样本数据集趋于平衡。通过静态分析提取内容及结构特征,并动态提取文档执行应用程序接口(Application Programming Interface,API)特征,最后采用随机森林方法进行检测分类。实验表明本文采用的方法检测效果较好,各评价指标都有提升。

2 基于双向采样的恶意PDF文档检测

针对PDF 文件分类数量不均衡问题,采用过采样和欠采样相结合的方法,对PDF 文件样本数据进行预处理,使样本数目处于相对均衡的理想状态,进而训练分类模型。

2.1 改进BSMOTE的PDF文档样本过采样方法

人工合成少数类别过采样技术SMOTE(Synthetic Minority Oversampling Technique),是在样本输入空间中利用少数类别的样本去寻找近邻样本,并利用信息人工合成新样本[18]。

对于给定的数据集{(x1,y1),(x2,y2),...,(xn,yn)},yi∈{+1,-1},i=1,2,…,n,假设数据集中少数类别样本集记为Xa,在输入的样本空间中,对于任意一个少数类别样本xai寻找其k 近邻样本点。假设样本xai拥有的所有属性为rij,j=1,2,…,s,在其k 个近邻样本里,对每个属性j 都随机择取一个样本针对初始样本xai和择取的样本在属性j 上的差,利用[0,1]的随机数进行权重配比,再加上初始样本xai在属性j 上的值,即合成为新样本在属性j 上的值,如公式(1)所示。

SMOTE 算法线性生成新样本的插值示意图见图1。在生成新样本时,SMOTE 方法很容易导致生成的新少数类别样本包围在多数类别样本中,容易形成噪声样本点,不利于分类边界确定,造成干扰,如图2 所示。图2 中,虚线表示分类界面,黑色圆点代表少数类别样本点,白色圆点代表多数类别样本点。在进行SMOTE 方法合成新样本点时,多数类别样本点包围个别少数类别样本点,生成的新样本即图中的黑三角点,仍位于多数类别样本点的包围中,这样就会对分类造成干扰。

BSMOTE(Borderline SMOTE)算法[19]对SMOTE 算法进一步改进,通过靠近分类边界的少数类别样本进行新样本合成。

Fig.1 SMOTE algorithm interpolation generates new sample图1 SMOTE算法插值生成新样本

Fig.2 SMOTE algorithm generates interference samples图2 SMOTE算法生成干扰样本

设给定的样本训练集为X,其中,少数类别样本集记为Xa,样本数量为a,多数类别样本集记为Xb,样本数量为b。

首先,针对少数类样本集Xa中的每一个样本点Xai,i=1,2,…,a,在整个训练集X 中寻找k 近邻样本点。在k 近邻样本点中,多数类别的样本点集标记为Xk′,数量记为k′个,0 ≤k≤k′。

然后,对k′的大小进行分析,确定样本点Xai的情况。若k′=k,即样本点Xai的k 近邻样本全都是多数类别样本点,则该样本点为噪声点,可以忽略;若,即k 近邻样本点中多数类样本点大于少数类样本点,则样本点Xai容易被误分,属于预定的危险样本集;若,即k 近邻样本点中的多数类样本点小于少数类样本点,则Xai属于预定的安全样本集,可忽略。

接着,得出危险样本集样本点,即是少数类别样本集Xa中处于分类边界的样本点。对于危险样本集中的每个样本,随机选择某个样本点计算其k 近邻样本点,按照SMOTE 方法即式(1)合成新样本点,根据危险样本集不断重复合成新样本点,直到样本数量满足为止。

BSMOTE 方法生成新样本时,在危险样本集中随机挑选任意少数类别样本点,在该样本点及其近邻的样本点之间进行取值。新样本点处于两点连线上,这样容易造成新样本点的位置随机性很大,呈不均匀分布。

针对上述问题,改进BSMOTE 方法。为了使新样本点能更均匀地分布,引入间接新样本进行二次样本生成,得到带有间接新样本的BSMOTE 方法(BSMOTE With Transition New Samples,TBSMOTE)。对危险样本集中的任一少数类别样本,设其k 近邻样本点集为Xdi,s,s=1,2,...,k。在对k 近邻样本进行随机挑选生成新样本时,引入间接新样本,根据k 近邻样本中任意两样本合成为间接新样本,进而对间接新样本和原始样本点进行合成操作,从而达到理想的合成新样本均匀分布的效果。如图3 所示,图中圆点代表少数类别样本,方块点代表生成的间接新样本,三角点代表最终生成的新样本点。引入间接新样本的方法如下:

假设选取k 近邻样本点中的两个样本点xdi,1、xdi,2,计算二者生成的间接新样本x1,2′,计算过程与SMOTE 方法同理。随后,通过间接新样本x1,2′和危险样本集中的原始样本点xdan,ai进行新样本合成,最终得到对应新样本点xdan,ai′。

Fig.3 TBSMOTE algorithm generates a new sample图3 TBSMOTE生成新样本点

2.2 基于K-means的PDF文档样本欠采样方法

PDF 文档样本数据集的正负类别数量相差悬殊,针对样本训练集单纯采取过采样来增加少数类别样本,能够使样本数目达到均衡状态,但是对于分类器的性能改善效果不显著,容易形成过拟合问题。对数据集过采样的同时进行欠采样操作,能够改善上述问题,两种采样方法进行结合比单纯使用过采样或欠采样更能在分类上提升训练模型性能。

在过采样操作上结合欠采样操作。在欠采样中,随机欠采样是最为常见的方式,然而随机欠采样由于太过随机,难以顾及到样本的分布。受采样率影响,更易关注样本集中的高密度部分,导致关键点被删除而丢失关键信息。本文对多数类别的样本先进行聚类操作,再根据采样率对聚类后的每一个聚类簇样本进行欠采样,从而解决上述分布不均匀问题。

K-means 聚类算法原理简单,便于理解和操作,拥有良好的延伸性。基于K-means 聚类方法,对PDF 样本采取聚类欠采样操作。先对PDF 样本数据采取聚类操作,随后按比例对每个聚类簇中的样本采取欠采样,具体步骤如下:

输入:原始多数类别PDF 样本数据集Xb,欠采样率N

输出:欠采样后的新的多数类别PDF 文档样本数据集

(1)对原始多数类别PDF 样本数据集进行K-means 聚类,划分成K 个聚类簇。

(2)对每个聚类簇Ck,样本数量为s,根据欠采样率N计算每个聚类簇Ck的欠采样数量s×N,欠采样数量采取向上取整。

(3)根据每个聚类簇计算出的欠采样数目,对每个聚类簇分别随机抽取相应数目的样本,直到所有聚类簇完成欠采样。

根据上述过采样和欠采样方法,本文改进BSMOTE 过采样,融合K-means 欠采样,提出一种KM-TBSMOTE 双向采样方法,流程如图4 所示。首先采用TBSMOTE 算法对少数类别PDF 样本过采样,增加少数类别样本数量;然后基于K-means 算法,对多数类别PDF 样本欠采样,剔除部分多数类别样本,最终达到样本分类数目均衡的状态。

Fig.4 Flow of KM-TBSMOTE bi-directional sampling method图4 KM-TBSMOTE双向采样法流程

2.3 特征提取与选择

本文使用开源PdfParser 解析工具对PDF 文档样本进行解析,该工具可查看PDF 文档的所有对象和数据流的详细信息。

利用解析工具解析PDF 文档,对PDF 文档作兼容性分析,剔除不兼容的PDF 文档,保证样本的可用性。通过对PDF 文档结构的研究,对PDF 文档进行解析处理,结合现有的恶意PDF 文档的特征研究,选取静态解析的基本特征,提取的部分特征和代表的含义如表1 所示。其中,“/ObjStm”可包含“/URI”等调用,一般常出现在恶意文档中;“/Submit Form”“/URI”关键字,恶意文档通过此类Action 转入恶意执行入口。除此之外,还要考虑文件的大小和版本,以及文档中Object 的数量,这些特征和文档恶意性有不同程度的关联,特征间组合起来能对一个文档的整体情况作出大概的描述。通过对大量文档进行解析,可以得出恶意PDF 文件大小与良性文件相比普遍较小的结论,这是因为恶意的PDF 文档通常不包含有意义的文本和图像等信息,而不同版本的漏洞存在区别,且攻击者会在版本号字段做手脚,利用阅读器漏洞攻击用户。攻击者通常在对象和交叉引用表里对恶意内容进行隐藏,而JavaScript 代码和一些特殊函数常进行混淆等恶意操作。

Table 1 Some features and details表1 部分特征及详情

上述特征单独使用并不能完整地描述一个文件的恶意性,但是组合成特征向量能对文件进行概括。恶意PDF文件往往内嵌代码并采用混淆和隐藏等手段,而单独进行静态分析提取特征并检测容易导致恶意文件绕过检测,在恶意代码的定位和反混淆处理上存在局限性。因此,本文采取动态分析方法,在PDF 文件运行过程中提取API 调用特征进行分析,以此来完善特征的多样性和顽健性。针对内嵌JavaScript 代码的文档,利用GoogleV8 引擎对文档中的JavaScript 代码进行动态执行和分析。GoogleV8 可以独立运行,在执行JavaScript 代码前将其编译成原生机器码,且采用了内联缓存方法,性能更好。通过提取JavaScript代码在执行过程中的API 调用信息来刻画恶意PDF 文件的动态分析特征,如“getAnnots()”“getIcon()”“newPlayer()”“customDictionaryOpen()”等典型API 函数在解析过程中通常触发缓冲区溢出,从而执行任意代码。

2.4 分类检测算法

对于检测问题,在挑选合适的机器学习分类算法时,选择不同的分类算法预测出的结果是不稳定的,会存在一定程度上的误差。而使用集成学习方法,则可以将分类器进行组合,得到更好的效果。因此,本文采用随机森林(Random Forest,RF)算法[20]对双向采样后的数据集进行检测模型训练,RF 算法利用集成学习的思想,在单独决策树基础上,通过构建Bagging(Bootstrap Aggregating)集成进而扩展,是一种基于随机向量的组合分类算法。RF 算法以决策树作为基分类器,利用Bagging 方法进行集成,并在构造单个决策树的过程中引入随机属性筛选进行节点属性分割。

3 实验结果与分析

本文实验环境如下:硬件环境采用英特尔C621 服务器专用芯片组CPU,内存为64G,操作系统为Windows10,编译环境为python3.7。实验通过Contagio 公共数据库中收集到的训练样本,共计10 900 个,其中恶意PDF 文件样本1 090 个,正常良性PDF 文件样本9 810 个,正常良性文件样本与恶意样本数量比例为9:1。将得到的特征数据进行标准化处理,转化为47 维特征向量,对于KNN 算法进行参数调优,选取KNN 近邻样本点个数参数为5。

对于分类不均衡的数据集,用准确率评价分类器性能意义不大,因为少数类别样本和多数类别样本在样本空间中占比相差悬殊。当正常样本占98%,异常样本占2%时,假设所有样本都预测为正常样本,预测结果准确率也可达到98%,而实际上,对于异常样本,预测结果完全误分类,所以将准确率作为衡量分类器好坏的标准明显不合适。对于预测结果,更应分析分类器对少数类别样本的分类表现。因此,研究分类样本不均衡的PDF 文档恶意性检测时,将查准率、查全率、F1 和G-Mean 作为评价指标。查准率代表分类器的决策结果为正样本时其中真正类所占的比例,查全率代表样本数据中实际为正类样本时分类器模型的预测结果也正好为正类样本所占的比重。

设置基分类器决策树个数,对检测方法精确度进行比较,实验结果如表2 所示。基分类器个数从5 增加到10,精确度提升1.03%,基分类器数量k从10开始逐渐增加,分类效果并没有呈正比上升。当决策树数目不断增加时,检测模型的计算开销也不断增加,时间开销增加,内存消耗更多,而检测模型的泛化性能却无明显提升。综合考虑检测模型的计算开销和检测效果,取决策树数量为10个。

Table 2 Comparison of classification effects of different numbers of base learners表2 不同数量基学习器的分类效果比较

对本文的KM-TBSMOTE双向采样方法、传统BSMOTE过采样算法、K-Means聚类欠采样方法、BSMOTE+K-Means 采样方法进行比较实验,分类器采用随机森林算法。其中,各过采样方法中过采样率等于不均衡比率的0.5 倍并向上取整。为使检测结果不受随机因素影响,对各采样方法进行十折交叉验证,求出平均值作为最后的预测结果。实验结果如表3所示。

Table 3 Comparison of different sampling methods表3 不同采样方法比较(%)

实验结果表明,本文方法的查准率P、查全率R、F1、G-Mean 指标值最高。与其他方法相比,均有一定程度上的上升,误报率FPR 有所下降。与K-Means 欠采样方法进行比较,查准率提升了1.05%;本文方法较BSMOTE 过采样方法的查全率指标提升了1.96%;K-Means 欠采样方法的F 值最低,本文的F1 指标值提高了1.81%;BSMOTE 过采样方法的G-Mean 评价指标值最低,本文的G-Mean 指标比BSMOTE 过采样提高了5.61%;BSMOTE 过采样方法的误报率最高,达0.074%,本文的双向采样方法将误报率降低到了0.026%。仅采用K-Means 欠采样方法进行处理会把样本中的重要特征信息丢失,导致K-Means 欠采样方法的F1 评价指标值最低,而在BSMOTE 方法过采样操作中,样本点的不均匀分布会在一定程度上影响到分类边界的确定,所以误报率高。G-Mean 评价指标中K-Means 欠采样方法虽然不是最差的,但是相比较而言,G-Mean 指标衡量的是正样本和负样本分布被正确分类出的数目,针对样本分类不均衡的数据集,检测模型的评价指标中F1 比GMean 更能展现检测模型对于不同类别数据的检测效果。而本文提出的双向采样方法中,对BSMOTE 过采样方法进行了改进,改善了样本分布均匀问题,缓解了对分类边界造成的影响。同时结合欠采样操作效果更好,在减少噪声样本的同时不会丢失过多的重要特征信息。综合5 个评价指标可知,本文提出的基于双向采样的检测方法能有效解决样本不均衡的恶意PDF 检测问题。

4 结语

本文从样本数据层面对样本不均衡的PDF 文档恶意性检测进行研究,改进了BSMOTE 过采样方法。采用KMeans 方法欠采样,将两种采样方法结合,有效缓解了单向采样造成的噪声样本过多和重要特征信息丢失问题。采用随机森林方法对双向采样后的样本进行模型训练和检测,实验表明检测模型性能在各方面均有不同程度改进,能有效解决PDF 文档恶意性检测中样本分类数量不均衡问题。后续研究将深入探讨PDF 文档特征的选取和优化组合,从根本上对分类决策效果进行提升。考虑特征之间的关联性,利用算法寻找更优的特征向量是今后研究的方向。

猜你喜欢

类别分类器文档
有人一声不吭向你扔了个文档
BP-GA光照分类器在车道线识别中的应用
基于RI码计算的Word复制文档鉴别
加权空-谱与最近邻分类器相结合的高光谱图像分类
结合模糊(C+P)均值聚类和SP-V-支持向量机的TSK分类器
服务类别
Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat
论类别股东会
基于LLE降维和BP_Adaboost分类器的GIS局部放电模式识别
中医类别全科医师培养模式的探讨