APP下载

基于图神经网络的恶意软件分类方法

2023-09-16杜建斌陈傲晗

互联网周刊 2023年17期

杜建斌 陈傲晗

摘要:应对恶意软件带来的威胁需要准确的检测和分类技术。传统的检测策略如签名扫描,依赖于对恶意软件进行手动分析以提取相关特征,这是一项工作繁重且需要专业知识的任务。函数调用图包括一组程序函数及其过程间调用,提供了丰富的信息源,可以用于对恶意软件进行分类,而无须进行繁重的特征提取步骤,这是传统技术的一大优势。在这项研究中,我们将恶意软件分类视为图分类问题。基于局部度量特征,我们训练了一系列图神经网络架构来生成嵌入向量,然后进行分类。我们发现,我们的最佳GNN模型在分类上表现优于以往类似研究。

关键词:图神经网络;函数调用图;局部度量特征;最佳GNN模型;恶意软件分类

引言

在移动设备领域,Android恶意软件已逐渐成为一个广泛的问题,对系统安全造成了严重威胁。根据2021年的数据,每天都有近25000个新的恶意软件样本被发现,其中大约350万个是针对Android系统的。虽然Android作为一个开源平台,为开发者提供了很大的应用开发自由度,但这也为恶意开发者创造了便利,制作并分发有害应用。因此,有效地检测和分类恶意软件对于确保Android用户安全显得尤为关键。先前的研究表明,很多新出现的恶意应用实际上是已知恶意软件的变种,因此它们在行为上有许多相似之处。例如,GinMaster和DroidKungFu两款恶意软件均可能盗取并传输用户机密信息。基于这些恶意软件的特征,我们可以对它们进行分类。

虽然基于签名的恶意软件检测方法在某些场合中运行得相对迅速且有效,但它们在应对0-day恶意软件时可能会束手无策,相反,基于机器学习的技术有潜力更好地检测和分类新型恶意软件。从另一方面看,静态恶意软件分析可能受到代码混淆技术的干扰,而动态分析在这方面表现得更为稳健,尽管需要更多的资源和时间进行分析。

与先前的研究相似,许多方法都使用了静态分析来提取恶意软件的特征,如用户权限、API调用等,并采用机器学习对其进行分类,但这些机器学习算法在模拟函数之间的复杂交互上可能有所不足。与此相反,基于图的方法能够更自然地捕获这些交互,并能学习特征之间的关系。此外,基于图的方法无须深入代码分析即可迅速提取特征,因此与传统方法相比具有明显优势。本研究的核心目标是深入研究基于图的恶意软件分类方法,这些方法主要依赖从软件源代码中提取的图结构数据。

1. 背景和相关工作

1.1 传统的基于学习的分类方法

传统的基于学习的分类方法主要是利用特征数来训练贝叶斯分类器,用以检测恶意软件[1]。另外,2014年提出Drebin数据集的论文同时也详述了如何从Android的apk文件中提取特点,例如权限和API调用,并随后采用支持向量机(SVM)对其分类。接下来,一种被称为“显著权限识别”(SIGPID)的方法被提出,该方法通过三层筛选过程对恶意应用的权限数据进行深度挖掘,识别出22个关键权限,并以此为特征来训练SVM分类器。

随着深度学习的兴起,有研究采用了将权限序列转化为词嵌入,并作为长短时记忆网络(LSTM)模型的输入特征。同样地,基于API调用的特征是根据其出现频率选取的,并将它们映射到一个图像类结构,再采用卷积神经网络(CNN)进行分类[2]。研究结果突显API调用和权限作为Android恶意软件检测的有力特征,但如何选择这些特征最好是基于具体的数据集来定。

操作码序列的n-gram特征在恶意软件检测方面也得到了有效应用,有的研究则采用了将原始操作码序列编码为独热向量,并使用CNN模型对其分类。值得注意的是,依赖操作码特征的技术可能受到某些基础混淆技巧的干扰,因为操作码序列可以直接被修改。另一种流行策略是将文件转化为灰度图形,利用CNN在恶意软件检测和分类上的能力。关于恶意软件分类的其他探索还包括一系列创新方法,如有研究者从代码中提取了基于组件间通信的模式。

1.2 基于图学习的分类方法

传统学习技术依赖于特征和分类器的种类,而基于图的学习则重视图结构的种類以及节点特征的嵌入策略。例如,有的论文涉及API调用图的应用。具体地说,应用程序和API之间的关系被以结构化的异构信息网络(HIN)呈现,API间的关系则通过元路径来映射[3]。研究者进一步采用基于元路径的方法来表述应用程序和API的语义关联,并通过多核学习来汇集相似度。异构图使用多种类型的关系来连接不同的节点。

对API调用序列图进行了多重嵌入表示,这些表示被成功用于恶意软件的检测和分类。此研究采用递归神经网络来解码深层次的语义信息,并通过一种图卷积网络(GCN)的变种来提取和建模高级的图形语义信息[4]。研究者基于API序列使用skip-gram模型来提取图的节点特征,这些特征构成了一个异构图,这个图基于应用程序-API和API-API的关系。另一种在恶意软件分析中常见的图类型是基于操作码的函数调用图。操作码序列被视作文本特征,并利用传统机器学习方法(如随机森林和SVM)进行分类。相对的,有的研究者选择基于LSTM的神经网络进行分类,创建了被称为co-opcode图的创新图结构,通过提取特定的操作码模式构建,并采用隐马尔可夫模型(HMM)进行分类[5]。

就像处理文本特征那样,操作码级的图也可以被处理,而不仅是作为图形数据。例如,有的研究者使用动态生成的网络流图创建了一个名为Network Flow Graph Neural Network(NF-GNN)的新模型。这个模型使用基于边特征的图神经网络(GNN)进行分类。上述图的方法大都是静态的,意味着它们可能并不适用于未见过的0-day恶意软件的检测。我们的研究目标之一是分析基于图的归纳性模型,即那些能够预测0-day恶意软件的模型。我们计划构建基于控制流图(CFG)的模型。CFG中,节点代表程序语句,而边则代表程序的流向。基于CFG的内部映射流程极可能适合于0-day恶意软件的分类,因为它仅仅依赖于APK代码的特征。深度图卷积神经网络(DGCNN)被用来嵌入CFG的结构信息,从而实现恶意软件的高效分类。

与CFG相对应的是函数调用图(FCG),节点表示子程序,而边表示子程序间的调用关系。研究者通过对恶意软件进行静态分析来获取操作码级别的函数调用图。而使用自然语言处理(NLP)启发的图嵌入方法将Android应用的图结构转为向量。在另一篇相关论文中,研究者介绍了MalNet数据集一个从apk文件中提取了FCG数据的大型Android恶意软件数据集。他们考虑了多种图表示学习方法,如GraphSAGE和图同构网络(GIN),并发现FEATHER和GIN提供了最好的分类性能。同样使用MalNet数据集,作者利用节点特征,如页面排名和度数,使用Jumping Knowledge GNNs (JK-GNN),并发现JK-GraphSAGE表现最出色。

2. 方法

2.1 节点特征提取

在本文的模型中,使用LocalDegree Profile方法来初始化图中节点的特征。LDP的计算比较简单,仅依赖某个节点及其一阶邻居。对于一个图,令表示节点的度,那么的LDP计算为

式中,表示均值,表示标准差。直观上,LDP反映了G中某一节点和其一阶邻居的统计信息。对于本文的研究目标来说,LDP所带来的一个潜在优势是其他深度学习技术也能够利用其特征进行训练。

2.2 图神经网络

2.2.1 GraphConvolutionalNetwork

GraphConvolutionalNetwork(GCN)通过不断聚合多层邻居信息来完成节点特征的更新。具体地,令为图G的邻接矩阵,其中且当且仅当存在边,否则为图G的增加了节点自环的邻接矩阵。那么如果GCN有L层,那么从层到层的计算可以表示为

式中,表示第层的输入(即为模型原始输入),每个节点使用D维向量表示特征。为图G中节点的度矩阵。为可训练参数,为非线性激活函数,例如。

2.2.2 GraphSage网络

GraphSage发表于[Inductive representation learning on large graphs]。與GCN不同,GraphSAGE随机抽样了一个固定大小的节点邻居子集。这有助于限制算法的空间和时间复杂度,仅节点的局部邻域相关的信息被收集并用于计算和更新节点嵌入。在每次迭代中,首先对节点的邻域进行采样,然后将来自采样节点的信息,按照某种计算方法,聚合到该节点中。具体地,图G中的节点的一阶邻居表示为。对于节点,第层到层(+1)的计算可以表示为

式中,和分别表示节点和其一阶邻居的特征向量,Agg (·)即为某种聚合规则,比如,使用Agg (·)=MEAN (·)则表示对节点和其一阶邻居的特征向量做平均聚合。Comb (·)是表示将聚合出来的特征向量与进行组合,并通过非线性激活函数进行最终的计算。

3. 实验

3.1 数据集

本文使用MalNet-Tiny数据集,该数据集包含了5000个从Android APK文件中提取的函数调用图。MalNet-Tiny数据集是类别平衡的,每个类别都有1000个样本。我们在表1中显示了这些图的一些基本特征。

3.2 基线模型与结果

多层感知机器(multi-layer perceptron,MLP):本文使MLP作为基准,以便将其与深度学习模型进行比较。在这种情况下,我们使用了LDP特征进行分类。从表2中可以看出,我们在训练50个epochs、使用5层、且dropout率设置为0.5的情况下获得了0.8054的最佳准确率结果。

WL-Kernel:本文使用WL-Kernel作为基线模型,以便将其与传统机器学习模型进行比较。另外,我们额外使用节点度和PageRank值作为特征向量,以生成WL-Kernel方法所需的特征。然后,使用WL-Kernel方法计算一个核矩阵并应用随机森林进行分类。该模型使用表中提到的超参数进行调优,最终获得的最佳准确率为0.7053。

3.3 GNN结果

在本节中,我们对第3.2节中介绍的每个GNN模型(GCN与GraphSage)进行了实验。每个模型的输入图形是由Pytorch中的GraphDataLoader生成的批次图,且都进行了200个epoch的训练,每个卷积层都使用PyTorch Torch Geometric库中的卷积算子计算新的节点表示,并且使用了Adam优化器。每个模型都使用下表中列出的超参数进行调优。

从表3中可以看出,GCN在所有被比较的模型中表现最佳,准确率达到了0.9582。相比之下,GraphSAGE的准确率为0.8913,在分类准确率上比GCN低4%左右。联系4.2中的结果可以看到,GraphSage模型在恶意软件分类问题上,仍强于MLP代表的非基于图的深度学习模型和WL-Kernel代表的传统的机器学习模型。

结论

在研究中,我们使用基于图的学习方法对MalNet-Tiny数据集中的五种不同类型的Android恶意软件进行了分类。使用局部度量特征(LDP)对节点特征进行编码,并在这些特征上训练了多种基于GNN的模型。具体来说,我们尝试了GCN、GraphSAGE。作为对比,在同样的数据集上还进行了多层感知机和WL-Kernel方法的实验,实验结果显示,基于图的深度学习方法在恶意软件分类准确率上强于非基于图的深度学习和传统的机器学习算法。最后,本研究考虑的模型仅基于图结构,如果将这些基于图的模型与更传统的特征相结合(人工定制的特征),可能会产生比这里考虑的模型或仅基于更传统特征的学习模型更强大的模型。

参考文献:

[1]郎大鹏,丁巍,姜昊辰,等.基于多特征融合的恶意代码分类算法[J].计算机应用,2019,39(8):2333-2338.

[2]吴月明,齐蒙,邹德清,等.图卷积网络的抗混淆安卓恶意软件检测[J].软件学报,2023,34(6):2526-2542.

[3]岳子巍,方勇,张磊.基于图注意力网络的安卓恶意软件检测[J].四川大学学报(自然科学版),2022,59(5):88-95.

[4]邹长宽,田小平,张晓燕等.基于GraphSage节点度重要性聚合的网络节点分类研究[J].科学技术与工程,2022,22(32): 14306-14312.

[5]徐立祥,葛伟,陈恩红,等.基于图核同构网络的图分类方法[EB/OL].(2023-7-20)[2023-8-20].http://kns.cnki.net/kcms/detail/11.1777.TP.20230719.1829.006.html.

作者简介:杜建斌,本科,电子信息工程,研究方向:计算机网络安全;陈傲晗,本科,研究方向:物联网网络安全。