目录

1.介绍

2.AFL的背景

3.框架概述

4.增强学习模糊

5.评估

6.相关工作


模糊是一种常用的动态程序分析技术,用于发现复杂软件中的漏洞。模糊处理涉及用精心设计的恶意输入反签名来呈现目标程序,以导致崩溃、缓冲区溢出、内存错误和异常。以一种有效的方式制造恶意输入是一个困难的开放问题,通常生成此类输入的最佳方法是对预先存在的有效输入(种子文件)应用统一的随机突变。我们提出了一种学习技术,使用神经网络学习过去模糊探索输入文件中的模式,以指导未来的模糊探索。特别是,神经模型学习一个函数来预测输入文件中好的(和坏的)位置,以基于过去的突变和相应的代码覆盖信息来执行模糊突变。我们实现了几个神经模型,包括LSTMs和序列到序列模型,可以编码可变长度的输入文件。我们在最先进的AFL(美国模糊Lop) 模糊器中整合了我们的模型,并在代码覆盖率、独特的代码路径和各种输入格式(包括ELF、PNG、PDF和XML)的崩溃方面显示了显著的改进。

1.介绍

模糊测试[18],[12]是应用最广泛的自动化软件测试技术之一,它成功地自动发现了复杂程序中大量的安全漏洞。模糊测试的关键思想是不断地为压力测试目标程序生成新的恶意输入,以发现意想不到的行为,如崩溃、缓冲区溢出或异常。通常,一个模糊器从一组初始种子输入文件开始,这些文件通过随机突变、解决约束或使用一组人工定义的启发式方法不断转换,以生成恶意输入。由于输入格式可能相当复杂,产生恶意输入通常需要数百万个突变,因此模糊过程可以被视为一个巨大的搜索问题,以确定一组好的突变,从而导致更高的代码覆盖率和破坏力。在本文中,我们提出了一种学习技术,使用神经网络学习输入文件中的模式,从以前的模糊探索,以指导未来的模糊探索。特别是,神经模型学习输入文件中不同位置的分布来应用突变,进而用来指导模糊处理过程,探索新的独特的代码路径和崩溃。

目前的模糊测试技术可以大致分为三大类:i)黑盒模糊测试[18], [14],[1], ii)白盒模糊测试[12],和iii)灰盒模糊测试[26]。黑盒子模糊器将目标程序视为一个没有内部检查的黑盒子。相反,白盒模糊需要了解被测试程序的结构(可能,但不是必须,通过对程序源代码的分析),以生成输入突变,以特定地针对特定的代码片段。灰盒模糊形成了一个中间区域,在这里它们执行有限的源代码检查,例如使用轻量级代码工具计算代码覆盖。虽然各种模糊技术各有优缺点,但基于随机突变的灰盒模糊技术已经产生了像AFL (American Fuzzy Lop)[26]这样的模糊技术,它已经成功地在复杂程序中发现了大量真实世界中的bug。灰盒模糊器的成功很大程度上是因为它的简单性,允许高效的底层实现。

在这篇文章中,我们探索是否有可能使用机器学习来学习一种策略来指导输入变化,这种策略是基于先前执行的输入的历史和代码覆盖信息。更具体地说,我们的目标是学习一个函数,它可以预测输入文件中执行变异的最佳位置。我们首先在有限的时间内运行传统的模糊技术,以获得关于哪些突变导致新的代码覆盖的数据,然后使用这些数据学习一个函数,以指导进一步的输入修改,以生成新的有希望的输入。虽然我们的技术适用于任何模糊系统,但我们在当前最先进的AFL模糊器[26]上实例化它,这是一个基于遗传算法的灰盒模糊器。AFL对一组种子输入文件执行随机突变,并维护一个输入队列,其中包含有可能产生的新输入文件,从而导致执行新的代码路径。由于很难使用随机突变精确地改变输入文件,通常数百万个新生成的输入被丢弃,只有其中的少数输入(在输入队列中)被考虑为未来的突变。我们的技术旨在学习引导这个输入生成过程,以最大限度地减少花费在生成不期望的输入上的时间,从而增加模糊器覆盖新代码路径的机会。

我们实现了几个神经网络体系结构来学习函数来预测预期的代码覆盖映射,并给出一组输入修改。由于输入文件可以是可变长度的,我们使用LSTM (Long - Short termMemory)[15]和带注意力机制的seq-to-seq的架构,可以编码可变长度的序列。在模糊时间,我们使用学习函数来预测完整输入文件的热图,它对应于每个文件位置导致新代码覆盖的突变的可能性。然后我们使用覆盖图对突变位置进行排序。为了训练这些函数,我们首先在有限的时间内对种子文件的子集运行AFL,并获得突变覆盖信息的训练数据。

我们在ELF、PNG、PDF和XML等几种输入格式上评估了我们的技术。我们观察到神经增强AFL对ELF和PNG解析器的代码覆盖率比AFL有显著提高,而对于PDF和XML解析器,其覆盖率是相当的。我们观察到神经增强的AFL能够持续地为relf、PNG和XML解析器探索更多的独特代码路径。最重要的是,ELF和XML解析器的神经引导AFL中观察到的崩溃数量显著增加。我们观察到PDF解析器的覆盖率有一个较小的提高,因为学习的模型需要额外的时间来预测大型PDF输入文件的覆盖率映射,但我们相信这种性能可以通过一些额外的性能工程得到改善。

本文的主要贡献如下:

1. 我们使用不同的神经网络体系结构来模拟学习有前途的位置到输入文件中的模糊的问题。

2.提出了一种有效训练位置预测函数并利用所学函数进行模糊处理的方法。

3.我们在最先进的AFL模糊器中实现了我们学习过的神经模型,并表明它导致了显著的更多的代码覆盖,独特的代码路径,以及不同输入格式的崩溃。

2.AFL的背景

AFL是一种最先进的灰盒进化模糊器。afl有一个简单的策略来制造恶意输入:尝试对种子文件进行许多小的局部突变,以及一些叠加突变,这些突变会同时使种子中的许多位置发生突变。AFL的优势在于它的遗传算法。AFL在编译期间检测源代码,以在执行期间访问代码覆盖。在执行目标程序的过程中,AFL观察被修改的种子引起的代码覆盖率。一个突变的种子被认为是有趣的,如果它诱导了一些从未见过的代码片段被执行,或者如果它改变了以前看到的代码片段的执行频率。这被称为输入增益。AFL保存诱导输入增益的突变输入,并将它们作为进一步的种子文件进行突变。种子池(测试用例集)的不断进化有助于到达许多模糊的代码路径,这些路径需要许多迭代的小突变才能到达。这个池子也经常被挑选出来,以挑选出最好的种子进行变异。AFL的策略已经在成熟的开源项目中发现了许多bug,比如Mozilla Firefox、ffmpeg、OpenSSL、clang等。一个简单的黑盒随机模糊和AFL模糊器的核心算法的一个比较如图1所示。

模糊测试需要大量的计算。即使是很小的输入增益,也需要成千上万的随机突变来发现。然而,并不是所有的突变都是一样的。文件格式及其解析器是异构的。我们相信修改文件头,或其他关键部分更有可能产生输入增益。这是一种可能的情况,因为许多条件分支依赖于小的关键部分。相比之下,包含原始数据的片段不太可能获得收益,因为它们通常是由小块代码在紧密循环中读取的。然而,对于一个复杂的输入格式,如果没有大量的领域专业知识,手动识别这些位置是很困难的。

很自然的下一步是编纂定量技术,自动识别变异的最佳位置。我们研究基于神经网络的机器学习技术,以自动识别输入文件中使用代码覆盖反馈的有用位置。

3.框架概述

我们的框架由一个模糊器和一个模型组成,它突出显示输入文件中有用的位置。在运行时,模糊器为每个种子文件查询模型,并将突变集中在高亮显示的位置。图2显示了突出显示的种子文件示例。给定一个字节格式的输入文件,该模型注释了一个热映射函数,强调了在输入文件中改变每个位置的相对有效性。由于种子文件的长度可变,模型被定义为一个函数族。

图2.PNG文件格式的突出显示的种子文件。 有用的部分显示为红色。 png标头和其他相关字节被标识为有希望进行突变的位置。

为了简单起见,我们把这类函数表示为简单的f,它可以接受任意数量的输入位置作为输入。这个函数将输入文件中的每个位置与产生输入增益的突变概率关联起来。在增强执行过程中,模糊器首先在执行突变之前查询这个模型,并使用生成的热图引导突变到有用的位置。针对少数有用位置的潜在输入在增强执行期间被否决;这样可以避免执行不太可能产生输入增益的输入,从而节省时间。形式上,一个变异的输入被否决,除非它满足公式2所要求的截止值。

其中:

x=输入文件到模糊   =突变输入   ⊕=按位异或  [ _ ]=ceiling function    α=用户定义的截止超参数

表面上,(x ⊕ )是突变输入相对于种子的差值。在公式2的关键思想是考虑差异,修改许多有用的字节位置,如f(x)表示。α参数控制有多少“有用的”字节必须被突变。这种热图的公式功能容易和有效地与任何模糊系统集成,因为它在任何种子文件的开始执行热图计算一次。

为了训练一个模型来学习函数,输入文件和相应的代码覆盖是必需的。具体来说,使用以下元素来训练模型:

x:种子文件被模糊化     b:在x上执行目标程序产生的代码覆盖位图  :变异的种子文件  :在上执行目标程序产生的代码覆盖位图。

请注意,这些数据元素是大多数灰盒模糊器的第一类公民,不需要额外的工具来生成。黑盒模糊还可以很容易地增强,以生成目标程序的代码覆盖信息。

很明显,代码覆盖的缺乏表明了应用于无用位置的突变,但是没有直接的方法通过元组(输入,代码覆盖)确定有用的位置。对于b,,记为(b,)的一些评分,创建一个监督训练数据集对的一般框架是:

对于某一实值γ的截止值。给定训练数据集,目标是学习一个模型,该模型可以将输入文件x映射到差异热图x⊕x′,这反过来又可以用来识别潜在有用的位置,以集中注意力于突变。

上述方法的优点是,它会诱导出得分低于有用突变的无用突变。从数据集进行的模型学习将在监督设置中收到许多评分良好的(x,x⊕x′)对。单个种子通常与许多突变配对。为了使“一对多”关系中的总损失最小,我们学习了差值x⊕x′在给定x:E[(x⊕x′)|x]条件下的期望值。这捕获了在某些位置翻转字节的相对有用性。

原则上,s(b,b′)的有效转换是具有挑战性的。s(b,b′)的理想行为是突出显示导致输入增益的突变,导致在目标程序中出现“从未见过”的执行行为。这种对模糊历史的顺序依赖需要一个以以前的覆盖历史为条件的函数s∗,不幸的是,这对于学习方法建模是困难的。因此,我们选择s∗的直观近似:

其中表示位图b的第i位,|b|表示位图的长度。表I给出了位严格小于函数的真值表。

位严格少函数的真值表。

按位严格小于得分函数突出显示不是在b中执行,而是在中执行的代码部分。这个函数奖励代码覆盖率的增加。在实践中,我们发现这个评分函数可以在广泛的目标程序中给出良好的结果。

四.增强学习模糊

我们的学习模糊增强的设计包括对AFL的修改,以及一个神经网络模型来预测模糊的最佳位置。

A.增强AFL

我们为这项工作增加了AFL模糊器来利用听觉模型。增强的afl在模糊处理前查询每个种子的神经网络模型。神经模型按字节粒度将种子分为有用和无用的部分,在模糊处理中使用字节粒度。针对没有有用部分的突变在执行之前会被否决。这种增强的方法如图3所示。

图3.没有针对有用位置的突变不会被执行。

AFL模糊策略适用于以下小的局部突变。请注意,以下所有突变均在连续切片上穿孔。

位翻转:通过每次翻转[1/2/4]位来改变输入。

字节翻转:通过应用排除或使用0xFF对[1/2/4]字节(s)修改输入。

算术突变:通过在[1/2/4]字节粒度上添加/减去有趣的数量,对输入进行突变。

有趣的替换:通过在[1/2/4]字节粒度上拼接一个“有趣的”值来改变输入。

字典替换:用用户提供的“感兴趣的”值替换字节,从而改变输入。这些长度可能超过4个字节。

以上所有的突变都是小的和局部的变化,对于一个给定的种子来说,它们有有限的数量。在决定性阶段结束后,AFL开始堆积许多这样的小的局部突变,这些突变是非局部的,并且相对于输入具有显著的汉明距离。AFL可以应用在2 ~ 128个堆叠变化之间。除了前面提到的位置突变外,还可以应用以下突变:

随机字节赋值:将随机值赋给随机字节。

删除字节:删除输入文件的一部分。

克隆字节:将字节附加到输入文件的一部分。

覆盖字节:覆盖输入文件的一部分。

由于AFL模糊的位置和上下文不敏感的性质,大多数突变不会产生输入增益。增强模糊的目标是提高突变的命中率。使用模型提供的带注释的种子,避免了不太可能产生输入增益的突变。我们采用高度宽容的否决方法来拒绝那些没有针对有用位置的突变。增强突变算法如图4所示。

图4.AFL增强算法与基准AFL算法的比较。主要的区别是使用QueryModel函数来获得有用和无用位置的bytemask。这个bytemask是按位的,并带有突变diff,以在执行之前批准或拒绝突变。

B.神经网络架构

我们现在描述我们用来学习覆盖热图预测函数的不同神经网络架构。记住,要学习的一组函数是以下格式的:

这类函数的一种可能的编码方案是将输入“原样”提供给底层神经网络。这将涉及到将数据编码为范围为[0,255]的实数浮点数序列。然而,这是次优的,因为二进制数据不一定表示大小,但也可以表示状态。认为每个字节代表一个数字数量是不正确的,它可以表示位掩码或其他非数字值。因此,我们将字节级信息编码为“位序列”格式:

这个函数在一定程度上决定了有用性。我们通过平均每个字节的组成位值来重新构成给定的f。

由于输入的长度变化和序列性质,递归神经网络(RNN)是显而易见的选择。每个输入文件都是顺序数据,目标程序最有可能顺序地解析这些数据。RNNs能够计算[21]。这在标注包含固定偏移量的头信息的文件格式时很有用。rnn已经成功地用于统计机器翻译[6],[3],这项任务是相似的,因为二进制文件格式可以被认为是一种语言。

众所周知,RNNs在较长的序列上存在问题。基于这个原因,我们选择长短时记忆(LSTM)作为我们的基本循环单元[15]。LSTMs将递归单元的主题存储能力扩展到更长的序列。这是通过一个单独的记忆流动途径来实现的。LSTMs还可以“忘记”那些已经失效的记忆,这使得更长的序列具有更强的表现力。回想一下,循环单元计算状态更新和输出,,如下。

LSTM将上述总体框架分解为以下子组件。

其中:

σ=Sigmoid激活函数    W∗=学习权重向量    b∗=学习偏差向量

遗忘门,输入门控制旧的记忆是否被遗忘,当前的输入是否值得记忆。这种相互作用允许LSTMs的内存信息在更长的序列中持续存在。

我们探索了几种使用LSTM作为基本循环单元的体系结构,以确定输入注释和神经体系结构之间是否有亲缘关系。神经机器翻译的最新进展突出了一些重要的结构,如Seq2Seq[6]和带注意力Seq2Seq[3]。当学习二进制格式的结构时,这些以翻译为中心的架构也能很好地工作吗?总的来说,我们评估了以下架构:

LSTM:一个简单的单向LSTM[15]。

双向LSTM:一种双向LSTM,它可以前后查看输入。

Seq2Seq:Sequence-to-sequence architecture

Seq2Seq+Attn:注意Seq2Seq的架构。

表2:枚举所有体系结构,以及它们的可训练参数数目。空白条目表示这个组合没有经过测试。

图5.采用数据收集的方式来收集输入、代码覆盖对。

双向LSTMs按向前和向后的顺序查看输入。一个双向LSTM由两个单向LSTM组成,前向和后向各有一个LSTM。给定一个长度为n的序列,为了计算时间步长t,将前向LSTM 和后向LSTM联合使用。合并函数用于合并单向LSTMs的输出。merge函数可以是将两个大小相似的向量(如sum、multiply或concatenate)组合在一起的众多函数之一。我们选择sum函数用于单层双向LSTMs,而concatenate函数用于具有两层或更多层的LSTMs。

我们还试验了层的数量,以及在每个时间步提供的LSTM输入的块大小。其目的是确定复杂字节预测的程度,以及更复杂的模型是否优于更简单的模型。

我们的模型每次迭代消耗k位,每次迭代也输出k位。我们尝试将输入序列分成64位或128位块。我们提出的架构和可培训参数总数详见表二。

一层双向LSTM使用求和合并函数,而两层双向LSTM使用连接函数。双层双向LSTM的第二层是单向LSTM。Seq2Seq和Seq2Seq+Attn由一个编码层和一个解码层组成。编码层是一个双向LSTM,使用连接函数合并。解码层为单向LSTM。我们没有探索单向Seq2Seq或Seq2Seq+Attn。

五.评估

我们评估增强afl在四个目标程序上的有效性,目的是评估在实践中遇到的各种程序集的增强策略。所选目标程序分别读取png[22]、readelf[10]、mupdf[16]和libxml[24]。我们研究了这些程序的几个指标,其中主要是代码覆盖率和输入增益。代码覆盖率和输入增益是AFL首先使用的类度量。输入增益是由在模糊器运行时引起输入增益的输入总数来测量的。同时也测量了加强型AFL发生的事故数量。

我们从大样本人群中为每个项目随机选取了180个种子文件。将种子文件平均分为训练集和测试集,为了收集训练模型所需的数据,我们运行了24小时的AFL。输入,代码覆盖对以1%的均匀采样率采集。图5突出显示了此收集策略。在训练之前,使用cutoff为0的严格小于函数对数据进行过滤,形成训练集。即给定一个集合(x,x′,b,b′),构造一个训练集XY。

表3.枚举所有程序,所有架构在24小时评估运行后报告平均代码覆盖率。每个程序的主要执行策略都用粗体表示。

模型实现是使用高级深度学习库Keras[7]设计的。我们选择使用Tensorflow[2]作为Keras的底层后端。

训练数据在长度上是异构的,可以由长度高达200kb的非常大的输入文件组成。为了减轻这些问题,将大于10kB的输入数据分割成一组10kB的段。分割后,根据长度对数据进行丢弃处理,并填充到最近的块大小边界。训练的每一步都是选择一个与箱子大小成比例的箱子,并在所选择的箱子中构造一个小批量的元素。模型训练了12小时以确保收敛,训练是在Nvidia K40M gpu和12gb RAM上进行的。我们使用了平均绝对误差(MAE)的损失函数,并使用学习率为5×10−5的Adam optimizer[17]来训练模型。

虽然增强的AFL可以利用以前学习的模式来提高突变的命中率,但它的探索效果不如基准的AFL算法。为了抵消这种趋势,对于每一种增强的种子,afl可以以50%的概率选择使用非增强的模糊策略。这使得勘探和开发之间能够很好地结合。目前有许多技术可以更好地实现勘探与开发的平衡,我们希望在今后的工作中继续努力。

为了评估所学模型,我们在种子文件的测试集上重新启动AFL和增强-AFL。这个评估阶段持续了24小时。为了最小化差异,许多AFL实例同时运行。对于AFL,在一个16核的机器上运行了16个AFL实例。对于增强的AFL,在一个16核的机器上运行了8个AFL实例,其中8个核保留用于模型查询。对于大多数验证,我们使用Azure标准F16s机器,配置2.40GHz的Intel Xeon E5-2673 v3 cpu和32GB RAM。由于内存不足的问题,Azure标准D14大小的vm只在少数情况下使用。Azure Standard dd14 vm与标准f16相同,只是RAM为112gb。在验证期间没有启用动态CPU频率伸缩。执行24小时后,对多个实例的数据取平均值。

A. 代码覆盖率

表III中报告了所有程序的所有架构的代码覆盖率。我们可以观察到readelf和readpng程序的代码覆盖率度量的显著改进。对于这些程序,几乎所有的模型都比基准测试(基线AFL)做得更好。通常,最简单的单向模型优于其他更复杂的模型。然而,使用mupdf和libxml并没有观察到在代码覆盖率度量方面的显著改进。对于mupdf,大多数增强模型的性能都低于基准测试。唯一例外的是mupdf的Seq2Seq+Attn模型,它的性能比基准测试高出一小部分。对于libxml,所有模型在代码覆盖率方面的表现都是类似的。报告的代码覆盖率都以2.10%为中心,并且在误差范围内。

B.输入增益

衡量效能的第二个标准是输入增益。输入增益是在目标程序中发现的表现出从未见过的行为的路径的数量。这种行为的特征是执行一个新的代码块,或者增加先前执行的代码块的执行频率。图6中给出了每个程序的两个最高性能模型的输入增益与时间图。

对于除PDF之外的所有程序,可以观察到输入增益的显著改善。这是readpdf和readelf的期望,因为这些程序的代码覆盖率通常会增加。但是,在验证期间,libxml并没有显示代码覆盖率的增加。这可能意味着使用不同的执行频率更彻底地执行了相同的代码段。

图6. 输入增益与时间图。从左上角到右下角:readelf, readpng, mupdf, libxml。x轴表示从开始到现在的时间,以小时为单位。y轴表示找到的代码路径的唯一枚举。

mupdf解析器在代码覆盖率或输入增益方面没有表现出显著的改进。我们相信这显示了所提议的设计中模型查询与执行之间的权衡。由于典型的PDF文件的大小相当大(超过100kb),模型查询时间会对增强- afl的性能产生负面影响。在模糊每个种子文件之前,必须为这个种子文件查询模型,对于这样大的种子文件可能需要几秒钟。在fuzzer的运行期间,这个查询时间会对整个fuzzer性能产生负面影响,因为在模型查询上经常会阻塞执行。我们相信,通过对模型查询的put和性能改进,将提高增强- afl技术在处理冗长格式(如PDF)时的效率。

c .崩溃

度量模糊效果最重要的指标是发现的恶意输入的数量,我们通过记录执行期间发现的唯一崩溃的数量来度量。我们只观察到readelf和libxml的崩溃,因此忽略了readpng和mupdf的图。图7显示了readelf和libxml随时间推移发现的独特崩溃图。

增强AFL的表现优于AFL基准的两个程序。对于readelf,在24小时标记中观察到几个独特的崩溃(超过20个),在基准测试中没有观察到崩溃。类似地,在24小时内,增强AFL会发现大约110个libxml的唯一崩溃,而AFL会发现大约80个唯一崩溃。这些结果表明,与基线相比,有了显著的改善。

独特的崩溃与时间图。从左到右:readelf, libxml。x轴表示从开始到现在的时间,以小时为单位。y轴表示找到的唯一崩溃的数量。

这些结果显示了对AFL的改进,一种最先进的遗传算法灰盒模糊。使用机器学习来预测感兴趣的模糊位置,我们能够提高各种目标程序和文件格式的模糊性能。因此,我们认为机器学习引导的模糊是一种很有前途的技术来改善灰盒和黑盒模糊,并且类似的技术可以用于学习其他几个模糊参数在未来。

6.相关工作

我们现在简要地讨论一些有关使用机器学习技术(特别是基于神经网络的模型)来指导程序模糊和程序分析的相关工作。

a)基于语法的模糊化机器学习:Learn&Fuzz[13]方法是最近开发的,用于训练神经网络(LSTMs)学习基于语法的模糊化输入格式的生成模型。对于复杂的输入格式(如PDF),随机改变输入将很快导致无效的输入,因此通常使用基于语法的模糊技术来定义此类格式的输入语法。然而,手工编写语法是冗长而容易出错的,特别是对于复杂的输入格式。Learn&Fuzz提供了一种使用LSTMs来学习PDF对象的语法(分发)的技术,使用一个字符级模型,然后可以对该模型进行采样以生成新的输入。我们的技术不是学习语法,而是通过神经网络学习一个函数来预测种子文件中可能发生的位置,从而进行突变。我们相信我们的技术可以补充学习和模糊,以进一步改善基于神经语法的模糊。

b)用于Fuzzing的Bandit公式:我们的工作主要是受到Bandit优化技术的启发。将模糊和bandit优化与模糊配置调度[25]相结合进行了一些工作。特别是,woozzer等人[25]将模糊器配置选项建模为一个bandit问题。然而,我们的工作进一步采用了这种方法,将模糊建模为一个强盗问题。我们认为,模糊是一个离散优化问题,可以通过识别收益最大的字节位置子集来简化,而识别最优字节位置是一个通过多武装匪徒方法最好地解决的问题。这种“字节即强盗”的方法值得进一步研究,特别是,我们希望进一步阐明识别最佳字节的理论上的最佳方法。

c)进化模糊:进化模糊使用执行反馈来指导未来的突变决策。早期沿着这个方向进行的研究包括DeMott等人[8]的进化模糊系统(EFS)。EFS使用遗传算法技术来进化种子池,其中适应度函数定义为诱导的代码覆盖率。EFS使用了几种复杂的交叉方法来进化种子池。与AFL相比,EFS仅使用基因交叉方法来“模糊”种子文件集。最近在进化模糊方面的进展包括基于污染的定向白盒模糊[11]和VUzzer[20]。基于污染的定向白盒模糊使用动态污染跟踪来识别可能导致危险代码段被执行的种子部分。突变是针对这些部分来发现细菌的。vuzzer采用类似的方法使用动态污染跟踪,但不尝试识别和关注危险的代码段。VUzzer的工作目标是增加代码覆盖率,并彻底地执行代码。

上述技术的共同主题是依赖于过去执行行为的反馈循环。虽然我们的方法也包含反馈回路,但我们倾向于使用神经方法来指导未来的模糊行为。这是新颖的,因为它易于开发和集成。我们的神经引导方法可以使用现成的深度定位libaries快速开发,并且可以轻松集成到现有的Greybox或Blackbox fuzzer中。该方法具有较低的开销,因为模型简单,查询时间短,覆盖图计算效率高。

d)用于程序分析的神经网络:最近提出了一些用于训练神经网络进行程序分析的工作,如程序修复[4],程序优化[5],程序合成为[19],[9],[23]。这些工作学习程序的神经表示来执行各种预测任务,而在我们的工作中,我们训练神经模型来代替表示输入文件。此外,我们的工作提出了训练神经网络学习输入文件中有希望的模糊位置的第一个应用。

我们演示了一种新的基于神经的增强灰盒模糊。这种增强标识了种子文件中要进行模糊处理的有用位置。我们认为大多数二进制文件格式包含小段,这些小段高度影响程序的执行行为。关注这些小的部分是有用的,因为它们可能在目标程序中产生新的执行行为。

我们的增强主要是针对灰盒fuzzers,如AFL。Greybox fuzzers是完美的测试平台,因为它们为每次执行提供代码覆盖率反馈。这种反馈被用来训练一个神经网络模型来识别最有希望的模糊位置。我们的方法简单,易于与大多数灰盒模糊器集成。

我们展示了循环模型(如LSTM)可以很好地完成这项任务。这个任务可以看作类似于统计机器翻译。近年来,递归模型在统计机器翻译中取得了很大的成功。我们在各种目标二进制文件格式(如PDF、XML、PNG和ELF)上评估了模型。该模型显著优于最先进的AFL模糊在所有目标程序除PDF。一般来说,最简单的模型优于更复杂的模型。我们相信,在PDF上的模型性能显示了在大型输入文件上查询模型的成本效益权衡。然而,我们相信通过一些额外的性能工程可以改进像PDF这样的大文件格式的结果。

虽然我们的结果是有希望的,但仍有许多进一步工作的途径。我们在一个离线监督的环境中训练我们当前的模型。这项工作的自然延伸将是使用强化学习使在线学习,这样模型就会随着模糊过程的进行而不断改进。我们相信,模糊可以通过“反馈回路模糊”得到极大的增强,即过去的执行行为指导未来的突变。我们设想一种新型的模糊控制器,它利用机器学习模型来指导它的突变决策。Fuzzing提供了一个高保真结构化数据的宝库。信噪比高。沿着这条大道的另一种可能的延伸是使用生成模型。我们的模型是限制性的,即AFL提出的突变被否决。一种更有趣的方法是生成应用于种子文件的突变,我们计划在不久的将来考虑这些变化。https://arxiv.org/pdf/1711.04596.pdf    英文原文

Not all bytes are equal: Neural byte sieve for fuzzing(不是所有字节都是相等的:用于模糊的神经字节过滤)相关推荐

  1. FedNCF:Federated Neural Collaborative Filtering | 联邦神经协同过滤

    论文信息 标题:FedNCF: Federated Neural Collaborative Filtering 作者:Vasileios Perifanis ∗ ^* ∗, Pavlos S. Ef ...

  2. java中byte、short、char、boolean实际都是按照int处理的!

    byte.char.short.boolean四种类型在汇编期或运行期间采取和int类型一样的存储方式,在计算时会先转换为int类型,后进行计算.所以两个short类型数据做算数运算,结果却为int类 ...

  3. 【科研导向】Outer Product-based Neural Collaborative Filtering (ConvNCF)基于外积的神经协同过滤<论文理解代码分析>

    Outer Product-based Neural Collaborative Filtering--IJCAI'18 文章简介 一.摘要解析 二.技术要点 三.实验部分 代码解析 一.模型构建 二 ...

  4. 【科研导向】Neural Collaborative Filtering 神经协同过滤 <论文理解代码分析>

    Neural Collaborative Filtering--WWW'17 文章简介 一.摘要解析 二.技术要点 三.实验部分 代码解析 一.模型构建 二.难点问题 未来展望 文章简介 该文由何向南 ...

  5. 神经协同过滤Neural Collaborative Filtering(NCF)

    Neural Collaborative Filtering 简述 矩阵分解(MF) NCF 1.GMF 广义矩阵分解 2.MLP(多层感知机) 3.NeuMF 实验 简述 这篇论文是何向南博士所写 ...

  6. java redis自增操作_【转载】关于spring boot使用redis的increment()方法自增问题

    需求是限制IP频繁访问某接口,用的方案是使用redis记录访问IP的值,先设定好初始值,每次访问自增,达到某限定值后,进行阻止. 用的是自定义工具类,使用spring封装的spring-data-re ...

  7. 九、网络协议和网络编程

    1.TCP建立连接的过程. 在谈及TCP建立连接和释放连接过程,先来简单认识一下TCP报文段首部格式的的几个名词(这里只是简单说明,具体请查看相关教程)  序列号seq:占4个字节,用来标记数据段的顺 ...

  8. Java基础4IO技术

    第一部分:语言基础 第二部分:面向对象 第三部分:容器 第四部分:IO 第十章 IO技术 10.1 基本概念和IO入门 对于任何程序设计语言而言,输入输出(Input/Output)系统都是非常核心的 ...

  9. Jt808协议头部包解析

    1. 协议结构 2. 协议说明 消息ID(0-1) 消息体属性(2-3) 终端手机号(4-9) 消息流水号(10-11) 消息包封装项(12-15)byte[0-1] 消息ID word(16) by ...

最新文章

  1. 44、Power Query-具体查看函数的方法
  2. 面具卡米怎么删模块_魔兽8.3咋肥事——面具带几个收益高?对小怪宝箱水晶有加成吗?...
  3. ActiveMQ的介绍及使用实例.
  4. WebApp匯入資料之From Excel
  5. P4123-[CQOI2016]不同的最小割【网络流,分治】
  6. php大量数据库抽象,PHP系列(十二)数据库抽象层pdo
  7. 可以改动的option组件_告别秃头!设计让开发者省心的React组件(内含详细代码)...
  8. 国家计算机二级access考试试题,全国计算机二级access试题及答案
  9. .net流行面试试题(基础但重要)
  10. 【BZOJ2038】【2009国家集训队】小Z的袜子(hose) 分块+莫队
  11. MySQL Data目录查找并迁移到data文件夹中
  12. MEMS惯性传感器初始姿态角的确定
  13. 计算机启动时默认输入法设置,电脑开机输入法设置 开机默认输入法设置教程...
  14. Delphi 安卓11 中文语音合成(中文朗读)注意内容
  15. Python Tesseract-orc 识别简单验证码
  16. Python习题——2018-03-28作业
  17. UVA 12307 Smallest Enclosing Rectangle(旋转卡壳)
  18. VSCode设置网页代码实时预览
  19. AE基础之添加点、线、面要素
  20. 中科大DIA复习内容

热门文章

  1. SQL:SELECT语句
  2. 梅耶尔致信员工:我深爱雅虎 仍计划留下
  3. 利用css 使div上下左右移动
  4. 论文写作笔记3:JAMIA-相关论文
  5. 1025.在线视频—shell脚本系列讲座(三)千机变—脚本变量
  6. sqlalchemy批量删除数据、全量删除
  7. R语言实战:机器学习与数据分析源代码6(最终弹)
  8. document.documentElement.clientWidth
  9. java panel分隔线_java 如何在jpanel上画垂直线、水平线、平行线?
  10. dhe(dhea的副作用)