LibAFL,模糊测试库高级模糊测试库 - 使用 Rust 将你自己的模糊测试器组合起来并扩展其功能。
LibAFL 是一个用 Rust 编写的可复用模糊测试器组件集合,它为你提供了现成模糊测试器的许多优势,同时又完全可定制。目前一些突出的功能包括:
fast:我们在编译时尽一切可能,保持运行时开销最小。用户在手机上的 frida 模式下达到每秒 12 万次执行(使用所有核心)。scalable:低级消息传递(简称 LLMP)使 LibAFL 能够在核心之间几乎线性扩展,并通过 TCP 扩展到多台机器。adaptable:你可以替换 LibAFL 的每个部分。例如,BytesInput 只是潜在输入形式之一:欢迎添加基于 AST 的输入用于结构化模糊测试,等等。multi platform:LibAFL 运行在 Windows、macOS、iOS、Linux 和 Android 等平台上。LibAFL 可以在 no_std 模式下构建,以便将 LibAFL 注入到嵌入式设备和虚拟机监控程序等不常见的目标中。bring your own target:我们支持纯二进制模式,如 Frida-Mode,以及多种基于源码的插桩编译通道。当然,添加自定义插桩后端也很简单。LibAFL 快速、多平台、兼容 no_std,并且能在核心和机器之间扩展。它提供了一个主要 crate,用于构建自定义模糊测试器的构建块 libafl,一个包含可用于目标插桩的公共代码的库 libafl_targets,以及一个提供封装编译器功能的库 libafl_cc。它集成了流行的插桩框架。目前支持的後端有:
SanitizerCoverage,在 libafl_targets 中Frida,在 libafl_frida 中QEMU 用户模式和系统模式,包括用于仿真的钩子,在 libafl_qemu 中TinyInst,在 libafl_tinyinst 中,由 elbiazo 提供我们强烈建议不要使用例如 Linux 发行版包,因为可能过时。因此,直接安装 Rust,说明可以在 这里 找到。
定义最低支持的 Rust 版本。您始终可以在 LibAFL 的 Cargo.toml 中检查当前要求的版本:
如果您的已安装 Rust 版本早于 Cargo.toml 中列出的版本,请更新到最新的稳定工具链:
rustup update stable
fuzzers/ 目录中的模糊测试器。您可以在 Just 程序员手册 中找到在您的环境中安装它的说明。LibAFL 仓库git clone https://github.com/AFLplusplus/LibAFL
cargo build --release
cargo doc
LibAFL 手册(WIP!)(需要 mdbook)cd docs && mdbook serve
我们在 ./fuzzers 中收集了所有示例模糊测试器。
务必阅读它们的文档(和源代码),这是自然的入门方式!
just run
只要模糊测试器目录包含 Justfile 文件,您就可以使用以下命令运行每个示例模糊测试器。经过最佳测试的模糊测试器是 ./fuzzers/inprocess/libfuzzer_libpng,它是一个针对 libpng 桩的多核类似 libfuzzer 的模糊测试器,使用 LibAFL。
LibAFL 手册(WIP)在线版 或 仓库 中libaf_qemu 的博客文章,Hacking TMNF - 模糊测试游戏服务器,由 RickdeJager 撰写LibAFL 由以下人员编写和维护
请查看 CONTRIBUTING.md 了解贡献指南。
您的模糊测试器不如预期工作?请尝试阅读 DEBUGGING.md 了解如何调试您的问题。
如果您在学术工作中使用 LibAFL,请引用以下论文:
@inproceedings{libafl,
author = {Andrea Fioraldi and Dominik Maier and Dongjia Zhang and Davide Balzarotti},
title = {{LibAFL: A Framework to Build Modular and Reusable Fuzzers}},
booktitle = {Proceedings of the 29th ACM conference on Computer and communications security (CCS)},
series = {CCS '22},
year = {2022},
month = {November},
location = {Los Angeles, U.S.A.},
publisher = {ACM},
}