Constraint-guided Directed Greyb

2021-10-06  本文已影响0人  佩玖吟

Abstract

定向灰盒测试驱动种子到达目标位置,用于 crash reproduction 和 proof-of-concept generation。但是目前 DGF 因为没有考虑有序的目标点和数据条件,要经历很长时间的模糊测试。

本文提出了 constraint-guided DGF,满足一系列约束而不仅仅是到达目标点,将约束定义为目标点和数据条件的组合,并按指定顺序驱动种子满足约束。

Introduction

DGF 需要花费很长时间来识别目标位置,主要因为以下两个限制:

本文提出了 CDGF,目标是满足一系列约束条件,并按顺序对更好地满足约束条件地种子进行优先级排序。约束由单个目标位置和可选的多个数据条件组成,当程序到达目标位置并满足目标位置的数据条件时,视为满足约束。当存在多个约束时,约束必须按指定顺序满足。

为了衡量种子满足约束的程度,CDGF 基于约束的距离定义了种子距离。另外,本文介绍了从附加信息源(即来自内存错误检测器的崩溃转储和来自补丁的变更日志)自动生成约束的算法。

Contributions:

Background and Motivation

Directed Greybox Fuzzing

距离计算使用调和平均

Usage Example

Limitation

Requirements

Constraint-guided DGF

Overview

CDGF 为以下两种情况的种子赋予更短的距离:

单个约束的距离为到目标位置(DGF-style)和数据条件(Angora-style)的距离之和。如果前面的约束未满足,距离定为最大值。

Constraints

Definition

Distance of Constraints

Target Site Distance

基本块距离

两个基本块间的最小距离
d(B_1,B_2)=\left\{ \begin{aligned} 0& & if\space B_1=B_2 \\ min(d(B_s,B_2)+1),\forall B_s & & if\space B_1 \leadsto B_2 \\ \infin & & else \end{aligned} \right.
B_sB_1 的后继节点,如果 B_1 包含 call 指令,也可以为调用的基本块

目标点距离

当前基本块到目标位置的基本块距离,因为目标点的执行是有顺序的,所以我们不需要使用调和平均来平衡距离
D_{TARGET}^n=d(B^n,B^*)

Data Condition Distance

单个数据条件的距离

image-20211004132510165.png

如果比较为 true,\hat{d}_□(\vec{n})=0□ 表示比较符号,如果 \vec{n} 中有整数未定义,说明前置条件未执行到,距离为 \infin

给定数据条件 Q,则数据条件的距离
\hat{d}^n(Q)=min(\hat{d}_□(\vec{n})),\forall \hat{n} \in Var^n(Q)
Var^n(Q) 为执行到 B^n 所捕获到的变量,□ 表示数据条件 Q 的比较操作,基本上 \hat{d}^n(Q) 等于到 B^n 捕获的所有变量的最小距离,如果有变量未捕获到,\hat{d}^n(Q)\infin

多个数据条件的距离

\hat{Q}=[Q_1,Q_2,...] 为一系列数据条件,\rho 为第一个未满足的数据条件的下标,数据条件的距离为
D_{DATA}^n=c_{data}·N_{unsat}+min(c_{data},\hat{d}^n(Q_{\rho}))
N_{unsat}=N(\hat{Q})-\rho 为未满足的数据条件的数量,c_{data} 是单个数据条件的最大距离

Constraint distance

单个约束的距离是目标位置距离和数据条件距离之和
D^n=D_{TARGET}^n+D_{DATA}^n

Total distance

总距离
\pmb{D}^n=c_{con}·(N(\vec{B^*})-\tau^n)+min(c_{con},D_{\tau^n}^n)
\tau^n 是第一个未满足的约束的下标,c_{con} 是单个约束的最大距离,N(\vec{B^*}) 是目标位置的数目

种子距离为执行过程中的最小距离
\pmb{D}(s)=min(\pmb{D}^n),\forall n

Constraint Generation

Crash Dump

崩溃转出的约束生成是指选择适当模板的错误类型。本文合成了三个模板,支持七种错误类型。

image-20211004153444589.png image-20211004153528996.png

Patch Changelog

1T+D 类似,<target_site> 表示补丁修改的位置,<data_cond> 表示变更的数据条件。

为了找到合适的约束,patch changelog 和预定义的案例相匹配,早起的案例可能更直接的指向 bug 的原因,下面介绍了案例匹配:

如果更改的程序位置不止一个,向每个更改位置插入一个 sentinel 函数,绑定到一个目标站点。

Seed scoring

首先给距离短的种子更高的评分,同时,一些距离为局部最小值不能进一步缩小,为了避免这种情况,CAFL 根据模糊测试的次数以及 stuck depth(种子不能减少到比父种子更少距离的深度)来指数级缩小种子分数。
\pmb{S}(s)=(\pmb{D}_{max}-\pmb{D}(s))·pow(c_{fuzz},NumFuzzed(s))·pow(c_{stuck,StuckDepth(s)})
\pmb{D}_{max}=c_{con}·N(\vec{B}^*) 是最大的距离,c_{fuzz}c_{stuck} 是 scale-down factors,设为 0.95 和 0.85

上一篇 下一篇

猜你喜欢

热点阅读