Full-speed fuzzing: Reducing fuzzing overhead through coverage-guided tracing

124Citations
Citations of this article
181Readers
Mendeley users who have this article in their library.

This article is free to access.

Abstract

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.

References Powered by Scopus

A critique and improvement of the CL common language effect size statistics of McGraw and Wong

1154Citations
N/AReaders
Get full text

Reevaluating amdahl's law

951Citations
N/AReaders
Get full text

Driller: Augmenting Fuzzing Through Selective Symbolic Execution

770Citations
N/AReaders
Get full text

Cited by Powered by Scopus

Fuzzing: A Survey for Roadmap

164Citations
N/AReaders
Get full text

SQUIRREL: Testing Database Management Systems with Language Validity and Coverage Feedback

72Citations
N/AReaders
Get full text

Seed selection for successful fuzzing

70Citations
N/AReaders
Get full text

Register to see more suggestions

Mendeley helps you to discover research relevant for your work.

Already have an account?

Cite

CITATION STYLE

APA

Nagy, S., & Hicks, M. (2019). Full-speed fuzzing: Reducing fuzzing overhead through coverage-guided tracing. In Proceedings - IEEE Symposium on Security and Privacy (Vol. 2019-May, pp. 787–802). Institute of Electrical and Electronics Engineers Inc. https://doi.org/10.1109/SP.2019.00069

Readers' Seniority

Tooltip

PhD / Post grad / Masters / Doc 83

77%

Researcher 15

14%

Professor / Associate Prof. 8

7%

Lecturer / Post doc 2

2%

Readers' Discipline

Tooltip

Computer Science 111

94%

Engineering 5

4%

Design 1

1%

Nursing and Health Professions 1

1%

Save time finding and organizing research with Mendeley

Sign up for free