Page 195 - 《软件学报》2025年第10期
P. 195
4592 软件学报 2025 年第 36 卷第 10 期
输入 输出
人工有效检查
系统处理过程
测试用例
变异算子 漏洞代码 有效样
本集合 特征 X
特征 X 测试用例 特征 X
有效性检验
执行静态
具有某种 模糊变异 具有同样
漏洞特征 漏洞特征
的样本 特征 X +变异策略 正则过滤 的有效样
优化
谓词公式 AST 本集合
图 1 基于抽象语法树变异的漏洞样本生成方法流程图
1 相关研究工作
1.1 传统软件漏洞检测方法
模糊测试是当前较为成熟的软件漏洞检测方法. You 等人 [2] 提出一种实时输入类型探索方法, 通过轻量级随
机模糊探测算法引导变异种子的演化, 以尽可能发现软件系统潜在的漏洞. Wen 等人 [3] 针对内存相关漏洞, 提出内
存引导的模糊测试技术 MemLock, 以生成过多的内存消耗输入并触发不受控制的内存消耗错误. Wang 等人 [4] 针
对 UAF 漏洞, 提出漏洞状态导向的模糊测试工具 UAFL, 通过执行静态 typestate 分析以查找可能违反该属性的操
作序列, 然后, 模糊处理过程以操作序列为指导, 逐步生成触发属性违规的测试用例. Gan 等人 [5] 提出一种覆盖率
敏感的模糊解决方案 CollAFL, 通过提供更准确的覆盖信息来减轻路径冲突, 同时仍保持较低的插桩开销, 其原型
实现基于广泛使用的模糊工具 AFL. Li 等人 [6] 提出模糊测试方法 Cerebro, 其基于在线多目标算法平衡各种指标
(例如代码复杂度、覆盖率) 的模糊种子选择方法, 通过度量未覆盖代码的复杂度, 从而设计出动态更新算法. 总
之, 模糊测试实现简单, 具有高度可扩展性, 是一种广泛应用的软件漏洞检测方法, 多种研究已经针对不同的目标
和场景提出了各种模糊测试技术, 如实时输入类型探索、内存引导的模糊测试技术等. 尽管模糊测试在某些场景
下表现出色, 但它仍然存在一些局限性. 首先, 为了获得有效的结果, 它需要大量的测试输入, 这导致了巨大的性能
开销和长时间的测试周期. 其次, 模糊测试对专业知识的依赖强烈, 增加了人工成本. 最后, 它在及时应对零日漏洞
方面存在困难.
符号执行是一种利用中间语言进行漏洞检测的技术, 它结合了符号执行和约束求解的思想. Liang 等人 [7] 提出
了一些基于 LLVM 中间表征的静态分析工具, 这些工具可以使用符号执行和 Z3 SMT 解释器来发现软件中的一
些缺陷, 如除零错误、指针溢出和死代码等. 同时, Cassez 等人 [8] 提出了一种能够进行静态检测工具, 能检测程序
中的一些特定错误块是否能够被访问到. 此外, Thome 等人 [9] 还提出了一种基于搜索驱动的约束求解技术, 通过混
合约束求解和蚁群优化元启发式算法来解决现有字符串求解器的不足. 沈维军等人 [10] 提出了一种基于动静态相
结合的程序分析和符号执行技术, 它通过提取数值变量的符号式、进行静态攻击流程分析和高精度动态攻击验证
来检测和分析软件中可能存在的数值稳定性相关的安全漏洞. 总之, 基于符号执行的漏洞检测方法能够生成触发
漏洞的具体输入, 随后利用符号执行工具生成的输入验证并分析漏洞, 从而发现除零错误、指针溢出等缺陷. 然
而, 符号执行在处理大型程序时效率低下, 且常因路径爆炸问题难以覆盖所有执行路径.

