#模糊测试 #qemu #仪器化

sys no-std libafl_qemu_sys

C到LibAFL QEMU桥接库的Rust绑定

10个不稳定版本 (4个重大变更)

0.13.2 2024年7月31日
0.13.1 2024年6月30日
0.12.0 2024年4月12日
0.11.2 2023年12月21日
0.9.0 2023年1月31日

#119仿真器

Download history 2/week @ 2024-04-27 20/week @ 2024-05-04 1/week @ 2024-05-11 9/week @ 2024-05-18 4/week @ 2024-05-25 6/week @ 2024-06-01 98/week @ 2024-06-08 55/week @ 2024-06-15 5/week @ 2024-06-22 201/week @ 2024-06-29 51/week @ 2024-07-06 15/week @ 2024-07-13 8/week @ 2024-07-20 141/week @ 2024-07-27 19/week @ 2024-08-03 10/week @ 2024-08-10

每月下载量 179
2 个包中使用了(通过 libafl_qemu

MIT/Apache

460KB
14K SLoC

LibAFL,模糊测试库。

LibAFL logo

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

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

为什么选择LibAFL?

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

  • 快速:我们在编译时尽可能地做所有事情,以保持运行时开销最小。用户在手机上的frida模式下达到了每秒120k次执行(使用所有核心)。
  • 可扩展低级消息传递,简称 LLMP,允许LibAFL在核心和通过TCP到多台机器上几乎线性扩展。
  • 适配性:您可以替换 LibAFL 的每个部分。例如,BytesInput 只是一个潜在的形式输入:您可以自由地添加基于 AST 的输入以进行结构化模糊测试,等等。
  • 多平台:LibAFL 已证实可在 WindowsMacOSLinuxAndroid 上运行,支持 x86_64aarch64LibAFL 可以在 no_std 模式下构建,以将 LibAFL 注入到嵌入式设备和虚拟机等不为人知的目标。
  • 自行指定目标:我们支持仅二进制模式,如 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. 使用(需要 mdbook)浏览 LibAFL 书籍(WIP!)
cd docs && mdbook serve

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

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

cargo make run

只要模糊测试目录中存在 Makefile.toml 文件。

经过最佳测试的模糊器是 ./fuzzers/libfuzzer_libpng,这是一个类似libfuzzer的多核模糊器,它使用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.0或MIT许可证,任选其一。
除非您明确声明,否则您提交给此crate的任何贡献,根据Apache-2.0许可证定义,将根据上述协议双重许可,不附加任何额外条款或条件。

依赖项

~0.3–4.5MB
~83K SLoC