Abstract
背景:
传统fuzzer:难以抓住keywords等信息
Constraints-based test generation: 根据path上的conditions来拓展uncovered code,但是存在条件过于复杂会导致path explosion的问题
本文-一个基于input parser的test generation方法
基本步骤:
- 为parsers生成简单的inputs
- 监控这些inputs,确认路径上的comparisons
- 在每次rejection之后都试图变异inputs从而满足最后的那个comparison
实验:
对象:5个subjects,包括csv和javascript
效果:
- 无需符号分析
- 能够覆盖比传统方法(random/constraints-based)更多的tokens,同时需要的测试数目更少
1. Intro
本文认为含有parser的程序:
- 顺序地处理inputs elements(字符)
- 将这些字符和潜在的valid values进行对比
- 只会有接收和拒绝两种行为
为此,本文认为能够用dynamic tainting技术来追踪input chars的comparisons
此外, 本文观察到parsers一般一次只依赖于有限个chars,这使得本文能够采取只集中注意力在找到使得当前parser向前进入另一个合法状态的下一个字符,而非直接取处理整个input这样的策略