一句话:提出前缀引导执行(PGE),在执行前缀显示变异用例难以提升覆盖率时提前终止,从而加速覆盖率引导的模糊测试。
覆盖率引导的模糊测试需要执行所有变异用例,但绝大多数不会增加代码覆盖率,造成大量无效执行开销。本文提出前缀引导执行(PGE):观察到只有极小部分变异用例能增加覆盖率,且其能否增加覆盖率可从部分执行中准确推断。PGE 监控用例执行,一旦执行前缀表明该用例不太可能提升覆盖率,就提前终止。作者在 AFL++ 上实现原型 AFL++-PGE,并在 MAGMA 基准(来自 9 个真实项目的 21 个程序)上评估。48 小时模糊测试后,AFL++-PGE 发现更多缺陷、发现速度更快且覆盖率更高,该方法通用,可惠及基于 AFL 的模糊器家族。
Coverage-guided fuzzing is one of the most effective approaches for discovering software defects and vulnerabilities. It executes all mutated tests from seed inputs to expose coverage-increasing tests. However, executing all mutated tests incurs significant performance penalties---most of the mutated tests are discarded because they do not increase code coverage. Thus, determining if a test increases code coverage without actually executing it is beneficial, but a paradoxical challenge. In this paper, we introduce the notion of prefix-guided execution (PGE) to tackle this challenge. PGE leverages two key observations: (1) Only a tiny fraction of the mutated tests increase coverage, thus requiring full execution; and (2) whether a test increases coverage may be accurately inferred from its partial execution. PGE monitors the execution of a test and applies early termination when the execution prefix indicates that the test is unlikely to increase coverage. To demonstrate the potential of PGE, we implement a prototype on top of AFL++, which we call AFL++-PGE. We evaluate AFL++-PGE on MAGMA, a ground-truth benchmark set that consists of 21 programs from nine popular real-world projects. Our results show that, after 48 hours of fuzzing, AFL++-PGE finds more bugs, discovers bugs faster, and achieves higher coverage. Prefix-guided execution is general and can benefit the AFL-based family of fuzzers.