TL;DR

コードのどの部分が実行されたかを監視し、新しい動作や条件(コードパス)を見つけるように入力データをランダムに変化させながら、試行を繰り返すテスト。ファズテストを効率よく行う方法である。

仕組み

libFuzzer の場合、テスト対象のコードを LLVM の SanitizerCoverage で計装し、実行時のカバレッジを取る。最初に与えたサンプル(コーパス)の入力を変化させ、新しいコードを通った入力をコーパスに加えていく。これを繰り返すことで、まだ試していない経路を優先して探索できる。

例

以前は American fuzzy lop(AFL)が主流だった。近年は、LLVM のツールチェーンに追加された libFuzzer もよく使われる。

関連

出典