[论文翻译]GSEDroid:使用轻量级语义嵌入的基于 GNN 的安卓恶意软件检测框架

GSEDroid: GNN-based Android malware detection framework using lightweight semantic embedding

作者:顾金涛

摘要:

目前,安卓恶意软件仍然十分猖獗。恶意程序越来越多地使用高级混淆技术,给安全专业人员带来了伪装增强、变种激增和检测难度升级等挑战。利用语义特征是应对这些挑战的一条大有可为的途径。封装在操作码和 API 调用图中的丰富语义信息被认为是区分良性和恶意应用程序的关键。因此,各种自然语言处理(NLP)技术(如 Word2vec)被用来编码 Dalvik 操作码序列的特征,从而产生嵌入式表示法。鉴于恶意软件开发者通常会选择语义相似的应用程序接口来实现类似的功能,因此假定这些应用程序接口的操作码嵌入应该表现出相似的特征。然而,仅提取统计信息的简单 NLP 模型不足以理解被混淆的恶意软件的行为模式,因为它们无法提供全面的语义见解。为了弥补这一不足,我们提出了一种基于 CodeBERT 和 TextCNN 的新型轻量级嵌入模型。该模型旨在高效、精确地表示操作码序列。因此,我们推出了安卓恶意软件检测框架 GSEDroid,它使用带有权限和操作码语义特征的 API 调用图来描述 APK。这种方法通过图神经网络算法将检测挑战转换为图分类任务。通过与其他技术的对比分析,验证了我们方法的有效性。实验结果表明,我们的 GraphSage+SAGPooling 模型达到了 99.47% 的准确率和 99.44% 的 F1 分数,突出了其在安卓恶意软件检测中的有效性。

1.导言

        随着安卓设备在全球的普及,庞大的用户群带来了巨大的攻击面。根据 Statcounter 的《2023 年全球操作系统市场份额报告》(GlobalStats,2023 年),截至 2023 年 2 月,安卓操作系统在全球市场上占据了 43.88% 的主导份额。尽管安卓操作系统的开放性和可定制性为用户提供了更多选择和灵活性,但也为恶意软件的传播和安装提供了便利。安卓恶意软件攻击者利用各种策略实现盈利,包括窃取敏感信息、显示广告和索要赎金。当前的网络犯罪趋势表明,重点已转向安卓恶意软件的质量而非数量

       《G DATA 移动安全报告》(CyberDefence General Dynamics,2023 年)显示,2022 年上半年,攻击者每分钟发布 2 到 3 个受恶意软件感染的应用程序,低于之前平均 5 个的水平,呈持续下降趋势。虽然攻击频率有所下降,但其质量却明显提高。CNCERT (中国互联网应急中心,2020 年)发布的《2020 年中国互联网网络安全态势综述》显示,全年新发现移动互联网恶意程序约 303 万个,比上年增长 8.5%。然而,从2014年到2020年,删除的恶意程序数量呈逐年下降趋势。这种情况凸显了从源头控制安卓恶意程序传播、有效切断传播渠道、提高恶意程序检测准确率的迫切性。这些挑战提高了对安卓恶意软件检测技术的要求,需要更先进、更有效的方法来应对不断变化的网络威胁环境。

        目前的安卓恶意软件检测研究广泛采用数据挖掘和机器学习方法来开发有效的检测机制。这些方法大致可分为两类。第一类是利用一系列机器学习算法,如支持向量机(SVM)、随机森林(Random Forests)和 XGBoost。这种方法涉及从 Android 应用程序包 (APK) 中提取代码、资源、配置和其他基本要素,以形成特征向量。然后使用机器学习算法构建的分类器对这些向量进行处理,以区分良性软件和恶意软件。然而,传统的机器学习算法通常更适合解决相对简单的问题,在处理大规模数据和复杂模式时可能表现不佳(LeCun 等人,2015 年;Zhao 等人,2021b)。第二类是深度学习算法在安卓恶意软件检测领域的应用。采用深度学习技术处理特定场景已成为一种主要趋势,图神经网络(GNN)已成为深度学习领域的一个重点研究领域。

        越来越多的研究人员采用不同领域的技术来开发安卓恶意软件检测方法。创新方法包括通过分析图像(Yadav 等人,2022 年)、音频(Tarwireyi 等人,2023 年)、网络流量(Wang 等人,2018 年)和日志(Meng 等人,2021 年)得出的方法。早期的研究主要关注语法特征,如请求权限(Arora 等人,2020 年)、意图行为组件间通信(ICCs)(Cai 等人,2019 年)和系统调用(Bhat 等人,2023 年)。最近,图形深度学习技术的快速发展引起了广泛关注。这些技术善于学习高质量的图表示,从而高效地完成图上的各种任务。因此,蕴含在图数据中的语义特征(如函数调用图(FCG))变得越来越重要。目前,研究人员正在构建图来分析和检测恶意软件。例如,GDroid(Gao 等人,2021 年)根据调用关系和 API 使用模式将 APK 和 API 映射到大型异构图上,将原始问题转化为节点分类任务。该方法介绍了一种使用图卷积网络(GCN)进行安卓恶意软件检测和家族分类的新方法。此外,PermPair(阿罗拉等人,2020 年)提出了一种新型方法,通过使用从清单文件中提取的权限对构建图来检测恶意应用程序。

        以往的研究(Khan 等人,2021 年;Pekta¸s 和 Acarman,2020 年;Zhang 等人,2018 年)表明,可执行文件中的操作码蕴藏着潜在的信息。由于 Dalvik 操作码能够复杂地表示程序的行为模式,因此被认为是区分良性和恶意 Android 软件的最普遍的静态特征之一。然而,目前缺乏处理这些特征的标准化方法。手工制作的特征提取过程在资源和时间上都非常昂贵。要使这一过程自动化,并有效识别潜在信息和提取深层特征,当务之急是构建一个能有效表示操作码序列的适当嵌入模型。由于操作码序列与文本数据相似,且与英语单词近似,因此适合使用 NLP 技术进行处理。近年来,一些研究提出了使用 N-gram、Word2vec 和其他类似方法来处理操作码序列。然而,这些方法并非没有局限性。对于这些 NLP 模型在嵌入操作码序列表示方面的有效性,缺乏比较评估和合理解释。这种评估对于确定这些模型在准确捕捉操作码序列语义本质方面的适用性和有效性至关重要。

        为了应对将操作码序列转换为向量嵌入的挑战,我们采用了一种创新方法,将预训练模型 CodeBERT 的强大功能与 TextCNN 模型协同起来。这一组合可将 API 的操作码序列精确映射为嵌入向量。CodeBERT 为我们提供了丰富的上下文信息和捕捉远距离依赖关系的能力,而 TextCNN 则在自主识别和提取有价值的本地特征方面表现出色。此外,我们还进一步整合了权限特征,以便更全面地描述 API 节点的特征。这种方法使我们能够构建一个 API 调用图,其中包含错综复杂的语义层,每个图都能鲜明地代表一个 APK。在此基础上,我们采用了两种图神经网络技术GraphSage 和 SAGPooling。利用 GraphSage 基于采样的归纳学习框架,我们汇总了邻近节点的信息并捕获了本地邻域结构,从而促进了从 API 调用图中有效学习节点表示法,并增强了我们对 API 调用模式的理解。此外,我们还利用 SAGPooling 的自我关注机制,在池化过程中保留信息量最大的节点,帮助模型准确捕捉调用图的关键结构特征。这一点对于恶意软件检测至关重要,因为恶意行为可能会在 APK 的特定部分表现出来。这些技术的集成为我们的安卓恶意软件检测框架 GSEDroid 提供了强大的学习基础架构。这使我们能够深入理解和识别隐藏在 API 调用图中的复杂模式,从而显著提高我们检测恶意软件的能力。

总之,本文有三方面的贡献:

        1.我们引入了一种用于表示 Dalvik 操作码序列的新型嵌入模型,利用预训练的 CodeBERT 和 TextCNN 模型的综合优势来促进 API 的高效语义嵌入。

        2. 我们综合了各种特征,如 APK 的权限属性、API 调用图结构特征以及 API 中 Dalvik 操作码序列的语义特征。由此开发出 GSEDroid,一个利用先进图分类算法检测 Android 恶意软件的框架。

        3. GSEDroid 的功效通过广泛的对比实验得到证实。GraphSage 和 SAGPooling 的组合图模型在公共数据集上的检测准确率达 99.47%。

        本文的其余部分安排如下:第 2 节概述了相关工作。第 3 节阐述了拟议的安卓恶意软件检测框架 GSEDroid。第 4 节介绍了我们的实验数据集、实验设置、结果分析以及与其他检测方法的比较。第 5 节是对未来工作的展望,第 6 节是本文的结论。

2.相关工作

        目前分析安卓恶意软件的方法分为动态方法和静态方法。动态方法(Alzaylaee 等人,2020 年;Jerbi 等人,2020 年;Saracino 等人,2018 年;Wong 和 Lie,2018 年)涉及在沙盒环境或真实设备上安装和运行应用程序,以区分良性软件和恶意软件。许多安卓恶意软件采用了先进的混淆技术,如字节码加密(Rastogi 等人,2013 年)、Java 反射和动态代码加载,以规避检测系统。此外,还针对特定问题进行了研究,如恶意软件进化(Fang 等人,2023 年;Jerbi 等人,2022 年)、概念漂移(Chen 等人,2023 年;Guerra-Manzanares 和 Bahsi,2022 年;Guerra-Manzanares 等人,2022 年)和模型老化(Xu 等人,2022 年;Zhang 等人,2020 年)。相反,研究人员主要采用静态分析技术来收集有关应用程序行为的信息。静态分析无需执行即可提供应用程序的全面快照。

2.1.基于特征优化的静态方法

        JOWMDroid(Cai 等人,2021 年)创新性地提出了一种新颖的特征加权静态分析方法。这种方法利用信息增益(IG)来选择贡献大量信息的特征,并采用差分进化(DE)算法来联合优化权重映射函数和分类器参数。然而,这种方法面临着与高特征维度和划分特征间相关性的复杂性有关的挑战。

        为了解决这些问题,CENDroid(Badhani 和 Muttoo,2019 年)将 API 标签和权限等静态特征与聚类和集合分类器集成在一起。该技术在分类任务中使用由 API 和权限组成的特征集时表现出色。尽管 CENDroid 在各种分类器中的表现堪称典范,但作为一种静态分析工具,它也遇到了动态加载和反射带来的限制。

        FARM(Han 等人,2020 年)引入了一种基于特征变换的安卓恶意软件检测器,其中既有成熟的检测功能,也有三种新型特征变换。

        Kim 等人(2019)提出了一种用于恶意软件检测的多模态深度学习方法,该方法通过分析 APK 中的 Manifest 文件、Dex 文件和 .so 文件等组件,最大限度地包含了多种特征类型,从而丰富了提取的信息,更全面地概括了应用程序的特征。

        此外,FCSCNN(Kong 等人,2022 年)引入了特征集中连体卷积神经网络,这是一种有效选择有价值的权限和 API 调用特征的设计策略。该方法通过计算 APK 与良性样本和恶意样本平均中心的距离,实现了高性能的安卓恶意软件检测,从而优化了检测性能和速度。

2.2.使用 CodeBERT 和 TextCNN 进行基于操作码的检测

2.2.1.基于操作码的检测

        最初,Bilar(2007 年)、Yewale 和 Singh(2016 年)的研究证实,操作码的频率分布是识别恶意软件的有效特征。后来,对操作码特征的处理大致分为两类,一类是作为图形处理,另一类是作为序列处理

        Anderson 等人(2011 年)将操作码序列转化为马尔可夫链结构,利用高斯核和谱核来开发相似性矩阵。他们的研究结果还表明,当使用带操作数的指令时,性能会降低。Runwal 等人(2012)构建了操作码图,并通过相似性评分实现了恶意软件检测。Hashemi 等人(2017)改编了 Anderson 等人(2011)的构建方法,独特地采用 "幂迭代 "方法将这些图嵌入特征空间。Zhang等人(2018)开发了Dalvik操作码的加权概率图,并利用信息熵对图进行修剪,最终利用全局拓扑相似性进行恶意检测。G3MD(Khalilian等人,2018)的新颖之处在于将图挖掘应用于操作码图,提取频繁子图用于恶意软件检测。

        Moskovitch等人(2008年)利用TF-IDF表示操作码序列,并应用费雪分数进行特征还原。Zhang 等人(2018)使用操作码双元矩阵表示操作码集群,通过二元概率分布检测恶意软件。Yuxin 和 Siyi(2019)使用 N-grams 表示操作码序列,捕捉操作码之间的局部依赖关系和模式特征。Kang 等人(2019);Khan 等人(2021)基于 word2vec 表示操作码,并采用 LSTM 方法进行降维。Jiang 等人(2019)使用 Doc2vec 将操作码编码为特征向量。Jeon 和 Moon(2020)使用操作码级卷积自动编码器(OCAE)将较长的操作码序列压缩成较短的序列,然后使用动态循环神经网络(DRNN)分类器进行恶意软件检测。DroidRL(Wu 等人,2023 年)也利用 N-grams 进行操作码序列处理,利用强化学习进行自动特征选择,并采用双深度 Q 网络(DDQN)算法选择最佳特征子集,解决了 N-grams 固有的 "维度爆炸 "问题。

2.2.2.CodeBERT 和 TextCNN

        CodeBERT(Feng等人,2020)的结构是一个多层双向变压器网络,其中每个变压器块包括一个多头自注意机制和一个前馈层。该架构包括 12 层,每层有 12 个注意力头,头的大小为 64,768 个隐藏单元,1.25 亿个参数,采用的模型架构与 CRoBERTa-base (Liu 等人,2019 年)基本一致。CodeBERT 是 BERT 的扩展,具有双模功能。它摒弃了 BERT(Devlin 等人,2019 年)采用的上下文匹配预训练目标(下一句预测,NSP),保留了屏蔽语言建模(MLM)预训练目标,并引入了替换标记检测(RTD)作为额外的预训练目标。CodeBERT 利用自然语言和源代码数据进行了独特的训练。自我关注机制有助于进行与上下文相关的编码,而全连接层则将编码向量映射到新的向量空间。这种综合方法使 CodeBERT 能够捕捉操作码序列的双向细微差别,并深入理解这些序列中的长距离上下文依赖关系,从而为后续检测任务提供有力的特征表示。

         利用 TextCNN(Kim,2014 年),可以从序列中提取类似 N-gram 概念的局部信息。通过整合不同大小的 N-grams 特征作为整个操作码序列的表征,操作码序列中的局部特征本质上是由多个操作码组成的滑动窗口。卷积神经网络的优势在于能够自主组合和过滤 N-gram 特征,从而获得不同抽象程度的语义信息。

2.3.基于图的检测和图神经网络

2.3.1.基于图形的检测

        𝑆3特征(Ou和Xu,2022年)通过标记敏感节点扩展了功能调用图(FCG),形成了敏感功能调用图(SFCG)。这一过程包括从 SFCG 中挖掘大量具有可疑行为的敏感子图及其邻近子图,然后将其编码为表示应用程序的特征向量。

        Frenklach 等人(2021 年)提出了一种基于应用程序相似性图(ASG)的安卓应用程序静态分析方法。他们的研究认为,对应用程序行为进行分类的关键在于其共同的可重用构件,例如具有相同功能的模块

        为了识别恶意软件样本之间的共享特征,Navarro 等人(2018 年)提出了一个基于本体的框架,以模拟安卓生态系统中与权限机制相关的组件、属性和接口之间的复杂关系网络。该框架阐明了应用程序与系统元素之间的关系,在这一高级抽象中识别出恶意软件样本的共享特征。然而,这种方法的一个显著局限是,随着图规模的扩大,所需的时间和空间将呈指数级增长。

        MSDROID(He等人,2023年)也关注具有恶意意图的代码段。通过专注于这些恶意代码段并提供一种解释机制,MSDROID 增强了对恶意软件行为和模式的理解,为恶意软件检测提供了一种更细致入微的方法。

2.3.2.图神经网络

        在图形神经网络(GNN)技术的发展过程中,最初的重点主要是如何有效地学习图形结构数据中每个节点的低维表示。最初,图神经网络研究主要围绕基于频谱方法的模型展开,这些模型在图的傅立叶空间中执行卷积操作。早期的里程碑之一是 ChebNet(Defferrard 等人,2016 年),它采用了切比雪夫多项式来过滤图傅里叶空间中的节点特征。随后,GCN(Kipf 和 Welling,2017 年)简化了 ChebNet 的参数化,有效减少了过拟合,提高了模型在实际应用中的性能。

        然而,频谱法 GNN 由于依赖于整体图结构和图拉普拉奇的特征向量,在可扩展性和通用性方面受到限制。为了克服这些限制,研究人员提出了基于空间方法的 GNN。这些 GNN 直接在图空间定义卷积操作,聚合节点的相邻特征,模仿卷积神经网络处理图像数据的方式。GraphSAGE (Hamilton 等人,2017 年)标志着这一阶段的关键创新,它通过通用聚合函数有效生成节点嵌入,从而提高了模型对新节点或图的通用性。在此之后,GAT(Veliˇckovi´c 等人,2018 年)引入了注意力机制,允许模型从目标节点的角度评估每个邻居信息的重要性。进一步的研究带来了 GIN(Xu 等人,2019a),它通过对图结构的细致控制增强了模型对图数据的表达能力。

        此外,人们还开发了各种池化技术来提高 GNN 的性能,目的是有效降低维度并提取图的代表性特征。Set2Set (Vinyals 等人,2016 年)允许 GNN 处理节点集,捕捉图结构数据中的复杂关系。GlobalAttentionPooling (Li 等人,2017 年)采用注意力机制对节点特征进行全局加权。SAGPooling (Lee 等人,2019 年)选择性地聚合每一层的节点,形成图的分层表示。

3.提出的方法

        如图 1 所示,GSEDroid 的整体框架包括原始特征提取特征处理构建具有节点属性特征的 API 调用图来表示 APK,以及使用图神经网络将安卓恶意软件检测问题转化为图分类任务。算法 1 显示了构建具有节点属性特征的 API 调用图的生成算法。

3.1.特征处理模块

        在安卓系统中,权限主要分为两类AOSP(安卓开源项目)权限和第三方权限AOSP 权限是 Android 操作系统固有的权限,由 Android 开发人员和维护人员定义。这些权限规定了应用程序对设备和系统资源的访问权限。另一方面,第三方权限由独立开发人员或组织制定,由第三方应用程序请求,在用户授权后生效数据集包含约 12,000 个第三方权限(正好是 12,564 个)由于 APK 中的大多数 API 方法都需要与 AOSP 相关的权限,同时考虑到恶意软件滥用 Android 基本权限的普遍现象,我们将注意力集中在从数据集中提取的 334 个 AOSP 权限上。根据请求频率,我们从中选出了前 64 个权限。这项研究通过解析 Manifest 文件中的标签,收集了表 1 中详细列出的权限相关信息。提取的请求权限的存在情况被用作构建权限特征向量的基础。

        由于有些 API 是来自第三方库的方法,没有可访问的操作码序列,而另一些 API 则是通过 JNI 与本地代码链接的,通常是用 C/C++ 等语言编写的,因此我们的目标是将输入模型的操作码类型标准化。此外,为了将 API 调用图中的节点数量与那些具有可获取特征的节点相匹配,我们使用并改编了 Androguard 工具(Desnos 和 Gueguen,2012 年),这是一个用于反编译和分析应用程序文件的开源 Python 库。在构建 API 调用图时,我们排除了 DalvikVMObject 中未定义的方法,包括某些第三方库方法。这些方法可能包含多种代码类型,如静态 Java 字节码、动态加载的运行时代码以及通过 JNI(.so 文件)链接的 C/C++ 等本地语言方法(Qiu 等人,2022 年)。我们还自动过滤掉了孤立节点(即既不调用其他应用程序接口也不被其他应用程序接口调用的节点。对调用图进行剪枝的目的是降低其复杂性,同时尽可能保留恶意软件中常见的敏感 API

        随后,我们使用 Python 脚本分析了 API 操作码序列的语义特征。Dalvik 操作码大约有 218 种。

        图 2 显示了每个应用程序接口包含的操作码数量。大多数应用程序接口包含的操作码少于 250 个。为了帮助 CodeBERT 识别 Dalvik 操作码并将其纳入词汇表,我们对操作码进行了映射操作,如表 2 所示。

3.2.构建包含节点特征的 API 调用图的模块

       

        图 3 展示了处理操作码序列的嵌入模型过程。如算法 1 所述,来自 API 的操作码序列被输入到预先训练好的 CodeBERT 基础模型中。通过一系列 12 个堆叠的变换器编码器块,我们可以获得 CodeBERT 输出中每个标记的向量表示,形成一个维数为 (N*768) 的字向量矩阵。对于表 2 中的 "add-double "等操作码,我们将其分解并映射为两个标记:"加 "和 "倍"。这种方法旨在最大限度地利用预训练模型 CodeBERT 中蕴含的先验知识。要做到这一点,关键是要确保从操作码映射出的所有标记都包含在 CodeBERT 的词汇表中。因此,这里的 "N "并不代表操作码序列的数量,而是与映射的操作码序列相对应的标记的数量

这些序列随后由 TextCNN 层处理。为确保向量长度一致,会根据前面提到的操作码计数范围进行填充或截断操作。卷积操作使用不同大小的内核进行,以 ReLU 作为激活函数。正如 Zhang 和 Wallace(2016 年)所指出的那样,每种核大小都有 64 个滤波器,他们提到,采用多个相同大小的滤波器旨在从同一窗口中学习互补特征。随后的 K-Max 池化(k 设置为 1)从每个特征向量中选出前 K 个特征,然后将其连接起来形成一个复合向量表示。然后,线性层将这些特征压缩成 32、64、96、128 的固定维度。提取出的权限特征向量操作码特征向量将与 API 调用图连接和合并,从而创建 APK 的图表示。

        将预先训练好的 CodeBERT 模型与用于从 Dalvik 操作码序列中提取特征向量的 TextCNN 模型相结合,具有整合多层语义信息的优势。CodeBERT 具有自我关注机制,能够捕捉序列中的远距离依赖关系和复杂的上下文信息。该模型在预训练期间从自然语言和编程语言数据中学习了大量先验知识,因此能够捕捉丰富的语义表征,尤其是 Dalvik 操作码与编程语言和自然语言非常相似。这意味着该模型能够更好地理解指令和数据流之间的关系。另一方面,TextCNN(文本卷积神经网络)通过结合具有不同滤波器大小的特征提取层,进一步提取局部特征,从而从不同粒度的信息中获取特征。操作码序列可能包含特定的语法结构或模式,TextCNN 可以通过卷积运算捕捉这些结构或模式,从而帮助从操作码序列中提取关键特征。这两种方法的结合提供了一种稳健的特征提取机制,可从不同角度分析输入序列,增强模型对 Dalvik 操作码序列的理解,有效提高特征提取的质量,更全面地捕捉语义信息。

        将这两种方法结合起来,可以将嵌入向量压缩成更小的维向量,从而提高模型的训练速度并降低计算成本。微调 CodeBERT 通常需要相对较多的时间,因为它需要大型数据集和多次训练迭代;而微调 TextCNN 则需要较少的时间,因为该模型规模较小、训练速度较快、计算成本较高。在资源有限的环境中,仅使用 CodeBERT 可能效率不高。TextCNN 作为一种轻量级卷积神经网络,可以在保持性能的同时降低计算需求。

3.3.基于 GNN 的检测模块

        在最后阶段,我们将图形输入图形神经网络(GNN),以完成图形分类任务。我们使用的 GNN 框架由三个主要部分组成:过滤层、激活层和图池层。在此框架内,过滤层和激活层的功能是生成增强的 API 节点特征,而图池层则汇总这些节点特征,生成能够捕捉调用图完整信息的高级特征。这一过程产生的粗略图具有更抽象、更高级的节点特征。图 4 所示的 GNN 结构由多个区块组成,包括过滤层、激活层和正则化层,然后是图池化层和读出层,最后是通过全连接层处理生成输出的图级表示。在构建 GNN 时,选择合适的过滤层和图池层至关重要,因为它们的设计直接影响到模型的性能及其理解图结构的能力。

3.3.1.过滤层

        我们最终采用的过滤层是 SAGEConv,它将节点邻居的特征与自身特征相结合,生成新的节点表征。SAGEConv 的计算公式如下:

         在这里,N(i)表示节点 𝑖 的邻居,𝑖 是权重矩阵,AGGREGATE 是一个可变的、包络不变的函数(例如均值、总和或最大池化)。GraphSage 的独特之处在于它的归纳能力,这意味着它可以归纳出未见过的节点,这对于动态变化的 Android 应用程序尤为重要。

3.3.2.图形池层

        我们选择的图池层是 SAGPooling,即自适应图池。该层根据通过训练获得的分数对节点进行排序和选择,从而提取关键的子图结构。它为每个节点计算分数,然后根据这些分数对节点进行下采样或池化。如果 𝑋 代表节点特征,而 𝑆 是分数向量,那么 SAGPooling 的过程可包括以下步骤:

        这里,GNN𝑠𝑐𝑜𝑟𝑒 是图神经网络计算的得分,Top-K 是一种选择操作,它根据得分𝑆 选择𝑋 中的顶级节点、而 GNN𝑝𝑜𝑙是另一种图神经网络,它对选定的节点特征𝑋′ 执行池化操作。

        SAGPooling 允许模型筛选整个图以过滤出关键特征,从而提高分类任务的准确性。通过整合 GraphSage 和 SAGPooling 的优势,我们的模型不仅在特征提取方面更加强大,而且在处理大规模复杂 API 调用图方面也更加高效,而这正是识别和分类成千上万 Android 应用程序所必需的。

4.实验和结果

4.1.数据集

        为了确保我们的数据样本与时俱进,提高检测结果的普遍性和说服力,我们不仅从早期的 Drebin 数据集中(Arp 等人,2014 年)选择了 4,145 个恶意 APK,还从 AndroZoo(Allix 等人,2016 年)下载了大约 86,000 个 APK(69,115 个良性 APK 和 24,052 个恶意 APK),时间跨度从 2018 年到 2023 年。良性 APK 均被 VirusTotal 验证为非恶意,没有反病毒引擎将其标记为恶意。相反,通过 VirusTotal(Sistemas,2004 年),至少有三个反病毒引擎将每个恶意 APK 识别为恶意 APK。从这些APK中,我们选择性地整理出了6754个良性APK和4509个恶意APK,时间跨度从2018年到2021年API数量在1000到6000之间。因此,我们最终实验使用的 APK 总数为 15,408 个,包括 6,754 个良性 APK 和 8,654 个恶意 APK。

4.2 基线

        在研究中,我们以几种基准方法为基准:

        1.Drebin(Arp 等人,2014 年)从 APK 中捕获八组字符串集,包括请求的硬件组件、权限、应用组件名称、过滤意图、受限 API 调用、实际使用的权限、可疑 API 调用和网络地址。这些字符串集形成特征向量,然后使用支持向量机 (SVM) 进行分类。

        2.Mamadroid(Mariconti 等人,2017 年)通过评估从抽象 API 调用序列衍生出的抽象 API 调用之间的所有转换概率来构建马尔可夫链。然后根据马尔可夫链为每个应用程序推导出特征向量,其中每个非零向量分量都与马尔可夫链中的概率相对应。使用机器学习算法进行分类。具体来说,我们采用了论文中报道的最有效的分类器--随机森林。对于族模式,我们使用了 51 棵树,最大深度为 8;对于包模式,我们使用了 101 棵树,最大深度为 64。

        3.DroidEvolver(Xu等人,2019b)根据API调用的存在构建特征向量,然后用一组在线学习算法建立模型池,而不是任何单一的恶意软件检测模型。该模型库有助于检测和减轻任何单一检测模型的偏差,从而在检测阶段产生更可靠的检测结果。使用的五种线性在线学习算法包括被动攻击(PA)、在线梯度下降(OGD)、权向量自适应正则化(AROW)、正则化双平均(RDA)和自适应前向-后向分割(Ada-FOBOS)。

4.3.实验装置

        在实验中,GPU 被用来加速我们用于检测的图深度学习算法。我们使用 Pytorch 和 DGL 实现了框架的检测模块;使用 Dell-Precision-7920Tower 服务器,配置了两个 NVIDIA RTX A5000 GPU,内存大小分别为 24GB、64GB 和 96 个 CPU 内核。使用的软件为 Python=3.8.16、Androguard=3.4.0a1、DGL=1.1.1+cu117。

        以下是实验的评价指标:

        真阳性 (TP):正确预测为阳性的阳性样本数。

        假阴性 (FN):被错误预测为阴性的阳性样本数。

                假阳性 (FP):被错误预测为阳性的阴性样本数。

真阴性 (TN):正确预测为阴性的阴性样本数。

4.4.结果与分析

        在这项研究中,我们采用了 10 倍交叉验证法,将数据集按 8:1:1 的比例分割。最初,我们使用八部分数据进行训练,并根据验证集上的表现确定超参数的选择。随后,在最终实验中,九份数据用于训练,一份用于测试。我们利用网格搜索验证集上的超参数进行调整,并在训练过程中应用常用的正则化技术 "早期停止"(Early Stopping)来监控模型在验证集上的表现。当性能不再提高时,训练就会停止,从而防止过度拟合并节省训练时间。

4.4.1.超参数选择

        图 5 展示了所选 GraphSage+SAGPooling 模型在验证集上的性能,最终超参数详见表 3。除了常见的超参数设置外,选定模型的其他配置如下:在 GAT 中,注意力头数(num_heads)设为 4;在 Set2set 中,迭代次数(n_iterers)为 6,递归层数(n_layer)为 3;切比雪夫滤波器大小设为 3;在 SageConv 中,聚合器类型设为 "池"。

 

        在图 6 所示的训练过程中,GraphSage+SAGPooling 模型在训练集上的准确率迅速攀升至接近 100%,显示了该模型强大的数据拟合能力。随着迭代次数的增加,测试准确率始终略低于训练准确率,这可能是由于模型在训练集的某些样本中学习到了过多的噪声,从而限制了其泛化能力损失曲线的急剧下降进一步证实了模型的快速学习和收敛。然而,损失在接近零的低水平上趋于平稳,表明模型的性能在 50 个历元之前基本达到了顶峰。总体而言,该模型表现出了值得称赞的测试效果和合理的泛化性能。

4.4.2.与不同图神经网络算法的比较

        我们还将我们的模型与其他图过滤方法(包括 ChebConv、GraphConv、GINConv 和 GATConv)以及不同的图池化方法(如 SumPooling、AvgPooling、GlobalAttentionPooling 和 Set2Set)进行了比较。图 7 中显示的结果表明,GraphSage+SAGPooling 模型在所有指标上都超过了其他模型,成为要求高精度、高召回率和高准确率任务的最稳健选择。这些实验结果表明,在不同的过滤层和池化方法组合下,图形神经网络(GNN)的性能相对稳定。这种稳定性凸显了我们的嵌入表示方法的有效性。GATConv+GlobalAttentionPooling 和 GINConv+SumPooling 的组合也显示出非常高的检测性能,使它们成为可行且稳健的替代方法。

4.4.3.与不同嵌入式模型的比较

        在图 8 中,我们进一步比较了我们的方法与其他嵌入方法,如 TF-IDF、Word2vec (CBOW)、Word2vec (SG)、Doc2vec (PV-DM)、Doc2vec (PV-DBOW)、LSTM (Word2vec)、GRU (Word2vec)、Bert-base-uncased,每种方法都生成 32、64、96、128 维的节点嵌入特征。由于 TF-IDF 主要基于词频统计,忽略了上下文,缺乏语义信息,因此其表示效果最差。Word2vec 通过平均序列中所有单词的嵌入来表示操作码序列。鉴于 CBOW 忽略了操作码的顺序和语义,Skim-Gram 的表现自然略胜一筹。然而,仅仅对序列进行平均并不能充分考虑其顺序,因此增加了序列信息建模的 Doc2vec 可以弥补 Word2vec 的一些不足。RNN 有能力捕捉程序中位置较远的操作码之间的交互,而 Doc2Vec 可能在这方面有所欠缺。Bert-base-uncased 使用 [CLS] 标记的嵌入来表示整个序列,其有效性仅次于我们的方法。我们的分析表明,Bert-base-uncased 使用 Word-Piece 为其词汇表寻找最可能的组合,可能会错误地分割某些操作码(如 "invoke"、"bool")。相比之下,CodeBERT 使用 BPE 进行基于频繁组合的词汇构建,并在编程语言和自然语言上进行训练,因此词汇量更大,性能也优于 Bert-base-uncased。我们使用 GraphSage+SAGPooling 模型对所有这些方法进行了评估。结果表明,我们的嵌入模型最有效地提高了分类准确率,64 维特征已经很好地代表了操作码序列。这表明,我们的嵌入模型最贴近地捕捉到了操作码序列的语义表示,有助于图神经网络更好地学习恶意软件的行为模式。

4.4.4.烧蚀实验

        表 4 中的消融研究揭示了各种特征信息组合对模型性能的影响。数据表明,仅依靠 API 调用图的模型已经相当有效,这表明 API 调用图本身就包含有关恶意软件行为的大量信息。将权限信息纳入 API 调用图库可提高模型的准确性。令人印象深刻的是,当API调用图与语义信息合并时,模型的准确性明显提高,这凸显了语义信息在破译API调用图中的模式时所发挥的重要作用。最终,结合所有这些类型的信息后,模型的准确率达到了惊人的 0.9947,凸显了整合不同类型信息的重要性。

        总之,虽然独立的 API 调用图可以提供有关应用程序行为的大量洞察信息,但将其与权限和语义信息等其他功能相结合,可以显著提高模型的性能。这种整体方法能够更全面、更深入地了解恶意软件的行为和内部结构,从而获得出色的检测结果。

4.4.5.与其他方法的比较

        表 5 显示,与现有的开源安卓恶意软件检测方法相比,我们的方法仍然取得了最佳检测结果。Drebin 通过包含八个特征集中可观察字符串的特征向量来描述 APK 的特征,对于一种轻量级静态方法来说,取得了值得称赞的检测效果。在 MamaDroid 中,族模式的抽象更为轻量级,因此特征提取速度更快,而包模式则提供了更细的粒度和更多的信息,因此检测性能更好,但代价是时间和空间资源的增加。在 DroidEvolver 使用的五种线性在线学习算法中,权向量的自适应正则化(AROW)(Crammer 等人,2009 年)表现最佳,而自适应前向-后向分割(AdaFOBOS)(Duchi 等人,2011 年)效果最差。

        在实验过程中,我们跟踪并分析了该方法每个阶段所花费的时间。分析结果如表 5 所示。表 5 中的运行时间列是处理和检测 apk 的平均时间。特征提取阶段是我们的方法中最耗时的环节,尤其是操作码序列的嵌入模型,总耗时约 34 小时。每个良性 apk 大约需要 8.24 秒,每个恶意 apk 大约需要 7.84 秒。在数据集中,提取所有 apk 的 API 调用图(不包括节点特征)共耗时 13.5 小时,良性 apk 平均耗时 3.16 秒,恶意 apk 平均耗时 3.18 秒。相比之下,计算每个应用程序接口的权限向量所需的时间可以忽略不计,而将节点特征整合到应用程序接口调用图中总共耗时 2 小时 44 分钟。图模型的训练大约需要 17 分 13 秒,而推理过程只需要 1.15 秒,时间非常短暂。因此,我们的方法对每个 apk 的平均总处理和检测时间约为 12-14 秒,主要时间消耗在特征提取阶段,这也是其他基线方法的共同点。无论是家族模式还是软件包模式,MamaDroid 方法的运行时间都是最长的。Drebin 在单进程模式下需要 4.53 秒,而在多进程模式下,运行时间可以缩短到 1 秒以内。就耗时而言,我们的方法与 DroidEvolver 相当。总的来说,我们的方法可以说是轻量级的。

5.讨论

        在本节中,我们将讨论当前方法的局限性,并概述可能的缓解策略:

5.1.GSEDroid 的可扩展性

        GSEDroid 为未来的增强提供了可扩展性。我们计划用更多与 API 相关的功能来增强调用图,如 API 调用频率、API 的功能分类、安全社区的安全评级或风险标签,以及运行时的动态行为特征。这些新增功能可以丰富对 API 的上下文理解。

5.2.模型和图形大小优化

        未来的工作包括采用知识提炼技术来减少预训练模型的大小,以及采用图压缩方法来最小化应用程序接口调用图的大小。这种方法旨在优化我们的时间和空间开销,使系统更加高效。

5.3.恶意软件中的代码包装

        一些恶意软件采用代码打包技术来阻止分析人员访问应用程序字节码。我们的方法目前需要完整的 DEX 代码来构建 API 的语义嵌入特征。因此,需要一个高效的代码解包系统来预处理 DEX 文件提取和异构代码分析。DexHunter(Zhang等人,2015)和AppSpear(Li等人,2018)等解决方案为应对这一挑战提供了有前途的方向。

5.4.基于图的对抗技术

        利用特定的基于图的对抗技术(Demontis等人,2019;李等人,2023;赵等人,2021a)来丰富我们的方法至关重要。未来的考虑包括采用对抗训练、向模型中注入对抗样本并将其标记为威胁,以增强对抗攻击的鲁棒性。

5.5.良性软件与恶意软件的现实比例

        Pendlebury 等人(2019)强调,不切实际地假设良性软件与恶意软件的比例会导致性能评估出现偏差。在现实中,良性应用软件的数量远远超过恶意应用软件的数量,后者在理想情况下只占总数的不到 23%。未来的研究将考虑这一实际情况,在我们的数据集中设置更符合实际的比例,确保性能评估更加准确。

6.结论

        在本文中,CodeBERT 和 TextCNN 的结合构建了一个更强大、更灵活、更通用的轻量级嵌入模型,显著提高了 Dalvik 操作码序列的特征提取效率。这种合并有效地利用了两种模型的优势:CodeBERT 丰富的上下文先验知识和长距离语义依赖性,以及 TextCNN 的本地特征提取能力,提供了更全面、更准确的特征表示。在此基础上,我们推出了安卓恶意软件检测框架 GSEDroid,该框架利用 GraphSage+SAGPooling 模型构建了包含权限特征和操作码语义特征的 API 调用图。通过对影响模型性能的因素进行一系列评估分析以及对模型有效性进行广泛的对比实验,我们的结果验证了我们方法的有效性,并为该领域的未来研究奠定了坚实的基础。

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值