一句话:提出 in vivo fuzzing:用宿主程序执行上下文放大真实执行,对库中目标函数做覆盖引导的函数级模糊测试,免去手写 fuzz driver。
论文关注库模糊测试中编写 fuzz driver 的瓶颈:多数驱动过于简单,无法覆盖库与宿主程序之间的复杂交互,导致安全缺陷仍可能漏检。作者提出 in vivo fuzzing 方法:直接利用使用该库的宿主程序建立的有效执行上下文,先运行宿主直到到达目标函数列表中的某个函数,再对该函数进行覆盖引导的函数级模糊测试;额度用尽后切换到下一个目标。该方式减少开发者将模糊测试接入工作流所需的手工驱动,并使 fuzzer 能探索库在真实程序中的使用路径。摘要未给出具体实验数据。
A major bottleneck that remains when fuzzing software libraries is the need for fuzz drivers, i.e., the glue code between the fuzzer and the library. Despite years of fuzzing, critical security flaws are still found, e.g., by manual auditing, because the fuzz drivers do not cover the complex interactions between the library and the host programs using it. In this work we propose an alternative approach to library fuzzing, which leverages a valid execution context that is set up by a given program using the library (the host), and amplify its execution. More specifically, we execute the host until a designated function from a list of target functions has been reached, and then perform coverage-guided function-level fuzzing on it. Once the fuzzing quota is exhausted, we move on to fuzzing the next target from the list. In this way we not only reduce the amount of manual work needed by a developer to incorporate fuzzing into their workflow, but we also allow the fuzzer to explore parts of the library as they are used in real-world programs that may otherwise not have been tested due to the simplicity of most fuzz drivers.