Skip to main content
QUICK REVIEW

[论文解读] NEUZZ: Efficient Fuzzing with Neural Program Smoothing

Dongdong She, Kexin Pei|arXiv (Cornell University)|Jul 15, 2018
Software Testing and Debugging Techniques参考文献 76被引用 5
一句话总结

NEUZZ 提出了一种新颖的模糊测试工具,利用基于神经网络的程序平滑技术,对程序分支行为创建可微分的近似模型,从而实现基于梯度的输入生成,提升模糊测试效率。在真实程序上运行24小时后,NEUZZ 比10种最先进的灰盒模糊测试工具表现更优,发现了31个此前未知的漏洞(包括两个CVE),并实现了3倍于其他工具的边覆盖率。

ABSTRACT

Fuzzing has become the de facto standard technique for finding software vulnerabilities. However, even state-of-the-art fuzzers are not very efficient at finding hard-to-trigger software bugs. Most popular fuzzers use evolutionary guidance to generate inputs that can trigger different bugs. Such evolutionary algorithms, while fast and simple to implement, often get stuck in fruitless sequences of random mutations. Gradient-guided optimization presents a promising alternative to evolutionary guidance. Gradient-guided techniques have been shown to significantly outperform evolutionary algorithms at solving high-dimensional structured optimization problems in domains like machine learning by efficiently utilizing gradients or higher-order derivatives of the underlying function. However, gradient-guided approaches are not directly applicable to fuzzing as real-world program behaviors contain many discontinuities, plateaus, and ridges where the gradient-based methods often get stuck. We observe that this problem can be addressed by creating a smooth surrogate function approximating the discrete branching behavior of target program. In this paper, we propose a novel program smoothing technique using surrogate neural network models that can incrementally learn smooth approximations of a complex, real-world program's branching behaviors. We further demonstrate that such neural network models can be used together with gradient-guided input generation schemes to significantly improve the fuzzing efficiency. Our extensive evaluations demonstrate that NEUZZ significantly outperforms 10 state-of-the-art graybox fuzzers on 10 real-world programs both at finding new bugs and achieving higher edge coverage. NEUZZ found 31 unknown bugs that other fuzzers failed to find in 10 real world programs and achieved 3X more edge coverage than all of the tested graybox fuzzers for 24 hours running.

研究动机与目标

  • 为解决进化模糊测试在发现深层、难以触发的漏洞时效率低下的问题。
  • 克服梯度引导优化在具有不连续、不可微行为的真实程序中的局限性。
  • 设计一种可扩展、低开销的方法,利用神经网络近似程序分支行为。
  • 将神经平滑技术与基于梯度的输入生成相结合,提升模糊测试的效率与代码覆盖范围。
  • 在漏洞发现与代码覆盖方面,证明其性能优于现有模糊测试工具。

提出的方法

  • 训练一个前馈神经网络,基于输入数据学习程序控制流分支行为的平滑、可微分近似模型。
  • 利用训练好的神经模型计算梯度,指导变异操作向可能触发新代码路径的输入方向推进。
  • 通过纠正预测错误,增量式地重新训练神经模型,随时间推移逐步提高准确性。
  • 在平滑的代理模型上应用基于梯度的优化(如梯度下降),生成能最大化代码覆盖的新测试输入。
  • 将神经平滑与基于梯度的输入生成集成到完整的模糊测试流水线 Neuzz 中,实现端到端的模糊测试。
  • 采用混合方法,结合神经平滑与传统模糊测试的语料库管理和覆盖率反馈机制。

实验结果

研究问题

  • RQ1基于神经网络的平滑技术能否有效近似真实程序中不连续的分支行为?
  • RQ2在平滑代理模型上进行基于梯度的输入生成,是否能显著提升模糊测试效率,相比基于进化变异的方法?
  • RQ3该方法能否在具有复杂文件格式和高代码复杂度的大规模真实程序上实现可扩展性?
  • RQ4该方法能否发现现有模糊测试工具未能检测到的未知漏洞?
  • RQ5在边覆盖率和漏洞检测方面,Neuzz 的性能与当前最先进的模糊测试工具相比如何?

主要发现

  • Neuzz 在10个真实程序中发现了31个此前未知的漏洞,其中包括两个CVE(CVE-2018-19931 和 CVE-2018-19932),这些漏洞在其他模糊测试工具中均未被检测到。
  • 在相同的一组真实程序上运行24小时后,Neuzz 的边覆盖率是所有测试的灰盒模糊测试工具的3倍。
  • 在 LAVA-M 和 DARPA CGC 漏洞数据集上,Neuzz 在漏洞发现和代码覆盖方面均优于10种最先进的灰盒模糊测试工具。
  • 神经平滑技术使在具有不连续行为的程序中实现有效的基于梯度的优化成为可能,克服了先前基于梯度方法的关键局限。
  • 神经模型的增量式重训练提高了预测准确性,使该方法对初始学习误差具有鲁棒性。
  • 与基于污点分析和符号执行的模糊测试工具相比,Neuzz 展现出更优的可扩展性和性能,后者通常面临高开销或路径爆炸的问题。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。