用途:为集成到 OSS-Fuzz 的 Rust 项目编写、构建并验证模糊测试目标(fuzz target),帮助代理掌握 Rust 模糊测试的实践知识。
主要能力:Rust 模糊测试基于 cargo-fuzz 与 libfuzzer_sys crate,由 libFuzzer 驱动。技能涵盖基础概念与操作要点:项目须使用 Rust 基础构建镜像 FROM gcr.io/oss-fuzz-base/base-builder-rust,并在 project.yaml 中设置 language: rust;harness 位于被测试 crate 的 fuzz/fuzz_targets/<name>.rs,可用原始字节或 arbitrary crate 做结构化模糊测试;fuzz/Cargo.toml 需声明 libfuzzer-sys、arbitrary(结构化时)及被测 crate 依赖,并配置 [[bin]]。构建时 build.sh 使用 cargo fuzz build -O,再把 target/x86_64-unknown-linux-gnu/release 下的二进制复制到 $OUT;需要 nightly 时在 Dockerfile 设置 ENV RUSTUP_TOOLCHAIN。种子语料放在 fuzz/corpus/<target_name>/,可打包为 $OUT/<target_name>_seed_corpus.zip,字典放 $OUT/<target_name>.dict。
使用方式:编写 harness 后,用 python3 infra/helper.py build_fuzzers <project>、check_build <project>、run_fuzzer <project> <fuzzer_name> -- -max_total_time=30 进行验证;添加 harness 前先在 crate 内运行 cargo build 与 cargo test。
适用场景与限制:适合针对解析器、反序列化器、协议实现、unsafe 代码块及处理不可信字节的 API。好的 harness 应处理预期错误(let _ = ...),避免 .unwrap()/.expect() 造成误报,避免非确定性(rand、系统时间、线程),保持快速,考虑 unsafe 路径,并以 release 模式构建。Rust 所有权模型可防多数内存破坏,但模糊测试仍能发现 panic、unsafe 内存错误、逻辑错误、挂起与栈溢出。若 crate 使用 no_std,需启用 libfuzzer-sys 的 no_std 特性。本地迭代时可克隆上游仓库并把 Dockerfile 的 git clone 改为 COPY。资料未提供具体收费、价格或平台信息。