郑州大学学报(理学版)  2026, Vol. 58 Issue (1): 19-26  DOI: 10.13705/j.issn.1671-6841.2024119

引用本文  

陈旭, 陈子雄, 景永俊, 等. 一种融合双曲表示与欧几里得表示的源代码漏洞检测方法[J]. 郑州大学学报(理学版), 2026, 58(1): 19-26.
CHEN Xu, CHEN Zixiong, JING Yongjun, et al. A Source Code Vulnerability Detection Method Fusing Hyperbolic Representation and Euclidean Representation[J]. Journal of Zhengzhou University(Natural Science Edition), 2026, 58(1): 19-26.

基金项目

北方民族大学中央高校基本科研业务费专项资金(2023ZRLG13);宁夏回族自治区重点研发项目(2023BDE02017)

通信作者

陈子雄(2000—),男,硕士研究生,主要从事网络安全和图深度学习研究,E-mail: 15534417845@163.com

作者简介

陈旭(1979—),男,高级工程师,主要从事网络安全、图深度学习和大数据处理研究,E-mail: chenxu@nmu.edu.cn

文章历史

收稿日期:2024-07-02
一种融合双曲表示与欧几里得表示的源代码漏洞检测方法
陈旭1, 陈子雄1, 景永俊1, 王叔洋2, 宋吉飞3    
1. 北方民族大学 计算机科学与工程学院 宁夏 银川 750021;
2. 北方民族大学 电气信息工程学院 宁夏 银川 750021;
3. 国家(中卫)新型互联网交换中心 宁夏 中卫 755000
摘要:随着软件系统的日益复杂,源代码漏洞检测成为维护软件安全的关键任务。虽然现在已有各种基于深度学习的漏洞检测方法,但这些方法主要依赖单一的欧氏空间视角提取代码表示结构中的语义特征与结构特征,这不利于检测隐藏在代码深处的漏洞。为了解决这一问题,提出一种融合双曲表示与欧几里得表示的源代码漏洞检测方法(source code vulnerability detection method fusing hyperbolic representation and Euclidean representation, VulDEHGCN),在两种不同的空间对源代码进行嵌入处理,以不同视角挖掘源代码的漏洞特征,实现更准确的漏洞检测。实验结果表明,与现有的漏洞检测方法相比,VulDEHGCN在准确率、精确率、召回率和F1得分等关键性能指标上均实现了显著提升,其中,准确率和F1分数分别达到98.93%和96.63%。消融实验还证实了融合不同视角的代码嵌入的检测性能更优。
关键词漏洞检测    切片级别    双曲空间    欧氏空间    融合表示    
A Source Code Vulnerability Detection Method Fusing Hyperbolic Representation and Euclidean Representation
CHEN Xu1, CHEN Zixiong1, JING Yongjun1, WANG Shuyang2, SONG Jifei3    
1. Department of Computer Science and Engineering, North Minzu University, Yinchuan 750021, China;
2. Department of Electrical and Information Engineering, North Minzu University, Yinchuan 750021, China;
3. National (Zhongwei) New-type Internet Exchange Point, Zhongwei 755000, China
Abstract: With the increasing complexity of software systems, source code vulnerability detection has become a key task to maintain software security. Although various vulnerability detection methods based on deep learning were proposed, they mainly relied on a single Euclidean space perspective to extract the semantic features and structural features in the code representation structure, which limited their ability to detect vulnerabilities hidden deep in the code. In order to solve this limitation, VulDEHGCN, a source code vulnerability detection method fusing hyperbolic representation and euclidean representation was proposesed. It could embedd the source code from two different spaces, so as to mine the vulnerability characteristics of the source code from different perspectives, so as to achieve more accurate vulnerability detection. The experimental results showed that compared with the existing vulnerability detection methods, VulDEHGCN achieved significant improvement in key performance indicators such as accuracy, precision, recall and F1 score. The accuracy and F1 score reached 98.93% and 96.63% respectively.Ablation studies also confirm the superiority of fusing code embeddings from different perspectives to further enhance vulnerability detection performance.
Key words: vulnerability detection    slice-level    hyperbolic space    Euclidean space    fused representation    
0 引言

源代码漏洞检测是软件安全领域的一个重要研究方向,其目标是识别并修复可能导致安全风险的软件缺陷。随着软件系统的不断增长和复杂化,手动检测漏洞变得越来越困难,因此自动化的漏洞检测方法受到了广泛关注[1]。现有的深度学习方法大多依赖于单一的欧氏空间代码嵌入,这限制了它们捕获代码中复杂漏洞模式的能力。

深度学习技术在源代码漏洞检测领域的潜力尚未被完全挖掘出来。源代码具有丰富的结构和语义信息,传统的欧氏空间嵌入方法难以完整地捕获这些信息[2]。双曲空间以其独特的几何特性为表示学习提供了新的视角,特别是在表征具有层次结构和复杂关系的数据时,双曲空间展现了优越的性能[3]

针对现有方法的局限性,本文提出一种融合双曲表示与欧几里得表示的源代码漏洞检测方法,旨在通过结合双曲空间的层次结构表征能力和欧氏空间的局部特征捕获能力对源代码进行分析。首先将源代码表示为程序依赖图;然后,对其进行切片处理,并对切片图进行标准化和嵌入,以降低复杂度;接着,分别在双曲空间和欧氏空间中对切片图进行嵌入学习,以捕获不同视角下的漏洞特征;最后,将两个空间中提取的特征进行有效融合,以实现更准确的漏洞检测。

1 VulDEHGCN方法

VulDEHGCN方法的结构概述如图 1所示,其中代码切片充当基本分析单元,而不是整个程序,以确保细粒度的代码检测。首先, VulDEHGCN利用开源静态代码解析工具Joern(https://github.com/joernio/joern)构造基于控制流和数据流信息的程序依赖图(program dependence graph,PDG)。然后,从程序切片基准点开始沿PDG进行前向和后向遍历分析生成程序依赖图切片(slices of the program dependence graph, S-PDG)。接着,将S-PDG的节点中用户定义的变量名和函数名映射为规范符号名称进行命名规范化,并执行词嵌入以导出令牌序列中的令牌以及S-PDG中节点的初始向量。随后,用神经网络分别从双曲空间以及欧氏空间捕获S-PDG中隐含的漏洞指示语义特征。具体来说,双曲空间嵌入模块使用DHGCN(vulnerability detection based on hyperbolic graph convolutional neural network)进行编码,欧氏空间嵌入模块使用DEGCN(vulnerability detection based on Euclidean graph convolutional neural network)进行编码。此外,学习到的语义特征以各种方式集成以促进融合。最后,融合向量在分类层中进行分类,以在切片级别进行代码漏洞的识别。验证本文方法的有效性,选择了三种传统的基于规则的漏洞检测工具(Infer、RATs、FlawFinder)和三种新兴的基于模型的漏洞检测方法(Devign[4]、SySeVR[5]、Vuldetexp[6])作为对比基线进行了实验。

图 1 VulDEHGCN方法概述 Fig. 1 Overview of VulDEHGCN
1.1 程序依赖切片图提取

图 1所示,PDG是一种直观且高效的源代码表征方式,能够准确反映代码间的控制和数据依赖关系,从而有效检测多种漏洞。PDG为有向图,其节点表示程序语句,边表示语句间的控制或数据依赖性。图中实线表示控制依赖边(control dependent edge, CDE),NiNj表示节点Nj的执行由Ni决定,而虚线表示数据依赖边(data dependent edge, DDE),N′iN′j表示节点N′i处的定义在N′j处使用。

本文选择系统API调用作为主要切片基准点,这是由于API调用在应用程序中被广泛使用且易被滥用,是漏洞产生的主要原因之一[7]。此外,针对应用算术运算符(如加法、乘法等)易引发漏洞(如整数溢出,CWE190),本文也将包含算术运算符的语句作为补充切片基准点,以扩大漏洞检测的范围。具体操作时,采用静态值流分析工具(static value flow analysis tool,SVF)[8]自动识别系统API调用,并使用antlr(https://www.antlr.org/)识别算术及按位运算符、复合赋值表达式和递增/递减表达式,将识别出的代码作为切片基准点。

在每个切片基准点上,对PDG进行前向和后向遍历,以提取控制依赖和数据依赖信息,最终生成S-PDG。以图 1中的节点5为例,前向切片从该基准点出发,遍历PDG中依赖该节点的语句,后向切片则遍历所有对该基准点有影响的语句。通过这种前、后向结合的遍历,确保生成的S-PDG能够完整保留程序的依赖信息,以捕捉潜在漏洞的代码片段。

1.2 代码切片标准化和嵌入

源代码中常包含如注释和复杂命名等与语义无关的信息,这些信息可能干扰深度学习模型的训练和预测。为提升模型性能需进行代码规范化处理,仅保留关键语义特征,为漏洞检测提供更准确的数据基础。

在代码嵌入过程中,标准化代码符号有助于生成一致的嵌入向量,减少无关信息的干扰。本文将用户定义的变量名和函数名替换为通用标识符,如FUN0、VAR0等,确保不同代码中的变量可映射为相同符号,从而减少语义上的偏差。值得注意的是,变量名称的标准化并不会影响程序的实际语义。

本文采用预训练的Doc2Vec模型对S-PDG中每个节点的代码令牌进行嵌入处理。Doc2Vec能够将整个代码语句(而非单个令牌)编码为固定长度的向量,这比简单组装单词嵌入更精确,因为它保留了代码的整体语义特征。在训练过程中,Doc2Vec通过预测给定上下文窗口内的令牌,学习到相似含义的令牌在潜在向量空间中的接近性。采用随机梯度下降(stochastic gradient descent, SGD)[9]更新代码令牌的向量表示,最终获得S-PDG中每个节点的语句向量表示。

1.3 DEHGCN模型

DEHGCN模型的输入处理分为两个模块:一个是基于双曲空间嵌入的DHGCN模块;另一个是基于欧氏空间嵌入的DEGCN模块。经过两个不同空间嵌入处理后,增加一个向量融合模块对两个空间处理后的结果进行融合,以保留更完整的程序代码信息(包括结构化和非结构化信息)。然后使用隐藏的全连接层,以及包含Softmax层的分类器输出预测结果。

1.3.1 双曲空间嵌入模块

DHGCN包含双曲映射层、双曲图卷积神经网络模块(hyperbolic graph convolutional neural network, HGCN)和全局注意力池化层。双曲映射层将欧氏空间特征转换为双曲空间特征,以适应HGCN的输入。HGCN负责提取代码图的层次结构和语义特征,而全局注意力池化层整合全局信息,支持漏洞检测。

1) 双曲映射层:由于DHGCN模型的输入包括S-PDG的结构化和非结构化信息(邻接矩阵和节点向量矩阵),经代码标准化和嵌入过程得到的节点特征向量属于欧氏空间特征向量,无法直接输入双曲图卷积神经网络模块,因此需要将其转换为双曲空间特征向量。为此,本文设计了双曲映射层将源代码的欧氏空间特征向量转换为双曲空间特征向量。

双曲映射层通过指数和对数映射在欧氏空间与双曲空间进行转换。这一过程将节点特征映射到双曲空间中,使HGCN能有效处理复杂的层次结构。指数映射和对数映射的公式分别为

$ \exp _x^c(\boldsymbol{v})=x \oplus_c\left(\tanh \left(\frac{\sqrt{c}\|\boldsymbol{v}\|}{2}\right) \frac{\boldsymbol{v}}{\sqrt{c}\|\boldsymbol{v}\|}\right), $ (1)
$ \log _x^c(y)=\frac{2}{\sqrt{c}} \tanh ^{-1}\left(\sqrt{c}\left\|-x \oplus_c y\right\|\right) \frac{-x \oplus_c y}{\left\|-x \oplus_c y\right\|}, $ (2)

其中:xy是双曲空间中的点;v是基于双曲空间中点x的切空间上的一个向量;c是双曲空间的曲率;⊕c表示双曲空间中的莫比乌斯(Möbius)加法;tanh是双曲正切函数。

双曲映射层中,将节点特征从欧氏空间映射到双曲空间的变换公式为

$ \begin{aligned} & \boldsymbol{x}_i^H=\exp _o^c\left(\boldsymbol{x}_i^E\right)= \\ & \left(\cosh \left(\sqrt{c}\left\|\boldsymbol{x}_i^E\right\|\right), \frac{\sinh \left(\sqrt{c}\left\|\boldsymbol{x}_i^E\right\|\right)}{\sqrt{c}\left\|\boldsymbol{x}_i^E\right\|} \boldsymbol{x}_i^E\right), \end{aligned} $ (3)

其中:xiE是欧几里得空间中的节点特征向量;xiH是映射后双曲空间中的节点特征向量;expoc表示从欧几里得空间到双曲空间的指数映射,基于原点O$O:=\{\sqrt{c}, 0, \cdots, 0\} \in H^{d, c}$表示d维、曲率为c的双曲空间H中的原点;$\left\|\boldsymbol{x}_i^E\right\|$表示向量xiE的欧几里得范数;cosh和sinh分别是双曲余弦和双曲正弦函数。

2) 双曲图卷积神经网络模块:HGCN模块由双曲线性层、聚合层和激活层组成。通过消息传递机制,模型将中心节点及其邻居的嵌入进行变换和聚合后进行分类预测。双曲嵌入层在每层映射节点特征时允许曲率可训练,与欧氏空间的图神经网络相比,双曲空间中的注意力机制更能捕捉高层次结构信息。

HGCN层中的消息传递公式为

$ \boldsymbol{h}_i=\exp _o^c\left(\boldsymbol{W} \otimes_c \log _o^c\left(\boldsymbol{x}_i^H\right)\right), $ (4)
$ \boldsymbol{h}_i^{\prime}=\frac{\sum\limits_{j \in N(i)} \exp _o^c\left(\boldsymbol{h}_j\right)}{|N(i)|}, $ (5)
$ \boldsymbol{h}_i^{\prime \prime}=\exp _o^c\left(\boldsymbol{\sigma}\left(\log _o^c\left(\boldsymbol{h}_i^{\prime}\right)\right)\right), $ (6)

其中:xiH是节点i经双曲映射层映射后的特征向量;hi是双曲线性层更新后的特征向量;h′i是双曲聚合层聚合后的特征向量;h″i是双曲激活层激活后的特征向量;jN(i)表示节点i的邻居节点jhj是节点i的邻居节点j经双曲线性层更新后的节点特征向量;W是双曲线性变换的权重矩阵;N(i)是节点i的邻居节点集合;|N(i)|是节点i的邻居节点数量;σ是欧几里得空间中的激活函数。

3) 全局注意力池化层:为了考虑整个输入代码图的双曲嵌入后的全局信息,本文将HGCN层嵌入的结果输入全局注意力池化层。对双曲图卷积神经网络模块的结果使用对数映射(公式2),将最后一层HGCN的输出映射到原点的切线空间,得到代码图的双曲嵌入隐藏表示xi。全局注意力池化层能够从HGCN层输出的代码图的双曲嵌入隐藏表示中提取全局信息,通过计算权重并加权汇总,能够将输入的复杂性降低为一个全局表示从而提高计算效率。通过对全局上下文进行建模,全局注意力池化层还有助于减少模型对局部噪声的过拟合。全局注意力池化层的处理公式为

$ \boldsymbol{V}_H=\sum\limits_{i=1}^N \operatorname{Softmax}\left(h_{\text {gate }}\left(\boldsymbol{x}_i\right)\right) \odot h_{\boldsymbol{\Theta}}\left(\boldsymbol{x}_i\right), $ (7)

其中:VH是全局注意力池化后的图特征;N是S-PDG图中节点的总数;xi是第i个节点的特征向量;⊙表示Hadamard乘积;hgate是一个门控图序列神经网络[10]hΘ是另一个可选的神经网络[10],这里选择线性神经网络,它在节点特征与注意力分数结合之前,先对节点特征进行变换。hgate的输出通过Softmax函数将图中的节点进行归一化,以得到每个节点的注意力权重,这些权重与hΘ处理后的节点特征进行Hadamard乘积运算,最后将S-PDG中节点按照索引进行求和,从而得到S-PDG的加权特征表示,用于下一步的向量融合。

1.3.2 欧氏空间嵌入模块

本文结合图卷积层、图池化层和图读出层的图神经网络架构,执行欧氏空间中的代码图嵌入。此架构基于Cangea等[11]提出的方法,旨在有效捕捉S-PDG中的结构化和非结构化特征信息。

DEGCN通过交错的图卷积和池化层块(卷积池化块)处理数据,卷积池化块的数量根据数据集的复杂性和大小灵活调整。图卷积层根据邻接矩阵提取节点特征,而池化层则通过减少图的节点数量降低计算复杂度。每个卷积池化块后,图读出层结合全局平均池化和最大池化,汇总并生成固定长度的图向量VE,用于后续漏洞检测任务。

在DEGCN学习过程中,输入的S-PDG数据包含边(结构化信息)和代码令牌嵌入(非结构化信息)。通过top-k池化技术[11],网络能够选择性地保留关键节点,确保在减少计算量的同时保留图的核心结构特征。

1.3.3 向量融合模块

为了从程序代码中捕获更全面的语义信息,在双曲空间使用双曲图神经网络框架得到的图嵌入向量VH(即graph_hid_dhgcn),以及在欧氏空间使用图卷积神经网络框架得到的图嵌入向量VE(即graph_hid_degcn)进一步融合。

融合向量的策略有多种,本文考虑了逐点相加、最大值融合、平均值融合、加权融合四种广泛使用的方法。对这些策略进行实证评估,以确定最适合本文任务的策略。形式上,融合表示可以计算为

$ \boldsymbol{V}_{\text {add }}=\left\{v_i \mid v_i=\boldsymbol{V}_H^i+\boldsymbol{V}_E^i, i=1, 2, \cdots, n\right\}, $ (8)
$ \boldsymbol{V}_{\max }=\left\{v_i \mid v_i=\max \left(\boldsymbol{V}_H^i, \boldsymbol{V}_E^i\right), i=1, 2, \cdots, n\right\}, $ (9)
$ \boldsymbol{V}_{\text {avg }}=\left\{v_i \mid v_i=\operatorname{avg}\left(\boldsymbol{V}_H^i, \boldsymbol{V}_E^i\right), i=1, 2, \cdots, n\right\}, $ (10)
$ \boldsymbol{V}_{\text {weight }}=\left\{v_i \mid v_i=w_1 \cdot \boldsymbol{V}_H^i+w_2 \cdot \boldsymbol{V}_E^i, i=1, 2, \cdots, n\right\} \text {, } $ (11)

其中:VaddVmaxVavgVweight分别表示通过逐点相加、最大值融合、平均值融合和加权融合获得的融合向量。值得强调的是,这四种向量融合操作需要具有相同的维度。具体实现时,提取的特征向量VH(即graph_hid_dhgcn)和VE(即graph_hid_degcn)的维度均等于256,否则需相应填充至相同长度。加权融合方法中的权重w1w2是根据模型可以自动训练调整的可训练参数,使用随机梯度下降算法[9]进行自动学习。

1.3.4 漏洞分类模块

最后代表整个图的向量r(graph_hid_fusion)被输入多层感知机(multilayer perceptron, MLP)[12]以进行最终预测,它允许检测特征之间的高阶关系(多层感知机中每个隐藏层包含一个线性层、一个ReLU激活函数层和一个Dropout层),最后使用Softmax层输出类标签的概率,即漏洞分类结果。值得注意的是,神经网络中的大部分参数都是在训练过程中通过反向传播自动更新的。

最后,经过学习,得到了一个训练有素的DEHGCN网络模型,该模型编码漏洞模式可以使用该模型进行进一步的漏洞检测。

2 实验与评估

为了评估VulDEHGCN的有效性,探讨了以下研究问题。

RQ1:融合策略的影响。哪种融合策略能最有效地融合从VulDEHGCN的不同嵌入角度收集的语义特征,以提供最佳的漏洞检测性能?

RQ2:与基准方法的性能比较。在检测漏洞的存在以及查明特定漏洞类型方面,VulDEHGCN的性能与基准方法相比如何?

RQ3:消融研究。与使用部分语义特征相比,融合从不同空间嵌入捕获的多个语义特征是否有助于提高漏洞检测性能?

2.1 实验准备

本节描述了用于评估的数据集、有关模型训练和测试的实验设置、评估指标以及与VulDEHGCN进行比较的基线方法。

2.1.1 数据集

本文收集了多个来源的数据,以确保漏洞样本的多样性和充足性。包括Zhou等[4]、Li等[5]以及胡雨涛等[6]的研究。这些研究主要涉及从SARD漏洞数据集和NVD漏洞库中收集的大量函数样本,以及从六个开源软件(Asterisk、FFmpeg、LibPNG、LibTiFF、Pidgin和VLC Media Player)中提取的无漏洞和有漏洞的函数样本。此外,还包括从真实漏洞数据集Big-Vul[13]中收集的开源C/C++函数。这些函数通过静态分析进行标记,以构建数据集。最终,本文将使用5 311个有漏洞函数和5 926个无漏洞函数,并从中提取21 508个有漏洞的切片和21 052个无漏洞的切片。

2.1.2 实验设置

实验配备为NVIDIA Quadro RTX 6000 GPU,运行频率为2.30 GHz的Intel Xeon Gold 5218 CPU。图神经网络框架为PyTorch Geometric[14]。数据集按照8∶1∶1的比例划分为训练集、验证集和测试集。然后,模型以0.001的初始学习率进行训练,dropout设置为0.5,epoch设置为30,神经网络以批量方式进行训练,批量大小设置为64。使用小批量随机梯度下降与Adam[15]一起进行训练,使用网格搜索来执行超参数(例如批量大小、dropout、学习率)的调整,以确定给定模型的最佳值。在DHGCN模块,双曲流型选择PoincareBall,初始曲率c设置为1,使用RiemannianSGD[16-17]优化庞加莱嵌入。在每个epoch中,训练集被打乱并计算验证集准确率。当验证准确性在10个epoch后没有提高时,使用提前停止机制来停止训练。最后选择达到最佳准确率的模型作为最终的检测模型,用于评估测试集上的性能。

2.1.3 评估指标

为了全面衡量VulDEHGCN的性能,本文使用广泛使用的指标AccuracyPrecisionRecallF1分数对漏洞检测模型进行评估[5]。这些指标由真阳性(true positive, TP),假阳性(false positive, FP),真阴性(true negative, TN)和假阴性(false negative, FN)组成的混淆矩阵来计算。

TP代表模型预测样本为正且实际为正的情况,即正确预测为有漏洞的样本数量。FP代表模型预测样本为正,但实际上为负的情况,即错误预测为有漏洞的样本数量。TN代表模型预测样本为负而实际为负的情况,即正确预测为无漏洞的样本数量。FN表示模型预测样本为负,但实际上为正的情况,即错误预测为无漏洞的样本数量。

准确率(Accuracy)是指正确预测的样本占样本总数的比例,计算公式为

$ Accuracy=\frac{T P+T N}{T P+T N+F P+F N}{ }^{\circ} $ (12)

精确率(Precision)是检测到的漏洞中真正漏洞的比例。计算公式为

$ Precision=\frac{T P}{T P+F P}{ }^{\circ} $ (13)

召回率(Recall)衡量可以正确检测到多少个漏洞。计算公式为

$ Recall=\frac{T P}{T P+F N}{ }^{\circ} $ (14)

对于深度学习模型,期望精确率和召回率都很高,但这些指标经常表现出一高一低的问题。此外,不平衡的样本比例也会影响准确性。为了克服这些问题,提出了F1分数度量作为精确率和召回率的调和平均,它可以更好地评估模型的性能。计算公式为

$ F 1=2 \cdot \frac{Precision * Recall}{Precision + Recall}{ }^{\circ} $ (15)
2.1.4 基线方法

为了全面评估VulDEHGCN在检测常见C/C++漏洞方面的有效性,本文选择了三种传统的基于规则的静态漏洞检测工具和三种先进的基于模型的漏洞检测方法作为基线。这些基线方法包括Infer(https://fbinfer.com/)、RATS(https://code.google.com/archive/p/rough-auditing-tool-for-security/)、Flawfinder(https://dwheeler.com/flawfinder/) (基于规则的漏洞检测方法)以及Devign[4]、SySeVR[5]、Vuldetexp[6](基于模型的漏洞检测方法)。

Infer、RATS和Flawfinder在软件工程领域的静态错误检测中被广泛应用,尤其是在内存相关漏洞检测方面表现出色,且在之前的研究中被广泛用作基线[5, 7, 18]。这三种方法通过预定义的检测规则来识别漏洞,通常在检测诸如缓冲区溢出、空指针引用和格式字符串问题等低级明确定义的错误方面表现良好。

Devign[4]是一种基于图神经网络的模型,基于AST来表征代码,其使用带有Conv模块的门控图神经网络,Conv模块可以在学习到的丰富节点表示中提取有用的特征用于图级分类发现存在漏洞的代码。SySeVR[5]是一个通过源代码检测C/C++程序中的漏洞的系统框架。它可以获取与漏洞相关的语法和语义信息的程序表示。Vuldetexp[6]是一个基于图神经网络的切片级漏洞检测方法,首先对C/C++源代码进行规范化并提取切片,以减少样本冗余信息干扰。之后,采用图神经网络模型进行切片嵌入得到其向量表征,以保留源代码的结构信息和漏洞特征。最后,将切片的向量表征输入漏洞检测模型进行训练和预测。

2.2 实验结果 2.2.1 RQ1:融合策略的影响

为确定最有效的融合策略,本文评估了VulDEHGCN在不同策略下的漏洞检测性能。实验结果(表 1)显示,加权融合策略在准确率、精确率、召回率和F1分数上表现最佳,F1分数达到了96.63%,优于其他策略。

表 1 融合策略对VulDEHGCN漏洞检测能力的影响 Tab. 1 Effect of fusion strategy on vulnerability detection ability of VulDEHGCN 

逐点相加融合尽管在准确率上表现良好,但其简单的相加方式,未能有效平衡双曲空间和欧氏空间特征的重要性,导致F1分数略低。最大值融合保留了每个维度的最大值,突出关键特征,但可能导致部分信息丢失,影响召回率。平均值融合则因稀释了重要特征,F1分数表现最差,表明这种方法无法充分捕获两种空间的特征。

相比之下,加权融合通过自动调整权重平衡双曲和欧氏空间特征的贡献,更有效地捕捉关键信息。经过30轮训练,加权融合的权重收敛于w1=0.05,w2=0.73,并将其设为初始值以加快训练速度。因此,本文在后续实验中采用加权融合策略,默认向量维度为256。

2.2.2 RQ2:与基准方法的性能比较

为验证VulDEHGCN在漏洞检测方面的有效性,本文在多个数据集上进行了评估,并与基准方法进行了比较,如表 2所示,VulDEHGCN在所有评估指标上表现优越,尤其是在准确率和F1分数方面,显著优于基线方法。

表 2 VulDEHGCN与基线方法的性能比较 Tab. 2 Performance comparison of VulDEHGCN with baseline methods 

相比传统基于规则的检测工具(Infer、RATS和Flawfinder),VulDEHGCN在准确率和F1分数上有大幅提升。例如,VulDEHGCN的准确率比Infer提高了87.72%,F1分数提高了144.45%。传统工具依赖于预定义规则,难以检测复杂漏洞,而VulDEHGCN通过深度学习自动捕捉漏洞模式,显著提高了检测效率。

与基于深度学习的检测方法相比,VulDEHGCN也表现出显著的优势性。其准确率和F1分数分别比Devign提高了16.24%和31.33%。VulDEHGCN的成功主要归功于其融合双曲空间和欧氏空间表示的策略,双曲空间能够捕捉代码的层次结构,而欧氏空间则表征局部特征与依赖关系。两者的结合使VulDEHGCN能够从多个维度全面分析源代码,更准确地检测漏洞。

表 2中,VulDEHGCN在本文的漏洞数据集上实现了98.93%的准确率和96.63%的F1分数,验证了其在漏洞检测领域的有效性和潜力。

2.2.3 RQ3:消融研究

为了验证融合来自不同空间的语义特征是否能提升漏洞检测性能,本文进行了消融实验,比较了单一双曲空间嵌入、单一欧氏空间嵌入和融合两者的VulDEHGCN模型的表现。实验结果(表 3)表明,VulDEHGCN在各项指标上均优于仅使用单一空间的模型。VulDHGCN和VulDEGCN的F1分数分别为88.57%和82.29%,而VulDEHGCN达到了96.63%。这证明了融合双曲和欧氏空间的表示能够提供更全面的语义信息,提升漏洞检测的性能。

表 3 从不同空间编码的语义向量的消融研究 Tab. 3 Ablation study of semantic vectors encoded from different spaces 

VulDHGCN擅长捕捉代码的层次结构,但可能忽略局部特征。VulDEGCN则能有效表征局部特征,但对层次结构的捕捉能力不足。通过融合这两种空间,VulDEHGCN能够同时利用两者的优势,实现更精确的漏洞检测。这些结果表明,单一空间视角可能难以完全理解代码的语义信息,而通过自适应加权融合不同空间的特征,模型的检测能力得到了显著提升。综上,融合策略使VulDEHGCN在漏洞检测方面具备明显优势。

3 结语

针对现有基于单一欧氏空间视角的漏洞检测方法在检测深层漏洞方面受到限制的问题,本文提出了VulDEHGCN方法,采用从双曲空间与欧氏空间不同空间角度学习漏洞指示特征,并进行融合以增强检测能力。特别是,为了有效编码S-PDG中隐含的语义,设计了DHGCN的双曲空间嵌入神经网络。它通过将代码切片映射到双曲空间对切片内节点实施双曲注意力聚合来挖掘程序代码中具有高层次结构的节点特征。在多个数据集上进行了广泛实验,观察到VulDEHGCN相对于基线方法具有卓越的漏洞检测能力。值得注意的是,VulDEHGCN的准确性和F1指标的性能均有较大的提升,这表明VulDEHGCN在检测更复杂的代码上下文中的漏洞方面具有潜力。此外,消融实验证实了DEHGCN在编码代码切片图语义方面的有效性,以及所采用的融合策略在增强漏洞检测能力方面的优越性。后续研究将致力于完善漏洞数据集,深化多路融合嵌入技术,并拓展预测范围,包括漏洞类型、影响范围及定位等,以提供更全面的漏洞分析。

参考文献
[1]
魏明军, 闫旭文, 纪占林, 等. 基于CNN与LightGBM的入侵检测研究[J]. 郑州大学学报(理学版), 2023, 55(6): 35-40.
WEI M J, YAN X W, JI Z L, et al. Research on intrusion detection based on CNN and LightGBM[J]. Journal of Zhengzhou university (natural science edition), 2023, 55(6): 35-40. DOI:10.13705/j.issn.1671-6841.2022190 (0)
[2]
CHEN W, FANG W J, HU G D, et al. On the hyperbolicity of small-world and treelike random graphs[J]. Internet mathematics, 2013, 9(4): 434-491. DOI:10.1080/15427951.2013.828336 (0)
[3]
CHAMI I, YING Z, RÉ C, et al. Hyperbolic graph convolutional neural networks[EB/OL]. (2020-03-31)[2024-03-17]. https://pmc.ncbi.nlm.nih.gov/articles/PMC7108814/pdf/nihms-1062396.pdf. (0)
[4]
ZHOU Y, LIU S, SIOW J, et al. Devign: effective vulnerability identification by learning comprehensive program semantics via graph neural networks[EB/OL]. (2019-09-08)[2024-03-17]. https://arxiv.org/pdf/1909.03496. (0)
[5]
LI Z, ZOU D Q, XU S H, et al. SySeVR: a framework for using deep learning to detect software vulnerabilities[J]. IEEE transactions on dependable and secure computing, 2022, 19(4): 2244-2258. DOI:10.1109/TDSC.2021.3051525 (0)
[6]
胡雨涛, 王溯远, 吴月明, 等. 基于图神经网络的切片级漏洞检测及解释方法[J]. 软件学报, 2023, 34(6): 2543-2561.
HU Y T, WANG S Y, WU Y M, et al. Slice-level vulnerability detection and interpretation method based on graph neural network[J]. Journal of software, 2023, 34(6): 2543-2561. (0)
[7]
LI Z, ZOU D, XU S, et al. VulDeePecker: a deep learning-based system for vulnerability detection [EB/OL]. (2018-01-05)[2024-02-23]. http://arxiv.org/abs/1801.01681. (0)
[8]
SUI Y L, XUE J L. SVF: interprocedural static value-flow analysis in LLVM[C]//Proceedings of the 25th International Conference on Compiler Construction. New York: ACM Press, 2016: 265-266. (0)
[9]
ROBBINS H, MONRO S. A stochastic approximation method[J]. The annals of mathematical statistics, 1951, 22(3): 400-407. DOI:10.1214/aoms/1177729586 (0)
[10]
LI Y J, TARLOW D, BROCKSCHMIDT M, et al. Gated graph sequence neural networks[EB/OL]. (2017-09-22)[2024-02-23]. https://arxiv.org/abs/1511.05493v4. (0)
[11]
CANGEA C, VELIČKOVIĆ P, JOVANOVIĆ N, et al. Towards sparse hierarchical graph classifiers[EB/OL]. (2018-11-03) [2024-02-23]. http://arxiv.org/abs/1811.01287. (0)
[12]
RAMCHOUN H, JANATI IDRISSI M A, GHANOU Y, et al. Multilayer perceptron: architecture optimization and training with mixed activation functions[C]//Proceedings of the 2nd International Conference on Big Data, Cloud and Applications. New York: ACM Press, 2017: 1-6. (0)
[13]
FAN J, LI Y, WANG S, et al. A C/C++ code vulnerability dataset with code changes and CVE summaries[C]//Proceedings of the 17th International Conference on Mining Software Repositories. New York: ACM Press, 2020: 508-512. (0)
[14]
FEY M, LENSSEN J E. Fast graph representation learning with PyTorch geometric[EB/OL]. (2019-04-25)[2023-12-30]. http://arxiv.org/abs/1903.02428. (0)
[15]
KINGMA D P, BA J L. Adam: a method for stochastic optimization[EB/OL]. (2017-07-30) [2024-02-23]. https://arxiv.org/pdf/1412.6980. (0)
[16]
TRIPURANENI N, FLAMMARION N, BACH F, et al. Averaging stochastic gradient descent on riemannian manifolds[C]//31st Annual Conference on Learning Theory. Cambridge: ML Research Press, 2018: 650-687. (0)
[17]
ZHANG H, REDDI S J, SRA S. Riemannian SVRG: fast stochastic optimization on riemannian manifolds[EB/OL]. (2017-04-07) [2024-02-23]. https://arxiv.org/pdf/1605.07147. (0)
[18]
CHENG X, WANG H Y, HUA J Y, et al. DeepWukong[J]. ACM transactions on software engineering and methodology, 2021, 30(3): 1-33. (0)