用于磁盘分析的Libfuzzer目标



我目前正在将libFuzzer集成到一个解析硬盘上文件的项目中。我之前在AFL有一些经验,在那里使用了像这样的命令行:

afl-fuzz -m500 -i input/ -o output/ -t100 -- program_to_fuzz @@

其中CCD_ 2是到所生成的输入的路径。然而,看看libFuzzer,我看到模糊目标看起来是这样的:

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
DoSomethingInterestingWithMyAPI(Data, Size);
return 0;  // Non-zero return values are reserved for future use.
}

我知道输入不是以文件的形式提供的,而是作为内存中的缓冲区。问题是,我试图模糊化的程序处理文件,并通过fread()调用获取其数据。在任何时候都不应该将整个输入加载到内存中(在一般情况下,它甚至可能不适合(;所以我对const uint8_t*没什么可做的。

将缓冲区写回硬盘以获取文件似乎效率极低。有办法绕过这个吗?

您可以在谷歌安全团队中执行本例中的操作。此处定义的buf_to_file获取缓冲区并返回一个char*路径名,然后可以将其传递给目标:
(来自https://github.com/google/security-research-pocs/blob/master/autofuzz/fuzz_utils.h#L27(

// Write the data provided in buf to a new temporary file. This function is  
// meant to be called by LLVMFuzzerTestOneInput() for fuzz targets that only  
// take file names (and not data) as input.  
//  
// Return the path of the newly created file or NULL on error. The caller should  
// eventually free the returned buffer (see delete_file).   
extern "C" char *buf_to_file(const uint8_t *buf, size_t size);

请确保使用delete_file函数释放资源。

您可以使用LD_PRELOAD并覆盖fread。

相关内容

  • 没有找到相关文章

最新更新