A greybox fuzzer is an automated software testing tool that generates new test inputs by applying randomly chosen mutators (e.g., flipping a bit or deleting a block of bytes) to a seed input in random order and adds all coverage-increasing inputs to the corpus of seeds. We hypothesize that the order in which mutators are applied to a seed input has an impact on the effectiveness of greybox fuzzers. In our experiments, we fit a linear model to a dataset that contains the effectiveness of all possible mutator pairs and indeed observe the conjectured interaction effect. This points us to more efficient fuzzing by choosing the most promising mutator sequence with a higher likelihood. We propose MuoFuzz, a greybox fuzzer that learns and chooses the most promising mutator sequences. MuoFuzz learns the conditional probability that the next mutator will yield an interesting input, given the previously selected mutator. Then, it samples from the learned probability using a random walk to generate mutator sequences. We compare the performance of MuoFuzz to AFL++, which uses a fixed selection probability, and MOPT, which optimizes the selection probability of each mutator in isolation. Experimental results on the FuzzBench and MAGMA benchmarks show that MuoFuzz achieves the highest code coverage and finds four bugs missed by AFL++ and one missed by both AFL++ and MOPT.
翻译:灰盒模糊测试器是一种自动化软件测试工具,它通过将随机选择的变异算子(例如翻转比特或删除字节块)以随机顺序应用于种子输入来生成新的测试输入,并将所有能提高覆盖率的输入添加到种子语料库中。我们假设变异算子应用于种子输入的顺序会影响灰盒模糊测试器的有效性。在我们的实验中,我们使用线性模型拟合了一个包含所有可能变异算子对有效性的数据集,并确实观察到了所推测的交互效应。这为我们指出了通过以更高概率选择最有希望的变异算子序列来实现更高效模糊测试的方向。我们提出了MuoFuzz,一种能够学习并选择最有希望变异算子序列的灰盒模糊测试器。MuoFuzz学习在给定先前选择的变异算子的条件下,下一个变异算子将产生有趣输入的条件概率。然后,它使用随机游走从学习到的概率中采样以生成变异算子序列。我们将MuoFuzz的性能与使用固定选择概率的AFL++以及单独优化每个变异算子选择概率的MOPT进行了比较。在FuzzBench和MAGMA基准测试上的实验结果表明,MuoFuzz实现了最高的代码覆盖率,并发现了四个AFL++遗漏的错误以及一个AFL++和MOPT均遗漏的错误。