17 个不稳定版本 (7 个破坏性更新)

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.6.1 2021 年 8 月 23 日

#41模拟器

Download history 1/week @ 2024-05-20 135/week @ 2024-06-10 17/week @ 2024-06-17 134/week @ 2024-06-24 64/week @ 2024-07-01 125/week @ 2024-07-29

每月 125 次下载

MIT/Apache

3MB
73K SLoC

LibAFL,模糊库。

LibAFL logo

高级模糊库 - 使用 Rust 将您自己的模糊器插槽组合在一起并扩展其功能。

LibAFL 由以下人员编写和维护:

为何选择LibAFL?

LibAFL提供了现成fuzzer的许多优点,同时可以完全自定义。目前一些突出功能包括

  • 快速:我们在编译时尽可能做所有事情,使运行时开销最小。用户在手机上(使用所有核心)的frida模式下达到每秒120k次执行。
  • 可扩展低级消息传递(LLMP),允许LibAFL几乎线性地跨核心扩展,并通过TCP扩展到多台机器。
  • 可适应:您可以替换LibAFL的每个部分。例如,BytesInput只是潜在的形式输入之一:您可以自由添加基于AST的输入进行结构化模糊测试,等等。
  • 多平台:LibAFL已确认在WindowsMacOSLinuxAndroid上工作,在x86_64aarch64上。LibAFL可以以no_std模式构建,以将LibAFL注入到嵌入式设备和虚拟机等隐蔽目标。
  • 自定义目标:我们支持仅二进制模式的Frida-Mode,以及基于源代码的插装的多个编译遍历。当然,添加自定义插装后端也很容易。

概述

LibAFL是一组可重用的fuzzer组件,用Rust编写。它快速、多平台、与no_std兼容,并在核心和机器之间扩展。

它提供了一个主crate,提供了自定义fuzzer的构建块,libafl,一个包含用于目标插装的常用代码的库,libafl_targets,以及一个提供包装编译器的设施的库,libafl_cc

LibAFL提供了与流行的插装框架的集成。目前,支持的后端包括

入门指南

  1. 安装依赖项
  • 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/目录中构建fuzzer。您可以使用以下命令安装它:
cargo install cargo-make
  1. 使用以下命令克隆LibAFL存储库:
git clone https://github.com/AFLplusplus/LibAFL
  1. 使用以下命令构建库:
cargo build --release
  1. 使用以下命令构建API文档:
cargo doc
  1. 使用以下命令浏览LibAFL手册(WIP!):
cd docs && mdbook serve

我们在./fuzzers中收集了所有示例模糊器。请务必阅读它们的文档(和源代码),这是开始的自然方式!

您可以使用以下命令运行每个示例模糊器

cargo make run

只要模糊器目录中有Makefile.toml文件。

经过最佳测试的模糊器是./fuzzers/libfuzzer_libpng,这是一个使用LibAFL为libpng构建程序的多核libfuzzer-like模糊器。

资源

贡献

请查看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.0MIT许可证下许可。
除非您明确声明,否则您提交给本仓库的任何有意贡献,根据Apache-2.0许可证的定义,应按上述方式双重许可,而不附加任何额外条款或条件。

依赖关系

~6–43MB
~702K SLoC