Page 218 - 《软件学报》2025年第7期
P. 218
邱少健 等: 基于函数间结构特征关联的软件漏洞检测方法 3139
的相互依赖关系. 工具 Joern 解析这 3 种图结构并将其整合为一种表示方式, 记作 G CPG (V CPG ,E CPG ). 在该图中, 节
点集合 V CPG 表示代码语句或语法元素, 边集 E CPG 则描述各种类型的信息流. 为了从 G CPG 生成函数结构特征, 我们
实现了一个基于残差门控图神经网络的特征生成模块. 该步骤选择残差门控图神经网络的原因是其计算复杂度比
传统图注意力网络更低, 且比图卷积神经网络有更强的表示能力 [12,28] . 该模块首先使用 Word2Vec 将每个节点嵌
]
i d [ 1 2 n T n×d n 表示节点
入到一个 d 维特征向量 α ∈ R , i ⩽ n 中, 所有节点共同形成特征矩阵 M = α ,α ,...,α ∈ R , 其中,
G CPG 中节点信息的上下文理解, 本文采用基于门控循环单元 (gated recurrent unit, GRU) 的聚合函
个数. 为了增强
数 f agg-GRU , 捕捉代码结构上下文. 该函数表示如下:
( )
ℓ+1 ℓ ℓ
M = f agg-GRU AM ,M (3)
ℓ
ℓ
其中, A 表示 G CPG 的邻接矩阵, M 表示第 层的节点特征矩阵. 更新后的节点表示 M ℓ+1 通过 f agg-GRU 聚合邻近节
ℓ ℓ
点的信息 AM 以及输入特征 M 得到. 随后, 使用平均池化层整合各层所有节点的特征, 并将其连接形成函数结
d
构特征表示 x ∈ R .
X = x , x ,..., x . 函数独立结
{
}
1
2
N
在漏洞数据集中, 我们为每个函数生成独立结构特征, 构成函数独立结构特征
构特征生成模块使用数据集的子集进行训练. 需要注意的是, 整个 CSFF-VD 框架在所有阶段使用数据集的同一个
子集进行训练, 从而避免信息泄露.
3.2 函数间关联特征提取
在本节中, CSFF-VD 利用了函数间独立结构特征的相似性, 通过提取关联特征来更有效地识别潜在的安全漏
洞. 具体来说, 如图 3 所示, 该过程主要分为两个步骤: 函数间结构特征相似关联图构建和关联特征提取.
节点 距离 x 7 v 7 x 1 v 4 x 4
构建函数间结构特征相似关联图 ··· v 3 ··· d 3 x 8 x 2 v 2 x v v 1 v 5 x 5
v 1
d 1
v 2
d 2
v 4
d 4
v 8
d 8
选中距离最小的前
k 个节点建立连接 v 8 v 3 x 6
v 6
i
特征转换
v 7 Wx , Wx j
v 4 注意力系数计算 FFN 注意力 点积注意力
提取函数间关联特征 v 2 v 注意力计算 系数归一化 e x i ,x j e x i ,x j
v 1
DP
GO
v 5
MX
v 8
×
v 3 注意力聚合 相乘 ϕ x i ,x j
关联特征提取 MX
v 6 e x i ,x j
图 3 函数间结构特征相似关联构建和函数间关联特征提取方法

