GREYONE: Data Flow Sensitive Fuzzing
Shuitao Gan,Chao Zhang,Peng Chen,Bodong Zhao,Xiaojun Qin,Dong Wu,Zuoning Chen
2020-01-01
Abstract:Data flow analysis (e.g., dynamic taint analysis) has proven to be useful for
guiding fuzzers to explore hard-to-reach code and find vulnerabilities. However,
traditional taint analysis is labor-intensive, inaccurate and slow, affecting
the fuzzing efficiency. Apart from taint, few data flow features are utilized.
In this paper, we proposed a data flow sensitive fuzzing solution GREYONE. We
first utilize the classic feature taint to guide fuzzing. A lightweight and
sound fuzzing-driven taint inference (FTI) is adopted to infer taint of
variables, by monitoring their value changes while mutating input bytes during
fuzzing. With the taint, we propose a novel input prioritization model to
determine which branch to explore, which bytes to mutate and how to mutate.
Further, we use another data flow feature constraint conformance, i.e., distance
of tainted variables to values expected in untouched branches, to tune the
evolution direction of fuzzing.
We implemented a prototype of GREYONE and evaluated it on the LAVA data set and
19 real world programs. The results showed that it outperforms various
state-of-the-art fuzzers in terms of both code coverage and vulnerability
discovery. In the LAVA data set, GREYONE found all listed bugs and 336 more
unlisted. In real world programs, GREYONE on average found 2.12X unique program
paths and 3.09X unique bugs than state-of-the-art evolutionary fuzzers,
including AFL, VUzzer, CollAFL, Angora and Honggfuzz, Moreover, GREYONE on
average found 1.2X unique program paths and 1.52X unique bugs than a
state-of-the-art symbolic exeuction assisted fuzzer QSYM. In total, it found 105
new security bugs, of which 41 are confirmed by CVE.