Smart Greybox Fuzzing

Abstract

P1

CGF通过随机的翻转、删除、分成小块来产生新文件,但是这样产生的很多文件相对于应用程序所需要的复杂文件格式是无效的

P2

SGF通过现实文件级别的变异操作来保证文件的有效性,这样产生的文件更加容易通过程序的解析阶段,可以暴露更深层的问题

P3

探索了更多的路径,并暴露了更多的问题

Introduction

P1

灰盒测试只需使用轻量级的instrumentation

P2

被变异的输入执行的控制流通过考察来确定他们是否是有趣的,而CGF帮助进行评价控制流的新颖性,随后,被认为值得继续探索的输入会产生更多的输入

P3

而CGF的问题在于缺乏对于文件结构的认识,位级变异会在被处理之前就被程序拒绝

P4

有两个方法可以解决这个问题,一个是基于字典,另一个是基于动态污点分析。

对于字典,可能牺牲AFL的效率和可用性,当AFL要探索新路径时字典是很好的选择

但两种方法都不能变异出高度结构化的文件

P5

智能黑盒测试工具比如peach已经有了文件结构意识,而且能基于有效文件构建新的有效文件

peach通过一个输入模型来反汇编有效文件,再重汇编成为新的文件

P6

SGF可以基于高度结构化的种子文件产生新的文件,这使得其可以在保证文件有效的前提下探索全新的输入领域,可以花费更多时间在探索更深的漏洞

P7

24小时内,AFLSMART发现的0day漏洞增加了一倍;还提高了20%的代码覆盖率;

P8

文件格式规格可以被跨程序使用,也可以在不同版本的程序使用

Idea

之前用过一小段时间的peach,peach的测试方式是编写好一个pit文件,该文件中已经设计好需要的格式,只需要将需要测试的数据进行标记,变异时,peach会自动地随机填充数据,所以以前以为所有的seed都是这样的结构,但从这篇论文来看,AFL的seed结构本身并不具备文件的结构,对于这一点,可以尝试基于AFLSMART进一步提高变异出的文件的过解析率

刚刚又看了https://www.sohu.com/a/305377300_354899这篇文章,其中提到

在 AFL 的 bit 级别的变异的基础上,AFLSmart 增加了对 chunk 级别的变异操作,主要包括三种操作:

smart deletion:

在这种方法中,会对给定的种子文件,随机选取 chunk 进行删除。

img

smart addition:

在这种方法中,给定一个种子文件 S1,随机选取一个种子文件 S2,在 S2 中随机选取一个 chunk C2,将 C2 插入到 S1 中和 C2 具有相同父节点的 chunk C1 的后面(C1.parent.type ==C2.parent.type)

img

smart splicing:

这种方法中,对于给定的种子文件 S1,随机选取 chunk C1,随机选取种子文件 S2,找到 S2 中与 C1 类型相同的 chunk C2,将 C2 替换到 C1 的位置上。

img

关于peach pit的博客http://blog.nsfocus.net/peach-fuzz/

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2021-2024 Kery
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信