We design and implement from scratch a new fuzzer called SIVO that refines multiple stages of grey-box fuzzing. First, SIVO refines data-flow fuzzing in two ways: (a) it provides a new taint inference engine that requires only logarithmic in the input size number of tests to infer the dependency of all program branches on the input bytes, and (b) it deploys a novel method for inverting branches by solving directly and efficiently systems of inequalities. Second, our fuzzer refines accurate tracking and detection of code coverage with simple and easily implementable methods. Finally, SIVO refines selection of parameters and strategies by parameterizing all stages of fuzzing and then dynamically selecting optimal values during fuzzing. Thus the fuzzer can easily adapt to a target program and rapidly increase coverage. We compare our fuzzer to 11 other state-of-the-art grey-box fuzzers on 27 popular benchmarks. Our evaluation shows that SIVO scores the highest both in terms of code coverage and in terms of number of found vulnerabilities.
翻译:我们从零开始设计和实施一个叫做SIVO的新的模糊器,它改进了灰箱烟雾的多个阶段。首先,SIVO改进了数据流烟雾的两种方法:(a)它提供了一个新的污点推导引擎,只需在输入量的测试数量上对数值进行对数即可推断所有程序分支对输入量的依赖性,以及(b)它采用了一种新的方法,通过直接和有效地解决不平等系统来颠倒分支。第二,我们的模糊器改进了代码覆盖的准确跟踪和探测,采用简单和易于执行的方法。最后,SIVO通过对模糊的所有阶段进行参数和策略的参数的参数选择进行参数选择,然后在模糊过程中动态地选择最佳值。因此,模糊器可以很容易地适应目标程序,并迅速扩大覆盖范围。我们将我们的模糊器与其他11个状态的灰箱烟雾器相比,以27个流行基准。我们的评估表明,SIVO在代码覆盖和发现的脆弱性数量方面得分数最高。