24个版本 (12个重大更新)
0.13.2 | 2024年7月31日 |
---|---|
0.12.0 | 2024年4月12日 |
0.11.2 | 2023年12月21日 |
0.11.1 | 2023年8月31日 |
0.5.0 | 2021年7月5日 |
#7 in #frida
每月820次下载
用于 5 个包 (2 直接)
11KB
62 行
LibAFL,模糊测试库。
高级模糊测试库 - 使用Rust将您自己的模糊器组合起来并扩展其功能。
LibAFL由以下人员编写和维护:
- Andrea Fioraldi [email protected]
- Dominik Maier [email protected]
- s1341 [email protected]
- Dongjia Zhang [email protected]
- Addison Crump [email protected]
- Romain Malmain [email protected]
为什么选择LibAFL?
LibAFL提供了现成模糊测试器的许多好处,同时完全可定制。当前的一些突出功能包括
fast
:我们在编译时尽一切可能进行操作,以保持运行时开销最小。在手机的frida模式下,用户可以达到每秒120k次执行(使用所有核心)。scalable
:简称为Low Level Message Passing
或LLMP
,允许LibAFL在核心之间几乎线性扩展,并通过TCP扩展到多台机器。adaptable
:您可以替换LibAFL的任何部分。例如,BytesInput
只是一种潜在的形式输入:您可以自由地添加基于AST的输入以进行结构化模糊测试,等等。multi platform
:LibAFL已在 Windows、MacOS、Linux 和 Android 上得到确认,支持 x86_64 和 aarch64。LibAFL
可以在no_std
模式下构建,以将LibAFL注入到嵌入式设备和虚拟机等难以捉摸的目标。bring your own target
:我们支持二进制模式,如Frida-Mode,以及基于源代码的模糊测试的多个编译遍历。当然,添加自定义的仪器后端也很容易。
概述
LibAFL是一组可重用的模糊器组件,用Rust编写。它是快速、多平台、兼容no_std,并且可以在核心和机器之间扩展。
它提供了一个主crate,为自定义模糊器提供构建块,libafl,一个包含可用于目标仪器化通用代码的库,libafl_targets,以及一个提供围绕编译器封装功能的库,libafl_cc。
LibAFL提供与流行的仪器化框架的集成。目前,支持的后端包括
- SanitizerCoverage,在 libafl_targets
- Frida,在 libafl_frida
- QEMU用户模式和系统模式,包括仿真钩子,在 libafl_qemu
- TinyInst,在 libafl_tinyinst by elbiazo
入门指南
- 安装依赖项
-
Rust开发语言。
我们强烈建议不要使用例如您的Linux发行版软件包,因为这可能是过时的。因此,最好是直接安装Rust,可以在这里找到说明。 -
LLVM工具
需要LLVM工具(包括clang、clang++)(版本高于LLVM 15.0.0至LLVM 18.1.3)。如果您使用Debian/Ubuntu,我们再次强烈建议您从这里安装软件包
(在libafl_concolic
中,我们只支持版本高于18的LLVM)
- Cargo-make
我们使用cargo-make在fuzzers/
目录中构建模糊器。您可以使用以下命令安装它:
cargo install cargo-make
- 使用以下命令克隆LibAFL存储库:
git clone https://github.com/AFLplusplus/LibAFL
- 使用以下命令构建库:
cargo build --release
- 使用以下命令构建API文档:
cargo doc
- 使用(需要mdbook)浏览LibAFL手册(WIP!)
cd docs && mdbook serve
我们将所有示例模糊器收集在./fuzzers
中。务必阅读它们的文档(和源代码),这是自然入门方式!
您可以使用以下命令运行每个示例模糊器:
cargo make run
只要模糊器目录中有Makefile.toml
文件即可。
经过最佳测试的模糊器是 ./fuzzers/libfuzzer_libpng
,这是一个使用LibAFL进行libpng组件的多核模糊器。
资源
-
我们的研究论文
-
我们的RC3 演讲解释核心概念
-
我们的Fuzzcon Europe 演讲,包含一个(稍微有点但不是特别过时)的关于如何构建一些示例模糊器的逐步讨论
-
关于仅二进制模糊的libaf_qemu的博客文章,Hacking TMNF - 模糊游戏服务器,由RickdeJager。
贡献
请查看CONTRIBUTING.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},
}
许可证
根据您的选择,许可在Apache License,Version 2.0或MIT许可证下。除非您明确声明,否则根据Apache-2.0许可证的定义,您有意提交以包含在此软件包中的任何贡献都应按上述方式双许可,不附加任何额外条款或条件。
依赖项
~260–700KB
~17K SLoC