Page 194 - 《软件学报》2025年第10期
P. 194
郑炜 等: 基于抽象语法树变异的漏洞样本生成方法 4591
syntax rules of real vulnerabilities, generate vulnerability samples more in line with the actual situation, and provide a more effective
solution for software security and reliability. This method analyzes the abstract syntax tree structure generated by Eclipse CDT, extracts
the syntactic information in the nodes, reconstructs the nodes and abstract syntax trees, optimizes the abstract syntax tree structure, and
designs a series of mutation operators. Subsequently, it performs mutation operations on the optimized abstract syntax trees. The method
proposed in this paper can generate mutation samples with the characteristics of UAF and CUAF vulnerabilities, which can be used for the
detection of zero-day vulnerabilities and help to improve the detection rate of zero-day vulnerabilities. Experimental results show that this
method reduces the invalid sample size by 34% on average compared with the random variation method in traditional detection methods,
and can generate more complex mutated samples. In addition, this method can generate more complex mutated samples, enhancing the
coverage and accuracy of detection.
Key words: abstract syntax tree (AST); zero-day vulnerability; variation operator; vulnerable sample generation
在当今不断发展壮大的信息化社会中, 软件行业作为信息技术的核心, 在国民经济和社会发展方面发挥着重
要的推动作用 [1] . 随着信息企业的迅猛发展, 海量的软件产品不断涌现, 为人们带来了巨大的效益. 但即使是最高
质量的软件也可能存在错误, 这可能导致软件失效. 在网络安全领域, 零日漏洞的检测尤为重要. 因此, 在软件开发
和使用过程中, 必须高度重视软件的安全性和稳定性, 加强软件漏洞的检测和修复工作, 以确保网络安全和国家安
全. 本文中所提到的零日漏洞特指未在各大漏洞网站或平台公开披露的漏洞, 由于它们没有公开补丁的安全漏洞,
因此具有更强的突发性与更大的破坏性. 目前基于网络的应用系统更多地采用了分布式、集群和可扩展架构, 使
得软件的内部结构错综复杂. 零日漏洞的增长同软件复杂性、软件架构的演化呈现正相关关系.
软件漏洞是程序中的错误或缺陷, 而零日漏洞是在公开发现前已被恶意利用的未知漏洞. 当前软件漏洞的静
态检测方式只能依据已知的漏洞类型进行重复性和被动性检测, 无法对架构演化导致的零日漏洞进行检测. 而以
模糊测试为代表的动态检测方式近年来在发现零日漏洞方面取得了较大成功, 但其执行阶段性能开销较大且非常
耗时, 无法对零日漏洞做出及时检测. 为了解决上述传统检测方式所存在的问题, 本文特别关注 UAF (use after free)
和 CUAF (concurrent use after free) 这两种漏洞, 提出基于抽象语法树变异的漏洞样本生成技术. UAF 和 CUAF 类
型零日漏洞由于其难以检测和高危性质, 对软件系统安全构成严重威胁. 基于抽象语法树变异的漏洞样本生成方
法首先通过对 Eclipse CDT 生成源漏洞代码抽象语法树节点结构的分析, 提取节点中的语法信息来重构节点和抽
象语法树, 实现对抽象语法树结构的优化. 接着, 在谓词逻辑和统计分析的理论基础上分析软件漏洞演化规律, 得
到一系列变异算子. 根据变异算子的变异规则在优化后的抽象语法树上实现变异操作. 最后使用本文提出的 MOPSG
(mutation operators perform sequence generation) 算法对变异算子序列进行优化生成变异策略, 对源漏洞代码在抽
象语法树层面执行变异策略, 最终得到蕴含漏洞的变异样本. 经过正则过滤和有效性确认后得到的有效变异样本
可用于观察测试用例在固定类型漏洞上的有效性, 了解其效果和不足, 间接提高用例在检测此类漏洞时的能力. 整
个路线的技术框架如图 1 所示, 该路线从漏洞演化特征和漏洞样本数据出发, 提出了针对具备 UAF 和 CUAF 类
型零日漏洞特征的代码的静态模糊变异方法.
为了验证基于抽象语法树变异的漏洞样本生成技术得到的变异样本的有效性, 本文以多线程程序下数据竞争
引发的一类安全漏洞展开. 首先对含有漏洞多线程程序进行漏洞特征语句插入处理, 推断数据竞争引发的 CUAF
漏洞模式对应的最优变异算子执行序列, 有效降低变异算子次序带来的无效样本数量. 然后筛选 Linux 内核公开
代码中规模合适的且在时间线中含有 CUAF 漏洞的代码片段, 通过抽象语法树变异复现这些代码片段在时间线
上触发该类型漏洞的过程, 通过与传统检测方法中的随机变异算子执行过程做横向对比, 传统检测方法由于难以
发现尚未公开披露的零日漏洞, 往往效果不佳. 本文方法可以生成包含漏洞特征的变异样本, 作为零日漏洞检测的
输入, 从而提高零日漏洞的检测率.
本文第 1 节介绍目前软件漏洞检测和变异测试的相关研究工作. 第 2 节介绍本文的研究内容. 第 3 节介绍基
于抽象语法树变异的漏洞样本生成方法的具体实现. 第 4 节通过实验来证明本文提出方法的有效性. 最后总结
全文.

