#libafl #fuzzing #instrumentation #target #fuzzer #hook

无std libafl_targets

可用于与LibAFL结合使用的目标插装通用代码

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日

#379模拟器

Download history 33/week @ 2024-04-29 141/week @ 2024-05-06 3/week @ 2024-05-13 69/week @ 2024-05-20 76/week @ 2024-05-27 26/week @ 2024-06-03 203/week @ 2024-06-10 74/week @ 2024-06-17 211/week @ 2024-06-24 89/week @ 2024-07-01 101/week @ 2024-07-08 133/week @ 2024-07-15 30/week @ 2024-07-22 197/week @ 2024-07-29 158/week @ 2024-08-05 24/week @ 2024-08-12

每月409次下载
用于 3 crate

MIT/Apache

2.5MB
67K SLoC

LibAFL,模糊器库。

LibAFL logo

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

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

为什么选择LibAFL?

LibAFL提供了现成模糊器的许多好处,同时具有完全的可定制性。一些当前亮点功能包括

  • fast:我们在编译时尽可能做所有事情,以使运行时开销最小。在手机上的 Frida 模式下,用户可以达到每秒 120k 的执行次数(使用所有核心)。
  • scalable低级别消息传递,简称 LLMP,使得 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 兼容,并可以跨核心和机器扩展。

它提供了一个主要框架,为自定义模糊器提供构建模块,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. 使用以下命令浏览 LibAFL 手册(WIP!):
cd docs && mdbook serve

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

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

cargo make run

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

测试最好的模糊器是 ./fuzzers/libfuzzer_libpng,这是一个使用 LibAFL 对 libpng 桥接器的多核类似 libfuzzer 的模糊器。

资源

贡献

请查看 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许可证的定义,都应以上述双重许可方式发布,不附加任何额外条款或条件。

依赖

~4–34MB
~466K SLoC