基于异质图属性增强的恶意软件变种检测方法

2024-06-29 22:43孙锦涛李祺李晓龙

孙锦涛 李祺 李晓龙

摘 要: 如今越来越多的攻击者通过修改恶意软件源码的方式逃避恶意软件检测,恶意软件变种在代码重用、编码风格、攻击行为等多方面的复杂关系为恶意软件分析带来了挑战. 近年来,图神经网络凭借其在建模图结构数据,学习实体间复杂关系等方面的强大能力,已被广泛应用于恶意软件分类与检测任务之中,以建模恶意软件及其变种间复杂的关系,摆脱孤立分析困境. 然而,现有方法一方面缺少对恶意软件及其变种间多维度复杂关系的全面表征,导致复杂关联关系未被充分挖掘及利用. 另一方面仅关注恶意软件间的拓扑结构,忽略了实体语义信息,这导致攻击者极易通过对抗手段伪造特征从而逃过检测. 此外,与恶意软件相关的Windows API、通信IP 等实体自身匮乏的语义信息进一步阻碍了语义信息的提取和表示. 因此,实现恶意软件间全面的关联关系与特征语义信息的融合对提升恶意软件变种检测的鲁棒性和准确性具有重要意义. 为此,本文提出了一种基于异质图属性增强的恶意软件变种检测方法. 首先,构建了一个恶意软件异质信息网络,以建模恶意软件及特征间的复杂关系;然后,通过恶意软件异质信息网络,将恶意软件变种检测问题转化为异质图中的节点分类问题,为实体节点构建语义属性来增强节点信息的表示;接下来,对于其中语义信息匮乏的实体节点,从外部开源数据中学习实体的语义信息来弥补自身的语义缺失;最后,本文以拓扑关系为指导,基于注意力机制聚合有属性节点信息以补全无属性节点,实现节点属性补全. 遵循一种迭代优化方式,以交替式地优化补全过程与异质图节点嵌入过程,实现统一的基于异质图属性补全的恶意软件变种检测方法. 实验结果表明,本文提出的方法能够有效提升恶意软件变种检测的性能,在多个数据集下优于其他最先进的模型.

关键词: 恶意软件变种检测; 异质图神经网络; 特征增强; 属性补全

中图分类号: TP391. 1 文献标志码: A DOI: 10. 19907/j. 0490-6756. 2024. 030002

1 引言

如今,随着代码重用技术的发展,恶意软件变种可以轻易地由已知恶意软件改造而来. 这使得恶意软件数量以指数型速度增长,给企业、政府和金融机构等造成巨大损失. 根据AV-TEST 报告[1],截止到2023 年,恶意软件数量已经超过120万,过去1 年间恶意软件新增超10 万,其中一半以上是来自现有恶意软件的变种. 面对恶意软件及其变种的爆发式增长,传统的基于签名的检测方法已经无法阻止不断发展的恶意软件威胁[2]. 因此,准确、鲁棒和可扩展的恶意软件变种检测方案对于保护现代网络世界的可信性是十分必要的.

在过去的几年间,受深度学习在图像分类、自然语言处理等方向产生的巨大影响,许多研究工作将深度学习应用于恶意软件检测和分类之中,并取得了优秀的检测性能. 这些方法通过提取恶意软件的各类型特征构建特征集,并依据特征集训练模型作为分类器,训练后的分类器能够实现对未知恶意软件的检测和分类[3]. 当前绝大多数研究工作基于单个恶意样本的内容提取特征并进行分类,实现了对单个恶意软件的孤立分析. 但这些方法忽略了恶意软件间的关系且易受代码混淆技术的影响. 为进一步提升恶意软件变种检测的效果,许多研究开始考虑建模恶意软件间复杂的关系. 实际上,恶意软件间的关系可以为恶意软件检测和分类提供更多的宝贵信息,并且相比于孤立地分析恶意软件,分析恶意软件及特征间的关系能够有效对抗恶意软件逃避技术[4]. 近期已经有许多研究基于恶意软件间的关系检测恶意软件. 例如,Scorpion[4]构建异质信息网络表述恶意软件与Windows API、动态链接库、压缩包、设备之间的关系,设计metagraph2vec 方法实现恶意软件检测.GDroid[5]构建APP-API 和API-API 关系,采用图卷积神经网实现Android 恶意软件检测. 诸多研究已经证明,基于恶意软件及特征间关系的恶意软件检测与分类方法具有强大的潜力.

然而,当前基于恶意软件间关系的检测方法依然存在诸多问题. 首先,恶意软件变种检测旨在根据恶意软件间存在的代码复用、编码风格等信息检测恶意软件是否由已知恶意软件变种而来[6].而当前已有研究缺少对恶意软件间代码复用、网络行为等复杂关系的全面表征[5],这导致恶意软件间未能建立丰富的关联关系. 其次,当前方法只依赖于恶意软件及特征间的拓扑关系进行检测,缺少对恶意软件及特征自身语义的表示,容易遭受对抗攻击[4]. 以Windows API 特征为例,当恶意软件采用替换功能相近API 的方式生成新变种时,现有方法无法识别恶意软件和其变种的关系,这是由于现有方法仅基于是否共同调用了同一个Windows API 来建模两个软件间的关系,而未考虑到Windows API 的功能等语义信息,缺失了Windows API 间的相似性关系. 实际上,当两个恶意软件分别调用两个功能相似的敏感WindowsAPI 时,他们属于同一类变种的概率也将进一步提高. 由此可知,恶意软件特征的语义信息能够表达恶意软件间隐蔽的关联关系,有助于构建恶意软件间深层次的关联关系. 然而,并非所有特征的语义信息都可以轻松获得. 例如,恶意软件的WindowsAPI、通信IP 等特征存在关键的语义信息,但难以从恶意样本中直接提取. 而字符串、导入链接库等特征则更是难以表示其语义. 这都为恶意软件及其特征的语义信息表征带来了困难,严重影响了恶意软件变种检测的准确性和鲁棒性.

为了解决以上缺陷,本文提出基于异质图属性增强的恶意软件变种检测方法. 该方法首先从代码功能、通信行为等多方面提取恶意代码特征,包括导入的Windows API、动态链接库、字符串、代码块和通信IP. 并基于多维特征全面建模恶意软件间的关系,构建恶意软件变种检测场景下的异质信息网络,将恶意软件变种检测问题转化为异质图中的节点分类问题. 之后,我们为异质信息网络的实体节点构建语义属性来增强节点的表示,特征语义信息能够描述特征间的相似性关系,对代码混淆等攻击手段存在鲁棒性. 特别对于其中语义信息匮乏的实体节点(Windows API 节点、通信IP 节点),我们从外部开源数据(Windows API 参考文档、IP 地理位置库)中学习特征的语义信息来弥补语义信息缺失的不足. 最后,我们采用异质图神经网络学习多维特征的异质信息,同时,面向字符串和动态链接库两类无语义属性的节点,我们以异质信息网络的拓扑关系为指导,通过加权聚合邻居节点属性补全无语义节点. 通过一种迭代式的训练机制,我们将语义属性补全过程与异质图节点嵌入过程迭代优化,实现统一的基于异质图属性补全的恶意软件变种检测方法.

综上所述,本文的贡献总结如下:

(1) 我们提出了一种面向恶意软件变种检测的异质信息网络,通过提取多维特征全面表征恶意软件,并依赖恶意软件与特征间的关系(例如,恶意软件→调用→API)建模多个恶意软件间的复杂关系,实现恶意软件间关系的全面表示.

(2) 我们为异质信息网络的实体节点构建语义属性来增强节点信息的表示,特别是对于语义信息匮乏的节点,我们从外部开源数据中学习实体的语义信息来弥补语义信息缺失的不足. 通过语义增强,实体间的相似性关系得以利用,提升了对代码混淆等攻击手段的鲁棒性.

(3) 我们采用异质图神经网络学习多维特征的异质信息,同时以异质信息网络的拓扑关系为指导,通过加权聚合邻居节点补全无语义节点. 通过一种迭代式的训练机制,将语义属性补全过程与异质图节点嵌入过程迭代优化,实现统一的基于异质图属性补全的恶意软件变种检测方法.

(4) 我们进行了多项实验证明所提出方案的优越性. 实验结果证明,我们提出方案在两个数据集上实现了90. 9%~98. 9% 的准确率,优于其他恶意软件变种检测方案.

本文其余章节组织如下: 第2 节回顾恶意软件变种检测和图神经网络的相关工作. 第3 节介绍提出的基于异质图属性增强的恶意软件变种检测方法,包括异质信息网络构建、异质图属性增强与基于属性补全的异质图神经网络模块. 第4 节进行充分实验来评估本文提出的方法在多个数据集中的性能. 最后,对本文工作进行了总结和展望.

2 相关工作

在本节中,我们回顾以下两个方面的相关研究:恶意软件变种检测和图神经网络.

2. 1 恶意软件变种检测

由于人工智能技术在图像分类、自然语言处理等方向的迅猛发展,基于机器学习和深度学习的恶意软件变种检测已成为广泛研究的焦点. 现有方法通过提取恶意软件的多样化特征,形成特征集合,然后利用这些特征集合进行分类模型的训练,当前主流的恶意软件变种检测方法包含基于代码内容的方法、基于软件行为的方法和基于恶意软件关系的方法.

基于代码内容的方法是在不执行恶意代码的前提下,通过分析原始二进制代码或者反汇编相关文件提取恶意软件的静态特征,并基于静态特征构建分类模型实现恶意代码分析. 常见的特征有字节序列、操作码和控制流图等. Li 等人[7]提出一种基于RGB 图像的恶意软件特征表示方法,该方法根据相对虚拟地址组合恶意软件的字节图像、操作码图像、字符串图像,形成纹理信息更丰富的图像,并结合自注意力机制和空间金字塔池化改进了卷积神经网络模型,解决了恶意软件大小差异较大的问题. Dib 等人[8]则提出了EVOLIoT方法,将汇编指令序列视作句子,采用BERT架构学习恶意软件的语义. 同时,引入了一种鲁棒且有效的对比学习方法,来对抗“ 概念漂移”和家族间物联网恶意软件分类的局限性. Yan 等人[3]将恶意代码表示为属性控制流图,以实现通用且有效的恶意代码表示,并基于深度图卷积神经网络实现恶意软件变种检测.

基于软件行为的方法则是在孤立环境中执行恶意软件追踪其执行行为,将捕获的API 调用、进程操作、网络通信等行为作为特征,构建分类模型实现恶意软件变种检测. Liu 等人[9]提出了恶意软件变种检测框架FewM-HGCL,该框架将每个恶意软件变种的执行行为建模为一个异构图,刻画恶意软件对象(如API、进程、文件等)之间的交互关系,并基于异质图对比学习解决了小样本场景下的样本真实标签不足的问题. Liu 等人[10]提出了一种基于动态异构图学习的新型检测框架MGDVD,用于实时检测恶意软件变种. MG-DVD 首先将恶意软件变体的细粒度执行事件流建模为动态异构图,并提出了两种基于动态游走的异构图学习方法,学习更全面的恶意软件变种表示,从而显著降低了整个图再训练的成本,实现了实时检测恶意软件变体的能力.

然而,以上这些方法仅基于单个恶意样本的内容进行变种检测,实现了单个恶意软件的孤立分析,而忽略了恶意软件间的关系,容易受到对抗手段攻击. 为了解决孤立分析的困境,有研究开始基于恶意软件间的关系设计相关的检测方法[11,12].HinDroid[13]将Android 应用程序、相关API 以及它们之间丰富的关系表示为一个结构化的异构信息网络,使用基于元路径的方法来描述应用程序和API 的语义相关性. Scorpion[4]构建异质信息网络表述恶意代码与API、DLL、压缩包、设备之间的关系,设计了metagraph2vec 方法实现恶意软件检测. GDroid[5]构建APP-API 和API-API 关系,采用GCN 实现Android 恶意软件检测.

然而,现有方法存在两个问题:(1) 当前方法缺少对恶意软件间代码复用、网络行为等复杂关系的全面表征,导致恶意软件间未能建立丰富的关联关系;(2) 当前方法只关注于恶意软件及特征间的拓扑关系,缺少对恶意软件及其特征的自身语义信息的表示,使得可用信息单一,易被对抗手段攻击.

2. 2 图神经网络

为了扩展深度神经网络来处理任意图结构数据,图神经网络被提出. 图神经网络将图中的节点嵌入到低维空间中,并使节点嵌入保持图的拓扑结构和节点属性的相似性. 当前被广泛接受的图神经网络包括GraphSAGE[14]和GAT[15]等. 然而,上述图神经网络仅用于处理同质图,在处理节点或边类型不唯一的异质图时,会丢失异质信息. 最近,一些研究试图将图神经网络扩展到异质图. 例如,Wang 等人[16]提出异质图注意网络HAN,在节点级别和语义级别上执行分层注意力机制,以聚合基于元路径的邻居并获得最终的节点嵌入. Fu等人[17]提出聚合元路径的图神经网络MAGNN,该模型包含节点内容转换以封装输入节点属性,元路径内聚合以合并中间语义节点,以及元路径间聚合以组合来自多个元路径的消息. Yun 等人[18]则提出GTN,通过识别原始图上未连接节点之间的有用连接来生成新的图结构,可以以端到端的方式学习新图上的有效节点嵌入.

然而,对于异质图中某些类型节点的属性缺失问题,上述方法均不能给出合适的解决方案. 他们只能通过手工求均值等方式填充固定的节点属性,并不能起到良好的效果. 为了弥补节点属性缺失的问题,有研究开始为异质图中的缺失属性节点进行属性补全. Jin 等人[19]认为缺失的属性可以通过可学习的方式获取,并提出了一种基于属性补全的异构图神经网络(HGNN-AC)的通用框架,包括拓扑嵌入预学习和带有注意机制的属性补全. Wang 等人[20]提出了一种异构网络的通用属性补全框架AC-HEN, 利用特征聚合和结构聚合来获得考虑特征空间和结构空间的多视图嵌入. 然后,使用多视图嵌入通过弱监督学习范式中的嵌入融合模块来完成缺失的属性. Zhu 等人[21]提出了一种称为AutoAC 的可微属性补全框架,用于异构图神经网络中的自动补全操作搜索. AutoAC 首先提出一个包括拓扑相关和拓扑无关的补全操作搜索空间. 然后设计连续松弛模式,并进一步提出了可微分补全算法. 受这些研究的启发,本文采用图神经网络学习恶意软件及其变种检测复杂的关系,并引入属性补全机制弥补无属性节点缺失的语义,实现属性补全下的恶意软件变种检测.

3 基于异质图属性增强的恶意软件变种检测方法

在本文中,我们提出了一种基于异质图属性增强的恶意软件变种检测方法. 该方法基于恶意软件及特征间的关系(例如,恶意软件→ 调用→API)构建恶意软件变种检测场景下的异质信息网络,建模恶意软件间复杂的关系,实现恶意软件间关系的全面表征. 之后,我们为异质信息网络的实体节点构建语义属性来增强节点信息的表示. 特别是对于语义信息匮乏的节点,我们从外部开源数据中学习实体的语义信息来弥补语义信息缺失的不足. 通过语义增强,实体间的相似性关系得以利用,提升了对代码混淆等攻击手段的鲁棒性. 最后,我们采用异质图神经网络学习多维特征的异质信息,同时,以异质信息网络的拓扑关系为指导,通过加权聚合邻居节点属性补全无语义节点.通过一种迭代式的训练机制,我们将语义属性补全过程与异质图节点嵌入过程迭代优化,实现统一的基于异质图属性补全的恶意软件变种检测方法. 如图1 所示,本方案分为三个组件:构建异质信息网络、异质信息网络节点属性增强和基于属性补全和异质图神经网络的恶意软件变种检测.

具体来说,在构建异质信息网络阶段,如图1中的第1)阶段所示. 我们针对恶意软件及其变种间的代码重用、编码风格相似、行为共通等特点,设计并提取恶意软件的多维特征,包括导入的Windows API、动态链接库、字符串、通信IP 和代码块. 以样本及提取的特征为节点,以彼此间的关系为引导,构建恶意软件变种检测场景下的异质信息网络,建模恶意软件间复杂的关系.

之后,为建模异质信息网络中实体间的相似性关系,提升对代码混淆等攻击手段的鲁棒性,我们对实体节点进行特征增强,如图1 中的第2)阶段所表示. 具体来说,我们为异质信息网络中的实体节点构造语义属性以增强异质信息网络的表达,建立属性增强的异质信息网络. 其中,对于样本和代码块节点,其自身包含丰富的语义信息,因此我们分别提取字节分布序列、汇编指令统计特征作为其节点语义属性. 对于Windows API、通信IP 节点,其本身包含的信息匮乏,因此我们从外部开源数据中学习Windows API 和通信IP 的语义信息,以弥补节点语义信息的缺失,表达实体间的相似性. 进一步来说,针对于Windows API,我们基于Windows API 官方参考文档构建API 知识图,基于知识图谱学习API 嵌入表达其语义,将学习到的API 嵌入作为Windows API 节点的属性. 针对通信IP,我们依赖IP 地理位置库,为通信IP 引入IP 地理位置特征作为其属性,表示通信IP 间的相似度.

最后,我们设计基于属性补全与异质图神经网络的恶意软件变种检测方法,根据图的拓扑关系加权聚合邻居节点的属性,为动态链接库、字符串此类无语义节点补全属性. 并基于一种迭代式的训练机制,将语义属性补全过程与异质图节点嵌入过程迭代优化,实现统一的基于异质图属性补全的恶意软件变种检测方法.

3. 1 构造异质信息网络

异质信息网络又称异质图,可以表示为G ={ V,E,F,R,φ,? },V 为节点集,E 为边集,F 为节点类型集合,R 为边类型集合,其中| F |+| R |> 2.每个节点i ∈ V 对应一个节点类型映射函数φ:V → F,每个边e ∈ E 对应一个边类型映射函数?:E → R. G 的网络模式记为TG = ( F,R),是G ={ V,E,F,R,φ,? } 的元模式. 具体地,网络模式是定义在对象类型集合F 上的有向图,并以R 上的关系为边.

为了建模恶意软件及其变种间的关系,我们构建一个恶意软件异质信息网络G. 区别于其他基于恶意软件间关系的工作,我们提取多维度特征以从代码复用、编码风格、恶意行为等多方面表征恶意软件及其变种间复杂多样的关系,并依此构建异质信息网络. 具体来说,我们提取恶意软件中出现的字符串,用以描述恶意软件及其变种在作者编码风格上的关联性;提取恶意软件的代码块,描绘恶意软件变种间存在的代码复用等现象;提取恶意软件的通信IP、导入的Windows API 及动态链接库,建模恶意软件变种间在功能、行为等方面的相似度. 之后,我们将样本和提取的多维特征作为异质信息网络的实体节点,基于实体节点间的关系构建异质信息网络中节的边,形成如图2所示的网络模式. 我们的方案可以添加更多的特征(例如,注册表行为、N-Gram 等)以描述恶意软件间更复杂的关系,考虑到特征可用性与执行效率,我们选取以上5 种特征建模本方案的异质信息网络.

下面将详细描述异质信息网络的节点和边的含义及选取理由.

样本节点F1:样本节点是我们需要检测目标实体,由数据集中的所有样本组成.

字符串节点F2:字符串是反应恶意软件作者编码风格和恶意软件行为的重要特征,恶意软件中的字符串能够揭示不同恶意样本之间的潜在关系. 我们通过逆向工程提取有意义的字符串,包括命令、链接、地址等. 这些字符串大多由恶意软件开发者硬编码而来,反映出开发者的编码风格以及样本访问的文件、通信地址等信息,在恶意软件及其变种间具有强的共现性. 因此,我们将字符串作为节点,构建样本间字符串共现关系.

代码块节点F3:由于恶意软件及其变种间存在普遍的代码复用现象,我们选择代码块作为变种检测的特征,以评估恶意样本间存在的代码复用现象. 具体来说,本文通过逆向工程提取恶意软件的控制流图,将控制流图中的基本块视为我们所需要的代码块,其代表了一段连续且有实际意义的代码序列,以代码块为节点,建立样本间的关系来描述恶意代码间的代码复用.

通信IP 节点F4:恶意软件需要与恶意主机(例如C&C 服务器)通信,以获取恶意命令或有效载荷并上传收集到的信息. 在相同的恶意软件变种内,开发者往往改变恶意软件的功能以实现不同的恶意行为,但作为恶意主机的通信IP 往往得到保留. 同时,相较于域名、URL 等特征,通信IP 更具有通用性,因此我们将通信IP 作为关联恶意样本的重要依据. 具体来说,我们在孤立环境中运行恶意软件获得其通信的IP 地址,将其作为特征描述恶意软件通信行为在中的相似性.

Windows API 节点F5:Windows API 调用可以有效地反映恶意软件的行为. 例如,恶意软件通过调用函数GetFileInformationByHandle 能够获取文件的信息,如大小、属性等,而调用RegSetValueEx可以用来修改注册表中指定值的数据和类型. 多项研究[4,5,11]已经证明具有相同WindowsAPI 的样本有更大可能具有相似的功能,采用Windows API 检测恶意软件具有优秀的检测效果. 因此,我们从文件的导入表中提取WindowsAPI 调用来表示恶意软件及其变种在功能及行为上的相似性.

动态链接库节点F6:动态链接库整合了一系列具有相似功能的Windows API. 我们通过引入动态链接库节点关联多个Windows API,构建Windows API 间的关系,增强异质信息网络的信息表达.

为了关注于更重要的特征,本文设置超参数r,用于过滤掉在大部分样本中都出现的特征,这些特征往往表达Windows 软件中通用的信息,对于区分恶意软件变种无实质性帮助. 具体来说,我们过滤掉在不同样本中出现频率大于r 的特征,这里的特征仅针对于字符串、代码块、通信IP 和WindowsAPI,不针对于动态链接库.

根据以上设计的节点,我们构建5 种类型的边,描述样本和特征间的关系. 具体来说,我们建模样本和字符串间的拥有关系R1,建模样本和代码块间的包含关系R2,建模样本和通信IP 地址间的连接关系R3,建模样本和Windows API 间的导入关系R4,建模Windows API 和动态链接库的所属关系R5.

3. 2 异质信息网络节点属性增强

为建模异质信息网络中实体间的相似性关系,提升对代码混淆等攻击手段的鲁棒性,我们为异质信息网络中的实体节点添加语义属性以增强异质信息网络的表达. 通过构建节点语义属性,该方案不再仅基于实体节点间拓扑关系进行检测,而同时关注节点间拓扑关系以及节点自身语义,描绘出同类实体节点间在语义上的相似性关系,降低了API 混淆、代码混淆等逃避手段带来的影响,提升了模型的鲁棒性与准确性. 具体来说,我们利用知识图谱学习Windows API 参考文档中的知识,将得到的包含语义的Windows API 嵌入作为Windows API 节点的属性. 对于通信IP,我们引入IP 地理位置库为IP 节点添加地理位置属性. 对于代码块,我们利用反汇编为代码块添加汇编代码序列统计特征作为属性描述代码块的功能. 对于样本,我们提取字节分布序列作为属性. 以下具体解释各类型节点的属性如何生成.

3. 2. 1 Windows API 属性生成 每一个WindowsAPI 都有各自的功能,面对恶意软件中导入的大量Windows API,区分Windows API 的功能、寻找功能相似的Windows API 对于判断恶意软件的行为起着关键性作用[22]. 然而Windows API 本身缺少有效的语义信息,为了表征Windows API的语义属性,我们构建知识图谱从Windows API参考文档中学习Windows API 的语义嵌入,将其作为Windows API 节点的属性. 具体来说,我们首先在微软官方网站[23]收集API 参考文档,之后解析这些文档,提取实体及其关系,并根据实体与其关系进行关联,形成API 知识图. 最后,基于知识图谱嵌入学习API 知识图信息,获得API 语义嵌入.

首先,我们进行实体提取. 实体是API 知识图中的基本元素. Windows API 参考文档以层次结构组织,最底层是API 文档中定义的供开发人员使用的基本单元,包含函数、方法和结构体等3 种数据类型. 而头文件和类接口等3 种数据类型则在上层,作为函数、方法和结构体的容器. 通过解析组织树,我们提取函数、方法、结构体、头文件、类、接口等6 种数据类型作为实体,并将函数、方法和结构体定义为功能实体,将头文件、类和接口定义为容器实体.

之后,我们进行关系抽取. 关系表示实体如何相互关联. 如表1 所示,我们考虑上述实体之间的三类关系:

(1) 结构关系:描述功能实体和容器实体之间的组织关系,由Windows API 参考文档的层次结构建立. 例如,方法由接口或类组织,接口、函数、结构体和类由头文件组织.

(2) 功能关系:表示实体在功能上的相关性,包含继承、参数调用和返回调用等3 种关系. 其中,继承关系根据参考文档中的Inheritance 字段将类或接口与其继承的类或接口连接起来;参数调用关系反映了一个方法或函数是否将其他方法、函数、结构体、类、接口等作为输入参数使用;返回调用关系则根据一个方法或函数将结构体作为其返回值来建立关系.

(3) 引用关系:在Windows API 参考文档中的Description、Remark 和See Also 字段会出现与该API 存在关系的引用,以帮助开发者快速跳转到其他API,这种共现性表现出两个API 之间功能或结构上存在相似性. 因此,我们通过对API 参考文档中的描述Description、Remark 和See Also 字段进行分词解析,搜索存在API 引用,并依此建立两个实体间的引用关系.

最后,我们生成API 嵌入. 知识图谱嵌入方法可以学习知识图谱实体和关系的低维表示,同时保留其语义. 在API 知识图中,知识图谱嵌入方法旨在将知识图中的每个API 转换为低维向量,保留API 语义的同时使得语义上更接近的API 在其低维向量上有更高的相似性. 我们利用经典的TransE 方法[24]来学习API 知识图. 该算法受word2vec[25]启发,假设有一个连接实体h 和实体t的关系c,用3 个向量lh,lc,l t 来表示它们,TransE的核心思想是不断调整这3 个向量,使lh 和lc 的和接近于lt. 这样,语义上接近的API 就会有相似的向量表示.

3. 2. 2 IP 属性生成 恶意软件中通信的IP 地址通常表示用于下载恶意载荷和上传用户信息的C&C 服务器[26]. IP 地址本身的语义属性对于判断恶意软件间的变种具有重要参考价值,已经有多项研究通过IP 增强特征以提升任务性能[27,28]. 在本方案中,我们引入IP 地理位置库以获得IP 所在的经纬度,表示异质信息网络中通信IP 节点的语义属性.

为了得到计算机可以理解的IP 属性,我们对提取到的IP 地理位置特征进行编码. 具体来说,我们对IP 经纬度采用GeoHash 方法[29]进行编码.GeoHash 方法将地球理解为1 个二维平面,通过把二维的空间经纬度数据编码为1 个字符串,使得物理距离相近的两个地点在编码后更相似.

3. 2. 3 代码块属性生成 代码块被定义为控制流图中基本块,其表示了一段连续且有实际意义的功能逻辑,能够有效地表述恶意软件变种间的代码复用关系. 为了有效表示代码块的语义特征,我们基于Yan 等人[3]提出的方法,分析代码块的汇编代码序列,提取多维度统计特征表示代码块的语义属性,包含不同类型的指令数量、常量值数量、特殊字符串数量等共计32 维特征.

3. 2. 4 样本属性生成 恶意样本本身包含多种属性,在本方案中,我们选择样本的字节分布序列作为属性. 具体来说,我们将恶意样本的二进制比特序列编码为十六进制字节序列,1 个字节能够表示0~255 之间的数字. 之后,将每种字节在样本中占的比例作为该字节的特征值,256 种字节按由小到大顺序拼接得到字节分布序列. 我们选择字节分布序列作为属性是基于以下两个理由:(1) 该方法能够表示恶意样本的所有信息,避免了恶意样本间大小不一致导致的信息缺失问题;(2) 该序列生成过程简单快速,生成的序列长度固定为256,既避免n-gram 等生成方法带来的时间消耗,又减少了之后的检测模型负担[30].

3. 3 基于属性补全的异质图神经网络

经过异质图节点属性增强阶段,异质信息网络的通信IP 节点、Windows API 节点、样本节点和代码块节点的语义信息得到充分表示,然而动态链接库节点和字符串节点却难以生成恰当的语义信息其属性. 为了解决异质信息网络中动态链接库节点和字符串节点属性缺失的问题,我们以拓扑信息为指导,通过对有属性节点的属性进行加权聚合来补全无属性节点的属性. 此外,为了提高下游图学习任务的性能,我们按照一种迭代优化的策略,将属性补全和异质图神经网络的训练联合优化,而不是将其视为两个独立的过程. 具体而言,在属性补全阶段,首先使用异质图嵌入方法获取节点拓扑嵌入,然后通过计算节点嵌入的注意力值来区分不同邻居节点的贡献,加权聚合得到无属性节点.