摘要 — 定向灰盒模糊测试 (DGF) 可以通过寻求到达程序位置或按顺序探索某些位置来快速发现或重现程序中的错误。然而,由于其静态阶段划分和粗粒度的能量调度,以前的 DGF 工具在面对多个目标位置(简称目标)时表现不佳。在本文中,我们提出了多目标定向灰盒模糊测试,旨在在模糊测试活动中到达多个程序位置。具体而言,我们提出了一种新颖的策略来自适应地协调探索和利用阶段,以及一种新颖的能量调度策略,通过考虑种子和目标位置之间的更多关系。我们在一个名为 LeoFuzz 的工具中实现了我们的方法,并在崩溃重现、真正验证和实际程序中的漏洞暴露方面对其进行了评估。实验结果表明,LeoFuzz 在有效性和效率方面优于六种最先进的模糊测试器,即 QYSM、AFLGo、Lolly、Berry、Beacon 和 WindRanger。此外,LeoFuzz 在实际程序中检测到 23 个新漏洞,其中 11 个已分配 CVE ID。
定向灰盒模糊测试可以引导模糊器探索特定的目标代码区域,在补丁测试等场景中取得了良好的效果。然而,如果有多个目标代码需要探索,现有的定向灰盒模糊测试器(如AFLGo和Hawkeye)往往会忽略一些目标,因为它们使用距离的调和平均值,倾向于测试可达路径较短的目标。此外,现有的定向灰盒模糊测试器由于程序中存在间接调用,无法计算出准确的距离。此外,现有的定向灰盒模糊测试器无法解决探索和利用问题,种子调度效率低下。针对这些问题,我们提出了一种动态种子距离计算方案,当可达路径遇到间接调用时,动态增加种子距离。此外,种子距离计算可以处理多目标场景下的偏差问题。利用种子距离计算方法,我们提出了一种基于置信上限算法的种子调度算法,以解决定向灰盒模糊测试中的探索和利用问题。我们实现了一个原型 RLTG,并在实际程序上对其进行了评估。原型评估表明,我们的方法优于最先进的定向模糊器 AFLGo。在多目标基准测试 Magma 上,RLTG 以 6.9 倍的速度重现错误,并且比 AFLGo 多发现 66.7% 的错误。
在本文中,我们提出了一个预测定向灰盒模糊测试器 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 倍的加速比。
新提交的提交容易将漏洞引入程序。作为一种有前途的对策,可以使用定向灰盒模糊测试器通过将提交更改位置指定为目标来测试提交更改。但是,现有的定向模糊测试器主要侧重于达到单个目标,而忽略了对其他受影响代码的多样化探索。因此,它们可能会忽略在远离更改位置的位置崩溃的错误,并且在多目标场景中缺乏直接性,这在提交测试的背景下都很常见。在本文中,我们提出了一种直接灰盒模糊测试器 WAFLG O ,以有效发现提交引入的漏洞。WAFLGO 采用一种新颖的关键代码引导输入生成策略来彻底探索受影响的代码。具体而言,我们确定了两种类型的关键代码:路径前缀代码和数据后缀代码。关键代码首先引导输入生成逐渐、增量地到达更改位置。然后,在保持关键代码可达性的同时,输入生成策略进一步鼓励在探索受影响代码时生成输入的多样性。此外,WAFLGO 引入了一种轻量级多目标距离度量,用于直接和彻底检查所有更改点。我们实现了 WAFLG O,并使用提交引入的 30 个真实错误对其进行了评估。与 8 种最先进的工具相比,WAFLGO 实现了平均 10.3 × 的加速。此外,WAFLGO 在测试最近 50 次提交的真实软件(包括 libtiff、fig2dev 和 libming 等)时发现了 7 个新漏洞,其中包括 4 个 CVE。
软件开发是一个持续、渐进的过程。开发人员不断以小批量而非一次性大批量的方式改进软件。小批量的高频率使得使用有效的测试方法在有限的测试时间内检测出错误变得至关重要。为此,研究人员提出了定向灰盒模糊测试 (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 倍的加速。
覆盖引导模糊测试 (CGF) 已成为最流行和最有效的漏洞检测方法。它通常被设计为自动化的“黑盒”工具。安全审计员启动它,然后只需等待结果。然而,经过一段时间的测试,CGF 很难逐渐找到新的覆盖范围,因此效率低下。用户很难解释阻止模糊测试进一步进展的原因,也很难确定现有的覆盖范围是否足够。此外,没有办法交互和指导模糊测试过程。在本文中,我们设计了动态定向灰盒模糊测试 (DDGF),以促进用户和模糊测试器之间的协作。通过利用 Ball-Larus 路径分析算法,我们提出了两种新技术:动态自省和动态方向。动态自省通过编码和解码揭示了路径频率分布的显著不平衡。基于自省的洞察力,用户可以动态地指导模糊测试器实时将测试重点放在选定的路径上。我们基于 AFL++ 实现 DDGF。在 Magma 上的实验表明,DDGF 能够有效帮助模糊测试器更快地重现漏洞,速度提升高达 100 倍,而性能开销仅为 13%。DDGF 展示了人在回路中模糊测试的巨大潜力。