  Coverage-guided gray-box fuzzing (CGF) is an efficient software testing
technique. There are usually multiple objectives to optimize in CGF. However,
existing CGF methods cannot successfully find the optimal values for multiple
objectives simultaneously. In this paper, we propose a gray-box fuzzer for
multi-objective optimization (MOO) called MobFuzz. We model the multi-objective
optimization process as a multi-player multi-armed bandit (MPMAB). First, it
adaptively selects the objective combination that contains the most appropriate
objectives for the current situation. Second, our model deals with the power
schedule, which adaptively allocates energy to the seeds under the chosen
objective combination. In MobFuzz, we propose an evolutionary algorithm called
NIC to optimize our chosen objectives simultaneously without incurring
additional performance overhead. To prove the effectiveness of MobFuzz, we
conduct experiments on 12 real-world programs and the MAGMA data set.
Experiment results show that multi-objective optimization in MobFuzz
outperforms single-objective fuzzing in the baseline fuzzers. In contrast to
them, MobFuzz can select the optimal objective combination and increase the
values of multiple objectives up to 107%, with at most a 55% reduction in the
energy consumption. Moreover, MobFuzz has up to 6% more program coverage and
finds 3x more unique bugs than the baseline fuzzers. The NIC algorithm has at
least a 2x improvement with a performance overhead of approximately 3%.
