Page 220 - 《软件学报》2025年第7期
P. 220
邱少健 等: 基于函数间结构特征关联的软件漏洞检测方法 3141
1 ∑ N ( )
L V = − y i log(ˆy i )+(1−y i )log(1− ˆy i ) (9)
N i=1
其中, N 是训练样本的数量, y i 是第 个样本的漏洞标签, ˆ y i 是模型预测的概率. 目标是最小化这种交叉熵损失. 至
i
此, 总的训练损失包括漏洞分类损失 L V , 自监督图注意力损失 L E 和 L2 正则化项, 表示为:
(10)
L = L V +λ E L E +λ 2 ∥ W∥ 2
其中, λ E 和 λ 2 是权重系数, 分别控制自监督图注意力损失 L E 和 L2 正则化项对总损失的贡献. 通过结合这些损失
项, CSFF-VD 框架不仅能够准确地检测出代码中的漏洞, 还能通过图注意力机制更好地捕捉函数之间的关联信息,
并利用正则化项防止模型过拟合. 这样的方法确保了模型在训练过程中能够平衡各个损失项的影响, 从而在实际
应用中表现出更高的鲁棒性和准确性.
最终, CSFF-VD 提供了一种漏洞检测框架, 用于提高软件系统的安全性. 如算法 1 所示, 我们提供了 CSFF-VD
的伪代码表示, 以便帮助读者更深入地理解框架的技术细节. 在步骤 1 中, 我们解析函数以生成函数内独立结构特
征. 步骤 2 中, CSFF-VD 利用函数间独立结构特征之间的相似性构建关联图, 并利用图注意力网络挖掘关联信息.
最后一步, 输出函数漏洞存在概率进行检测判别.
算法 1. 基于函数间结构特征相似关联的漏洞检测 CSFF-VD.
{ 1 2 N }
Input: 代码函数集合 S = s , s ,..., s ;
Output: 漏洞检测结果 D.
Step 1. 代码函数独立结构特征生成
1. for 每一个函数 s in do
S
2. 将函数 s 解析为抽象语法树 G AST , 控制流图 G CFG , 程序依赖图 G PDG .
3. 整合 G AST 、 G CFG 、 G PDG 到一个联合的代码属性图表示 G CPG .
4. end for
5. 训练基于残差门控图神经网络的函数独立结构特征生成模块.
}
{
2
6. 将 G CPG 作为输入生成函数独立结构特征集合 X = x , x ,..., x .
1
N
Step 2. 代码函数间结构特征相似关联图构建
7. 初始化函数间相似关联图 G = (V,E).
8. for 每一个函数特征 x in X do
)
(
j
i
j
i
9. 计算 x 与其他函数特征间的欧氏距离 d x , x =∥ x − x ∥ 2 .
10. 将 x 与距离最近的 top-k 邻居特征链接起来, 构建相似边 e.
V
11. 将 e 加入边集 E, 利用 x 初始化节点 v 并加入节点集 .
12. end for
13. 构建基于注意力机制的关联特征提取网络 Model GAT .
v in G = (V,E) do
14. for 每一个函数节点
15. 计算其与相邻节点的注意力分数 e MX 注意力系数 α MX .
ij ij
16. 更新节点表示.
17. end for
18. 通过漏洞分类损失和自监督图注意力损失训练模型, 提取关联特征.
Step 3. 函数漏洞检测
19. 对关联特征进行分类表示, 输出漏洞概率 D.

