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.
   215   216   217   218   219   220   221   222   223   224   225