Page 219 - 《软件学报》2025年第7期
P. 219

3140                                                       软件学报  2025  年第  36  卷第  7  期


                    (1) 函数间结构特征相似关联图构建
                                                                                                       }
                                                                                              {
                    在第  3.1 节中, CSFF-VD  为每个函数生成了独立结构特征         x ∈ R , 所有函数共同构成特征集合       X = x , x ,..., x .
                                                                                                  2
                                                                                                      N
                                                                    d
                                                                                               1
                                x 之间的相似性距离构建函数之间链接, 从而识别具有相似特征的漏洞以及在不同函数之间发
                 根据独立结构特征
                 现差异. 如图   3  所示, 我们将每个函数视作相似关联图中的节点, 迭代时将每个节点视作质心, 并计算其与其他节
                                 (  i  j )  i  j
                 点之间的欧氏距离       d x , x =∥ x − x ∥ 2  来确定每个节点特征最相似的   K  个邻居节点. 然后将每个节点与其          K  个邻
                 居节点使用单向边链接起来, 构成函数间的相似关联图                  G = (V,E), 其中  V  表示节点集合,  E  表示边集合. 本部分在
                 训练时, 需读取数据集中训练集样本的函数结构特征表示作为相似关联图中的其他节点. 在对训练集样本进行检
                 测时需要再次将待测样本读入, 此时由于待测样本已在前一步骤被读入, 训练时需将                           K  设置为  K +1 (待测样本被
                 重复读入时最近邻为其本身). 本部分在验证和测试时, 步骤与训练时相似, 需先读取训练集样本作为相似关联图
                 的其他节点, 但由于验证集与测试集不存在被重复读入的情况,                   K  保持不变.
                    (2) 函数间关联特征提取
                    在依赖函数间的相似性来构建关联图的同时, 也引入了不必要的噪音关联. 因此, 准确计算函数之间关联重要
                 性是挖掘函数间信息的关键. 我们构建了一个基于图注意力网络的提取模块来挖掘函数间的关联特征, 我们结合
                 传统图注意力网络的原始         (GAT’s original, GO) 注意力分数计算方式和点乘      (dot product, DP) 注意力分数计算方
                                                                                                    j
                                                                                                i
                                                   j
                 式来提升模型的表现. 在计算函数           i 和函数   之间的关联重要性时, 首先应用线性变换矩阵              W  对节点   x  和  x  的特
                                   j
                 征进行转换,      i  Wx  分别计算   GO           e GO  和  DP      e .
                                                                         DP
                           Wx  和              注意力分数     i j    注意力分数     i j
                                                           [       ]
                                                              i
                                                          T
                                                     e GO  = a Wx ∥ Wx  j                             (4)
                                                      ij

                                                               (   )
                                                             i T
                                                     e DP  = (Wx ) · Wx  j                            (5)
                                                      ij
                 其中,  a 是可学习的权重向量, 符号   表示向量拼接操作. 随后, 我们将这两个注意力分数进行融合, 得到融合注意
                                            ∥
                                 (  )                               1
                 力系数:  e MX  = e GO  ·σ e DP  ,  σ 为  Sigmoid  函数, 定义为  σ(x) =  1+exp(−x)  , 最后通过  Softmax 函数对注意力系数进
                                  ij
                        i j
                             ij
                                     j
                 行处理, 得到函数     i 和函数   之间的注意力系数归一化表示:

                                                              (   )
                                                            exp e MX
                                                                i j
                                                    α MX  = ∑    (  )                                 (6)
                                                     i j
                                                              exp e MX
                                                           k∈N(i)  ik
                    我们使用计算得到的注意力系数对函数节点进行更新, 节点的更新过程可以表示为:

                                                                     )
                                                        (∑
                                                    i ∗
                                                    x = ρ      α MX Wx j                              (7)
                                                                i j
                                                            j∈N(i)
                                                           i
                 其中,  ρ(·) 是非线性激活函数     ReLU j ∈ N (i) 表示节点   的邻居节点的集合. 为了进一步提炼节点表示, CSFF-VD
                                            ,
                 还通过关联图自监督损失进一步对模型进行优化. 具体来说, 我们计算函数                           i    和函数   之间的边缘存在概率
                                                                                      j
                          (  )
                 ϕ i j,MX,DP = σ e DP  , 通过使用边缘预测的二分类交叉熵损失函数     L E  来减少无关边缘带来的噪音影响:
                           ij
                                               1   ∑       (               (    ))
                                        L E = −            I ( j,i)=1 logϕ ij +I ( j,i)=0 log 1−ϕ ij  (8)
                                                  −
                                             |E ∪ E |  ( j,i)∈E∪E −
                 其中,  E  是真实存在的边集合,     E  表示通过负采样策略生成的不存在的负样本边集合,                  |E ∪ E | 表示正负边的总数
                                                                                        −
                                          −
                 集合,   I ( j,i)=1 or 0  为指示函数, 当  ( j,i) 为真实边或负样本边存在时取值为 1, 否则取值为 0.
                    通过以上步骤, CSFF-VD     构建了一个函数间关联特征提取网络, 能够有效地挖掘函数间的关联信息, 提升模
                 型在检测相似漏洞和发现函数差异方面的性能. 这种方法不仅利用了函数自身的结构信息, 还充分利用了函数之
                 间的相似性和关联性, 为漏洞检测提供了更加全面和精确的特征表示.

                 3.3   漏洞检测
                    CSFF-VD  框架的主要目标是确定某个函数是否存在漏洞, 最终输出是函数存在漏洞的概率, 构成标准的二元
                                                            L V  测量模型预测概率与实际标签之间的差异指导              CSFF-
                 分类任务. 在模型训练阶段, 我们使用交叉熵损失函数
                 VD    的优化. 具体来说, 交叉熵损失函数      L V  定义为:
   214   215   216   217   218   219   220   221   222   223   224