Reading Papers - Fuzzing Overview
# Fuzzing Taxonomy
# Mutation-Based / Generation-Based
根据输入的生成方式,可以将 fuzzing 分为两类:
mutation-based fuzzing 需要从被测程序的一组已知输入(称为 input seed)开始,对这些输入进行 mutate 以生成新的输入,这需要回答 where to mutate 和 what value to use 两个问题。
generation-based fuzzing TBD.
# Coverage-Based / Directed
根据测试的目标或者说策略,可以将 fuzzing 分为两类:
coverage-based fuzzing 旨在生成输入以尽可能提高对被测程序的探索度,例如代码覆盖率或路径覆盖率。
- ?由于覆盖所有的路径是不可能的,此类方法一般会尽可能地探索某些感兴趣的区域,例如优先关照探索次数少的基本块,等等。
directed fuzzing 旨在生成输入以探索被测程序中的一些指定目标,例如到达一组特定的程序点,或探索一组特定的执行路径。
# White-Box / Grey-Box / Black-Box
根据被测程序的可访问性,可以将 mutation-based fuzzing 分为三类:
white-box fuzzing 需要被测程序的源码,在 source-level 或编译的 IR-level 执行高级的程序分析。
grey-box fuzzing 需要被测程序的二进制代码,在 binary-level 采取轻量级的程序分析或监控。
black-box fuzzing 假设我们对被测程序的内部一无所知,将其视为完全的黑盒。