首页> 外文会议>IEEE Symposium on Security and Privacy >Full-Speed Fuzzing: Reducing Fuzzing Overhead through Coverage-Guided Tracing
【24h】

Full-Speed Fuzzing: Reducing Fuzzing Overhead through Coverage-Guided Tracing

机译:全速模糊测试:通过覆盖指导的跟踪减少模糊测试的开销

获取原文

摘要

Coverage-guided fuzzing is one of the most successful approaches for discovering software bugs and security vulnerabilities. Of its three main components: (1) test case generation, (2) code coverage tracing, and (3) crash triage, code coverage tracing is a dominant source of overhead. Coverage-guided fuzzers trace every test case's code coverage through either static or dynamic binary instrumentation, or more recently, using hardware support. Unfortunately, tracing all test cases incurs significant performance penalties--even when the overwhelming majority of test cases and their coverage information are discarded because they do not increase code coverage. To eliminate needless tracing by coverage-guided fuzzers, we introduce the notion of coverage-guided tracing. Coverage-guided tracing leverages two observations: (1) only a fraction of generated test cases increase coverage, and thus require tracing; and (2) coverage-increasing test cases become less frequent over time. Coverage-guided tracing encodes the current frontier of coverage in the target binary so that it self-reports when a test case produces new coverage--without tracing. This acts as a filter for tracing; restricting the expense of tracing to only coverage-increasing test cases. Thus, coverage-guided tracing trades increased time handling coverage-increasing test cases for decreased time handling non-coverage-increasing test cases. To show the potential of coverage-guided tracing, we create an implementation based on the static binary instrumentor Dyninst called UnTracer. We evaluate UnTracer using eight real-world binaries commonly used by the fuzzing community. Experiments show that after only an hour of fuzzing, UnTracer's average overhead is below 1%, and after 24-hours of fuzzing, UnTracer approaches 0% overhead, while tracing every test case with popular white- and black-box-binary tracers AFL-Clang, AFL-QEMU, and AFL-Dyninst incurs overheads of 36%, 612%, and 518%, respectively. We further integrate UnTracer with the state-of-the-art hybrid fuzzer QSYM and show that in 24-hours of fuzzing, QSYM-UnTracer executes 79% and 616% more test cases than QSYM-Clang and QSYM-QEMU, respectively.
机译:覆盖率指导的模糊测试是发现软件错误和安全漏洞的最成功方法之一。它的三个主要组成部分:(1)测试用例生成,(2)代码覆盖率跟踪,以及(3)崩溃分类,代码覆盖率跟踪是开销的主要来源。覆盖率指导的模糊器通过静态或动态二进制工具或更近期地使用硬件支持来跟踪每个测试用例的代码覆盖率。不幸的是,跟踪所有测试用例会导致严重的性能损失,即使绝大多数测试用例及其覆盖率信息被丢弃,因为它们不会增加代码覆盖率。为了消除覆盖率指导的模糊器的不必要的跟踪,我们引入了覆盖率指导的跟踪的概念。覆盖率指导的跟踪利用了两个观察结果:(1)仅一小部分生成的测试用例会增加覆盖率,因此需要进行跟踪; (2)随着时间的推移,增加覆盖率的测试用例变得越来越少。 Coverage-guided跟踪将目标二进制文件中的coverage的当前边界编码,以便在测试用例产生新的coverage时自动报告,而不进行跟踪。这充当跟踪的筛选器;将跟踪的费用限制为仅增加覆盖率的测试用例。因此,覆盖率指导的跟踪交易增加了处理时间的覆盖率增加的测试用例,而减少了处理时间的非覆盖率增加的测试用例。为了显示覆盖率指导的跟踪的潜力,我们创建了一个基于静态二进制工具或Dyninst的实现,称为UnTracer。我们使用模糊社区常用的八个真实二进制文件来评估UnTracer。实验表明,仅经过一个小时的模糊测试,UnTracer的平均开销就低于1%,经过24小时的模糊测试,UnTracer的开销达到了0%,同时使用流行的白盒和黑盒二进制跟踪器AFL-跟踪了每个测试用例。 Clang,AFL-QEMU和AFL-Dyninst分别产生36%,612%和518%的间接费用。我们进一步将UnTracer与最新的混合模糊器QSYM集成在一起,结果表明,在24小时的模糊测试中,QSYM-UnTracer执行的测试用例分别比QSYM-Clang和QSYM-QEMU多了79%和616%。

著录项

相似文献

  • 外文文献
  • 中文文献
  • 专利
获取原文

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号