问题标签 [libfuzzer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
167 浏览

c++ - clang 的 libFuzzer 可以在同一个二进制文件中测试超过 1 个 API 吗?

libFuzzer 的文档提供了一个如何对 API 进行模糊测试的示例:

我有接受不同 c++ 类型的单个实例的 API。我测试以下方式:

问题是,如果我想测试 10 个 API,我需要创建 10 个单独的二进制文件。我想要一个更类似于一组单元测试的二进制文件。像这样的东西:

这不起作用,因为您不能有重复的LLVMFuzzerTestOneInput.
有没有办法使用 Clang 的 libFuzzer 工具在同一个二进制文件中测试多个 API?

我想我可以创建某种通用函数来分派给所有其他 API,但这是不可取的,因为这样我就需要构建一个实际上是不相关语料库的集合的语料库,并且崩溃结果将混合在各种 API 中。

0 投票
1 回答
1530 浏览

c++ - 为什么 ulimit -v 在 clang 的地址清理程序下不起作用?

我正在使用libFuzzer对 API 进行模糊测试。
API 正在反序列化一个位数组(由 libFuzzer 提供)
并将它们转换为 c++ 类实例化。

由于序列化格式,libFuzer 能够构造一个序列化对象,告诉反序列化器保留大量数据(无法满足)。
这是通过调用来完成的std::vector::resize()。向量抛出 a std::bad_alloc,尽管问题已被捕获并安全缓解,但它会导致模糊器极度滞后(如以下有关 OOM 问题的文档中所述)。

为了降低 fuzzer 运行时使用的内存量,我希望设置ulimit -v和调整进程的可用虚拟内存。然而这样做会导致

为什么地址清理器不能在 ulmit -v 下工作?
我希望它可以,然后我可以更有效地进行模糊测试。

其他信息:
我的构建标志是:

我尝试关闭标志,以便设置ulimit和运行模糊器:

但这会立即导致段错误。

0 投票
2 回答
499 浏览

fuzzing - 用于磁盘解析的 Libfuzzer 目标

我目前正在集成libFuzzer一个解析硬盘驱动器上文件的项目。我在 AFL 方面有过一些经验,其中使用了像这样的命令行:

...@@生成输入的路径在哪里。libFuzzer然而,我看到模糊目标看起来像这样:

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

将缓冲区写回硬盘驱动器以取回文件似乎效率极低。有没有解决的办法?

0 投票
0 回答
382 浏览

go - 使用 libfuzzer 对 Go 应用程序进行模糊测试:错误的覆盖范围

我正在写我的论文,非常感谢对我当前设置的一些输入。我想用 libfuzzer 对目标 Go 应用程序进行模糊测试,因此执行了以下操作:

我写了一个主包,调用go函数进行测试。代码:

主包对于llvm-go实际将应用程序构建为共享库是必需的。我在这里有双重抽象的原因是我希望我的构建管道与 go-fuzz 兼容,它使用“Fuzz”函数名称作为模糊入口点。通过我的设置,我可以简单地包装使用 libfuzzer 所需的代码。

然后我用llvm-go.

现在我有两种方法来检测 Go 共享库:要么动态加载它,要么将它静态链接到我的二进制文件中。我将使用静态链接代码解释我的问题。为此,我编写了一些检测 Go 共享库的 fuzzing 存根。

然后编译它:

现在,当我运行我的代码时,我看到两个问题:

覆盖范围和功能似乎没有增加,并且每次运行时内存需求都会增加。由于另一篇 SO 帖子,我能够通过向模糊器执行添加环境变量来修复内存增加。ASAN_OPTIONS=quarantine_size_mb=20 ./fuzz-target -timeout=12

但是,主要问题可能是实际目标被“埋”在两个抽象级别下:LLVMFuzzerTestOneInput --calls--> 通过 main.go 共享的 Go 库,其中包含导出的 Fuzz 函数(通过 CGo 公开),其中 --calls --> Fuzzing 函数 --calls--> 目标函数。但是请注意,这些函数中的每一个都只是将数据直接移交给下一层而不进行更改。我可以采取哪些步骤来确保它正常工作?难道我做错了什么?

0 投票
1 回答
1823 浏览

c - 如何创建最小的 libfuzzer cmake 示例?

我有一个 libFuzzer 用法的简单示例。

我可以用clang编译它并运行。

现在我想将 cmake 添加到这个示例中。

但我得到一个错误。如何解决?

使 VERBOSE=1 结果

0 投票
1 回答
76 浏览

c - 使用 libfuzzer 在小端环境中对大端代码进行模糊测试

我正在尝试使用 libfuzzer 模糊为大端 MIPS 架构编写的部分代码。

我在 Debian little endian 机器下运行了 libfuzzer,并发出了分段错误。我认为结果不是 100% 值得信赖的。如何将 libfuzzer 与模拟器一起用于大端架构?这可能吗?是否有任何其他技术可以通过使用模糊测试在小端架构中测试大端代码?

0 投票
0 回答
82 浏览

fuzzing - 在 Fuzzing Mosquitto 库中需要一些帮助

在对 Mosquitto lib 进行模糊测试时出现了一个错误,我想知道解决方案。

步骤1。编译库

第2步。编译模糊器

第三步。运行模糊器并得到错误

代码如下

谢谢

0 投票
1 回答
588 浏览

c - 堆缓冲区溢出——这是地址清理程序的误报吗?

我有以下简单的程序

我使用clang(v9)使用地址清理器和模糊器标志编译如下

当我运行生成的可执行文件时,模糊器发现由于无效读取导致堆缓冲区溢出 - 特别是在尝试复制 memcpy 中的第二个字节时。

我无法真正理解为什么这是一个错误。有什么解释吗?先感谢您。

0 投票
1 回答
583 浏览

macos - macOS 上的 libfuzzer 未找到架构 x86_64

我正在尝试在 macOS 10.14.6 和 CLion 2019.2.5 上编译一个简单的模糊测试示例

这也显示在这里https://llvm.org/docs/LibFuzzer.html#toy-example如果已经设置了我的 CMakeLists.txt 一切正常他在此错误发生后链接 CXX 可执行文件

当我通过终端编译时发生同样的错误我尝试使用带有 Ubuntu 18.04 的 Virtualbox - 相同的 Clion 版本和 Cmakelist 没有问题

0 投票
1 回答
314 浏览

clang - 如何使用 libfuzzers 自定义 mutators API?

Libfuzzer 提供了两个 API 来开发自定义 mutator。

这些 API 应该如何使用?模糊器必须是确定性的。如何使用自定义突变器确保这一点?