rust-fuzz/afl.rs
GitHub: rust-fuzz/afl.rs
基于 AFLplusplus 的 Rust 模糊测试库,帮助开发者通过伪随机输入发现 Rust 代码中的安全漏洞和稳定性问题。
Stars: 1820 | Forks: 115
afl.rs
使用 AFLplusplus 对 Rust 代码进行模糊测试
## 它是什么? [Fuzz testing][] 是一种软件测试技术,通过向软件提供伪随机数据作为输入来发现安全性和稳定性问题。[AFLplusplus][] 是一款流行、高效且现代的模糊测试工具,基于 [AFL][american-fuzzy-lop] 开发。这个库(afl.rs)允许你在使用 [Rust 编程语言][rust] 编写的代码上运行 AFLplusplus。 ## 文档 文档可在 [Rust 模糊测试指南](https://rust-fuzz.github.io/book/afl.html) 中找到。 ## 它看起来是什么样子的?
在 Rust 代码上运行 AFL 的屏幕录制。
## 提示
在开始模糊测试之前,你应该重新配置系统以获得最佳性能和更好的崩溃检测。可以通过 `cargo afl system-config` 来完成此操作。
但这个子命令需要 root 权限,因此它会在内部使用 sudo。所以,你可能需要输入你的密码。
默认情况下,AFL++ 的 [CMPLOG](https://github.com/AFLplusplus/AFLplusplus/blob/stable/instrumentation/README.cmplog.md) 功能会被激活,这有助于实现良好的代码覆盖率。
然而,在超过两个实例上激活 CMPLOG 并没有好处。因此,如果在你的模糊测试目标上运行多个 AFL++ 实例,你可以通过指定命令行参数 '-c -' 来禁用 CMPLOG。
要完全在构建的目标中省略 CMPLOG 插桩,请在构建时将环境变量 `AFLRS_NO_CMPLOG` 设置为 `1`。
这篇[文档](https://github.com/AFLplusplus/AFLplusplus/blob/stable/docs/fuzzing_in_depth.md) 将帮助你熟悉 AFL++ 的功能,从而协助你运行一次成功的模糊测试活动。
默认情况下,使用 `cargo-afl` 进行构建时会设置 `fuzzing` 配置。如果你想阻止这种行为,只需在构建时将环境变量 `AFL_NO_CFG_FUZZING` 设置为 `1`。
## 可重置状态 (`fuzz_with_reset!`)
AFL++ 的持久模式会在循环中运行模糊测试目标。静态初始化(例如 `OnceLock`、`lazy_static`、`once_cell::Lazy`)只会在第一次迭代时执行——随后的迭代会跳过这些代码路径,从而导致 AFL 的稳定性指标下降。
使用 `fuzz_with_reset!` 来提供一个重置闭包,在每次迭代后清除静态状态。
注意:该示例使用了 `Mutex标签:AFLplusplus, American Fuzzy Lop, CMPLOG, Fuzzing, pocsuite3, Rust, 代码安全, 代码覆盖率, 可视化界面, 崩溃检测, 性能优化, 检测绕过, 模糊引擎, 模糊测试工具, 测试框架, 漏洞枚举, 编程语言, 网络流量审计, 软件测试, 通知系统