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

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


                  3.1.3    变异算子序列优化实验结果分析
                    对第  3.1.1  节中  5  个代码切片进行  20  轮调整性质的变异, 并定位目标样本的位置, 用无效样本和总样本的比
                 值来表示每轮变异的效率, 显然在尽可能少地生成无效样本情况下变异出                         CUAF  漏洞代码切片会使该比值降低,
                 即比值越小效率越高. 在图        9  中展示了这   20  轮的比值结果, 该迭代过程平均需要         4.8 h.

                                                                   CVE-2018-21008
                                                                   CVE-2019-20934
                                                                   CVE-2019-15917
                                             0.6                   CVE-2020-27835
                                                                   CVE-2021-33034
                                            无效样本占比  0.4





                                             0.2


                                                0      5     10     15     20
                                                            变异轮次
                                             图 9 变异算子权重计算的变异效率趋势

                    图  9  中的横坐标为变异轮次, 纵坐标为目标样本出现时无效样本的占比. 本文在对变异算子序列进行权重计
                 算过程与后续横向对比实验过程所涉及的无效样本占比都是指首次出现目标漏洞切片时生成的无效样本比例. 该
                 目标样本并不是所有变异样本中唯一一个漏洞切片, 而根据模糊测试与变异测试的经验与相关基于覆盖技术的模
                 糊测试输入优化可以认为, 当找到一个出现漏洞的样本时, 基于此变异算子执行次序的变异方法大概率会触发更
                 多漏洞, 那么尽快地找到某一段变异样本对应的变异算子执行次序就是衡量变异效率的一个重要指标.
                    从图  9  中很容易观察到随着      MOPSG  算法对变异算子执行频率的改进, 变异的效率从最开始全随机执行平均
                 提高了   33%. 根据分析, 出现的某些波动主要因为某些变异样本对应的目标漏洞代码切片含有的漏洞类型较少. 这
                 造成一部分变异算子的执行可以直接演化出结果, 但是其他变异算子的执行会使其权重大幅降低. 比如                                CVE-2021-
                 33034  切片在进行第   7–9  轮时, 因变异算子    AM  执行权重增大而被优先执行, 而此段漏洞本身是因互斥锁语句而
                 触发, 所以对此算子进行变异只会徒增无效样本, 并且增加后续高阶无效样本的数量. 显然, 当对多段代码进行多
                 轮次的调整后, 会得到总体上最优的变异算子权重序列, 即最佳的一些变异算子执行序列. 每个变异轮次得到的变
                 异算子权重情况如表       3  呈现.

                                                   表 3 变异算子权重变化

                           轮次      AS    AM      RJ    LTGV    LCR    ROR    SD     SPS   AOR
                             1     1.00  1.00   1.00   1.00    1.00   1.00   1.00   1.00   1.00
                             2     0.92  1.50   1.08   1.18    1.02   0.90   0.92   0.95   0.89
                             3     0.95  1.98   1.05   1.26    0.90   0.79   1.01   1.00   0.80
                             4     1.05  2.40   0.98   1.34    0.81   0.80   1.15   1.12   0.72
                             5     1.24  2.75   1.11   1.50    0.75   0.72   1.26   1.10   0.67
                             6     1.30  3.10   1.15   1.61    0.60   0.65   1.43   1.21   0.54
                             7     1.46  3.34   1.20   1.78    0.52   0.51   1.55   1.25   0.49
                             8     1.60  3.51   1.21   1.85    0.43   0.46   1.61   1.26   0.45
                             9     1.65  3.69   1.19   1.93    0.40   0.43   1.65   1.31   0.39
                            10     1.71  3.80   1.19   2.02    0.35   0.41   1.70   1.35   0.35

                    前文提到过     5  类多线程演化规律变异算子中例如           AT  算子重复执行的意义不大, 并且一部分变异算子本身就
                 会以排列组合的方式针对所有分支进行剪裁, 因此多次执行同一变异算子反而会增加无效样本数量. 根据熟练程
                 序员假设   (CPH) 和耦合效应假设的部分推论, 我们认为只有当实际代码规模较大时, 才需要涉及同一算子的高阶
   203   204   205   206   207   208   209   210   211   212   213