AutoHarness基于库自动创建模糊测试的工具

联合创作 · 2023-10-01 16:40

AutoHarness 是一种自动为您生成模糊测试的工具。这个想法源于当今模糊代码库中的一个并发问题:大型代码库具有数以千计的函数和代码片段,可以相当深地嵌入到库中。智能模糊器很难甚至有时甚至不可能到达该代码路径。即使对于像 oss-fuzz 这样的大型模糊测试项目,仍然有部分代码库没有包含在模糊测试中。因此,该程序试图以某种方式缓解这个问题,并提供一种工具,安全研究人员可以使用它来初步测试代码库。该程序仅支持用 C 和 C++ 编码的代码库。

设置

该程序使用 llvm 和 clang 作为 libfuzzer,Codeql 用于查找函数,以及 python 作为通用程序。该程序在 Ubuntu 20.04 上使用 llvm 12 和 python 3 进行了测试。这是初始设置。

sudo apt-get update;
sudo apt-get install python3 python3-pip llvm-12* clang-12 git;
pip3 install pandas lief subprocess os argparse ast;

计划功能(按进度排序)

结构模糊测试

当前在程序中实现的对具有多个参数的函数进行模糊测试的方法是使用模糊数据提供程序。这种集成有一些改进;但是,我相信我可以将此功能与数据结构结合起来。我在编码时遇到的一个问题是 codeql 和嵌套结构。如果不编写针对每个函数而变化的多个查询,这会变得特别困难。总之,这个功能需要更多的工作。我也在考虑使用 protobufs 的简单解决方案。

基于实现的线束创建

使用 codeql,可以用来生成控制流图,映射函数中的参数是如何初始化的。使用这些信息,我们可以创建更好的线束。另一种方法是查找库中存在的函数的实现,并使用该信息对该函数作为线束的实现进行有根据的猜测。我目前遇到的问题是使用 codeql 生成控制流图。

并行模糊测试/误报检测

我可以创建一个简单的程序来运行所有的线束并使用 ASAN 检测任何常见的误报。此外,我可以创建一个新界面,一次运行所有线束并显示它们的统计数据。

 

浏览 5
点赞
评论
收藏
分享

手机扫一扫分享

编辑
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑
举报