论文标题
Fishfuzz:投掷更大的网以捕获更深的虫子
FishFuzz: Throwing Larger Nets to Catch Deeper Bugs
论文作者
论文摘要
Greybox Fuzzing是在开发过程中发现错误的事实标准。 Fuzzer执行许多输入,以最大程度地提高到达代码的数量。最近,定向Greybox Fuzzers(DGFS)提出了一种替代策略,该策略超出了“ Just”覆盖范围:通过选择“近距离”种子,将测试驱动到特定代码目标。 DGF经历了不同的阶段:探索(即到达有趣的位置)和剥削(即触发错误)。实际上,DGF利用覆盖范围直接测量探索,而剥削充其量是通过在不同目标之间交替进行间接测量的。具体而言,我们观察到现有DGF的两个局限性:(i)它们在距离度量标准中缺乏精确度,即将多个路径和目标平均为单个分数(以确定要优先级的种子),以及(ii)它们以向旋转的方式将能量分配给种子,而无需调整目标的优先级别(均应探索目标)。 我们提出了Fishfuzz,它从拖网钓鱼中汲取灵感:首先铸造一个宽网,刮擦高覆盖范围,然后慢慢将其拉入以最大程度地提高收获。我们的模糊器的核心是一种新颖的种子选择策略,它以两个概念为基础:(i)一种新颖的多距离指标,其精度与目标的数量无关,以及(ii)动态目标排名以自动丢弃耗尽的目标。该策略使Fishfuzz可以无缝扩展到成千上万的目标,并在勘探和剥削阶段进行动态交替。我们通过利用所有消毒剂标签作为目标来评估FishFuzz。将Fishfuzz与现代DGF进行了广泛的比较和覆盖范围引导的模糊剂表明,与直接竞争对手相比,FishFuzz的覆盖率更高,重现了现有的错误(快70.2%),最终在44个程序中发现了25个新的错误(18 CVES)。
Greybox fuzzing is the de-facto standard to discover bugs during development. Fuzzers execute many inputs to maximize the amount of reached code. Recently, Directed Greybox Fuzzers (DGFs) propose an alternative strategy that goes beyond "just" coverage: driving testing toward specific code targets by selecting "closer" seeds. DGFs go through different phases: exploration (i.e., reaching interesting locations) and exploitation (i.e., triggering bugs). In practice, DGFs leverage coverage to directly measure exploration, while exploitation is, at best, measured indirectly by alternating between different targets. Specifically, we observe two limitations in existing DGFs: (i) they lack precision in their distance metric, i.e., averaging multiple paths and targets into a single score (to decide which seeds to prioritize), and (ii) they assign energy to seeds in a round-robin fashion without adjusting the priority of the targets (exhaustively explored targets should be dropped). We propose FishFuzz, which draws inspiration from trawl fishing: first casting a wide net, scraping for high coverage, then slowly pulling it in to maximize the harvest. The core of our fuzzer is a novel seed selection strategy that builds on two concepts: (i) a novel multi-distance metric whose precision is independent of the number of targets, and (ii) a dynamic target ranking to automatically discard exhausted targets. This strategy allows FishFuzz to seamlessly scale to tens of thousands of targets and dynamically alternate between exploration and exploitation phases. We evaluate FishFuzz by leveraging all sanitizer labels as targets. Extensively comparing FishFuzz against modern DGFs and coverage-guided fuzzers shows that FishFuzz reached higher coverage compared to the direct competitors, reproduces existing bugs (70.2% faster), and finally discovers 25 new bugs (18 CVEs) in 44 programs.