srlabs/substrate-runtime-fuzzer
GitHub: srlabs/substrate-runtime-fuzzer
专为 Substrate 区块链 Runtime 设计的模糊测试工具,通过多引擎覆盖率引导发现深层安全漏洞。
Stars: 33 | Forks: 18
# Substrate Runtime Fuzzer
`substrate-runtime-fuzzer` 是由 [SRLabs](https://srlabs.de) 自 2020 年起持续开发的 [substrate](https://github.com/paritytech/polkadot-sdk/tree/master/substrate) runtime 模糊测试工具。
它已被用作我们对 [Parity](https://parity.io) 以及 Polkadot 和 Kusama 生态系统中许多平行链进行持续审计流程的一部分。
作为 [Substrate Builders Program](https://substrate.io/ecosystem/substrate-builders-program/) 的一部分,该模糊测试工具已应用于超过 30 个不同的项目,在此过程中发现了数十个关键漏洞。
## 如何使用它?
以下是在 [solochain template runtime](https://github.com/paritytech/polkadot-sdk/tree/master/templates/solochain/runtime) 上启动 `substrate-runtime-fuzzer` 的步骤:
```
cargo install ziggy cargo-afl honggfuzz grcov
rustup target add wasm32-unknown-unknown
git clone https://github.com/srlabs/substrate-runtime-fuzzer
cd substrate-runtime-fuzzer/templates/solochain/
SKIP_WASM_BUILD=1 cargo ziggy fuzz
```
你可以使用 `-j n` 标志来并行运行 $n$ 个作业。
如果你在多核环境下长时间运行,我们还建议使用 `--no-honggfuzz`,因为在这种情况下,honggfuzz 往往会拖慢速度并使语料库膨胀。
`SKIP_WASM_BUILD=1` 将减少编译时间和二进制文件的大小。我们并不是在模糊测试 wasm runtime。
### 什么是 "ziggy"?
[`ziggy`](https://github.com/srlabs/ziggy/) 是由 SRLabs 团队编写的一个模糊测试管理工具。
它将使用正确的配置生成多个不同的覆盖率引导的模糊测试器,并定期精简语料库以及在实例之间共享它。
## 如何在我基于 substrate 的 runtime 上使用它?
第一步是创建一个项目并添加与[此项目](./templates/solochain/Cargo.toml)相同的依赖项。
然后,你可以将 `solochain-template-runtime` 依赖项修改为你自己的 runtime(可以是本地 `path` 或 git URL)。
最后,你应该添加一个创世配置,以确保模糊测试器能覆盖尽可能多的代码。
你可以从 [kitchensink fuzzer](./templates/kitchensink/src/main.rs) 的创世配置中获取灵感。
## 许可证
Substrate Runtime Fuzzer 主要根据 MIT 许可证和 Apache 许可证(版本 2.0)的条款进行分发。
详情请参见 [LICENSE-APACHE](LICENSE-APACHE) 和 [LICENSE-MIT](LICENSE-MIT)。
标签:AFL, ASN解析, Fuzzing, Honggfuzz, Kusama, Polkadot, Rust, Solochain, SRLabs, Substrate, Wasm, WebAssembly, Ziggy, 代码覆盖率, 加密货币, 区块链, 区块链安全, 可视化界面, 安全测试, 平行链, 攻击性安全, 智能合约审计, 波卡, 网络流量审计, 运行时, 通知系统