3

我想从stbi 线束中对现有线束进行模糊测试并进行一些小改动。从free(img)if(img) free(img);

用这个命令编译clang -fsanitize=fuzzer,address -ggdb -O0 stbi_read_fuzzer.c -o fuzzer,然后运行./fuzzer corpus -fork=1 -ignore_crashes=1 -dict=jpeg.dict -seed=123

几个小时后,它会产生一些崩溃(全局缓冲区溢出,空闲后堆使用,缓冲区溢出)。但是当我运行所有崩溃文件时它并没有崩溃

aldo@vps:~/stb/tests$ ./fuzzer crash-edab9036233c269e258fe93c2a46d46d5d6e7112
INFO: Running with entropic power schedule (0xFF, 100).
INFO: Seed: 2279336272
INFO: Loaded 1 modules   (2132 inline 8-bit counters): 2132 [0x61b510, 0x61bd64),
INFO: Loaded 1 PC tables (2132 PCs): 2132 [0x5d0258,0x5d8798),
./fuzzer: Running 1 inputs 1 time(s) each.
Running: crash-edab9036233c269e258fe93c2a46d46d5d6e7112
Executed crash-edab9036233c269e258fe93c2a46d46d5d6e7112 in 3 ms
***
*** NOTE: fuzzing was not performed, you have only
***       executed the target code on a fixed set of inputs.
***

为什么没有崩溃?我正在使用来自 apt.llvm.org 的 ubuntu 20.04 和 llvm12

4

1 回答 1

0

老问题,但我有一个类似的问题。

就我而言,我对有状态 API 进行了模糊测试,但忘记在LLVMFuzzerTestOneInput. 因此,之前的调用将 API 设置为无效状态,但它并没有立即崩溃。只有在第二次调用时,API 才会崩溃。

所以我的猜测是,在你的工具中,一些内部状态/全局变量在之前的调用中也发生了变化。尝试重置一切

这是因为 libFuzzer 在进程内运行并且LLVMFuzzerTestOneInput尽可能频繁地调用该函数。该程序不会自行重新初始化。这是记录在案的:

  • fuzzing 引擎将在同一进程中使用不同的输入多次执行 fuzz 目标。
  • 理想情况下,它不应该修改任何全局状态(尽管这并不严格)。
于 2022-02-27T19:20:15.800 回答