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

Download history 194/week @ 2024-04-27 169/week @ 2024-05-04 179/week @ 2024-05-11 130/week @ 2024-05-18 163/week @ 2024-05-25 130/week @ 2024-06-01 256/week @ 2024-06-08 209/week @ 2024-06-15 155/week @ 2024-06-22 336/week @ 2024-06-29 374/week @ 2024-07-06 552/week @ 2024-07-13 124/week @ 2024-07-20 328/week @ 2024-07-27 236/week @ 2024-08-03 47/week @ 2024-08-10

每月820次下载
用于 5 个包 (2 直接)

MIT/Apache

11KB
62

LibAFL,模糊测试库。

LibAFL logo

高级模糊测试库 - 使用Rust将您自己的模糊器组合起来并扩展其功能。

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

为什么选择LibAFL?

LibAFL提供了现成模糊测试器的许多好处,同时完全可定制。当前的一些突出功能包括

  • fast:我们在编译时尽一切可能进行操作,以保持运行时开销最小。在手机的frida模式下,用户可以达到每秒120k次执行(使用所有核心)。
  • scalable:简称为 Low Level Message PassingLLMP,允许LibAFL在核心之间几乎线性扩展,并通过TCP扩展到多台机器。
  • adaptable:您可以替换LibAFL的任何部分。例如,BytesInput 只是一种潜在的形式输入:您可以自由地添加基于AST的输入以进行结构化模糊测试,等等。
  • multi platform:LibAFL已在 WindowsMacOSLinuxAndroid 上得到确认,支持 x86_64aarch64LibAFL 可以在 no_std 模式下构建,以将LibAFL注入到嵌入式设备和虚拟机等难以捉摸的目标。
  • bring your own target:我们支持二进制模式,如Frida-Mode,以及基于源代码的模糊测试的多个编译遍历。当然,添加自定义的仪器后端也很容易。

概述

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

它提供了一个主crate,为自定义模糊器提供构建块,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/目录中构建模糊器。您可以使用以下命令安装它:
cargo install cargo-make
  1. 使用以下命令克隆LibAFL存储库:
git clone https://github.com/AFLplusplus/LibAFL
  1. 使用以下命令构建库:
cargo build --release
  1. 使用以下命令构建API文档:
cargo doc
  1. 使用(需要mdbook)浏览LibAFL手册(WIP!)
cd docs && mdbook serve

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

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

cargo make run

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

经过最佳测试的模糊器是 ./fuzzers/libfuzzer_libpng,这是一个使用LibAFL进行libpng组件的多核模糊器。

资源

贡献

请查看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许可证的定义,您有意提交以包含在此软件包中的任何贡献都应按上述方式双许可,不附加任何额外条款或条件。

依赖项

~260–700KB
~17K SLoC