#fuzzer #fuzzing #pipeline #input #continuous #parallel #directory

bin+lib ziggy

适用于所有 Rust 模糊测试需求的并行模糊测试管理工具 🧑‍🎤

45 个版本 (4 个稳定版本)

1.1.0 2024 年 5 月 22 日
1.0.0 2024 年 2 月 5 日
0.8.3 2024 年 1 月 18 日
0.8.2 2023 年 11 月 20 日
0.1.0 2022 年 6 月 13 日

#75Cargo 插件 中排名

Download history 879/week @ 2024-04-26 202/week @ 2024-05-03 31/week @ 2024-05-10 338/week @ 2024-05-17 89/week @ 2024-05-24 34/week @ 2024-05-31 57/week @ 2024-06-07 11/week @ 2024-06-14 14/week @ 2024-06-21 2/week @ 2024-06-28 2/week @ 2024-07-05 9/week @ 2024-07-12 40/week @ 2024-07-19 40/week @ 2024-07-26 33/week @ 2024-08-02 6/week @ 2024-08-09

每月 123 次下载

Apache-2.0

77KB
1.5K SLoC

ziggy

ziggy 是一个 Rust 项目模糊测试管理器,旨在

  • 并行运行不同的模糊测试并使用共享语料库
  • 创建和监控连续模糊测试管道

功能集

  • 🤹 并行处理不同的模糊测试进程(honggfuzzAFL++
  • 🗃️ 为所有模糊测试提供一个共享语料库
  • 🤏 无需努力即可最小化语料库
  • 📊 有洞察力的监控
  • 🎯 易于生成覆盖率报告
  • 😶‍🌫️ 支持任意特质

还包括以下功能

  • 🐇 LibAFL 集成
  • 📨 通过 bash 钩子通知新的崩溃

使用示例

首先,通过运行以下命令安装 ziggy 及其依赖项:

cargo install --force ziggy cargo-afl honggfuzz grcov

以下是工具帮助输出的示例

$ cargo ziggy
A multi-fuzzer management utility for all of your Rust fuzzing needs 🧑‍🎤

Usage: cargo ziggy <COMMAND>

Commands:
  build      Build the fuzzer and the runner binaries
  fuzz       Fuzz targets using different fuzzers in parallel
  run        Run a specific input or a directory of inputs to analyze backtrace
  minimize   Minimize the input corpus using the given fuzzing target
  cover      Generate code coverage information using the existing corpus
  plot       Plot AFL++ data using afl-plot
  add-seeds  Add seeds to the running AFL++ fuzzers
  triage     Triage crashes found with casr - currently only works for AFL++
  help       Print this message or the help of the given subcommand(s)

Options:
  -h, --help     Print help
  -V, --version  Print version

要创建模糊测试,只需将 ziggy 添加为依赖项。

[dependencies]
ziggy = { version = "1.1.0", default-features = false }

然后在您的 main 中使用 fuzz! 宏创建一个 harness。

fn main() {
    ziggy::fuzz!(|data: &[u8]| {
        println!("{data:?}");
    });
}

有关文档齐全的模糊测试示例,请参阅 url 示例

output 目录

在您启动模糊测试后,您将在 output 目录中找到几个项目:

  • 包含完整语料库的 corpus 目录
  • 包含模糊测试检测到的任何崩溃的 crashes 目录
  • 包含模糊测试日志文件的 logs 目录
  • 包含 AFL++ 输出的 afl 目录
  • 包含 Honggfuzz 输出的 honggfuzz 目录
  • 用于 ziggy 将 AFL++ 中的项目传递给 Honggfuzz 的 queue 目录

关于覆盖率的说明

默认情况下,cargo cover 命令不会为模糊测试项目的依赖项生成覆盖率。

如果您想更改此设置,可以使用以下技巧

CARGO_HOME=.cargo cargo ziggy cover 

这将把每个依赖项克隆到一个 .cargo 目录中,并且该目录将被包含在生成的覆盖率中。

ziggy 日志

如果您想查看 ziggy 的内部日志,可以将 RUST_LOG=INFO 设置。

依赖项

~0–16MB
~320K SLoC