Coverage-guided Greybox Fuzzing (CGF) is one of the most successful and widely-used techniques for bug hunting. Two major approaches are adopted to optimize CGF: (i) to reduce search space of inputs by inferring relationships between input bytes and path constraints; (ii) to formulate fuzzing processes (e.g., path transitions) and build up probability distributions to optimize power schedules, i.e., the number of inputs generated per seed. However, the former is subjective to the inference results which may include extra bytes for a path constraint, thereby limiting the efficiency of path constraints resolution, code coverage discovery, and bugs exposure; the latter formalization, concentrating on power schedules for seeds alone, is inattentive to the schedule for bytes in a seed. In this paper, we propose a lightweight fuzzing approach, Truzz, to optimize existing Coverage-guided Greybox Fuzzers (CGFs). To address two aforementioned challenges, Truzz identifies the bytes related to the validation checks (i.e., the checks guarding error-handling code), and protects those bytes from being frequently mutated, making most generated inputs examine the functionalities of programs, in lieu of being rejected by validation checks. The byte-wise relationship determination mitigates the problem of loading extra bytes when fuzzers infer the byte-constraint relation. Furthermore, the proposed path transition within Truzz can efficiently prioritize the seed as the new path, harvesting many new edges, and the new path likely belongs to a code region with many undiscovered code lines. The experimental results show that on average, Truzz can generate 16.14% more inputs flowing into functional code, in addition to 24.75% more new edges than the vanilla fuzzers. Finally, our approach exposes 13 bugs in 8 target programs, and 6 of them have not been identified by the vanilla fuzzers.
翻译:灰色指导 Greybox Fuzzing (CGF) 是最成功和广泛使用的捕捉错误技术之一。 采取了两种主要方法来优化 CGF : (一) 通过推断输入字节和路径限制之间的关系,减少投入搜索空间;(二) 制定模糊过程(例如路径过渡),并增加概率分配,以优化电力计划,即每个种子产生的投入数量。 然而, 前者对推论结果具有主观性, 这可能包括路径限制的多端线, 从而限制路径限制、 代码发现和错误暴露的效率; 后一种形式正规化, 仅专注于种子的电力时间表, 与种子的路径限制关系不同步; (二) 在本文中, 我们提出一种轻度的模糊方法, 以优化现有覆盖制导的Grewbox Fluzzer(CGFers) 。 但是为了应对上述两个挑战, 特鲁兹发现与验证检查相关的新端线( i. e. 检查错误处理错误的代码) ; 后, 保护这些路径转换程序, 经常被修正的路径输入, 以最终的路径, 显示的路径, 正在降低 的路径决定 将显示的路径 。