您好,欢迎来到滨屿移民!
当前位置: 首页 > > 生活>BejaGNN-基于行为的基于图神经网络的Java恶意软件检测

BejaGNN-基于行为的基于图神经网络的Java恶意软件检测

2024-10-07 06:46 来源:本站    

  作为一种流行的平台无关语言,Java在企业应用程序中得到了广泛的应用。在过去的几年里,Java恶意软件利用的语言漏洞变得越来越普遍,对多平台造成了威胁。安全研究人员不断提出各种方法来对抗Java恶意软件程序。动态分析的代码路径覆盖率低,执行效率低,限制了动态Java恶意软件检测方法的大规模应用。因此,研究人员转向提取丰富的静态特征来实现高效的恶意软件检测。在本文中,我们探索了利用图学习算法捕获恶意软件语义信息的方向,并提出了BejaGNN (Behavior-based Java malware detection via graph Neural Network),这是一种基于静态分析、词嵌入技术和图神经网络的基于行为的Java恶意软件检测方法。具体来说,BejaGNN利用静态分析技术从Java程序文件中提取icfg(过程间控制流图),然后对这些icfg进行修剪以去除噪声指令。然后,采用词嵌入技术学习Java字节码指令的语义表示。最后,BejaGNN构建了一个图神经网络分类器来判断Java程序的恶意。在一个公开的Java字节码基准测试上的实验结果表明,BejaGNN达到了98.8%的高F1,优于现有的Java恶意软件检测方法,验证了图神经网络在Java恶意软件检测中的应用前景。

  Java是企业应用程序中最流行的开发语言[1],它仍然是攻击者的一个有吸引力的目标[2]。根据Java.com的数据,美国89%的台式机、30亿部手机和97%的企业台式机运行Java。因此,Java中的恶意程序、漏洞和利用在过去几年中变得越来越普遍。MITRE的CVE数据集记录了近700个新的Java漏洞[3]。

  最近的研究[2]指出,Java恶意软件主要通过恶意附件或网络钓鱼邮件进行传播。这些恶意软件文件以JAR (Java Archive)压缩格式组织,可以在任何带有Java运行时环境(JRE)的受感染系统上运行。考虑到跨平台的便利性,JAR文件将所有Java类文件、资源和相关元数据聚合到一个归档文件中。随着大家对COVID-19的关注,攻击者最近利用流行的COVID-19更新地图,通过Java恶意软件悄悄地感染计算机[4]。在这种攻击中,恶意Java应用程序利用实时数据映射组件伪装成良性的,并包含有效负载来窃取敏感信息。

  尽管与Android、Windows或IoT (Internet of things)恶意软件相比,Java恶意软件受到的关注较少,但它对Java生态系统造成了巨大的危害[5]。反恶意软件行业或杀毒软件广泛采用基于签名的恶意软件检测方法[6]。这些方法依赖于从大量已知恶意软件样本中构建的签名来匹配类似的恶意软件文件。签名匹配机制很容易被代码转换技术绕过[7]。为了克服这一问题,研究人员通过在一组有意义的静态或动态特征上建立先进的机器学习模型,提出了更精确的检测方法[8,9,10]。

  由于能够通过在沙箱环境中执行来抵抗代码混淆,动态分析技术仍然可以被环境感知和事件触发恶意软件规避[11]。此外,动态分析技术很难覆盖所有的执行路径,并且会给执行环境带来更多的时间和资源消耗,这限制了这些方法的实用性。传统的静态分析方法主要提取字符串或导入等语法特征来识别恶意软件样本。虽然语法特征实现了高效的恶意软件检测,但这些静态方法无法从恶意软件行为中捕获足够的语义信息[12]。最近,研究人员探索了基于图像的恶意软件检测方法,这些方法利用了计算机视觉中ML算法的繁荣[13,14,15]。这些方法通常通过各种转换方法将原始恶意软件二进制文件转换为基于像素的图像。然后,机器学习算法可以直接利用图像特征来分类恶意软件二进制文件,而不是行为或签名特征。这些方法大多将机器码作为像素值,将二进制文件转换为灰度图像[13]。Jadeite[15]采用了一种基于Java字节码ICFG的图像变换方法,提高了基于图像的恶意软件检测方法的准确性。然而,这些图像变换方法直接在字节码文件或修剪后的icfg上使用图像处理技术,这限制了对信息丰富的Jimple[16]指令语义的捕获。

  在网络安全任务的机器学习中,一种新兴的方法是使用图学习直接从程序表示图中捕获关键信息[17,18,19]。在这些方法中,研究人员使用多种图表示结构,包括CFG(控制流图)、CDG(控制依赖图)、DDG(数据依赖图)甚至融合图CPG(代码属性图)[20]来表示语义信息。GNN(图神经网络)算法直接使用这些图结构来执行恶意软件漏洞检测,而不是基于序列或基于树的方法[21]。这些方法大多采用各种GNN算法直接从信息图结构中捕获攻击特征,而无需通过专家知识手动构建特征。由于具有处理图结构的固有能力,GNN算法在下一代网络安全系统中很有前景[22]。

  本文利用基于图的学习算法的优势,探索了恶意软件语义信息捕获的方向,提出了一种基于行为的基于图神经网络的Java恶意软件检测方法。与使用基于图像的方法或传统ML算法的现有Java恶意软件分类方法不同,我们在字节码级别使用ICFG来表示Java程序的行为,并通过GNN算法捕获关键的关系模式。先前的研究已经证明,ICFG是捕获恶意程序行为最引人注目的特征之一[23,24,25]。在生成icfg之后,我们生成icfg的节点嵌入,并在图分类领域利用高级ML算法。特别是,我们执行静态分析以从Java字节码文件中提取ICFG。在得到这些图后,我们对这些图进行修剪,以保留有意义信息的指令。接下来,我们利用程序表示方法从ICFG中的基本块捕获语义信息。最后,我们使用GNN对生成的icfg进行分类,以识别原始Java字节码程序中的恶意。借助GNN算法对复杂图结构的处理,BejaGNN的检测性能优于现有方法。实验结果表明,GNN在Java恶意软件检测领域是一种很有前途的技术。

  综上所述,我们做出了以下贡献:

  我们提出了一种新的Java字节码分类框架,即BejaGNN,它利用代码嵌入技术和图神经网络来识别Java字节码程序的恶意。我们直接使用ICFG捕获Java字节码程序的行为特征,然后根据这些特征构建检测模型,以利用图学习领域的显著成功。

  我们采用多种代码嵌入技术和GNN算法来验证所提出的检测框架的有效性并探索其最佳性能。

  我们在一个公共Java字节码基准测试上评估了我们的方法,该基准测试由大约4k恶意和良性样本组成。该方法的分类准确率为99.1%,优于现有的Java字节码分类方法。

  本文的其余部分组织如下。第2节总结了Java恶意软件检测方面的最新工作。第3节描述了BejaGNN的系统设计。第4节报告了实验设置并评估了BejaGNN的检测性能。第5节概述了BejaGNN的局限性。第六部分对本文进行总结。

  在本节中,我们回顾了一般的恶意软件检测方法以及与Java恶意软件相关的方法。

  随着恶意软件不断危害网络空间安全,恶意软件检测受到业界和学术界的广泛关注。传统的杀毒软件利用基于签名的方法来执行有效的恶意软件检测[6]。然而,这些方法严重依赖于收集到的已知恶意软件数据集,很难检测到通过代码混淆、打包和加密机制等规避技术[26]产生的新的恶意软件或恶意软件变体。在早期,研究人员提出通过动态分析提取CFG,并利用子图同构来对抗恶意软件变体[27]。然而,恶意软件可以插入垃圾函数调用,重塑恶意软件的结构,以逃避同构机制[28]。

  最近的研究利用先进的机器学习方法来自动推断关键的恶意行为属性,这可以识别新生成的恶意软件变体。机器学习方法利用恶意软件样本的行为特征进行恶意软件分类和检测。这些特征通常通过静态、动态或混合分析来提取[29]。静态分析从汇编或中间代表性代码中提取统计特征或字符串特征[30,31]。尽管静态提取的特征在恶意软件检测中是有效的,但这些方法仍然难以对抗代码混淆[32,33]。另一方面,动态分析方法可以收集运行时时间和行为信息,如一系列系统调用和进程状态,以识别恶意软件[34]。Younghee等人[34]提出了一种经典的通用行为图表示方法,实现了较高的恶意软件检测率。MtNet[9]采用多任务学习方法提高动态恶意软件检测的准确性。所设计的神经网络结构可以同时实现恶意软件检测和家族分类。然而,动态分析固有的缺陷是对执行恶意软件所需的时间和资源的要求,以及执行路径的有限覆盖,可能会错过恶意软件代码的关键部分。这些限制阻碍了基于动态方法的首选应用。

  基于图像的恶意软件检测方法利用静态分析技术将恶意软件二进制文件转换为基于像素的图像,从而能够减轻代码混淆和编码问题[35,36,37,38,39,40]。这些图像可以输入到成熟的图像分类技术中,用于识别恶意样本。Pratikkumar等人[40]对各种著名的基于图像的恶意软件分类学习技术进行了全面的实证评估。Cui等人[36]将恶意二进制文件转换成特定长度的二维数组。接下来,使用CNN分类器对二维数组映射的灰度图像进行分类。Jadeite[15]提出从Java字节码文件的icfg中生成灰度图像,考虑了程序的语义信息,提高了检测性能。然而,基于图像处理的方法在恶意软件检测方面取得了非凡的成果,但将恶意软件编码为抽象图像,这限制了对Jimple指令语义的探索,增加了提供可解释结果的难度。

  由于Java在企业平台上的广泛应用和野外恶意软件的快速增长,本文将重点关注Java平台上的恶意软件检测[41]。使用Java编写的Android应用程序因其恶意检测而受到广泛关注[42]。有几种方法采用类似的图像变换方法来执行Android恶意软件检测[43,44,45]。例如,Ding等人[43]提出了一种基于字节码图像的恶意软件检测方法。它从Android应用程序的文件中提取字节码文件,并将该文件中的每个字节视为像素值。然后,将字节码文件转换为灰度图像。最后,使用CNN分类器从生成的图像中识别恶意。Vasan等人[39]利用颜色映射机制将原始Android应用程序转换为图像,然后对这些图像执行恶意软件检测和家族分类。这些方法将原始二进制文件视为图像,以便使用高级计算机视觉算法,但忽略了这些恶意软件文件的语义执行信息。

  Android应用程序虽然是用Java语言开发的,但与Java程序的不同之处在于:a)以不同的文件格式组织(.class vs .dex);b)在不同的虚拟机系统中执行(Dalvik虚拟机vs Java虚拟机);c) Android主要以移动平台为主;同时,Java在企业中得到了广泛的应用;d) Java程序只有一个主方法,而Android应用基于复杂的组件和配置机制。这些差异阻碍了Android恶意软件检测方法应用于Java恶意软件程序。文献中很少有研究Java恶意软件检测的作品[46]。Jarhead[47]执行简单的静态分析来提取字符串特征,并训练用于Java恶意软件检测的机器学习算法。Gassen等人[48]提出了一种基于动态分析的方法来对抗常见的混淆技术。JMD[49]将符号执行和仪表技术与动态分析相结合,以改进恶意软件检测。Kumar等人[50]设计了一种基于词法分析的方法来识别代码混淆。最近,研究人员提出了通过静态和动态分析来执行Java恶意软件程序检测[11,51]。除了上述方法外,我们还设计了一种新的Java恶意软件检测方法BejaGNN,该方法结合了词嵌入技术和GNN算法,从Java程序的ICFG表示中捕获关键的Jimple语义信息。

  摘要

  1 介绍

  2 相关工作

  3.系统设计

  4 实验和e

  估值

  5 讨论

  6 有限公司

  结论及未来工作

  数据和材料的可用性

  参考文献

  作者信息

  道德声明

  搜索

  导航

  #####

  图1

  figure 1

  BejaGNN系统体系结构

  BejaGNN的目标是从ICFG结构中直接学习关键行为特征,用于恶意Java应用程序检测。图1给出了我们的恶意软件检测系统BejaGNN的总体架构,该系统由三个主要组件组成,即ICFG提取、节点嵌入生成和GNN分类。ICFG提取首先利用静态分析将JAR格式的Java字节码文件转换为ICFG结构。然后,节点嵌入生成通过程序表示方法从ICFG内部的基本块中捕获语义信息。最后,GNN分类以ICFG结构为输入,训练GNN分类器进行恶意字节码文件识别。下面,我们将详细介绍每个组件。

  在这个组件中,BejaGNN通过Soot[52]分析框架从Java字节码文件中提取过程间控制流图(ICFG)。ICFG是一种直接图,涵盖了程序中所有指令的执行顺序。在ICFG图中,节点表示按顺序执行的程序指令,边表示节点之间的执行顺序。

  JAR文件以压缩格式打包,由一个或多个从Java源代码编译的类(Java字节码)文件组成。BejaGNN首先利用Soot将JAR文件中包含的Java字节码转换为Jimple中间表示。Soot是一种流行的分析框架,为自定义静态分析提供了方便的中间表示。因此,它被广泛用于各种分析目的,包括安全问题[53]、bug发现[54]和隐私问题[55]等。然后,BejaGNN使用Heros[56]从整个Java程序的Jimple表示构建ICFG。heroes建立在Soot之上,并具有执行程序间数据流分析的能力。

  烟尘分析框架提供了以DOT格式生成ICFG的功能,易于可视化和处理。图2给出了一个简单的示例来说明ICFG提取过程。图2给出了一个简单的Java程序,其中包含两个函数func1和add。在这个程序中,func1()调用add(),每个函数包含几个指令。图2的右侧部分显示了没有无意义变量定义和初始化的Jimple ICFG的图形表示。在图中,节点表示Jimple指令,节点之间的边表示指令之间的控制流。

  图2

  figure 2

  简单的Java程序,带有相应的Jimple ICFG

  将我们整个Jimple指令的ICFG图中的所有唯一节点作为特征,会通过导入噪声和增加训练时间来影响Java恶意软件检测的有效性和效率。因此,BejaGNN删除生成的ICFG中无意义的节点。具体地说,我们删除了无意义的指令,例如变量定义和初始化,它们对于正确执行Java程序是必要的,但对理解程序执行语义几乎没有帮助。对于其余的指令,BejaGNN利用节点嵌入生成和GNN分类组件来提取关键信息。

  为了将ICFG转换成适用于图神经网络的结构,我们需要提取数字向量来总结每个节点的语义信息。我们将Jimple指令作为单词来生成节点嵌入,通过最先进的自然语言处理技术Word2Vec捕获语义信息。NLP嵌入技术已被证明在从恶意软件中捕获信息语义方面是有效的[57,58]。在生成节点嵌入之前,我们对Jimple指令进行规范化,以消除无意义的代码差异。在本文中,我们将无意义的代码差异称为同一类别内的操作码,各种数字常量值和局部变量定义。同一类别中的操作码可以表示对不同类型对象的操作,但对程序产生相似的影响。数值是无限的,它们的语义很难捕捉。Java程序中的相同局部变量通常表示不同的对象。规范化的过程可以减少输入训练数据中出现频率低的指令或训练数据中不存在的指令的可能性,并进一步缓解OOV (out-of-vocabulary)问题[59]。节点嵌入的生成包括归一化和Word2Vec。

  3.2.1之上归一化

  在这一步中,沿着Java程序的执行序列逐一扫描Jimple指令。在进一步处理之前,我们通过删除受程序员编码习惯影响很大的无意义指令来缩小Jimple指令的多样性。此外,大多数Jimple指令共享类似的语义信息(例如,specialinvoke和virtualinvoke),例如操作数类型和定义形式。尽管各种各样的Jimple指令为Java程序提供了详细的信息,但它们显著地增加了安全性分析的负担。指令规范化是安全研究领域提高效率的必要手段,如二进制差分[60]、补丁检测[61],甚至恶意软件检测[62]。根据我们对提取的所有Jimple指令的观察,BejaGNN通过以下规则进行指令归一化:(1)将所有变量定义替换为统一的“var”,以减少巨大的变量名称带来的差异;(2)将所有数值常量替换为“num”,减少大范围的变化;(3)将一个类别内的简单指令替换为一个简化表示,以关注每个指令的语义信息。

  图3

  figure 3

  Jimple指令的规范化过程

  图3显示了Jimple规范化过程的一个示例。在图3中,简单指令virtualinvoke, store。我和装载。我分别属于调用、存储和加载类别。因此,原始指令根据归一化规则替换为指令类别。将加载变量i0和i1替换为var,将常量数字替换为num,保留指令中的其他元信息,如常量字符串、类名、类名、字段等,以保证完整性。

  3.2.2 Word2Vec

  在这个阶段,BejaGNN用密集的实值向量表示每个规范化的Jimple指令,该向量根据其周围的上下文覆盖语义信息。上下文表示一个函数中的相邻指令。图4显示了Word2Vec的工作流程,包括指令分组、Word2Vec建模和嵌入生成。

  图4

  figure 4

  Word2Vec工作流程

  指令分组。BejaGNN首先构建从所有Java字节码文件中提取的Jimple指令词汇表。然后,它通过将每个指令与其本地上下文匹配来构建指令组。Let表示第i条指令,c表示窗口大小的一半。对于每条指令,它的局部上下文由一个函数内的前后邻域指令组成。相应地,BejaGNN通过与其上下文中的每个指令匹配来生成2c指令组。

  Word2Vec建模。BejaGNN在生成指令组后,利用Word2Vec算法,将每个指令组作为一个训练实例,训练一个指令嵌入模型。该嵌入模型只需要训练一次,因为它是所有Jimple指令共享的。在训练过程中,每条指令首先以一热编码形式表示。在连续词包(CBOW)模型中,Word2Vec将目标指令与上下文指令相匹配。它以上下文为输入,以输出为输出,学习一个使指令与其上下文指令相似性最大化的嵌入空间。相反,在Skip-gram模型中,Word2Vec用目标指令来预测上下文指令,并将输入和输出颠倒过来。Word2Vec的目标如下:

  (1)

  其中C表示每个目标指令的上下文指令。定义为

  (2)

  其中和是指令和的嵌入表示。

  嵌入的一代。BejaGNN用匹配的Jimple指令组训练Word2Vec建模后,生成两个权重矩阵W和,其中s表示Jimple指令词汇表的大小,d表示嵌入的维数。特别地,BejaGNN选择默认矩阵W来表示所有Jimple指令的嵌入。例如,的指令嵌入位于W的第i行,则矩阵W作为目标Jimple指令的嵌入搜索表。

  3.2.3 替代嵌入方法

  BejaGNN采用Word2Vec、GloVe、FastText、Doc2Vec等多种嵌入方法,对比其性能,选择最有效的方法嵌入Jimple中间代码。

  GloVe[63]具有保持指令共现概率的能力。用GloVe方法对两个指令嵌入的内积表示余弦相似度和共现概率。因此,GloVe考虑了整个指令词汇表中的统计信息,这使得捕获每条指令的语义信息变得更加容易。GloVe定义了指令-指令共现矩阵X,其条目表示指令在该指令上下文中出现的次数,表示任何指令在该指令上下文中出现的次数。该模型的成本函数如下:

  (3)

  其中和表示指令和的嵌入,和表示附加偏差,和是一个加权函数,对指令之间的相似度进行广义化。

  FastText[64]采用与Word2Vec模型相似的训练方法,但将指令表示并划分为子指令。每条指令都表示为一袋字符n-图。在这种子指令表示形式中,增加了每条指令的向量数量,提高了捕获语义信息的能力。对于出现率较低的指令,FastText可以利用n-gram嵌入的特性来增加参考案例的数量。给定一条指令,出现的n个图的集合表示为。一条指令由其n-gram的向量表示的和表示:

  (4)

  Doc2Vec[65]将字节码文件id视为单个指令。文件id在语义空间中具有位置坐标。随后,从所有快照中,通过取其他指令的位置坐标的平均值来创建上下文向量。其余操作与Word2Vec相同。也就是说,Doc2Vec更新文件嵌入,使文件id和出现在每个字节码文件中的指令相互接近。通过这种方式,文件嵌入能够构造可变长度指令序列的表示。因此,即使指令不同,由于指令的嵌入向量相似,每个文件的嵌入也会变得相似。Doc2Vec有两个模型:段落向量的分布式记忆模型(PV-DM)和段落向量的分布式词包版本(PV-DBOW),它们分别以文件id作为输入或输出。

  由于能够从非欧几里得数据结构中获取全面的信息,GNN最近通过生成图嵌入得到了很多关注[66]。在本文中,我们探讨了GNN在Java恶意软件检测中的能力。因此,BejaGNN采用了GCN、GAT和GIN,并比较了它们的性能,以确定捕获恶意行为模式的最有效方法。

  在对节点嵌入生成进行处理后,我们得到了多个具有相应节点属性的icfg。具体来说,我们将每个Jimple指令视为一个节点,以突出语义信息的重要性。我们定义ICFG为,其中N表示节点集,E表示边集。所有的节点嵌入被组合成一个新的矩阵X,其中第i行表示Jimple指令的嵌入。我们将A定义为ICFG g的邻矩阵,然后,GNN将元组(A, X)转换为图嵌入,其中d是图的预定义嵌入维数。最后,MLP将输入分类为恶意软件或良性。

  在获得元组(A, X)后,GNN将捕获图g的嵌入表示。在图学习过程中,每个节点J与一组隐藏表示相关联,其中t表示图学习模型中的第t个GNN层,初始表示由节点嵌入表示。在层上,聚合来自相邻节点的t层隐藏表示,可以概括如下:

  (5)

  式中,M表示一个聚合函数,在不同的GNN模型中是不同的。经过T个GNN层的迭代处理,最终得到每个节点的隐藏表示。在这个迭代过程中,节点信息传播得越来越深。因此,最终的隐藏表示可以捕获远邻域信息。将整个图G的嵌入向量形式化为:

  (6)

  GNN模型旨在生成整个图嵌入[67],通过读出函数传递所有节点隐藏表示,将整个图信息编码到低维空间中。类似地,节点嵌入从具有局部信息的图节点转换到低维空间。不同的GNN模型采用多种聚合机制。GCN是一种代表性的GNN,它通过以下公式计算节点隐藏表示:

  (7)

  式中为所有图节点在t层的表示,为节点嵌入生成组件对所有节点生成的初始嵌入。为t层GCN的可训练权矩阵。是一个激活函数,通常设置为ReLU。,其中为度矩阵,表示单位矩阵。

  GAT对传播规则进行了改进,并假设相邻节点对中心顶点的重要性不同,其贡献是不平衡的。因此,GAT采用注意机制在邻居信息传播之前计算两个连接节点之间的相对权重。每个节点的输出特征可以形式化为:

  (8)

  式中表示由共享注意机制计算出的注意系数,表示节点的特征对节点的重要性。

  同样,GIN采用了一个强大的消息聚合功能,如下图所示:

  (9)

  式中为标量可学习参数,MLP表示多层感知,可以聚合综合信息。

  根据上述设计,我们基于Soot[52]、python自然语言处理模块Gensim和图学习库DGL,实现了一种新的基于行为的Java恶意软件检测工具BejaGNN。在本节中,我们将讨论对我们提出的系统BejaGNN的评估。我们首先描述BejaGNN中使用的实验设置。然后,讨论了实验结果。

  我们用来从Java程序中提取ICFG的机器是一台带有Intel (R) Xeon (R) E5-2620 CPU (15 M Cache, 2 GHz)和24 GB RAM的工作站。同时,BejaGNN在配备Intel (R) Core (TM) i7 CPU (6m Cache, 2.5 GHZ), 16gb RAM和NVIDIA GTX 850 M的PC上进行评估。我们随机对数据集进行随机分组,将70%用于训练,15%用于验证,其余15%用于测试。

  我们通过使用Jadeite[15]提供的数据集来评估BejaGNN的性能,该数据集来自多个公共资源,是Java恶意软件的代表。原始数据集包含1816个良性Java程序和2223个恶意Java程序。由于有139个程序无法在我们的工作站上提取有效的ICFG,我们最终获得了一个包含3901个Java程序的基准数据集。

  我们使用了五个广泛使用的指标:精度、召回率、真阴性率、准确性和f1-score来评估我们的Java恶意软件检测方法的性能。这些指标是根据真阳性(TP)、真阴性(TN)、假阳性(FP)和假阴性(FN)来计算的。在恶意软件检测场景中,TP (true positive)表示检测到的真正恶意的恶意软件程序的数量,TN (true negative)表示正确识别出的良性程序的数量。false positive (FP)表示检测到的实际良性恶意软件程序的数量,false negative (FN)表示未检测到的恶意软件程序的数量。具体的测量指标如下:

  正数程序与被检测为恶意软件的程序总数的比值。

  真阳性程序与恶意软件程序总数的比率。

  真阴性率(TNR)真阴性程序与良性程序总数之比。

  准确性(Acc)真阳性和真阴性程序的总和与所有程序总数的比率。

  F1-score (F1)总体有效性表示查准率和查全率的调和平均值。

  对于准确率、召回率、真阴性率、准确率和f1-score,越接近1,检测性能越好。特别是,准确性和f1-score是整体恶意软件检测性能的指标。

  在下面,我们用不同的节点嵌入技术来评估BejaGNN的性能。

  首先,我们将图学习算法设置为GCN,在Java恶意软件检测场景中选择最佳嵌入技术。表1给出了词嵌入算法的性能比较。在初始实验中,对于GCN,层数为2,batch size和hidden dim均为8。除嵌入大小外,所有单词嵌入算法均为默认设置。从表1中,我们观察到FastText通过利用子词学习实现了最佳性能,这适用于我们的标记有限的数据集。Word2vec和Doc2vec两种模型的结果不同,说明语义信息受上下文输入输出格式的影响。在我们的例子中,Glove的性能最差,这可能是由于构建的共现矩阵不能准确地捕捉指令之间的相似性。一般来说,Doc2Vec在大型语料库中表现出良好的性能,并且随着数据集大小的增加而提高性能,这在我们有限的令牌场景中并不适用。因此,我们建议在设计具有有限语料库的恶意软件检测系统时使用FastText。

  表1不同节点嵌入技术的检测性能比较

  图5

  figure 5

  不同嵌入尺寸的检测性能比较。' W2v-c '表示CBOW模型中的Word2Vec。' W2v-s '为跳格模型中的Word2Vec。' D2v-m '表示PV-DM模型中的Doc2Vec。' D2v-W '表示PV-DBOW模型中的Doc2Vec

  为了比较不同嵌入大小的词嵌入算法的性能,我们对不同模型下的每种算法的嵌入大小从20个单位增加到120个单位,增加10个单位进行实验。对比结果如图5所示。从图5可以看出,检测性能随着嵌入尺寸的增大而增大,当达到最佳性能时,检测性能开始下降。较大的嵌入尺寸可以携带更多的语义信息,进一步提高检测性能。在获得最优性能后,随着嵌入尺寸的增大,模型变得过拟合,性能下降。我们还推断,几乎所有的词嵌入算法都遵循类似的变化规律,并且除了Glove之外,所有算法在嵌入尺寸为90时都表现出最佳性能。因此,我们建议根据数据集中的语料库特征选择最优的词嵌入算法。

  词嵌入算法的性能还受到上下文指令大小的影响,上下文指令大小直接决定了指令嵌入中的信息量。当FastText达到最佳性能时,我们将探索其最佳上下文大小,并通过将上下文大小从3个单位增加2个单位来进行实验。不同上下文大小下的检测性能结果如图6所示。从图6可以看出,整体检测性能随着上下文大小的增加而增加,在上下文大小达到7后略有变化。更大的上下文大小将携带更多的信息,提高检测性能,同时增加节点嵌入生成的时间消耗。因此,在我们的Java恶意软件检测场景中,我们将最佳上下文大小设置为7,以便在性能和效率之间进行权衡。

  图6

  figure 6

  检测不同上下文大小的性能变化

  如3.2节所述,BejaGNN使用规范化过程来删除无用的Jimple指令,这对Java程序的语义贡献较小。我们通过实验来探索我们的指令规范化过程的有效性。指令归一化与非归一化对比结果如图7所示。从图7中可以看出,指令归一化处理提高了所有度量指标的检测性能。这是因为我们的归一化过程去除了指令中的噪声和无意义信息,进一步提高了指令嵌入的表示精度。

  图7

  figure 7

  指令归一化的检测性能比较

  在获得最优节点嵌入结构后,我们开始探索多种GNN算法的影响。

  表2图神经网络模型超参数的搜索范围和最优值

  基于深度学习社区的专家知识,重点对影响检测性能的超参数进行调优。GCN、GAT和GIN的超参数搜索范围和最优值如表2所示。对于其他超参数,我们选择DGL库中实现的默认值。从表2中,我们可以观察到,所有三种图神经网络算法在批大小为256的100 epoch时达到最佳性能。多层神经网络的层数可以产生最佳的性能。当GCN为16,GIN为8,GAT为10时,神经网络的隐藏维数达到最佳性能。

  图8

  figure 8

  带epoch的GNN算法检测性能比较

  表3不同图神经网络算法的检测性能比较

  我们使用GCN、GIN和GAT三种GNN算法比较了BejaGNN的检测性能。最佳检测性能比较如表3所示。检测性能随时间的变化如图8所示。从图8中可以看出,我们提出的Java恶意软件检测框架在所有三种GNN算法上都取得了良好的性能,这说明我们的设计和GNN在Java恶意软件检测方面的有效性是有希望的。从表3中可以看出,GAT提供了优越的检测性能。采用了强大的消息聚合功能,使GIN的检测性能比GCN有所提高,实验结果表明GIN的检测性能比GCN有所提高。此外,GAT算法利用注意机制对邻居信息传播过程中的重要节点进行过滤。同时,它拥有处理有向图的能力,这更适合我们的Java ICFG场景。因此,BejaGNN的实验结果表明,与GIN和GCN相比,GAT的性能最好。

  接下来,我们将BejaGNN与现有的Java恶意软件检测方法(包括公共数据集上的Jarhead[47]、BIN2PNG[68]和Jadeite)进行比较,以进一步验证我们提出的检测框架的有效性。

  Jarhead是一种基于静态分析和机器学习的经典Java恶意软件检测方法,支持JAR文件分类。它手动提取由字节码统计信息、混淆相关调用和众所周知的恶意操作组成的42维特征来表示Java程序的行为。然后,建立决策树分类器来检测恶意程序。BIN2PNG提出了一种基于图像处理的恶意软件检测方法,该方法可以将JAR文件转换为灰度图像。接下来,将这些灰度图像输入到基于cnn的分类器中,建立检测模型。最近发表的方法Jadeite提出了一种新的基于图像的Java恶意软件检测方法。它选择从Java字节码ICFG而不是二进制文件中构建灰度图像,并从Jarhead中选择信息量最大的20个特征。然后,设计一种复杂的基于cnn的融合结构,基于上述图像和所选特征共同构建检测模型。

  最终对比结果如表4所示。在表4中,Jadeite (IL)表示仅基于灰度图像的检测模型,Jadeite (IL)表示基于信息量大的20个特征和扁平图像矩阵的检测模型,Jadeite (DL)表示最终的融合模型。从表4中,我们观察到,与现有方法相比,我们的BejaGNN达到了最高的检测性能,甚至在融合模型形式上优于Jadeite。锅盖头实现了良好的恶意软件检测性能,但进入瓶颈期。这是由于过去手工选择的功能不能处理最近复杂的Java恶意软件,需要专业知识来提炼新的代表性功能。Jadeite (IL)优于BIN2PNG,这说明从icfg转换的灰度图像比从二进制文件转换的图像包含更多的信息。这种现象表明,ICFG代表了一种信息行为特征。在本文中,我们设计了一种基于gnn的架构,可以直接从ICFG中有效地检测Java恶意软件。因此,基于gnn的检测框架在Java恶意软件检测中具有广阔的应用前景。

  表4与现有方法的检测性能比较

  下载原文档:https://link.springer.com/content/pdf/10.1007/s11227-023-05243-x.pdf

在线评估,定制出国方案!
姓名:
电话:
标签: 

电话咨询