一句话:提出 SLF,在缺少有效种子输入时自动识别输入有效性检查并生成有效种子,提升模糊测试效果。
模糊测试通常依赖少量有效种子输入进行变异,但缺少有效种子时性能显著下降;符号执行虽能从零生成种子,却受限于复杂真实软件。本文提出 SLF,它借助 AFL 识别输入有效性检查及影响这些检查的输入字段,并按输入关系将检查分类为算术关系、对象偏移、数据结构长度等。随后设计多目标搜索算法,针对不同类别施加特定变异,以同时满足相互依赖的检查。作者在 20 个来自模糊测试项目和 Google fuzzer test suite 的基准程序上评估,与 AFL、AFLFast、KLEE、S2E 及混合工具 Driller 比较。结果表明 SLF 高效且效果显著,优于对比工具。
Fuzzing is an important technique to detect software bugs and vulnerabilities. It works by mutating a small set of seed inputs to generate a large number of new inputs. Fuzzers' performance often substantially degrades when valid seed inputs are not available. Although existing techniques such as symbolic execution can generate seed inputs from scratch, they have various limitations hindering their applications in real-world complex software. In this paper, we propose a novel fuzzing technique that features the capability of generating valid seed inputs. It piggy-backs on AFL to identify input validity checks and the input fields that have impact on such checks. It further classifies these checks according to their relations to the input. Such classes include arithmetic relation, object offset, data structure length and so on. A multi-goal search algorithm is developed to apply class-specific mutations in order to satisfy inter-dependent checks all together. We evaluate our technique on 20 popular benchmark programs collected from other fuzzing projects and the Google fuzzer test suite, and compare it with existing fuzzers AFL and AFLFast, symbolic execution engines KLEE and S2E, and a hybrid tool Driller that combines fuzzing with symbolic execution. The results show that our technique is highly effective and efficient, out-performing the other tools.