  Fuzzing has gained in popularity for software vulnerability detection by
virtue of the tremendous effort to develop a diverse set of fuzzers. Thanks to
various fuzzing techniques, most of the fuzzers have been able to demonstrate
great performance on their selected targets. However, paradoxically, this
diversity in fuzzers also made it difficult to select fuzzers that are best
suitable for complex real-world programs, which we call selection burden.
Communities attempted to address this problem by creating a set of standard
benchmarks to compare and contrast the performance of fuzzers for a wide range
of applications, but the result was always a suboptimal decision - the
best-performing fuzzer on average does not guarantee the best outcome for the
target of a user's interest.
  To overcome this problem, we propose an automated, yet non-intrusive
meta-fuzzer, called autofz, to maximize the benefits of existing
state-of-the-art fuzzers via dynamic composition. To an end user, this means
that, instead of spending time on selecting which fuzzer to adopt, one can
simply put all of the available fuzzers to autofz, and achieve the best,
optimal result. The key idea is to monitor the runtime progress of the fuzzers,
called trends (similar in concept to gradient descent), and make a fine-grained
adjustment of resource allocation. This is a stark contrast to existing
approaches - autofz deduces a suitable set of fuzzers of the active workload in
a fine-grained manner at runtime. Our evaluation shows that autofz outperforms
any best-performing individual fuzzers in 11 out of 12 available benchmarks and
beats the best, collaborative fuzzing approaches in 19 out of 20 benchmarks.
Moreover, on average, autofz found 152% more bugs than individual fuzzers, and
415% more bugs than collaborative fuzzing.
