问题标签 [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 投票
0 回答
332 浏览

c++ - 使用 libfuzzer.a 进行 C++ 模糊测试

我使用 libfuzzer.a 编写我的第一个模糊测试,这是我的代码

但是当我运行这段代码时,我遇到了这个问题,这是怎么回事?

你能帮助我吗?谢谢你

0 投票
1 回答
47 浏览

c++ - 如何在外部对象文件中调用重命名的符号?

我正在尝试使用 LLVM libFuzzer 对一段特定的代码进行模糊测试,该代码仅在main()外部公开其功能。我可以访问目标代码的源代码,但无法更改它。

如果我尝试直接包含目标文件,它会与main. -fsanitize=fuzzer我想我可以通过重命名main目标文件中的符号来解决这个问题:

然后在我的线束代码中,我应该声明:

并调用stub_main()而不是main(),同时包括main.stub在链接线上。但是,这似乎不起作用,并且链接器找不到对stub_main(int, char**).

如何main从另一段也提供自己的代码中调用此函数main()

0 投票
1 回答
85 浏览

fuzzing - 如何让 Libfuzzer 像 AFL 一样不停地运行?

我一直在尝试使用 AFL 和 Libfuzzer 进行模糊测试。我遇到的显着差异之一是,当 AFL 执行时,它会连续运行,除非开发人员手动停止它。

另一方面,Libfuzzer 在识别出错误时停止模糊测试过程。我知道它允许通过jobs=N命令添加并行模糊测试,但是当识别出错误时这些进程仍然停止。

这种行为背后有什么原因吗?

此外,除非开发人员停止模糊测试过程,否则是否有任何命令允许 Libfuzzer 连续运行?

0 投票
1 回答
236 浏览

fuzzing - 是否可以告诉 libfuzzer 忽略某些代码?

我使用 libfuzzer,到目前为止这是很棒的体验。我在 fuzz 下的代码充满了这样的分支:

fmt::printf第三方库 ( http://github.com/fmtlib/fmt ) 的函数在哪里。

我觉得经过几次迭代后,fuzzer 进入了这个函数并有效地开始对其中的所有分支进行模糊测试(比如当它使用DFS而不是BFS时)。

我想向模糊器添加一些障碍或指令,以不将检测插入第三方库,因此我的模糊器将尝试仅覆盖我的代码。

是否可以?

0 投票
0 回答
33 浏览

code-coverage - 如何在 SanitizerCoverage 中/为 SanitizerCoverage 定义自己的警卫以提供 libfuzzer 的覆盖范围

我正在使用 Clion 2020.3.1 和 clang/llvm 版本 10.0.0

我想将 libfuzzer 定向到特定的代码覆盖率。所以我可以定义自己的边缘或决定需要获取哪些代码。现在 libfuzzer 只计算他在模糊测试期间获得的边缘(?)或代码行。

0 投票
1 回答
382 浏览

c++ - 为什么 Windows 上的 libFuzzer 会产生错误:“没有找到有趣的输入”?

大约半年前,我使用 VSCode 设置了一个 CMake 项目,该项目带有一个在 Windows 和 macOS 上运行的 libFuzzer 目标。我将 C++ 扩展与 Microsoft 的 CMakeTools 扩展一起使用。

当我现在再次恢复项目时,我在 fuzzer 运行结束时遇到错误:

ERROR: no interesting inputs were found. Is the code instrumented for coverage? Exiting.

完整输出:

与在 macOS 上运行的相同 fuzzer 相比:

我如何链接 libFuzzer 的片段:(我必须手动将库添加到 Windows 以使其链接。)

测试模糊器:

最小的完整示例: https ://github.com/thomthom/vscode-cmake-libfuzzer

在 Windows 上,我通过可用的快照安装了 clang:https ://llvm.org/builds/

在 macOS 上我通过安装它brew install llvm(因为 AppleClang 不包括 libFuzzer)

我已经在两台 Windows 机器上进行了测试,这两款机器以前都可以很好地运行模糊器,现在它们没有。但我无法弄清楚是什么导致了回归。我知道我没有在这两个系统上更新 Clang。一方面,我还尝试通过 Visual Studio 安装 Clang,并尝试从 VSCode 中选择该安装以查看它是否有任何区别,但无济于事。

我唯一能想到的另一件事是,在 VSCode-Tools 扩展更新了 Windows 的默认生成器后,我的 VSCode CMake 项目需要调整。不记得以前用什么了。如果这会影响 libFuzzer,我仍然觉得很奇怪。

0 投票
1 回答
46 浏览

c++ - libfuzzer 中的单例

在 libfuzzer 中创建的单例是“每次运行一个实例”还是“每次运行一个实例”?

例子:

  • 1 次运行:Size = 10。Singleton() == 10
  • 2 次运行:Size = 20. Singleton() == 20(“每次运行一个实例”)或 Singleton() == 30(“每个运行一个实例”)
0 投票
0 回答
97 浏览

linux - libfuzzer 分段错误(核心转储)

已按照说明使用支持 ASAN 的 libfuzzer 创建模糊器。我将它指向一个语料库,它通常会运行几天,然后我会收到一条消息:

我无法在系统的任何位置找到核心转储文件。

我应用的一些故障排除:

  1. 我已经将真实内存错误编码到我的应用程序中,当作为模糊器运行时,它确实会产生一个崩溃文件。
  2. 我已经运行了其他存在故意内存错误的二进制文件,它们确实在工作目录中生成了核心转储文件。

我的环境是 Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-66-generic x86_64)。编译器是clang++-11。

我在下面的分段错误之前发布了一个输出片段:

有任何想法吗?fuzzer 在操作输入时是否会崩溃?如前所述,没有核心转储文件,所以这里没有什么可做的。

0 投票
1 回答
57 浏览

tcpsocket - 大 s_bytes 值的 boofuzz 问题

我在应用程序中使用 boofuzz 来模糊特定功能。我为我的模糊向量创建的块如下所示:

在我将hashOfPswd的大小更改为 170 之前,我的 fuzzing 代码运行良好(如您所见)。最初它是 50 并且没有问题,但是在查看了我想要模糊的函数之后,这是大小,因此我必须将其设置为 170。当我这样做时,出现以下错误:

这是 boofuzz 库中的一系列异常。我怀疑tcp_socket_connection.py但这有点奇怪,因为通常 tcp 套接字最多允许 1GB 的数据。

有谁知道如何用这种大小的模糊向量创建这样的块并正确运行它?或者也许我应该改变它以便它能够正常运行?先感谢您

0 投票
1 回答
64 浏览

definition - LibFuzzer 中的 PC 和 PC 表是什么

我试图了解代码检测在 LibFuzzer 中的工作原理。从文档中,我了解到我可以使用该选项选择不同类型的仪器-fsanitize-coverage

启动 fuzzer 时,该INFO部分指示使用了哪种仪器(此处为 8 位计数器)

它还提到了加载的 PC 表的数量和总 PC 数。PC但是,我在任何地方都没有找到在这种情况下意味着什么。到目前为止,我的猜测是它的意思是“程序计数器”或“路径覆盖”,但我还没有找到任何来源来确认它。

我的问题是:在使用 LibFuzzer 进行代码检测的情况下,“PC”是什么意思,是否有任何来源可以确认?