APP下载

基于图神经网络与深度学习的PDF文档检测模型

2024-02-22雷靖玮

计算机工程与设计 2024年2期
关键词:线程调用文档

雷靖玮,伊 鹏,陈 祥

(信息工程大学 信息技术研究所,河南 郑州 450002)

0 引 言

2018年思科年度安全报告[1]指出,PDF文档占同年电子邮件攻击载体的14%。但这类安全问题并没有引起人们足够的重视。在人们的传统观念中,PDF文档作为一种静态文档难于修改,因而在安全防护时往往忽视其存在。此外,PDF文档规范的更新在丰富其功能性的同时也带来了许多潜在风险。一方面,新的规范赋予PDF文档更强的功能,包括进行网络行为交互、脚本执行等,另一方面,新的规范也导致文档阅读器的设计愈发复杂,变相引入更多可利用漏洞。

目前针对恶意文档的检测手段主要可分为两类,即静态检测和动态检测。静态检测主要通过静态解析文档,判断文档中是否含有恶意负载从而完成检测。这种方式的局限性在于攻击者可以通过混淆等方式规避检测。与静态检测相反,动态检测主要通过执行部分或整个文档并跟踪其行为从而做出判断。但这类方法往往因系统开销较大而难以大规模应用。

本文提出了一个以系统调用为对象,结合图神经网络与深度学习技术的PDF文档检测模型。与传统检测方法相比,该模型不依赖于文档本身的元数据和结构数据,因而具有更强的鲁棒性与适应性。通过图神经网络以及深度学习技术对系统调用数据进行处理,能够更加深入发掘文档行为中的潜在特征。在此基础上进一步设计了一种复合式的图采样技术有效降低模型的性能开销。总之,本文的主要贡献在于:

(1)将图神经网络与深度学习技术融合,应用于恶意PDF文档的检测,通过图卷积网络学习系统调用间的潜在关联,同时使用深度学习提取系统调用对的特征信息作为补充,最终以较低的训练开销取得了良好的检测效果。

(2)提出了一种带有匹配机制的有偏随机游走方式,该采样方法以H指数为基础,能够较好地保留图的关键部分,在降低系统开销的同时有效提高模型的检测效率。

(3)在所收集数据的基础上进行大量实验,探究模型所选方法的有效性和可解释性,同时对于模型部分参数的最佳设置进行了实验研究。

1 恶意文档检测相关工作

目前常见的恶意文档检测方法主要是静态分析检测和动态分析检测,本节将围绕这两种检测方案介绍目前主流检测手段与不足之处,同时陈述本文的写作动机。

1.1 静态检测方案

静态检测主要依赖于文档的结构和数据特征,大致上可以分为3类。第一类主要通过解析PDF文档中嵌入的JavaScript代码。Mao等[2]提出了一种基于主动学习的代码检测方式,在分析系统对象的数据流依赖方式的基础上,提出了一种将程序访问行为的异常度与相似性相结合的检测方式。Jia等[3]提出了一种面向云的可疑程序自动监测系统。这些方法的一个共同问题在于攻击者能够通过混淆及动态代码加载等方式逃避检测。另外,由于文档静态解析器通常根据预定义的规则提取JavaScript脚本,因此攻击者可以利用这些规则来确定隐藏恶意代码的方式。

第二类则主要依赖于文档的结构数据与元数据。Cohen等[4]提出了一种基于XML的Office文档结构特征提取方式。Nissim等[5]在其基础上特化了针对docx文档格式的检测能力。rndi等[6]将文档的逻辑结构与其内容相结合,能同时适用于多种文档类型的检测。Azab等[7]则是将文件字节表示为音频信号以完成检测。以上方法在攻击者可以隐藏攻击模式或妨碍检测器解析过程的情况下效果不够理想。

第三类是基于签名的检测。YARA[8]帮助用户为程序创建特定签名与模式。OfficeCat[9]则通过扫描待检测文档与已有签名的匹配情况进行检测。这类方法的不足之处在于其难以处理使用了未知手段的攻击方式,例如零日攻击等,并且要求动态维护一个签名数据库。

1.2 动态检测方案

动态检测主要通过在受监视环境中动态运行文档或其中嵌入的JavaScript代码并跟踪文档行为进行检测。大致可分为以下两类。

第一类方法主要通过跟踪文档解释器行为。Scofield等[10]根据文档运行时解释器行为训练其文档分类器完成检测。Xu等[11]利用平台异构性在不同平台上执行相同文档并比较文档运行时解释器行为的异同。这类方法面临的主要困难在于检测器分类规则的制定。

第二类方法是通过执行文档中嵌入的JavaScript代码。Carmony等[12]在文档解释器执行代码的同时,不断扫描其内存空间寻找已知形式的攻击代码与恶意的操作码序列。Liu等[13]提出了两层解混淆的方法,实现了对恶意Powershell更加准确的检测效果。Lux0r[14]通过检查JavaScript代码在运行时产生的API调用,并利用机器学习进行分类。而为应对基于Javascript脚本的混淆攻击,文献[15,16]提出了相应的反混淆检测技术。总之,这类方法的主要问题在于难以识别未知的恶意行为,并且要求随着新型攻击方式的出现而动态更新自身的检测模式。

1.3 写作动机

当前基于图的恶意软件检测和分类方法主要集中于静态分析,主要方法包括利用函数调用图[17-18]或控制流图[19,20]来识别恶意软件。此外,在恶意文档检测方向上基于机器学习的方法主要运用于静态检测的研究当中,多与文档的结构数据与元数据相结合,而在动态检测方面的应用还存在较大空白。

本文模型借助动态检测方法,收集文档运行时产生的系统调用数据,而后构建基于图神经网络与深度学习的检测模型。相比其它研究对象,系统调用的优势在于:首先,其作为操作系统内核的活动产物没有经过任何的过滤、解释与处理。换言之,攻击者没有办法通过修改或删除等操作破坏系统调用数据的完整性。其次,系统调用作为操作系统内核向上层程序提供服务的接口,其数据能够间接反映程序的行为特征。与传统的检测方法相比,模型使用基于系统调用图的动态检测方式,同时结合图卷积神经网络以及深度学习技术最终实现文档的检测。与传统基于图的模型相比,传统模型更加关注节点的属性特征,相比之下本模型在关注节点属性的基础上充分挖掘边缘属性特征,将图中的节点表示与边缘信息充分融合。

总的来说,本文旨在探究一种基于图神经网络与深度学习的PDF文档检测模型,通过图卷积神经网络以及深度学习技术对传统动态检测方式进行改进。除了恶意文档检测的工作之外,本模型也可考虑用于其它领域如入侵检测或恶意流量识别等相关研究当中。

2 模型架构与问题陈述

2.1 模型基本假设

为避免引起不必要的争议,实验中不考虑利用社会工程学手段引导用户点击文档内链接下载并运行恶意负载等方式,即不考虑文档本身未携带恶意负载的间接攻击模式。这种攻击方式不会导致PDF阅读器产生恶意的系统调用数据。

另外,实验中不考虑使用的PDF阅读器以及用于收集系统调用数据的工具本身的问题,即实验环境完全可信,同时也不考虑收集到的数据被恶意篡改的情况,保证数据的完整性。

2.2 模型设计

本文模型架构如图1所示。

(1)预处理模块:对收集到的系统调用数据按照线程进行划分,如执行渲染功能、字体加载功能的线程所产生的系统调用数据应当分属不同类别,线程划分的目的在于保证划分后的系统调用序列在功能逻辑上具有一致性与连贯性。而后将根据划分后的系统调用序列生成对应的系统调用图。

(2)图采样模块:根据所提出的基于H指数的图采样策略提取系统调用图中的关键部分,缩减后续需处理的数据规模。

(3)图嵌入模块:将经过图采样后的子图中的节点号以及边缘的特征信息映射为对应的向量。

(4)前向传播模块:使用图卷积网络生成更新节点的向量表示,同时使用深度学习充分提取边缘特征中的关键信息。

(5)信息融合模块:将前向传播模块输出边缘特征向量与节点向量进行拼接。

(6)预测模块:综合图中全部的节点信息对系统调用子图的性质进行预测,以完成文档的检测工作。

2.3 问题陈述

本模型将恶意PDF文档的检测问题转换为图的二分类问题。通过系统调用图建立系统调用之间的联系,并使用图神经网络以及深度学习技术学习其中的隐藏特征。最终文档的性质通过图的性质进行判断,而图的性质则由迭代后节点的向量表示所决定。模型的设计重点在于图中边缘特征向量的特征提取方式以及图中节点向量的迭代更新机制,此外考虑到传统的图神经网络所引起的巨额系统负担,必须设计一种行之有效的优化策略避免实际应用中产生难以承受的性能开销。

3 模型介绍

3.1 模型概况

系统调用图作为系统调用的符号表示,其边缘属性能够有效反映特定时间范围内系统调用之间的上下文关联。与线性结构相比,图结构提供了更丰富的关系表示,能更加深入地学习数据间的隐藏联系。因此,本文以系统调用图为基础进行模型构建,结合图神经网络以及深度学习领域的相关技术,设计了一种较为完备的恶意文档检测模型。

3.2 相关定义

模型的部分相关定义如下。

3.2.1 系统调用序列

文档运行时会产生多个线程,系统调用序列由三元组组成,同时记录了系统调用的发生时刻以及相应线程。seq={(thread1,syscall1,time1),…,(threadn,syscalln,timen)} 其中threadi表示系统调用所属线程号,timei表示系统调用产生的时间。

3.2.2 系统调用图

根据系统调用序列可以构建相应的系统调用图G=〈V,E〉, 其中V与E分别表示图中节点与边的集合。此外图中单个节点表示某系统调用,而边则用以表示相邻两次系统调用所组成的系统调用对,形式上记为e=(src,dst,time), 其中src,dst分别表示系统调用对中源系统调用和目的系统调用,time则表示此次切换发生的时刻,亦即目的系统调用的产生时间。需注意的是,在建立系统调用图之前通常将系统调用序列按照线程划分为短序列。

3.3 预处理

3.3.1 线程划分

在构造系统调用图之前,从收集的数据中按照系统调用所属线程对每一文档产生的系统调用数据进行划分,其过程如图2所示。此步骤的必要性在于操作系统的并行机制:文档运行时往往会产生多个线程,不同线程具有不同分工,包括文档的渲染、字体加载、图片载入等操作。如单纯按照时间顺序对系统调用进行排序,则序列中前后相邻的系统调用可能分属不同线程,由此导致逻辑层面的混乱。

图2 系统调用数据按线程划分

而线程级的数据预处理能够在逻辑上对系统调用数据依据各线程的任务及功能进行区分,保证相邻系统调用的逻辑连贯性,防止模型捕捉错误的数据特征,进而提高后续模型的检测效果。

3.3.2 系统调用图构建

对于不同线程的系统调用序列,以单个系统调用作为节点,以系统调用对作为节点之间关联边,建立系统调用图。需注意的是文档在运行时往往会产生多个线程,其性质需各综合线程的系统调用图决定。线程划分工作与系统调用图构建在预处理算法中同时完成。预处理步骤的算法如下:

算法:预处理算法

输入:某文档运行时的系统调用序列seq

输出:系统调用图集合Gtotal

(1)Gtotal,Tdtotal←∅

(2)for eachs=(thread,syscall,time) inseqdo

(3)ifthread∉Tdtotalthen

(4)Tdtotal←Tdtotal∪{thread}

(5)Vthread,Ethread←∅

(6)Vthread←Vthread∪{syscall}

(7) ifpre==Null then

(8)pre←syscall

(9)continue

(10)Ethread←Ethread∪{(pre,syscall,time)}

(11)pre←syscall

(12)for eachthreadinTdtotaldo

(13)Gthread←(Vthread,Ethread)

(14)Gtotal←Gtotal∪Gthread

算法的输入部分是文档运行产生的系统调用序列,输出是系统调用图集合。通过线程号将系统调用作为节点加入到相应的节点集,同时将系统调用对作为边加入到相应的边集。文档的性质将综合其所有线程的系统调用图进行判断。

3.4 基于H指数的有偏游走采样

一直以来,如何筛选出可疑性较高的系统调用都是研究者重点关注的问题。在恶意文档检测的研究领域中,文档的恶意行为通常隐藏在大量的良性行为当中,即便是文档运行时产生的恶意线程也并非单纯进行恶意活动。而系统调用作为用户与内核交互活动的产物能够有效反映出程序的行为特征,在恶意软件的行为活动中,这种特征通常表现为用以完成恶意活动的系统调用出现频率较低,传统的基于系统调用频率的检测技术正是基于此特征而展开的。这种特征反映在图上则表现为执行恶意活动的系统调用节点的中心性较低。

节点度是衡量一个节点中心性的最简单方式且应用最为广泛。而核数作为衡量节点影响能力的评价指标也已得到了广泛认可[21]。节点的核数通过k核分解进行计算:首先从不包含孤立节点的图中删除度为1的节点及其相邻边,重复此过程直到没有节点被删除,则被删除的部分组成1阶壳。而后对剩余部分删除度数为2的节点及其邻边,后续重复此类操作,直到删除图中所有节点。而节点的核数等于其所属壳的阶数。

H指数虽然因提出时间较晚在实际运用中较前者而言更稀少,但节点中心性度量仍非常有效。在图中某节点的H指数为p的实际含义为该节点最多有p个度数不小于p的邻居节点。

显然节点度、H指数、核数三者的计算开销是依次递增的,计算节点度只需要节点周围非常局部的拓扑信息、计算核数则需要图的全局拓扑信息,H指数则介于二者之间。事实上三者间可通过H算子进行互相转换。

定义算子H,当其作用在一组有限实数 (x1,x2,…,xn) 上时,其返回值y表示满足条件y=H(x1,x2,…,xn)=max{k|xl1,xl2,…,xlm≥k,m≥k,k∈N} 时k的最大值。

对于图G=〈V,E〉, 节点i的度数记为ki, 其邻居的度数分别为dj1,dj2,…,djs, 则节点i的H指数为

hi=H(dj1,dj2,…,djs)

(1)

(2)

(3)

(4)

综合以上因素,文中提出了一种基于H指数的图采样策略。采样策略是一种基于H指数的有偏随机游走方式,并且引入一种新的匹配机制。

(5)

(6)

(7)

(8)

为求解递推关系式,定义向量Xn|t如式(9)所示

(9)

在游走的过程中额外进行邻域扩展操作,此操作并不会影响有偏随机游走过程,如图3所示。

图3 图采样过程

总的来说算法通过基于H指数的匹配机制进行有偏随机游走,同时将随机游走过程中经过的每一节点以及节点的N跳(示意图中为1跳)邻居节点加入到采样子图中,依此策略缩减数据规模,提高模型的检测效率。

3.5 图嵌入层

此步骤将系统调用图的信息输入模型。

3.5.1 节点嵌入

(10)

节点嵌入向量为初始状态,通过前向传播进行迭代更新以更好地表达其内含的节点关联关系。

3.5.2 边缘嵌入

系统调用图中的各边均有唯一对应的特征向量。对于边缘e=(src,dst,time) 而言,典型的一些特征包括起点终点系统调用在图中的度,同一系统调用相邻两次出现的最长以及最短间隔数与间隔时间,两系统调用在序列中各自出现的次数,以及系统调用对 (src,dst) 目前的重复次数等等。根据以上特征构建的特征向量将作为边缘信息的初步表征。受到自然语言处理方面的启发,实验中考虑将边缘信息的各类特征视为单词,将整条特征信息视为一个完整句子,并将其输入BERT[22]模型之中进行预训练,通过训练将特征信息进行融合。假设图中共有M条边,各边的典型特征信息有SN条,每条特征信息的长度为SL,BERT模型的输出向量维度为c,则图中节点i与节点j边之间的嵌入向量si∈SN×SL×c, 类似的全部边缘嵌入向量的集合为s∈M×SN×SL×c, 即

s=[s1,s2,…,sM]

(11)

3.6 前向传播层

前向传播层分为两个并行部分,通过图卷积神经网络对节点间的关联关系进行学习,以及通过深度学习对边缘信息进行学习。

3.6.1 节点关联信息获取

对于系统调用图G,系统调用的关联关系迭代更新参考了LightGCN的方式。对于节点i,其嵌入向量在图卷积网络中的1跳更新结果为

(12)

利用一阶迭代的更新规则,可以在网络中堆叠多层图卷积以学习系统调用之间的高阶关联关系。对于系统调用i其第k+1跳的更新结果与第k跳的更新结果在前向传播过程中有如下关系

(13)

(14)

vi∈h×d,h视为可以调整的超参数,⊕表示拼接操作。为更好地学习系统调用之间的关联关系,引入注意力机制对每一跳嵌入向量的重要程度进行建模。对于系统调用i, 图神经网络的注意力ami∈1×h的定义与计算方式如下

ami=[ami(0),ami(1),…,ami(h)]

(15)

ami=softmax(ω1tanh(ω2(vi)T))

(16)

其中,ω1∈1×t,ω2∈t×d且t视为可调整超参数。ami(0),…,ami(h)表示各层嵌入表达的权重。tanh引入非线性关联,而softmax函数用以将各权重进行归一化。

结合注意力机制,最终使用vi与ami进行加权求和可得到最终系统调用i的关联关系表达

(17)

3.6.2 边缘特征信息提取

对于边缘嵌入向量si∈SN×SL×c, 假定卷积核的数量为m, 每个卷积核Ki∈ks×ks, 其中ks视为可调整的卷积核宽度。对于边缘嵌入向量经过卷积操作

gi=ELU(reshape(si)*Ki+μi)

(18)

其中,reshape表示将嵌入向量si的维度转换为二阶张量使得reshape(si)∈(SN×SL)×c,*表示卷积操作,μi为误差。激活函数ELU作为ReLU的改进型其计算公式如下

(19)

由于存在m个卷积核,对于卷积层的输出进行最大池化操作,最终输出W∈m

wi=max{gi1,gi2,…,gi(SN×SL)-ks+1}

(20)

W=[w1,w2,…,wm]

(21)

池化层输出W输入全连接层,同时引入随机失活机制如式(23)以防过拟合。随机失活向量ui∈m

ui~B(m,γ)

(22)

s′i=ELU(ω3⊗(uiW)+pi)

(23)

其中,ω3∈d×m,d与节点嵌入向量的维度相同。pi∈m为偏差值。

3.7 信息融合层

对于前向传播层的输出,使用平均池化操作对节点的相邻边缘嵌入向量进行聚合,以节点i为例即

(24)

而后使用聚合向量在此更新节点向量,如式(25)所示

oi=v′i⊕bi

(25)

⊕表示拼接操,拼接后节点的嵌入向量oi∈2d。

3.8 预测层

为完成异常检测,提出了一个基于潜在空间超球面的判断方式,其核心思想是通过训练将大多数的正常实例投影到超球面内,并将异常实例投影到超球面之外。模型损失函数定义为

(26)

其中,ηi∈2d表示一个潜在的超球面中心。初始化方式为计算信息融合层输出嵌入向量的平均池化结果,并且在之后的计算过程中保持不变。最终,文档的性质由其运行时各线程产生的系统调用图进行综合判断。

4 实验分析

4.1 实验设置

实验机器使用英特尔酷睿i7-10875H CPU以及16 GB RAM存储器,操作系统为Windows 7 SP1。所有PDF样本在Adobe Acrobat DC上运行2分钟后关闭,运行期间产生的系统调用数据使用NtTracer进行收集。此外,为验证模型是否足以区分恶意文档和良性文档,选择了4种具有不同归纳偏置的基线算法进行比较,包括RBF核函数的支持向量机(support vector machine,SVM)、k-最近邻分类器(k-nearest neighbor,KNN)、决策树(decision tree,DT)、随机森林(random forest,RF)。同时选择部分现有的检测方法[11,23]与检测工具[24,25]进行对比。

4.2 实验样本

本节将说明实验使用的样本来源。

4.2.1 良性样本

良性样本来源包含3部分:一部分通过编写爬虫程序指定Bing搜索引擎的搜索类型为PDF文件进行批量下载,这部分包括357例PDF文档。但由于这部分文档可能缺少PDF高级规范中的特征比如嵌入JavaScript脚本、使用PDF增量更新功能等。因此从PDF学习网站[25]上额外下载了30例包含PDF高级功能的样本。另从Contagio数据集[26]中随机选取120例良性PDF文档。所有文档在使用前均已放入沙箱中进行检测,确认无恶意行为产生。

4.2.2 恶意样本

实验使用的恶意样本包含两部分:一部分为从VirusTotal收集的280例恶意PDF文档,从中将部分有明显错误的17例剔除(明显错误例如含有CVE编号但上传年份早于CVE中年份,类型为zip文件或图像文件);另一部分来自Contagio数据集中随机挑选的40例恶意PDF文档。所有文档在使用前放入沙箱监视其执行情况,确定均有恶意行为产生。

4.3 评价标准

实验所使用的评价指标包括真阳性率(true positive rate,TPR)、假阳性率(false positive rate,FPR)、真阴性率(true negative rate,TNR)、假阴性率(false negative rate,FNR)以及工作特征曲线下面积(area under the receiver operating characteristic,AUROC)。各评价指标的定义如下

TPR=TP/(TP+FN)

FPR=FP/(TN+FP)

TNR=TN/(TN+FP)

FNR=FN/(TP+FN)

AUROC值等于分类器随机选择的阳性实例排序高于随机选择的阴性实例的概率。具体来说TP(true positives)表示样本为阳性,模型预测也为阳性的样本数,即被模型正确识别为恶意的恶意样本数量。FP(false positives)表示样本为阴性,模型预测为阳性的样本数,即实际为良性却被错误识别为恶意的良性样本数量。TN(true negetives)表示样本为阴性,模型预测也为阴性的样本数,这里表示被正确识别的良性样本数量。FN(false negetives)表示样本为阳性,模型预测为阴性的样本数,即实际为恶意文档却被错误识别为良性的样本数量。表1为这4项指标的具体含义。

表1 评价指标具体含义

4.4 实验方法

由于Adobe Acrobat DC阅读器没有定时打开与关闭多个PDF文档的功能,但留有部分用于操作PDF文档的cmd指令。因此编写批处理程序循环执行cmd命令以完成相关操作。在使用阅读器依次打开PDF文档的同时,使用NtTracer追踪产生的系统调用数据,每个文档在运行2 min后关闭。收集到的系统调用数据存入MySQL数据库中。之后编写程序对系统调用数据按照线程划分,并构造相应的系统调用图。进一步地对各系统调用图使用所提出图采样策略保留关键信息,而后借助pytorch框架编写图神经网络以及深度学习相应程序进行模型的训练与检测。实验中的爬虫程序、系统调用图构建程序、图采样程序以及模型的训练与检测程序均使用python编写,代码量约为15 K行。而批处理程序则使用DOS命令,系统调用数据存取以及按照线程进行划分时使用SQL语言完成相应功能。在训练与检测过程中,记录了模型各阶段的用时情况用于后续性能评估。

4.5 恶意文档检测实验

作为异常检测模型,实验中的训练数据均为良性样本,即仅使用正常PDF文档进行训练。模型的参数设置见表2。

表2 模型参数

最终根据测试结果对各方法进行评估,结果见表3。实验中各方法均使用相应库中默认参数。性能评估时使用TPR、FPR、TNR、FNR以及AUROC作为评价标准,记录不同方法的训练用时,并对产生误报的样本进行深入分析。

表3 不同方法的检测结果与训练开销

从表3中可以看出DGNN的训练时间略长于RF和RBF算法,但总体上相较于其它对比算法仍有明显优势。此外模型在TPR、FPR以及AUROC等指标上相较于其它算法有着更好的表现,一方面这得益于图神经网络的数据拟合和刻画能力,另一方面也得益于深度学习模块对于边缘信息的特征提取能力。4种基线算法在训练用时上具有显著优势,除RF算法之外其余基线算法的AUROC等指标均不够理想。SFEM[4]作为一种基于文档结构路径特征的静态检测方法,通过深入分析PDF的结构特征,丰富文档的判别特征,最终取得较高的AUROC值,但目前存在较多的针对基于结构特征检测的绕过手段。PLATPAL[11]借助异构冗余的思想设置多种系统环境并进行文档行为对比以完成检测,取得0.9238的AUROC值,但这种方式也不可避免地造成较高的系统开销。PJScan[23]与QuickSand[24]作为目前较为流行的文档检测工具虽然有着较小的训练开销,但由于PJScan[23]主要检测嵌入JavaScript的恶意PDF文档,其检测效果仍有待提升。而QuickSand[24]的训练用时为89.41 s,AUROC值为0.8983,相较于DGNN仍有明显差距。

此外,为研究以H指数作为有偏游走转移概率计算依据的有效性,使用节点度以及核数在原模型基础上作为新的偏置计算依据展开对比实验。实验中同样使用匹配机制,确保以更大概率优先选择节点度或核数较小的点作为游走的转移节点,这部分的原因和原策略中倾向于选择H指数较小的节点转移节点的原因一样,符合恶意活动中系统调用的频率特性。实验中同样测试了不同数量的训练样本下模型的检测效果结果如图4所示。

图4 3种采样策略的AUROC值

从图4中可以看出,当选用核数作为偏置计算依据时,模型的AUROC值与选择H指数作为偏执计算依据时的值差距很小,但当使用节点度作为替换时,模型的AUROC值均未超过80%,这与度的适应性有关,尽管度仍作为衡量节点中心性的重要估计指标,但实际上节点度在诸多场合下并非量化节点影响的精确中心性度量。

为进一步衡量3种指标分别作为有偏游走偏置计算依据时的系统开销,记录了3种方式下的模型的图采样时间见表4。

表4 不同检测方式的检测结果与训练开销

结合图4以及表4可以看出,尽管核数作为偏置依据时其检测效果与H指数相近,甚至略优于以H指数为依据的采样方式。但相比于H指数,核数由于在计算时需要全局拓扑信息,其计算开销远远超过H指数的计算开销。综合以上讨论,最终选择H指数作为游走偏置的计算依据用以完成图采样工作。

4.6 消融实验

本文根据模型的不同部分设置了3种变体以展开消融实验,以验证模型的有效性。各变体的对比实验结果如图5所示。

图5 消融实验对比分析

(1)DGNN-1:模型不使用边缘特征信息,仅使用图卷积神经网络中节点向量表示用以完成检测工作。此情况下将式(25)改为oi=v′i, 其余部分保持不变。

(3)DGNN-3:模型仅使用边缘特征信息完成检测工作。此情况下将式(25)改为oi=bi, 其余部分保持不变。

实验使用TPR、FPR、TNR、FNR作为评价指标,同时对3种变体以及原模型的检测结果进行对比。从图5中可以看出,DGNN-1相比DGNN-2加入了注意力机制,并且检测结果优于后者,这说明模型中引入的注意力机制对于文档的检测效果提升是有效的。DGNN-3仅使用深度学习技术利用边缘特征信息完成检测,未与图卷积神经网络中的节点嵌入信息相结合,实验检测效果相比于前两者略低。而DGNN-1仅使用了图卷积网络的节点嵌入,没有使用边缘特征进行深度学习,效果与DGNN相比仍存在明显差距。DGNN-1、DGNN-3与DGNN的实验结果共同说明了模型将图卷积网络与深度学习相结合策略的有效性。

4.7 部分参数最佳设置

在图采样过程中,邻域扩展距离的选择对于后续模型训练与检测效果影响巨大。适当的扩展距离能够在有效控制采样规模的基础上尽量保留图的关键信息。实验中同样对于不同距离的邻域扩展策略进行了比较,其中的距离均以跳数为单位,结果见表5。

表5 不同扩展距离的检测结果

当扩展距离为2时,模型的AUROC达到0.9734,此后继续增大距离AUROC值并无明显提升,并且需要注意的是当扩展距离过大时会导致采样图过于庞大,训练效率低下,且由于引入大量冗余信息,干扰特征学习过程,影响最终的检测效果。经过实验分析,最终认定将模型的邻域扩展距离设置为2时较为合适。

而在模型的训练与检测过程中,图卷积迭代次数是影响最终检测效果的一个关键参数。如果模型训练时图卷积的迭代次数过少,则可能无法学习到系统调用之间的潜在联系,进而导致检测效果不理想。但如果层数过多,则可能产生难以负担的系统开销,所以必须选择适当的层数以维持开销与模型准确率之间的平衡。在实验中选取了1次到7次的迭代次数展开测试。

另一个关系到模型性能的重要参数就是节点向量的维度选择了。高维度的向量可能承载更多的信息,但是会严重影响训练和检测效率,低维度向量虽然有更小的开销,但可能在检测准确率上略有不足。实验中节点向量维度范围为2维至128维。分别以图卷积迭代次数与节点向量维度为轴,绘制出的结果如图6所示。

图6 节点向量维度与图卷积迭代次数对检测结果的影响

实验中以AUROC值作为依据衡量检测效果,以训练时间衡量模型的开销情况。图6(a)中当节点向量的维度设置为32维,图卷积迭代次数设置为4次时模型的AUROC值有最大值0.9753。这可能是由于模型中绝大部分的节点存在3跳至4跳的路径,因而AUROC值最高。但综合考虑训练时间的影响,最终选择节点向量的维度设置为16维,图卷积迭代次数设置为2次,此时相较于AUROC值最大的参数设置而言模型的检测效果并没有明显降低,并且结合图6(b)中结果来看,选择该参数设置能够大幅节省模型的训练开销。

4.8 性能分析

在性能测试方面,分别测试了模型在训练和检测两种模式下的不同阶段用时情况。

训练用时主要包括:系统调用序列按线程划分的处理用时、构建系统调用图用时、图采样用时、迭代更新图信息用时。而检测用时除了包括以上部分还包括了综合各系统调用图完成文档性质的判断的用时。两阶段下各部分的平均用时见表6。

表6 各阶段时间开销

文档依据其运行时产生线程数的不同则可能有不同数量的系统调用图与之对应,但在检测时认定只要产生被判断为恶意的系统调用图的文档即为恶意文档。需注意的是,虽然训练和检测时均有迭代更新图中信息的需要,但是在训练阶段需要额外对模型的参数进行优化,所以用时更长,但是这部分的系统开销是一次性的,在后续的检测时不需要额外花费时间。此外,当前模型的检测为单线程任务,后续可以考虑使用并行技术进一步缩短模型的检测用时。

5 讨 论

虽然模型在恶意PDF文档检测方面取得了良好效果,但实际上该模型仍受以下几方面因素的限制:

(1)间接攻击手段。如攻击者未使用包含恶意有效负载的文档,而是借助社交工程学等手段来吸引用户通过文档内的链接下载真正的恶意程序或仅使用PDF文档完成攻击链中的部分准备工作,此类攻击方式可能导致检测失败。

(2)交互式驱动攻击。模型仅收集文档运行时2 min以内产生的系统调用数据,若文档在限定时间内未接收攻击指令并且没有产生恶意行为一样会使检测失效。

(3)版本限制。不同的PDF阅读器和版本也影响着检测效果,尤其是利用特定版本PDF阅读器漏洞的恶意文档攻击。若文档所利用的漏洞与运行的阅读器不符,则会导致攻击活动失败,因而不会产生用于执行恶意行为的系统调用数据。

(4)离线检测。作为一种离线检测手段,虽然其训练开销是一次性的,同样不需要动态更新或再次训练,但作为一种离线检测方式也注定无法动态地提升模型的检测性能。

6 结束语

本文设计了一种以系统调用图作为输入,结合图神经网络以及深度学习技术的PDF文档检测模型。该模型借助图神经网络与深度学习的强大表征能力和学习能力,以系统调用为研究对象,完成文档检测工作。同时提出了一种基于H指数及有偏游走策略的图采样方式对模型的性能开销进行优化,将匹配机制引入随机游走过程中。与传统的恶意文档检测技术相比,本文使用的PDF文档检测模型能够更好地捕捉文档运行时的特征,具有更高的综合性能。

后续将针对各类型各版本PDF文档阅读器展开进一步实验,提升模型兼容性与稳定性,进一步降低检测开销,同时未来还将探究对模型进行改进以用于实时监测的可能性。

猜你喜欢

线程调用文档
浅谈Matlab与Word文档的应用接口
有人一声不吭向你扔了个文档
核电项目物项调用管理的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
浅谈linux多线程协作
基于系统调用的恶意软件检测技术研究
基于RI码计算的Word复制文档鉴别
Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat
基于上下文定界的Fork/Join并行性的并发程序可达性分析*
利用RFC技术实现SAP系统接口通信