定向灰盒模糊测试可以引导模糊器探索特定的目标代码区域,在补丁测试等场景中取得了良好的效果。然而,如果有多个目标代码需要探索,现有的定向灰盒模糊测试器(如AFLGo和Hawkeye)往往会忽略一些目标,因为它们使用距离的调和平均值,倾向于测试可达路径较短的目标。此外,现有的定向灰盒模糊测试器由于程序中存在间接调用,无法计算出准确的距离。此外,现有的定向灰盒模糊测试器无法解决探索和利用问题,种子调度效率低下。针对这些问题,我们提出了一种动态种子距离计算方案,当可达路径遇到间接调用时,动态增加种子距离。此外,种子距离计算可以处理多目标场景下的偏差问题。利用种子距离计算方法,我们提出了一种基于置信上限算法的种子调度算法,以解决定向灰盒模糊测试中的探索和利用问题。我们实现了一个原型 RLTG,并在实际程序上对其进行了评估。原型评估表明,我们的方法优于最先进的定向模糊器 AFLGo。在多目标基准测试 Magma 上,RLTG 以 6.9 倍的速度重现错误,并且比 AFLGo 多发现 66.7% 的错误。
摘要尽管越来越多地研究兴趣,但现有的定向灰色盒模糊剂并不能很好地扩展程序复杂性。在本文中,我们确定了当前有向灰色盒子模糊的两个主要可扩展性挑战。特别是,我们发现传统的覆盖反馈并不总是为达到目标计划点提供卑鄙的指导,并且现有的种子距离机制在具有复杂控制结构的程序中不能很好地运行。为了解决这些问题,我们提出了一个新颖的魔力,名为dafl。dafl选择与目标局部相关的代码零件,并仅从这些部分获得覆盖反馈。此外,考虑到程序执行的数据流语义,它计算精确的种子距离。结果是有希望的。在41个现实世界中,DAFL能够在给定时间内添加4、6、9和5个错误,分别与AFL,AFLGO,Windranger和Beacon相符。此外,在所有模糊剂产生中位数TTE的情况下,DAFL的平均速度至少要快4.99倍,而包括Aflgo,Windranger和Beacon在内的3个最先进的定向绒毛。
摘要 — 定向灰盒模糊测试 (DGF) 可以通过寻求到达程序位置或按顺序探索某些位置来快速发现或重现程序中的错误。然而,由于其静态阶段划分和粗粒度的能量调度,以前的 DGF 工具在面对多个目标位置(简称目标)时表现不佳。在本文中,我们提出了多目标定向灰盒模糊测试,旨在在模糊测试活动中到达多个程序位置。具体而言,我们提出了一种新颖的策略来自适应地协调探索和利用阶段,以及一种新颖的能量调度策略,通过考虑种子和目标位置之间的更多关系。我们在一个名为 LeoFuzz 的工具中实现了我们的方法,并在崩溃重现、真正验证和实际程序中的漏洞暴露方面对其进行了评估。实验结果表明,LeoFuzz 在有效性和效率方面优于六种最先进的模糊测试器,即 QYSM、AFLGo、Lolly、Berry、Beacon 和 WindRanger。此外,LeoFuzz 在实际程序中检测到 23 个新漏洞,其中 11 个已分配 CVE ID。
在本文中,我们提出了一个预测定向灰盒模糊测试器 DeepGo,它可以结合历史和预测信息来引导 DGF 通过最佳路径到达目标站点。我们首先提出路径转换模型,该模型将 DGF 建模为通过特定路径转换序列到达目标站点的过程。突变产生的新种子将导致路径转换,而高奖励路径转换序列对应的路径表示通过它到达目标站点的可能性很高。然后,为了预测路径转换和相应的奖励,我们使用深度神经网络构建虚拟集成环境 (VEE),它逐渐模仿路径转换模型并预测尚未采取的路径转换的奖励。为了确定最佳路径,我们开发了一个强化学习模糊测试 (RLF) 模型来生成具有最高序列奖励的转换序列。RLF 模型可以结合历史和预测的路径转换来生成最佳路径转换序列,以及指导模糊测试突变策略的策略。最后,为了练习高奖励路径转换序列,我们提出了行动组的概念,全面优化模糊测试的关键步骤,实现高效到达目标的最优路径。我们在 2 个基准测试套件(共 25 个程序,100 个目标站点)上对 DeepGo 进行了测试。实验结果表明,与 AFLGo、BEACON、WindRanger 和 ParmeSan 相比,DeepGo 在到达目标站点方面分别实现了 3.23 倍、1.72 倍、1.81 倍和 4.83 倍的加速比,在暴露已知漏洞方面分别实现了 2.61 倍、3.32 倍、2.43 倍和 2.53 倍的加速比。
软件开发是一个持续、渐进的过程。开发人员不断以小批量而非一次性大批量的方式改进软件。小批量的高频率使得使用有效的测试方法在有限的测试时间内检测出错误变得至关重要。为此,研究人员提出了定向灰盒模糊测试 (DGF),旨在生成针对某些目标站点进行压力测试的测试用例。与旨在最大化整个程序的代码覆盖率的基于覆盖范围的灰盒模糊测试 (CGF) 不同,DGF 的目标是覆盖潜在的错误代码区域(例如,最近修改的程序区域)。虽然先前的研究改进了 DGF 的几个方面(例如电源调度、输入优先级和目标选择),但很少有人关注改进种子选择过程。现有的 DGF 工具使用主要为 CGF 定制的种子语料库(即一组覆盖程序不同区域的种子)。我们观察到,使用基于 CGF 的语料库限制了定向灰盒模糊测试器的错误查找能力。为了弥补这一缺陷,我们提出了 TargetFuzz,这是一种为 DGF 工具提供面向目标的种子语料库的机制。我们将此语料库称为 DART 语料库,它仅包含与目标“接近”的种子。这样,DART 语料库就可以引导 DGF 找到目标,从而即使在有限的模糊测试时间内也能暴露漏洞。对 34 个真实漏洞的评估表明,与基于 CGF 的通用语料库相比,配备 DART 语料库的 AFLGo(一种最先进的定向灰盒模糊测试器)可以发现 10 个额外的漏洞,并且平均在暴露时间上实现了 4.03 倍的加速。
软件开发是一个持续、渐进的过程。开发人员不断以小批量而非一次性大批量的方式改进软件。小批量的高频率使得使用有效的测试方法在有限的测试时间内检测出错误变得至关重要。为此,研究人员提出了定向灰盒模糊测试 (DGF),旨在生成针对某些目标站点进行压力测试的测试用例。与旨在最大化整个程序的代码覆盖率的基于覆盖范围的灰盒模糊测试 (CGF) 不同,DGF 的目标是覆盖潜在的错误代码区域(例如,最近修改的程序区域)。虽然先前的研究改进了 DGF 的几个方面(例如电源调度、输入优先级和目标选择),但很少有人关注改进种子选择过程。现有的 DGF 工具使用主要为 CGF 定制的种子语料库(即一组覆盖程序不同区域的种子)。我们观察到,使用基于 CGF 的语料库限制了定向灰盒模糊测试器的错误查找能力。为了弥补这一缺陷,我们提出了 TargetFuzz,这是一种为 DGF 工具提供面向目标的种子语料库的机制。我们将此语料库称为 DART 语料库,它仅包含与目标“接近”的种子。这样,DART 语料库就可以引导 DGF 找到目标,从而即使在有限的模糊测试时间内也能暴露漏洞。对 34 个真实漏洞的评估表明,与基于 CGF 的通用语料库相比,配备 DART 语料库的 AFLGo(一种最先进的定向灰盒模糊测试器)可以发现 10 个额外的漏洞,并且平均在暴露时间上实现了 4.03 倍的加速。
软件开发是一个持续、渐进的过程。开发人员会以小批量而非一次性大批量的方式不断改进软件。小批量的高频率使得使用有效的测试方法在有限的测试时间内检测出错误变得至关重要。为此,研究人员提出了定向灰盒模糊测试 (DGF),旨在生成针对特定目标位置进行压力测试的测试用例。与旨在最大化整个程序的代码覆盖率的基于覆盖范围的灰盒模糊测试 (CGF) 不同,DGF 的目标是覆盖潜在的错误代码区域(例如,最近修改的程序区域)。虽然先前的研究改进了 DGF 的几个方面(例如电源调度、输入优先级和目标选择),但很少有人关注改进种子选择过程。现有的 DGF 工具使用主要针对 CGF 定制的种子语料库(即一组覆盖程序不同区域的种子)。我们观察到,使用基于 CGF 的语料库会限制定向灰盒模糊测试器的发现错误的能力。为了弥补这一缺陷,我们提出了 TargetFuzz,这是一种为 DGF 工具提供面向目标的种子语料库的机制。我们将此语料库称为 DART 语料库,它仅包含与目标“接近”的种子。这样,DART 语料库就可以引导 DGF 找到目标,从而即使在有限的模糊测试时间内也能暴露漏洞。对 34 个真实漏洞的评估表明,与基于 CGF 的通用语料库相比,配备 DART 语料库的 AFLGo(一种最先进的定向灰盒模糊测试器)可以发现 10 个额外的漏洞,并且平均暴露时间加快了 4.03 倍。