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

4608                                                      软件学报  2025  年第  36  卷第  10  期


                 突变的时间). 即使我们从中排除了在作为基线的随机突变方法中超过时间的片段, 平均时间也超过了                                4.6 h. 然而,
                 不能直接就执行时间来衡量这种方法与基线的效率, 因为其算法中涉及的突变操作符的优化本身就消耗了一定的
                 时间.
                    表  4  展示了  Linux  内核实际代码切片经过部分子树截断算法与不经过该算法直接变异的对比结果. 由于内核
                 实际代码跨度较长, 在做代码片段切分时, 可能会有部分对                  free 操作进行调用的函数或语句被排除. 值得一提的
                 是, 我们依然保留了变异样本阈值为           100  万以强行终止其核对过程这一机制. 我们根据每段代码切片中是否包含
                 完整的   free 操作流程进行分类. 表中数据可以展示部分子树截断算法在针对                    CUAF  漏洞演化过程中对      free 操作
                 的截断是有明显成效的. 在包含完整的             free  操作流的切片中, 经过部分子树截断启发式算法的变异平均会减少
                 33.1%  无效样本. 在对缺失部分      free 操作的代码切片进行对比实验时, 是否启用部分子树截断算法对降低无效样
                 本量的提升幅度较小, 但是平均也有           9.5%  的提升.

                                             表 4 Linux  内核代码两种变异结果对比

                              Component          Contains free      No execute       Execute
                                 usb              Contains           524 287         292 143
                                 btrfs            Contains           211 423         136 927
                                btrfs1            Contains           65 535           32 767
                                mlxsw             Contains           23 427           21 332
                               netdevsim          Contains           948 575         700 786
                               X86resctrl         Contains           16 383           14 335
                                usbnet            Contains           262 143         150 174
                               smackfs            Contains           131 071          98 303
                                rpmsg             Contains           154 306         116 356
                               isdnhisax       Not fully contains    15 269           14 644
                                 net           Not fully contains    32 767           34 180
                               netsocket       Not fully contains    15 981           14 802
                                 ruc           Not fully contains    262 016         206 278
                                cw1200         Not fully contains    445 790         423 514
                                 Ip4           Not fully contains    32 767           34 478

                    在目前的漏洞代码生成研究中, Nong          等人  [40] 提出了一种基于神经网络的代码编辑技术, 可以生成逼真的漏洞
                 代码. 首先通过分析现有的漏洞数据集, 发现漏洞代码具有一些常见的结构模式, 例如条件语句、循环语句等. 作
                 者使用神经网络对这些结构模式进行建模, 并提出了一种代码编辑器, 可以在保留代码语法正确性的同时, 改变代
                 码的结构和行为, 但是生成新的漏洞代码数量较少, 且只关注了特定的漏洞类型. Nong                        等人  [41] 还提出了一个新的
                 漏洞生成方法, 该方法可以利用现有的漏洞数据库来学习漏洞的模式, 并生成与这些模式相似的漏洞. 该方法使用
                 了深度学习模型来对漏洞模式进行建模, 并使用生成模型来生成新的漏洞, 这些漏洞具有与真实漏洞相似的特征
                 和语法结构. 但是该方法依赖于已知的漏洞数据库, 因此对于那些没有被记录在数据库中的新型漏洞, 该方法可能
                 无法生成相应的漏洞.
                    通过上述实验数据对比分析, 在进行小规模的实际代码进行变异后, 本文提出基于抽象语法树变异的漏洞样
                 本生成技术, 非常有效地改善了变异算子特征不明显、执行随机性过强和变异样本高耦合性等问题, 且不过分依
                 赖漏洞数据库. 本文对根据        CUAF  演化规律总结的变异算子和变异测试中针对多线程代码的变异算子进行了处
                 理. 通过获取的变异算子权重执行各个算子, 在              Linux  内核的多段针对    CUAF  修改的代码上进行变异执行都取得
                 了不错的拟合效果. 相较于变异测试中对代码的随机变异过程, 本方法更容易构造出接近真实漏洞的变异样本, 并
                 且相对代价更低.
                  3.2.4    不足与有效性讨论
                    下面讨论本文方法在        3  个方面有效性上的可改进点.
                    外部有效性主要涉及研究发现的普遍性问题. 本研究集中于                    Linux  内核代码的静态模糊变异和相关的公开漏
                 洞数据集. 但不同的编程语言有其特有的漏洞家族和演变模式, 因此本研究的结论可能不适用于其他编程语言,
   206   207   208   209   210   211   212   213   214   215   216