使用DeepState和Eclipser进行模糊单元测试:高效漏洞挖掘新方案

本文介绍了如何将新型模糊测试工具Eclipser集成到DeepState测试框架中,该工具通过轻量级近似路径约束技术,在不依赖昂贵求解器的情况下实现接近符号执行的覆盖率,在多个基准测试中超越AFLFast等传统工具。

模糊测试与符号执行的创新结合

Eclipser作为ICSE 2019最新提出的模糊测试工具,现已深度集成至DeepState测试框架。该工具通过以下技术突破实现了白盒与灰盒测试的优势融合:

  • 采用近似路径约束替代传统符号执行的精确约束
  • 完全避免调用SMT/SAT求解器
  • 通过轻量级插桩实现线性/单调性约束的快速求解
  • 对复杂约束自动降级为模糊测试策略

核心技术优势

近似约束求解机制

  1. 路径约束简化:将传统符号执行中的复杂约束转换为两类易处理条件:

    • 简单线性约束(使用低成本算法求解)
    • 单调性约束(采用二分搜索替代求解器)
  2. 失败回退机制:当遇到非线性/非单调约束时,自动切换至模糊测试模式继续探索

性能基准对比

测试项目 比较对象 Eclipser优势表现
coreutils KLEE 代码覆盖率提升18%
LAVA-M基准 AFLFast/Steelix等 多发现37%的漏洞
Debian软件包 AFLFast/LAF-intel 发现8个全新CVE漏洞

DeepState集成实践

典型测试用例

1
2
3
4
5
TEST(FromEclipser, CrashIt) {
   char *buf = (char*)DeepState_Malloc(9);
   buf[8] = 0;
   vulnfunc(*((int32_t*) &buf[0]), &buf[4]);
}

使用流程

  1. 构建Docker测试环境:
1
docker build -t deepstate . -f docker/Dockerfile
  1. 执行Eclipser测试(30秒内即可发现崩溃输入):
1
deepstate-eclipser ./FromEclipser --timeout 30

竞品测试对比

测试工具 测试时长 输入生成量 结果
AFL 4小时 数千万次 未触发崩溃
libFuzzer 4小时 数亿次 未触发崩溃
Eclipser <30秒 数百次 成功触发崩溃

技术生态定位

  1. 互补性验证

    • 在ext3文件系统测试中优于libFuzzer
    • 在红黑树测试中需要特定符号执行策略
    • 与Angora的污点分析技术形成互补
  2. 多工具协同

1
2
3
4
5
graph LR
    A[DeepState框架] --> B(Eclipser)
    A --> C(AFL)
    A --> D(libFuzzer)
    A --> E(符号执行工具)

未来发展方向

  1. 自动化集成测试模式开发
  2. 支持更多新型模糊测试工具接入
  3. 基于多核的并行化测试方案

实验数据表明:在真实项目测试中,不同模糊测试工具各有优势场景,保持工具多样性仍是获得最佳测试效果的关键策略。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计