Skip to main content
QUICK REVIEW

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

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

NEUZZ 提出了一种新颖的模糊测试框架,利用基于神经网络的代理模型来平滑现实程序中不连续的分支行为,从而实现基于梯度的输入生成。通过学习程序行为的可微分近似,NEUZZ 在 10 个真实程序中实现了 3 倍更高的边覆盖率,并发现了 31 个此前未知的漏洞,显著优于 10 种最先进的灰盒模糊测试工具。

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神经代理模型在多大程度上能提升真实软件中的边覆盖率和新漏洞发现能力?
  • RQ4NEUZZ 在效率和有效性方面与最先进的灰盒模糊测试工具相比如何?
  • RQ5代理模型是否可以在模糊测试过程中进行增量更新,以保持准确性并指导探索?

主要发现

  • 在真实程序上运行 24 小时后,NEUZZ 的边覆盖率是所有测试的灰盒模糊测试工具的 3 倍。
  • NEUZZ 在 10 个真实程序中发现了 31 个此前未知的漏洞,而 10 种最先进的模糊测试工具均未检测到。
  • 神经代理模型成功近似了复杂的分支行为,即使在程序存在不连续性的情况下,也实现了有效的基于梯度的输入生成。
  • NEUZZ 在边覆盖率和新漏洞发现方面,显著优于所有 10 种评估的最先进的灰盒模糊测试工具。
  • 将基于梯度的引导与神经代理学习相结合,相比进化方法,能更快收敛到新的代码路径。
  • 在模糊测试过程中对神经模型进行增量优化,提升了长期探索效率和覆盖率。

更好的研究,从现在开始

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

无需绑定信用卡

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