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

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



                 1. while T  .node is not null do
                 2.     if  Node.id = CASTFunctionCallExpression and Node.valuecontainsfree then
                 3.             freeNodeList.add(Node)
                 4.     end if
                 5. end while
                 6. if   freeNodeList is null then
                 7.       t i ← T.mutationOperator; T'  ← t i
                 8.    return T'
                 9. else
                 10.       t i ← T.mutationOperator
                 11.     if  t i is not contains freeNodeList.nodes then
                 12.       currentMutation.End
                 13.       T'    ← t i
                 14.       return T'
                 15.     end if
                 16. end if

                    例如, UAF  和  CUAF  漏洞是在错误的时机对已经释放的内存进行了访问. 漏洞代码中可以看出                       free 操作是该
                 漏洞的重要特征之一, 但并不是所有的            UAF  漏洞代码都包含      free, 可以作为一个参考. 在抽象语法树层面执行变
                 异算子序列变异之前, 会将源代码转化为抽象语法树, 在算法                   3  中, 遍历抽象语法树寻找      free 操作, 如果存在  free
                 操作, 那么在每一次执行抽象语法树变异之前都去遍历寻找包含                     free 的子树. 如果一个变体在变异过程中丢失了
                 free 关键字所对应分支, 就把接下来的对变异体的变异停止.
                  3   实验分析

                    所有实验都在一个服务器上进行, 该服务器配备有                Intel(R) Xeon(R) Silver 4 110 CPU  和  64 GB RAM.
                  3.1   变异算子序列优化实验
                  3.1.1    实验数据
                    部分是用于优化变异算子序列, 推断演化路径的数据, 该数据来源于                         CVE (common vulnerabilities &
                 exposures) 开源漏洞库中与   UAF  相关的  30  段代码切片. 本文根据切片跨度、对漏洞特征植入的便捷性和                  UAF  代
                 码  use 与  free 形成的相关性等方面筛选了      10  段进行后续操作, 最终本文基于机器处理大数据量的时间和存储效
                 率的考虑, 选择了     5  段切片进行漏洞植入. 筛选过程如表          2  所示. 值得强调的是, 该筛选过程的最终评价指标是综
                 合  3  个特征后选择的性价比最高的代码切片, 因为它们可以在尽可能少的代码语句中跨函数植入更多的                                CUAF
                 漏洞特征. 这也正是漏洞形成的一大原因, 即由于改进代码性能                    (将单线程代码改为多线程) 时误触发的漏洞. 这
                 样含有大量    CUAF  漏洞特征语句的      UAF  漏洞代码切片一旦实现多线程化, 有极大风险会直接触发                   CUAF  漏洞,
                 但是漏洞是否会对程序本身造成危害是待定的.

                                                    表 2 CVE  代码切片

                              代码切片序号           切片跨度 (行)        漏洞特征植入数量            use与free关系
                             CVE-2018-21008        43                4               多函数
                             CVE-2019-15917        16                3               单函数
                             CVE-2019-20934        31                3               多函数
                             CVE-2020-27835        32                4               单函数
                             CVE-2021-33034        33                3               多函数
   201   202   203   204   205   206   207   208   209   210   211