Page 204 - 《软件学报》2025年第10期
P. 204

郑炜 等: 基于抽象语法树变异的漏洞样本生成方法                                                        4601


                 是, 针对  CUAF  漏洞得到的演化规律变异算子每次变异都是在所有可执行分支都执行并生成样本. 所以对这类变
                 异算子的高阶变异是没有意义的, 反而会徒增低阶变异样本数量.
                    对每轮变异都使用位置向量来记录每个变异算子执行位置, 其中第                       1  个变异算子执行位置对应向量分量值
                 为  1. 根据第  k 轮变异后更新的权重和公式        (1) 的优化, 将得到变异算子在第        k+1  轮变异构造出漏洞代码切片时的
                 位置向量, 执行    n  轮变异后根据公式     (2) 调整各变异算子执行位置.

                                                          ∑  s
                                                     E x i + =  E k
                                                     
                                                                x i /s
                                                             k=1
                                                     
                                                     
                                                     
                                                          ∑
                                                             f
                                                      E x i − =  E k                                 (2)
                                                                x i / f
                                                     
                                                             k=1
                                                     
                                                     
                                                     
                                                     
                                                     
                                                       R x i  = 
E x i + − E x i −
                 其中,   E x i +  表示  n 轮变异中出现包含漏洞的样本时总样本数量较少的前   轮        s   s (  可自由定义, 但不超过   n 的一半),
                 E x i −  表示  n 轮变异中出现包含漏洞的样本时总样本数量较多的前             f  轮, 根据变异算子权重的大小重新调整变异算
                 子执行顺序, 最终得到变异算子执行效率最高的若干个序列. 根据得到的优化变异序列, 对不包含漏洞的源代码样
                 本进行抽象语法树变异, 可以得到该源码可能触发的本序列对应漏洞代码样本. 变异策略如算法                              2  所示.
                 算法  2. MOPSG  算法.
                 输入: n  个变异算子权重     θ ϑ 0 ,ϑ 1 ,...,ϑ n , 优化执行总轮次  α, 包含出漏洞的轮次  s, 未包含漏洞的轮次      f, 优化接
                                      =
                   χ;
                 口
                 输出: 变异算子执行序列向量集         E i  =   e 1 ,e 2 ,...,e i , 变异算子执行次数上限集合   X i  =  x 1 , x 2 ,..., x i .
                 1. while  θ is not null do
                                  i ∑
                 2.       P n ← ϑ n /  ϑ k
                                 k=1
                 3. end while
                 4. for  i = 1 → α do

                 5.     if is first mutation then
                 6.         for     i = 1 → Total number of mutation operators n do

                 7.                    P i , x i ← 1
                 8.         end for
                 9.     else
                                       n ∑
                 10.              Γ j ←  P k × x k
                                       k=1
                 11.          if     Γ j > Γ j−1


                 12.              for         i = 1 → Total number of mutation operators n do
                 13.                             χ.FunctionTimesUpdate(x i )
                 14.              end for
                 15.          end if
                 16.     end if
                                     n ∑
                 17.     for  m = 1 →  x k  do
                                    k=1
                 18.        Select a mutation operator  ω according to  P 1 ,P 2 ,...,P i
                 19.        Set the  m component of position vector to       − → ω j
                                                              1 ⇒ e (1,0,0,...,0)(m = 1)
                 20.     end for
                 21. end for
   199   200   201   202   203   204   205   206   207   208   209