  Seed scheduling is a prominent factor in determining the yields of hybrid
fuzzing. Existing hybrid fuzzers schedule seeds based on fixed heuristics that
aim to predict input utilities. However, such heuristics are not generalizable
as there exists no one-size-fits-all rule applicable to different programs.
They may work well on the programs from which they were derived, but not
others. To overcome this problem, we design a Machine learning-Enhanced hybrid
fUZZing system (MEUZZ), which employs supervised machine learning for adaptive
and generalizable seed scheduling. MEUZZ determines which new seeds are
expected to produce better fuzzing yields based on the knowledge learned from
past seed scheduling decisions made on the same or similar programs. MEUZZ's
learning is based on a series of features extracted via code reachability and
dynamic analysis, which incurs negligible runtime overhead (in microseconds).
Moreover, MEUZZ automatically infers the data labels by evaluating the fuzzing
performance of each selected seed. As a result, MEUZZ is generally applicable
to, and performs well on, various kinds of programs. Our evaluation shows MEUZZ
significantly outperforms the state-of-the-art grey-box and hybrid fuzzers,
achieving 27.1% more code coverage than QSYM. The learned models are reusable
and transferable, which boosts fuzzing performance by 7.1% on average and
improves 68% of the 56 cross-program fuzzing campaigns. MEUZZ discovered 47
deeply hidden and previously unknown bugs--with 21 confirmed and fixed by the
developers--when fuzzing 8 well-tested programs with the same configurations as
used in previous work.
