模糊搜索 机器学习_学习和模糊:将机器学习技术用于模糊测试输入

23cef4be78193cd63125cc0cd4b4fb2c.png

摘要

模糊测试包括使用修改过的或模糊的输入反复测试应用程序,目的是在输入代码中找到安全漏洞。在本文中,我们展示了如何使用样本输入和基于神经网络的统计机器学习技术自动生成适合于输入模糊的输入语法。我们提供了一个详细的案例研究与复杂的输入格式,即 PDF,和一个大型复杂的安全关键解析器,即嵌入在微软的新 Edge 浏览器的 PDF 解析器。我们讨论并测量了学习和模糊目标之间的冲突:学习希望获取格式良好的输入的结构,而模糊则希望打破这种结构,以覆盖意外的代码路径并发现错误。我们也提出了一个新的算法来解决学习和模糊的挑战,它使用一种输入概率分布来智能地引导模糊输入的位置。

1 引言

模糊分析是通过使用修改过的或模糊的输入反复测试解析器来发现输入代码中的安全漏洞的过程。目前使用的模糊技术有三种主要类型:(1)黑盒随机模糊,(2)基于白盒约束的模糊,和(3)基于语法的模糊,可以看作是基于模型的测试的一种变体。黑盒和白盒模糊测试技术是全自动的,并且历史证明在查找二进制格式的文件解析器中的安全漏洞时非常有效。相反,基于语法的模糊处理不是完全自动的:它需要输入被测应用程序的输入格式。这种语法通常是手工编写的,而且这个过程既费力又耗时,而且容易出错。然而,基于语法的模糊识别是目前已知的最有效的模糊识别技术,用于识别具有复杂结构输入格式的应用程序,比如必须接受(不可信的)输入的 web 页面(包括复杂的 HTML 文档和 JavaScript 代码)的 web 浏览器。

本文利用机器学习技术和样本输入,研究了基于语法的模糊识别中输入语法的自动生成问题。在之前的尝试中,我们使用了传统自动机和上下文无关语法学习算法的变体(见第 7 节)。与之前的工作相比,本文首次尝试使用基于神经网络的统计学习技术来解决这个问题。具体地说,我们使用递归神经网络来学习一个同样具有生成能力的统计输入模型:它可以用于根据已学习模型的概率分布生成新的输入(见第 3 节对这些学习技术的介绍)。我们使用的是无监督学习,而且我们的方法是全自动的,不需要任何特定形式的定制。

我们为一个非常复杂的输入格式(PDF)提供了一个深入的案例研究,这种格式非常复杂(见第二节)。我们为这种格式考虑了一个大型、复杂的解析器:嵌入在微软新 Edge 浏览器中的 PDF 解析器。通过一系列详细的实验(见第 4 节),我们讨论了其中蕴含的挑战:如何学习并生成各种格式良好的输入,以最大化解析器代码的覆盖率,同时仍然注入足够的格式不良的输入部分,以执行意外的代码路径和错误处理代码。

我们还提出了一个新的学习和模糊算法(在第三部分),它使用一种输入概率分布来智能地指导模糊输入的位置。实验表明,该算法的性能优于其他基于学习和随机模糊的算法。

本文的技术贡献如下:

l 我们首次尝试使用基于神经网络的学习技术来自动生成适合于模糊目的的输入语法。

l 我们第一次指出并衡量了学习冲突和模糊目标之间的紧张关系。我们观察到的实际结果是,更好的学习并不意味着更好的模糊。

l 我们提出了第一个将学习与模糊相结合的算法,该算法利用学习过的输入概率分布,以便智能地指导模糊格式良好的输入的位置。

论文组织如下:第二节介绍了 PDF 格式的概述,以及这项工作的具体范围。第三部分简要介绍了基于神经网络的学习,并讨论了如何使用这种技术来解决学习和模糊问题。第四节介绍了一些学习和模糊实验的结果与边缘 PDF 解析器。相关工作将在第七节中讨论。我们在第八节中总结并讨论今后工作的方向。

2 PDF 文档的结构

完整的 PDF 格式规范超过 1300 页。该规范的大部分(大约 70%)用于描述数据对象及其在 PDF 文档中各部分之间的关系。

PDF 文件以文本格式编码,其中可能包含二进制信息流(例如,图像,加密的数据)。PDF 文档是由至少一个 PDF 主体组成的序列。一个 PDF 主体由三个部分组成:对象、交叉引用表和尾部。

75ad6e12918f3d0b1e5a040398c508bf.png

图 1 格式良好的 PDF 文档的摘要。(a)是一个样本对象,(b)是一个分段的交叉引用表,(c)是一个尾部。

对象:PDF 文档中的数据和元数据组织在称为对象的基本单元中。对象都被类似地格式化了,如图 1(a)所示。对象的第一行是它的标识符(用于间接引用),它的生成号(如果对象被新版本覆盖,生成号会增加)和“obj”字符串(表示对象的开始)。“endobj”用于关闭对象。

图 1(a)中的对象包含一个字典结构,该结构由“<>”分隔,并以/开头,后跟它们的值。[3 0 R]是对同一文档中标识符为 3、代号为 0 的对象的交叉对象引用。由于文档可能非常大,所以通过交叉引用表访问引用对象。

6154774795f081b736188dfff4e83731.png

图 2 不同类型的 PDF 数据对象。

图 2 显示了对象的其他示例。图 2(a)中的对象具有内容[680.6 680.6],这是一个数组对象。它的目的是保存被另一个对象引用的坐标。图 2(b)是一个字符串文字,保存 PDF 文档部分的书签文本。图 2(c)是一个数值对象。图 2(d)是一个包含多类型数组的对象。这些都是一些对象类型的例子,它们既可以单独使用,也可以作为组成其他对象的基本块(例如,图 1(a)中的 dictionary 对象包含一个数组)。定义和组合对象的规则构成了 pdf 格式规范的大部分内容。

交叉引用表:PDF 主体的交叉引用表包含文档中引用对象的地址(以字节为单位)。图 1(b)显示了一个交叉引用表,其中有一个小节包含标识符 1-5 的 5 个对象的地址和标识符 0 的占位符,该占位符不引用对象。

更新一个文档:PDF 文档可以逐步更新。这意味着,如果 PDF 编写器希望更新对象 12 中的数据,它将启动一个新的 PDF 主体,在其中写入标识符为 12 的新对象,并编写比之前出现的代数更大的代数。然后,它将编写一个指向新对象的新的交叉引用表,并将此主体附加到前一个文档。类似地,通过创建一个新的交叉引用表并将其标记为 free,对象将被删除。我们使用此方法是为了将新对象追加到 PDF 文件中,这将在后面的第四节中讨论。

本文工作的范围:在本文中,我们研究如何利用基于神经网络的学习技术来学习非二进制 PDF 数据对象的语法。这些数据对象是格式化的文本,如图 1(a)和图 2 所示。定义和组合这些数据对象的规则构成了 1300 页 pdf 格式规范的大部分内容。这些规则数量众多且单调乏味,但具有重复性和结构化,因此非常适合使用神经网络进行学习(我们稍后将展示)。相比之下,自动学习定义交叉引用表和拖车的结构(规则),涉及列表、地址、指针和计数器的约束,对于神经网络来说太复杂,前景也不太乐观。我们也不考虑二进制数据对象,这些数据对象是用二进制(例如,图像)子格式编码的,并且全自动黑盒和白盒模糊已经被证明是有效的了。

3 对象内容的统计学习

我们现在描述从一个大型的 PDF 对象语料库中学习 PDF 对象生成模型的统计学习方法。我们将 PDF 对象视为一个字符序列,并使用基于递归神经网络的字符级语言模型来学习序列(PDF 对象)的生成模型。RNN 语言模型已被证明在许多任务如语音识别和笔迹识别中产生令人印象深刻的结果。RNN 模型允许学习可变长度的上下文来预测下一个字符序列,而传统的基于 n 元的方法受到上下文有限长度的限制。给定一个 PDF 对象语料库,RNN 模型可以通过训练一组训练输入和输出序列学习生成模型。输入序列与 PDF 对象中的字符序列对应,通过将输入序列移动一个位置得到相应的输出序列。然后,通过对给定的起始前缀(如“obj”)进行抽样,学习后的模型可以用于生成新的序列(PDF 对象)。

3.1 RNN 语言模型

递归神经网络(RNN)是一个神经网络,作用于一个可变长度的输入序列、隐藏的状态和输出。RNN 用一系列的时间戳来处理输入序列。

3.2 生成新的 PDF 对象

我们使用 RNN 模型来生成新的 PDF 对象。根据对所学分布进行抽样的抽样策略,我们可以获取许多不同的对象生成策略。我们总是以序列的前缀“obj”(表示对象实例的开始)开始,然后查询模型以生成一系列输出字符,直到它产生与对象实例末尾对应的“endobj”为止。现在我们将描述用于生成新对象实例的三种不同的采样策略。

1、无抽样策略:在这种生成策略中,我们利用学习分布预测给定前缀的最优字符。这种策略导致生成的 PDF 对象最有可能是格式良好和一致的,但它也限制了可以生成的对象的数量。给定一个像“obj”这样的前缀,下一个字符的最佳序列将被唯一地确定,因此这种策略将产生相同的 PDF 对象。这一限制使得该策略不能用于模糊。

2、抽样策略:在这种生成策略中,我们使用学习分布对给定的前缀序列中的下一个字符进行采样(而不是选择最上面的预测字符)。该采样策略能够结合模型从训练语料库中的不同对象集合中学习到的不同模式,生成不同的 PDF 对象集合。由于采样的原因,生成的 PDF 对象并不总是保证格式良好,这从模糊的角度来看是有用的。

3、综合:这种抽样策略是由抽样策略和无抽样策略组合而成。它对分布进行采样,只在当前前缀序列以空白结束时生成下一个字符,而它使用分布在标记中间的最佳字符(即前缀以非空白字符结束),类似于第一种策略。与抽样策略相比,此策略预计将生成更多格式良好的 PDF 对象,因为采样仅限于空白字符的末尾。

3.3 模糊采样

算法 1 SampleFuzz

9bccbd34122c8c7b6f6e94c9e03c756b.png

PDF 对象生成模型的最终目标是执行模糊。完美的学习技术总是会生成格式良好的对象,这些对象不会执行任何错误处理代码,而糟糕的学习技术则会生成格式不良的对象,解析器会迅速拒绝这些对象。为了探索这种折衷,我们提出了一种新的采样模糊算法,在采样新对象时执行一些模糊操作。我们使用所学的模型来生成新的 PDF 对象实例,但同时引入异常来执行错误处理代码。

3.4 训练模型

为了评估 RNN 模型的性能,我们训练了多个参数化的模型,学习算法在训练数据集上执行。我们评估了 RNN 模型在 5 个不同时期的训练:10、20、30、40 和 50。我们使用具有 2 个隐藏层的 LSTM 模型(RNN 的变体),每一层包含 128 个隐藏状态。

4 结论与未来工作

如果提供全面的输入语法,基于语法的模糊处理对于具有复杂结构化输入的应用程序是有效的。本文首次尝试使用基于神经网络的统计学习技术,从样本输入自动生成输入语法。我们提出并评估了利用神经网络序列学习的最新进展的算法,即 RNN 神经网络,以自动学习 PDF 对象的生成模型。我们设计了几种抽样技术,从所学的分布中生成新的 PDF 对象。我们表明,与各种形式的随机模糊相比,学习的模型不仅能够生成大量新的格式良好的对象,而且还导致在我们的实验中使用的 PDF 解析器的覆盖率增加。

未来的工作有几个有趣的方向。虽然本文的重点是学习 PDF 对象的结构,但值得探索的是如何尽可能自动地学习涉及交叉引用表、对象体和拖尾节的 PDF 文档的高层层次结构,这些文档在其中维护了某些复杂的不变量。也许逻辑推理技术与神经网络的结合足以实现这一目标。此外,我们的学习算法目前对被测应用程序是不可知的。我们正在考虑使用某种形式的强化学习,通过应用程序的覆盖反馈来指导 RNN 模型的学习,这可能会更明确地指导学习,以增加覆盖。

致谢

本文由南京大学软件学院 2020 级硕士研究生张松涛翻译转述。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值