SmartSeed: Smart Seed Generation for Efficient Fuzzing

摘要              

模糊测试是一种自动化的应用程序漏洞检测方法。对于基于遗传算法的模糊测试,它可以对用户提供的种子文件进行变异,以获得一些输入,然后用于测试目标应用程序,以触发潜在的崩溃。如现有文献所示,种子文件的选择对模糊处理的效率至关重要。然而,目前的种子选择策略似乎并不比随机选择种子文件好。因此,本文提出了一种新的通用系统SmartSeed,以实现种子文件的高效模糊化。具体来说,SmartSeed是基于机器学习模型设计的,用于学习和生成高价值的二进制种子。我们在12个输入格式为MP3、BMP或FLV的开源应用程序上评估了SmartSeed和American Fuzzy Lop(AFL)。我们还将smartseed与不同的模糊工具相结合,以检查其兼容性。通过大量的实验,我们发现smartseed有以下优点:首先,它只需要几十秒就可以生成足够的高价值种子。第二,它可以生成具有多种输入格式的种子,对于大多数具有相同输入格式的应用程序,它可以显著提高模糊性能。第三,SmartSeed与不同的模糊工具兼容。总的来说,我们的系统比现有的12个评估应用程序的最佳种子选择策略发现两次以上的唯一崩溃和5040个额外的唯一路径。从SmartSeed发现的崩溃中,我们发现了16个新的漏洞,并收到了它们的CVE ID。 

Index Terms—Fuzzing, vulnerability detection, seed generation.

一.导言

应用程序错误是指计算机系统的应用程序(如操作系统或图像浏览器)中的错误,事故或故障,导致其出现错误。 有几种常见的应用程序错误类型,如缓冲区溢出,整数溢出,UAF等。

应用程序错误可能会造成巨大的危害。 Therac-25的应用程序错误导致了几名患者的死亡[12]。 1996年6月4日,阿丽亚娜5号火箭在升空后仅四十秒就爆炸了。 这是由于申请错误造成的,并且损失了价值5亿美元的货物[16]。 2002年,美国国家标准与技术研究院(NIST)的一项研究估计,应用程序漏洞每年损失595亿美元[21]。 因此,应用程序错误可能导致安全问题和财务损失。 在应用程序错误导致事故或被攻击者利用之前找到并修复它们非常重要。

几十年来,对应用程序错误检测进行了广泛的研究。学术界和工业界有几种现有的主要技术,如动态污点分析,符号执行和模糊测试。

动态污点分析是检测应用程序错误的最常用方法之一[13],[14]。它将不受信任的输入数据标记为污染。然后,分析工具在应用程序运行时跟踪所有受污染数据的轨迹。如果在某些危险的内存中使用了受污染的数据,则分析会认为检测到错误。通过以这种方式发现错误,动态污点分析具有低误报率。但是,由于分析需要在应用程序运行时添加必要的检查并跟踪数据跟踪,因此动态污点分析的执行效率较低。

符号执行是一种通过将整个过程视为求解约束来检测错误的方法[22],[23]。它将目标应用程序的输入视为变量X,并试图找出X与应用程序的执行路径之间的关系。如果符号执行工具运行到分支语句中,它将记录两个约束,每个分支一个约束。因此,当符号执行完成时,用户具有一堆约束,每个约束对应于目标应用程序的一条执行路径。如果用户想要分析其中一条路径,则可以解决相应的约束以获得相应的X.换句话说,用户获得相应的输入来测试目标执行路径。符号执行可以准确定位应用程序中的错误。但是,它的可扩展性很差。当目标应用很大时,最终的等式变得太复杂而无法解决。

模糊测试是检测应用程序崩溃的最有效方法之一。与其他类型方法不同,模糊测试不分析哪些数据或哪些代码导致崩溃。模糊测试工具使用简单而有效的方法来检测崩溃。它会生成大量输入文件。然后,该工具使用这些输入测试目标应用程序,并检测应用程序是否表现异常。如果目标应用程序碰巧发生崩溃,则模糊测试工具将存储触发崩溃的输入文件。通过这种方式,模糊测试工具可以检测崩溃并获得触发崩溃的输入文件。然后,用户可以研究这些输入文件,以确定目标应用程序是否存在错误。但是,由于模糊测试不考虑如何在客观应用程序中触发崩溃,因此检测崩溃的整个过程是盲目的。幸运的是,借助当前强大的计算功能,模糊测试工具可以使用大量输入文件在短时间内多次测试目标应用程序。因此,模糊测试可能会发现更多崩溃。在本文中,我们专注于为模糊测试提供更好的种子集,以发现更多的崩溃。

如今,现代应用程序更大,更复杂,这使得根据需要更难以适应模糊测试工具。为了提高模糊效率,研究人员通常会按照两个方向制定改进策略:设计更好的模糊测试工具并使用更好的模糊化种子组。

在第一个方向之后,有许多工作专注于设计更好的工具或改进当前的模糊测试工具。

基于生成规则的模糊测试工具可以学习目标应用的输入格式[6],[15],[19],[20],[26]。然后,他们可以根据输入格式生成高度结构化的输入文件。当其他模糊测试工具花费大部分时间通过格式检查时,基于生成的模糊测试工具使用生成的高度结构化文件来测试应用程序的执行。因此,基于生成的模糊测试工具更好地检测检查输入文件的语法特征和语义规则的应用程序的崩溃。

基于遗传算法的模糊测试工具不考虑目标应用的输入格式。根据遗传算法,这些工具通过字节翻转,交叉等改变初始输入种子集。然后,为了发现崩溃,工具将初始输入种子集和变异的输入文件作为应用程序的输入。由于它们对目标应用程序几乎没有先验知识,因此基于突变的模糊测试工具可以非常有效地工作。但是,由于简单的崩溃检测策略,有时它们会卡住。为了提高基于突变的模糊测试工具的效率,许多研究将模糊测试工具与其他漏洞检测技术相结合,如静态分析,污点分析和符号执行[4],[5],[7],[17], [18]。还有其他一些研究表明,刺激模糊测试工具来改善覆盖范围和测试低频路径可以提高模糊测试的效率[2],[3],[39],[40],其中提出了基于他们观点的新的模糊测试工具分别。

提高模糊测试工具效率的第二个方向是使用更好的种子组。 Allen和Foote提出了一种算法来考虑参数选择和种子文件的自动选择[25]。该算法在开源Basic Fuzzing Framework(BFF)中实现。 Woo等人。开发了一个分析框架来评估26个随机在线调度算法,这些算法可以安排更好的种子来模糊程序[24]。 2014年,Rebert等人。评估了六种模糊选种策略,并展示了如何选择最佳选择策略[1]等。

然而,目前的种子选择策略有许多不足之处。例如,某些策略需要大量时间来获取种子集[1]。更重要的是,通过我们的实验和上述工作[1]证明,当前的种子选择策略在许多应用场景中表现不稳定。此外,在许多情况下,它们与随机种子选择相比没有明显的优势。

因此,为了解决如何在没有高度结构化的输入格式的情况下为应用程序获得更好的种子集的问题,我们提出了以下启发式问题:

Q1:我们能否快速有效地生产有价值的种子?正如我们之前讨论的那样,许多现有的种子选择策略都很慢,这对于模糊测试来说是不合适的。更重要的是,现有的解决方案在许多情况下无法产生有效的种子。因此,为了解决这些限制,我们的主要目标是研究如何利用最先进的机器学习技术快速自动生成有效的种子,而不是研究如何选择种子。

Q2:我们能否以稳健的方式生产有价值的种子?基于我们已经找到了快速有效的种子生成策略的假设,如果SmartSeed只能为某些特定的输入格式生成有价值的种子,或者我们每次想要使用模糊新应用程序时重新训练模型,它仍然是低效的。相同的输入格式。因此,我们的第二个目标是设计一个强大的种子生成系统。它应该能够为多种输入格式生成有价值的种子。此外,我们只需要为任何类型的输入格式训练模型。然后,此模型生成的文件可以使用此输入格式提高其他应用程序的模糊测试性能。

Q3:我们能否以兼容的方式生成有价值的种子?如果我们的系统只能为特定的模糊测试工具生成有价值的种子,那么对于大多数模糊测试案例来说是没有什么好期望的,为了提高兼容性,我们的目标是设计一种种子生成策略,该策略可以与不同的模糊测试工具结合并提高其性能。

根据上述启发式问题,在本文中,我们提出了一种新的种子生成系统SmartSeed,以提供具有更好种子集的模糊测试工具,如图1所示。

基本上,SmartSeed的工作流程包括三个阶段。

(1)准备。 SmartSeed是一个基于机器学习的系统。 要引导SmartSeed,我们需要准备必要的训练数据。 具体来说,我们收集一些常规文件并使用它们来模糊一些应用程序,通过常用的模糊工具,如American Fuzzy Lop(AFL)[11]。 然后,我们收集触发唯一崩溃的输入文件或新路径作为训练数据。 请注意,此步骤仅用于收集必要的训练数据以引导SmartSeed(然后可用于生成用于模糊许多应用程序的种子),并且可以在实践中轻松实现。 我们在第II-B节中展示了细节。

(2)模型构建。 为了使SmartSeed在实践中易于扩展,我们提出了一种转换机制,将原始训练数据编码为通用矩阵,然后将其用于构建种子生成的生成模型。 利用生成模型,我们生成有效的文件作为种子。

(3)模糊测试。 利用从构建的生成模型生成的种子,我们使用模糊测试工具(例如,AFL)来发现客观应用程序的崩溃。

请注意,整个过程可以形成闭环。 机器学习模型可以生成有效的种子文件,以帮助模糊测试工具发现新的崩溃和客观应用程序的路径。 然后,可以使用触发新崩溃或路径的补充输入文件来优化和增强SmartSeed中的机器学习模型的训练集。

在SmartSeed的帮助下,用户可以有效地生成有价值的输入种子集。 我们对12种开源应用的评估表明,与最先进的种子选择策略相比,SmartSeed显着提高了模糊测试的性能。 本文的主要贡献可归纳如下:

  • 我们提出了一个名为SmartSeed的基于机器学习的系统,用于为模糊测试应用程序生成有价值的二进制种子文件,而无需高度结构化的输入格式。
  • 结合AFL,我们使用输入格式(如mp3,bmp或flv)评估SmartSeed在12个开源应用程序上生成的种子文件。 与最先进的种子选择策略相比,SmartSeed发现了608个额外的独特崩溃和5,040个额外的新路径,而不是现有的最佳策略。
  •  我们进一步将SmartSeed与其他流行的模糊测试工具结合起来检验其兼容性:(1)与AFLFast结合[2],SmartSeed仍然是每种应用的最佳种子策略。(2)SmartSeed + honggfuzz [29]发现六个目标应用程序中有五个最崩溃。(3)在评估的种子选择/生成策略中,只有SmartSeed在使用VUzzer [3]作为模糊测试工具时发现ps2ts和mp42aac上的崩溃。

我们进一步分析了SmartSeed生成的种子集和其他最先进的种子选择策略,并提出了一些有趣的发现,以启发模糊测试的研究。 通过t-SNE [30]可视化,SmartSeed生成的种子文件更接近触发崩溃或路径的最有价值的文件。 同时,触发独特崩溃的SmartSeed文件覆盖了最大的区域,这意味着生成的文件更容易变异为更离散的有价值文件。 更重要的是,我们意识到执行速度是发现崩溃的不正确指标。 然而,更大代的种子有助于模糊测试工具发现更多独特的路径。 总的来说,SmartSeed在9个应用程序中发现了23个独特的漏洞,其中包括16个未被发现的漏洞。 最后,我们开源SmartSeed的代码,预计将有助于未来的模糊研究1。

本文的其余部分安排如下。 在第二节中,我们描述了SmartSeed的细节。 我们在12个应用中评估SmartSeed和现有的最先进的种子选择策略,将SmartSeed与不同的模糊测试工具结合起来,并分析第III节中不同种子选择策略发现的漏洞的结果。 在第八节中,我们进一步分析了不同种子选择策略的表现。 在第五节中,我们进行了一些讨论,并指出了我们工作的局限性。 我们在第VI节中总结了这篇论文。 我们提供更多评估结果,并通过补充文件中的备注总结相关工作。

II.SMARTSEED

A.系统架构

SmartSeed的核心思想是构建一个生成模型。 然后,我们使用此模型快速生成有价值的文件作为模糊工具的输入种子集。

如图2所示,SmartSeed的整个架构可分为4个程序:

(1)训练数据收集:我们引入一个衡量输入文件值的标准,并提出一种获取SmartSeed训练集的方法(部分)II-B)。

(2)原始数据转换:为了处理具有不固定格式或不固定文件大小的文件,我们将原始训练数据的二进制文件转换为统一类型的矩阵(第II-C节)。

(3)模型构建:以矩阵作为训练数据,构建基于Wasserstein生成对抗网络的种子生成模型(第II-D节)。

(4)逆向转换:基于生成模型,我们生成新的矩阵并将它们转换为适当的输入文件,这是程序(2)(第II-E节)的逆过程。

在我们的系统中,使用的模糊测试工具可以是灵活的,即SmartSeed可以与大多数现有的基于突变的模糊测试工具结合使用。 由于AFL是现有效率最高的模糊测试工具之一[11],因此默认情况下,我们选择AFL作为我们实现中的模糊测试工具。

B.培训数据收集

为了构建用于生成有价值的种子文件的机器学习模型,我们需要首先获得初始训练集。当然,我们希望确保训练集中的输入文件真正有价值。否则,SmartSeed可能无法学习“有价值的输入文件”的有用功能,并进一步生成此类文件。因此,我们首先澄清有价值的输入文件。具体来说,在我们的实现中,我们将有价值的文件定义为触发唯一崩溃或应用程序的唯一路径的输入文件。原因如下:(1)由于模糊测试的最终目标是检测更多崩溃,如果输入文件可以触发客观应用程序的独特崩溃,则认为输入文件是有价值的; (2)根据现有研究[2],[3],[39],[40],增加模糊路径的覆盖范围和深度更有可能增加探索崩溃的次数。因此,从这个角度来看,触发新路径的文件也是有价值的。

直观地,我们可以使用现有的种子选择策略来选择一些有价值的输入文件作为训练集。然而,根据现有的研究[1]和我们的实验结果,目前的种子选择策略似乎是不可靠的。然后,我们意识到像AFL这样的模糊测试工具将存储触发独特崩溃或路径的输入文件,这些文件完全符合我们的需求。因此,我们有以下培训数据收集策略:我们可以首先使用从Internet收集的常规输入文件来使用相同的输入格式模糊应用程序。然后,我们收集有价值的输入文件,这些文件触发这些应用程序的唯一路径或独特崩溃,作为SmartSeed的训练集。

需要注意的是,上述训练集的构建并不是SmartSeed在实践中的限制。首先,确定有价值的输入文件的标准是它可以触发崩溃或新路径,这在实践中可以由AFL轻松实现。其次,对于具有相同输入格式的应用程序,例如处理mp3的应用程序,我们可以同时模糊多个应用程序以方便训练集构建过程,同时增加训练集中输入文件的多样性。第三,由于我们可以并行运行许多模糊测试程序,我们可以进一步加快训练集收集过程,例如,我们可以在一周内收集超过20,000个有价文件,用于一种输入格式。因此,我们可以在实践中轻松快速地构建SmartSeed训练集

通过这种方式收集训练集,我们还具有以下优势:

我们可以准确地评估输入文件的值。 训练集中的输入文件当然可以检测到唯一路径或触发某些应用程序的唯一崩溃。 因此,它们具有有用的学习功能。

在模糊测试过程中,我们发现触发崩溃或新路径的许多文件的格式都已损坏。 我们分析原因是文件是根据所采用的遗传算法随机变异的,并且似乎被破坏的文件更有可能触发唯一的崩溃和路径。 但是,很难从Internet收集大量损坏的文件,而SmartSeed可以训练以按预期生成许多损坏的文件。

C.原始数据转换

为了构建通用种子生成模型,我们提出了一种机制,将训练集中的原始输入文件转换为统一类型的矩阵。进行这种转换的原因如下。

首先,我们的目标之一是使SmartSeed处理多种输入格式和不固定的文件大小。然而,为不同种类和不同尺寸的文件调整数据读取模式是不方便的。因此,我们应该找出一种从训练集中读取数据的统一方法。其次,训练集中许多文件的格式已损坏。诸如将bmp图片文件作为三维矩阵读取的正常读取方式可能在许多应用场景中不起作用。第三,基于机器学习算法更好地处理矩阵的定量值而不是某些随机值类型的知识,我们期望找到一种可以将多种类型的文件转换为统一类型的矩阵的方法。最后,我们期望以二进制形式的训练文件表达魔术字节。因为通过这种方式,机器学习模型将更容易学习控制代码执行路径的魔术字节的特征。因此,文件应以二进制形式读取,并期望转换为统一矩阵。

下面,我们介绍原始训练数据转换的主要步骤,如图3所示。

(1)由于所有文件都可以二进制形式读取,我们可以读取任何类型文件的二进制形式并获得二进制字符串。
(2)为了处理如何识别二进制字符串结束的问题,我们用Base64对字符串进行编码。因此,我们有由64种字符和“=”形成的字符串,例如图3中所示的字符串。
(3)现在,由于字符串可能有65个不同的字符,为方便起见,我们将Base64和“=”的字符转换为数字(从0到64)。因此,我们获得了一串数字,如图3所示。这种转换的编码机制如图4所示。
(4)为了节省矩阵中元素的数量,我们将数字串的每六个数字转换为大量的十进制数。然后,我们将十进制系统的数量标准化为[0,0.75418890624](因为65^{6}-1= 75418890624),以确保模型训练的准确性和效率。最后,如果存在空元素,则在矩阵的末尾添加0,如图3所示。

由于较大的数字将以科学记数法形式存储并失去一些准确性,因此矩阵的一个元素只能在十进制系统中存储一个数字,该数字最多从六个数字(从0到64)转换。 但是,如果文件大小在实际应用场景中较小,则用户可以选择小于6的数字。 请注意,将数字转换为一个较大的数字越少,机器学习模型就越容易学习输入文件的功能。 我们在实验中转换了6个数字,以测试机器学习模型最困难的情况。

利用上述方法,我们可以将具有损坏格式或未固定文件大小的原始文件转换为统一类型的矩阵。 这可以显着提高SmartSeed的可扩展性和兼容性。

D.模型构建

最好的现有生成模型之一是生成性对抗网络(GAN)模型,自2014年以来已被广泛用于无监督学习[8]。 GAN是一个由生成模型和判别模型组成的新框架。 生成模型试图生成与训练集中的实际数据类似的伪数据,而判别模型试图将伪数据与真实数据区分开。 两个模型交替地一起工作以相互训练并进一步相互改进。 结果,生成模型将生成太真实的数据,以通过判别模型来区分。 通常,GAN提供的生成模型可以生成比其他算法更真实的数据。 但是,训练GAN模型是不稳定的。 GAN还存在许多问题,例如模型崩溃。

Radford等。 尝试了多种机器学习方案组合,为GAN构建更好的生成和判别模型。 他们提出了深度卷积GAN(DCGAN)模型[9]。 DCGAN可以生成比标准GAN更真实的数据,并且更容易进行培训。 然而,它仍然存在许多问题,包括模型崩溃。

2017年,Arjovsky等人。 介绍了Wasserstein GAN(WGAN)模型[10]。 与其他GAN模型不同,WGAN提高了学习的稳定性。 训练WGAN模型也更容易。 此外,WGAN可以解决大多数应用场景中GAN模式崩溃的问题

因此,出于我们的目的,我们使用WGAN来学习有价值文件的特征,然后生成有价值的种子文件。我们的选择还具有以下优点。首先,WGAN可以自己学习训练集的功能。因此,我们不需要注意特征选择,这非常节省时间。另一个优点是我们可以自由选择合适的机器学习模型作为WGAN的生成模型和判别模型。我们分析了多层感知器(MLP)更多地关注矩阵中的每个定量值,而卷积神经网络(CNN)更关注矩阵的全局特征。然后,为了构建更好的模型,我们测试两个神经网络模型的性能。对于我们的应用,MLP确实比CNN更好地作为WGAN的生成和判别模型。它还需要较少的培训时间。因此,我们选择MLP作为SmartSeed中的模型。现在,基于收集的训练数据,我们可以训练有价值的种子生成的生成模型。

注意,WGAN的详细描述可以在[10]中找到。由于我们在本文中的重点是构建一个基于GAN的高效模糊测试框架并进一步证明其有效性,因此我们将开发改进的GAN模型的研究留作未来的工作。此外,SmartSeed的用户可以根据应用场景选择替代机器学习模型作为生成模型。

E.逆转换

在本小节中,我们将介绍如何使用SmartSeed的生成模型来获得有效的输入种子集。 由于SmartSeed的训练集是许多矩阵,因此训练生成模型以生成类似的矩阵。 要获取用于模糊测试的二进制输入文件,我们必须将生成的矩阵转换为二进制文件。 因此,我们与第II-C节中的上述程序相反。

具体而言,第一步是将矩阵的[0,0.75418890624]元素恢复为大量的十进制系统。 其次,将十进制系统的每个数字转换为六个数字(从0到64),即数字字符串,如图3所示。然后,将数字(从0到64)转换为Base64的字符和“= “即,如图3所示的字符串。最后,将Base64的字符串解码为二进制文件并将其存储在本地。 因此,我们获取以下模糊测试的输入文件。

IV。更深入的分析

为了找出SmartSeed比其他种子选择策略表现更好的原因,我们采用了t-SNE [30],它是可以将相似数据聚合在一起的最佳降维算法之一,可视化分布。我们分析了不同种子选择策略和来自这些种子的变异文件生成的输入种子的相似分布,这是理解模糊性能的新角度(更多细节在补充文件中给出)。

A.执行计数

对于大多数(如果不是全部)现有流行的基于coverage的greybox模糊测试工具(如AFL),它们旨在优先处理变异快速执行的种子文件。这种设计基于这样的直觉:快速执行的种子更有可能变异为也快速执行的输入文件,因此,可以在固定时间内对目标应用程序进行更多测试,然后发生更多潜在的崩溃可能会找到。为了测量种子集(或平均输入文件)的执行速度,我们可以使用执行计数,其被定义为在一段时间内由模糊测试工具执行的测试/执行时间的数量。显然,更大的执行计数意味着可以从种子中更改更多输入文件以测试应用程序,并且平均每个输入文件的执行速度更快。

现在,在与表III中的实验相同的设置下,我们分析由SmartSeed生成的种子的执行计数和最先进的种子选择策略。结果如表VII所示。考虑到表III和表VII中的结果,我们发现:虽然SmartSeed + AFL是大多数评估方案中发现崩溃和路径的最有效策略,但它在大多数情况下没有最大的执行计数。例如,SmartSeed + AFL使用较少的输入文件发现更多崩溃和路径。例如,SmartSeed + AFL是唯一能够发现magick崩溃而其执行次数最少的策略。因此,根据表III和表VII中的结果,我们得出结论,执行计数与发现的崩溃和路径数之间没有明确的相关性。

上述分析引出了一个有趣的见解。这可能是一种误解,即具有更快执行速度的种子文件可以发现更多独特的崩溃或路径。虽然这些种子可以生成更多文件并且可以更多次地测试目标应用程序,但是大多数生成的文件可以执行已知路径,因此可能什么都发现不了。因此,有价值的种子更有利于有效的模糊测试而不是快速执行。

B.生成分析

对于基于遗传算法的模糊测试,我们通常使用生成来测量输入文件和种子文件之间的变异/生成关系。例如,初始种子文件的生成是“1”,从种子文件变异/生成的文件具有“2”的生成,并且类似地,从具有生成k的文件变异/生成的文件有一代k + 1。

然后,在与表III中的实验相同的设置下,我们显示表VII中每种种子策略的所有生成文件中的最大代数。综合考虑表III和表VII中的结果,我们发现一般来说,更多代意味着更好的覆盖性能。在除了avconv之外的评估的12个应用中的11个中,最独特的路径是由最后一代或倒数第二代模糊测试策略发现的。例如,最大的SmartSeed生成量比mp3gain,mpg123,magick,bmp2tiff,sam2p和mp42aac上的其他种子生成/选择策略要大得多,同时,SmartSeed在这些应用程序上具有更好的覆盖性能。

因此,根据我们的结果和分析,我们还有另一个有趣的见解:代数与种子策略的覆盖性能之间存在正相关关系。这可以解释SmartSeed的重大覆盖范围改进。

请注意,许多研究人员为增加覆盖范围做了大量工作以发现更多崩溃。现在我们了解到更好的种子集也可以提高覆盖率。

五,讨论

在本节中,我们从第一节中提出的三个启发式问题开始,对SmartSeed进行了一些讨论。然后,我们将讨论本文的局限性和未来的工作。

Q1:我们能否快速有效地生产有价值的种子?从表II中,SmartSeed的种子生成过程是线性可扩展且快速的。为流行的模糊测试工具生成足够的种子文件只需要几十秒。此外,正如我们在第III部分中评估的那样,当模糊多种实际应用时,SmartSeed明显优于现有的种子选择策略。因此,正如预期的那样,SmartSeed可以快速有效地生成有效的种子。

Q2:我们能否以稳健的方式生产有价值的种子?如第II部分所示,SmartSeed被设计为通用系统,可为应用程序生成有价值的种子,而无需高度结构化的格式。我们还实现了这个系统,为不同格式的应用程序生成种子。如第三部分所示,一旦SmartSeed的生成模型被构建,它可以用于以相同/相似的格式模糊许多应用,同时,其性能明显优于最先进的种子选择技术。因此,根据我们的评估,SmartSeed可以稳健地生成有价值的种子。

Q3:我们能否以兼容的方式生成有价值的种子?如第III部分所示,SmartSeed可与现有流行的模糊测试工具轻松兼容。此外,在大多数情况下,它们的模糊测试性能也可以得到改善。因此,SmartSeed易于扩展和兼容。由于篇幅限制,我们在补充文件中展示了本文的局限性和未来工作。

VI.结论

在本文中,我们提出了一种名为SmartSeed的新型无监督学习系统,用于生成用于模糊测试的有价值的输入种子文件。 与最先进的种子选择策略相比,当我们使用AFL模拟12种不同输入格式的开源应用程序时,SmartSeed发现了608个额外的独特崩溃和5,040个额外的独特路径。 然后,我们将SmartSeed与不同的模糊测试工具结合起来。 评估结果表明,SmartSeed易于兼容,同时非常有效。 为了进一步了解SmartSeed的性能,我们对SmartSeed生成的种子进行了更多的分析,并提出了一些有趣的发现,以启发我们对有效模糊测试的了解。 更重要的是,我们在SmartSeed的9个应用程序中发现了23个独特的漏洞,并获得了16个未发现的CVE ID。 最后,我们将开源SmartSeed系统,预计将有助于未来的模糊测试研究。

发布了43 篇原创文章 · 获赞 23 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/zhang14916/article/details/90343748