- 确保目标程序可以被 AFL-fuzz 探测到。一般来说,AFL-fuzz 只能探测到一些特定类型的程序,例如 ELF 程序或者缺陷程序。如果你想在工具上运行其他类型的程序,需要使用 QEMU 进行模拟。例如,如下命令可以使用 QEMU 运行 Mac 上的应用程序:
$ afl-fuzz -i input_dir -o output_dir -- /usr/local/bin/qemu-system-x86_64 -vga none -nographic -fda test.img -m 100M -hda /dev/sda -hdb /dev/sdb -net none -kernel-kqemu -append "root=/dev/sda1 console=ttyS0"
- 确认目标程序中存在可以导致崩溃的漏洞。通常情况下,AFL-fuzz 需要某些特定的执行路径才能发现崩溃漏洞。因此,如果没有发现任何崩溃,可以重新审查你的代码,确认是否存在可以导致异常情况的程序路径。例如,在以下代码中,当输入大于 32 时,会导致程序崩溃:
#include
#include
void foo(char *data) {
char buffer[32];
strncpy(buffer, data, sizeof(buffer) - 1);
buffer[sizeof(buffer) - 1] = '\0';
printf("%s\n", buffer);
}
int main(int argc, char **argv) {
char *data = argv[1];
foo(data);
return 0;
}
- 确认你的测试集是否充分,是否包含足够多的正确和恶意数据。通常情况下,测试集应该充分覆盖可能的输入路径,并尽可能完整地