Revisiting Neural Program Smoothing for Fuzzing

Maria-Irina Nicolae, Max Eisele, Andreas Zeller
9/28/2023
cs.SEcs.AIcs.CR

No official code found. Best implementation: boschresearch/neuzzplusplus (24 stars, AGPL-3.0, last commit 2023-11-28). 1 more below.

Abstract

Testing with randomly generated inputs (fuzzing) has gained significant traction due to its capacity to expose program vulnerabilities automatically. Fuzz testing campaigns generate large amounts of data, making them ideal for the application of machine learning (ML). Neural program smoothing (NPS), a specific family of ML-guided fuzzers, aims to use a neural network as a smooth approximation of the program target for new test case generation. In this paper, we conduct the most extensive evaluation of NPS fuzzers against standard gray-box fuzzers (>11 CPU years and >5.5 GPU years), and make the following contributions: (1) We find that the original performance claims for NPS fuzzers do not hold; a gap we relate to fundamental, implementation, and experimental limitations of prior works. (2) We contribute the first in-depth analysis of the contribution of machine learning and gradient-based mutations in NPS. (3) We implement Neuzz++, which shows that addressing the practical limitations of NPS fuzzers improves performance, but that standard gray-box fuzzers almost always surpass NPS-based fuzzers. (4) As a consequence, we propose new guidelines targeted at benchmarking fuzzing based on machine learning, and present MLFuzz, a platform with GPU access for easy and reproducible evaluation of ML-based fuzzers. Neuzz++, MLFuzz, and all our data are public.

View on arXivView PDF

Code Implementations(2)

AGPL-3.0
243C, PythonAug 16, 20232 years agoAGPL-3.0
paper-resource
Apache-2.0
171Shell, PythonAug 16, 20231 years agoApache-2.0

Similar Papers

Cite this paper

@article{nicolae2023revisiting,
  title  = {Revisiting Neural Program Smoothing for Fuzzing},
  author = {Maria-Irina Nicolae and Max Eisele and Andreas Zeller},
  year   = {2023},
  eprint = {2309.16618},
  archivePrefix = {arXiv},
  url    = {http://arxiv.org/abs/2309.16618v1}
}

Add a badge to your README

Shows whether official code is linked for this paper.

Code of Paper badge
[![Code of Paper](https://codeofpaper.com/badge/2309.16618.svg)](https://codeofpaper.com/paper/2309.16618)

Discussion