NEUZZ: Efficient Fuzzing with Neural Program Smoothing
Abstract
Fuzzing已经成为发现软件漏洞的事实上的标准技术。然而,即使是最先进的模糊器也不能很有效地找到难以触发的软件错误。最流行的模糊器使用进化指导来生成可以触发不同错误的输入。这种进化算法虽然快速且易于实现,但常常陷入无效的随机突变序列中。梯度引导优化是进化指导的有前途的替代方案。梯度引导技术已经被证明通过有效利用基础函数的梯度或高阶导数来解决机器学习等领域中的高维结构优化问题,从而显着优于进化算法。然而,梯度引导方法不能直接应用于模糊测试,因为真实世界的程序行为包含许多不连续性,平台和脊,其中基于梯度的方法经常被卡住。我们观察到这个问题可以通过创建一个近似于目标程序的离散分支行为的平滑代理函数来解决。在本文中,我们提出了一种新的程序平滑技术,使用替代神经网络模型,可以逐步学习复杂的,真实世界的程序的分支行为的平滑近似。我们进一步证明,这种神经网络模型可以与梯度引导输入生成方案一起使用,以显着提高模糊测试过程的效率。我们的广泛评估表明,NEUZZ在发现新漏洞和实现更高边缘覆盖率方面,在10个流行的真实世界节目中明显优于10个最先进的灰盒模糊器。 NEUZZ发现31个先前未知的错误(包括两个CVE),其他模糊测试器在10个真实世界的程序中找不到,并且比24小时运行的所有测试的灰盒模糊器实现了3倍的边缘覆盖。此外,NEUZZ在LAVA-M和DARPA CGC bug数据集上也优于现有的模糊器。