学习笔记

Smart Greybox Fuzzing 阅读笔记

2021-09-27  本文已影响0人  佩玖吟

摘要

对于处理复杂文件格式的应用,CGF 随机变异并不能产生有效的文件。本文介绍了 smart grebox fuzzing(SGF),利用种子文件的高级结构化表示来生成新文件。与位级别变异相比,创新地定义了虚拟文件结构上的变异操作。本文引入了一种新的基于有效性的能量调度策略,使SGF能够花费更多的时间生成更有可能通过程序解析阶段的文件,这可能会暴露处理逻辑中更深层次的漏洞。

Introduction

CGF 的一个很重要的局限就是缺乏输入结构感知。变异是 bit-level 的,但是很多应用处理高度结构化的输入,如图片、音频等,所以不太可能影响文件结构的变化。有效文件 bit-level 的突变可能产生无效文件,从而在程序解析时就被拒绝。

为了解决这个问题,AFL 使用 dictionary,VUZZER 通过动态污点分析和控制流分析来推断输入数据的位置和类型。但是都不能从文件里面增删一个完整的trunk。

和 CGF 相比,一些 smart blackbox fuzzers 尽管输入结构感知,并且可以利用文件格式模型来构造新的有效问卷,但是灰盒的覆盖率反馈是需要的,否则效果甚至不如 AFL。

本文提出了 SGF,在虚拟文件结构上进行变异,根据种子的有效性来进行能量调度,这样可以尽可能生成有效文件通过解析阶段。

贡献:使得灰盒模糊测试输入格式感知。

SMART GREYBOX FUZZING

Virtual Struction

SGF 的有效性来源于变异操作的设计。

所有的输入文件可以被表示为一棵树,内部节点称为 chunks,叶子节点称为 attributes

为了构建虚拟结构,需要文件格式规范和一个解析器。

Smart Mutation Operators

基于虚拟结构,有三种变异操作:

挑战:

Region-based Smart Mutation

Stacking Mutations

为了生成有趣的测试输入,同时使用 structural(high level) 和 bit-level(low level) 的突变操作是有意义的。

Fragment- and Region-based Mutation

AFLSMART 使用规范将文件分解为片段,片段是文件解析树中的子树。AFLSMART 使用 Peach Cracker 组件中的解析表为每个 chunk 和 attribute 派生 start index、end index 和 type。

Deferred Parsing

如果 SGF 为每个种子构建虚拟结构,效率会大大降低。本文通过概率 p 来构建虚拟结构,p 取决于发现新路径的时间,t 为上次发现新路径到现在的时间,s 为当前的种子输入(虚拟结构还未被创建)
prob_{virtual}(s)=min(\frac{t}{\epsilon}, 1)
如果 t 大于阈值 \epsilon,概率就为 100%。

启发:AFL 可能会生成许多无效输入,重复通过几个短路径(通常是无效文件被拒绝),如果生成更多此类无效输入,那么很难发现新路径,t 就会增加,超过阈值 \epsilon 后允许构建虚拟结构。如果可以遍历新路径,t 保持较小,我们不会产生创建虚拟结构的开销。因此,Deferred Parsing 允许 AFLSMART 在不牺牲 AFL 效率的情况下实现输入格式感知。

Validity-based Power Schedule

种子 s 的能量调度 p_v(s)
p_v(s)=\left\{ \begin{aligned} 2p(s) && if \space v(s)\ge 50\% \space and \space p(s)\le \frac{U}{2} \\ p(s) && if \space v(s)< 50\% \\ U && otherwise \end{aligned} \right.
p(s) 是之前的能量调度(如 AFL),U 是可以被 AFL 分配的最多能量。

FILE FORMAT SPECIFICATION

对于高度结构化的复杂文件格式,手工构建是耗时且容易出错的。

insights:

上一篇 下一篇

猜你喜欢

热点阅读