一句话:将 SymCC 的 concolic execution 与 LibAFL 的 fuzzing 结合,构建面向 Rust 的混合 fuzzer 以发现程序错误。
本文提出 SymRustC,一个面向 Rust 程序的混合模糊测试器,其核心思想是将 fuzzing 与 concolic execution 相结合。具体而言,SymRustC 复用 SymCC 提供 concolic execution 能力,并复用 LibAFL 提供 fuzzing 框架。由于 SymCC 通过插桩 LLVM IR 来实现 concolic execution,而 Rust 编译器恰好以 LLVM 作为后端,作者将 SymCC 与 Rust 编译器集成,从而对 Rust 程序进行插桩以支持 concolic execution。在此基础上,他们基于 LibAFL 开发了一个将 fuzzing 与 concolic execution 组合起来的混合 fuzzer。论文介绍了其实现方式,并通过四个案例研究展示 SymRustC 能够生成发现 Rust 程序错误的输入。
We present SymRustC, a hybrid fuzzer for Rust. SymRustC is hybrid in the sense that it combines fuzzing and concolic execution. SymRustC leverages an existing tool called SymCC for its concolic execution capability and another existing tool called LibAFL for its fuzzing capability. Since SymCC instruments LLVM IR (Intermediate Representation) for concolic execution and the Rust compiler uses LLVM as a backend, we integrate SymCC with the Rust compiler to instrument Rust programs for concolic execution. LibAFL provides a framework to develop a fuzzer, and we use it to develop a hybrid fuzzer that combines fuzzing and our concolic execution. We discuss our implementation as well as four case studies to demonstrate that SymRustC can generate inputs that discover errors in Rust programs.