论文标题

路径过渡告诉更多:通过运行时程序状态优化模糊时间表

Path Transitions Tell More:Optimizing Fuzzing Schedules via Runtime Program States

论文作者

Zhang, Kunpeng, Xiao, Xi, Zhu, Xiaogang, Sun, Ruoxi, Xue, Minhui, Wen, Sheng

论文摘要

覆盖范围引导的Greybox Fuzzing(CGF)是最成功,最广泛使用的方法之一。采用了两种主要方法来优化CGF:(i)通过推断输入字节和路径约束之间的关系来减少输入的搜索空间; (ii)制定模糊过程(例如,路径转换)并构建概率分布,以优化功率计划,即每个种子生成的输入数量。但是,前者是对推理结果的主观主观的,这些结果可能包括路径约束的额外字节,从而限制了路径约束的效率分辨率,代码覆盖范围发现和错误暴露;后者的正式化仅关注种子的功率时间表,这与种子中字节的时间表不集中。在本文中,我们提出了一种轻巧的模糊方法,即Truzz,以优化现有的覆盖范围引导的Greybox Fuzzers(CGFS)。为了应对上述两个挑战,Truzz识别与验证检查有关的字节(即,守护错误处理代码的支票),并保护这些字节不经常被突变,使大多数生成的输入检查程序的功能,以拒绝通过验证检查拒绝。当fuzzer推断字节构成关系时,字节关系确定可以减轻加载额外字节的问题。此外,Truzz内提出的路径过渡可以有效地将种子作为新路径,收获许多新的边缘,而新路径可能属于具有许多未发现的代码线的代码区域。实验结果表明,平均而言,Truzz还可以产生流入功能代码的16.14%的输入,而与香草fuzz剂相比,新的新边缘还多24.75%。最后,我们的方法在8个目标程序中暴露了13个错误,其中6个尚未被香草绒毛识别。

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.

扫码加入交流群

加入微信交流群

微信交流群二维码

扫码加入学术交流群,获取更多资源