约束引导的定向模糊测试:CDGF

一、背景介绍

1.1 DGF

DGF作用
 集中测试某些特定位置的代码:target site
 应用:
  ①开发人员从第三方获取崩溃报告,重现崩溃
  ②针对某个补丁,生成对应修补位置处的PoC
局限性
 1、target sites之间没有关联,不考虑顺序依赖性
 2、未考虑target crash所需的数据条件,单纯以距离target sites远近来进行种子调度

1.2 CDGF

CDGF
 在DGF的基础上加了一些的constraint,并且按照满足constraint的权重去排列seed
 权重
  seed通过的constraint越多,距离constraint越近,权重越大
constraint组成
 多个target site和n个data condition
 当指定多个constraint时,seed要按照排列顺序去满足
自动生成constraint
 作者设计了根据额外信息源自动生成constraints的算法
 额外信息源
  ①内存错误检测器的侦测的内存错误
  ②补丁的更改日志
 注:该算法支持7种crash和4种changelog自动生成constraint
constraint生成方法
 UAF
  首先生成free处的constraint,再生成crash处的constraint(先驱动seed到free,再到crash)
 缓存区溢出
  constraint驱动seed到缓存区的边界,增加溢出的机会
 补丁更改日志
  constraint转换seed,来符合补丁更改日志中指示的有缺陷的条件
主要贡献
 1、提出了CDGF,在DFG基础上按顺序排列target site和constraint
 2、使用额外信息源,自动生成constraints
 3、基于CDGF理念设计了CAFL,用实验体现了该方法的优秀

二、DGF

2.1 DGF中距离

调和平均值
 使用调和平均值来计算某点到某点的距离
在这里插入图片描述
 比如论文中的这个例子
在这里插入图片描述
 论文中两个target分别为d和f,然后a到d与f的最短距离都是3,那么a的权重是1/(1/3+1/3)=3/2
 加入seed执行的路径是abef,那么距离就是计算调和平均数(3/2+1+1+0)/4=0.875
 效果就是路径越长,计算出来的距离越短,比如路径abcdabef的距离是0.85,比路径abef的距离0.875还要短
 缺点是如果路径中包含的的target site少,反而会增加路径长度,如路径abcabef的距离为0.971

2.2 DGF的应用

针对于任何可以精确定义target site的用例中
1、静态分析验证
静态分析误报率很高,可以用DGF将目标crash设置为target site来主动验证
2、崩溃再现
重现来自用户或开发者的崩溃报告,崩溃报告中往往有PoC、address、location,但是往往一个PoC无法验证该crash是否已经修复,可以用DGF来验证
3、生成PoC
攻击者往往攻击的是还没有修复漏洞的过时系统,可以使用补丁中描述的address、data、rule并通过DGF来生成PoC,比如崩溃再现中就可以生成PoC

2.3 DGF的局限性

由于以下两个原因,DGF往往会长时间的探索target site而没有进展
1、target site之间相互独立
2、没有data condition
例:target site相互独立 在这里插入图片描述
例:没有data condition
在这里插入图片描述

2.4 改进要求

1、排列好的target site
因为大部分的target site都有前提条件,要将seed驱动到前提条件位置
2、data condition
大部分crash都有数据条件,因此也需要将seed驱动到前提数据条件

三、CDGF

3.1 概括

每个constraint都有target site以及在target site需要满足的data condition
改进:赋予seed更短距离的条件
1、选择的seed满足的constraint更多
2、如果constraint未满足,选择更加满足该constraint的seed

3.2 constraint定义

组成:target site和data condition
满足约束:到达target site并满足data condition
生成constraint的方法:
1、捕获变量
到达targert site就捕获该处使用的变量,捕获什么变量取决于在该处的操作,比如“取消引用数组”捕获“引用地址”、“分配数组地址”捕获“数组大小和当前位置等”
2、data condition
data condition是一个布尔表达式,由捕获的变量组成,data condition可以用自己所属constraint中的变量或者之前constraint的变量
3、排序
多个约束需要按照指定的顺序来满足

3.3 distance定义

3.3.1 target site的distance

基本块距离
d(B1,B2)为B1和B2之间的距离
在这里插入图片描述
Bs是B1的后续基本块(如果B1有调用指令的话,调用指令的基本块可以是Bs)
target site距离
定义为target site与当前基本块的基本块距离(上面使用的基本块距离算法)
在这里插入图片描述

3.3.2 data condition的distance

1、单个data condition
在这里插入图片描述
注:如果表达式中有整数是未定义的,那么距离为无穷
在这里插入图片描述
这串公式中,Q是data condition,等号左边整体为第n个数据块在Q下的距离,min指的是取第n个基本块之前计算出的最小距离
特殊条件:当data condition为assert时,成功为0,失败为无穷
2、多个data condition
多个data condition时,distance表示了seed满足所有data condition的程度,满足的越多,distance越短
如果满足的data condition同样多,选序列中未被满足的data condition更靠前的
在这里插入图片描述
ρ是第一个未被满足的data condition下标
Nunsat=N(Q)-ρ,指的是未被满足的data condition数量
Cdata是单个data condition的最大距离,作者设置为int的最大值(2的32次方),这样可以表示4字节整数内的任何值

3.3.3 某基本块单个constraint的distance

在这里插入图片描述
即到target site的distance和data condition的distance之和

3.3.4 某基本块constraint sequence的总distance

在这里插入图片描述
没满足的constraint距离设为最大(2的35次方,可容纳8个data condition),其余的正常计算

3.3.5 seed的distance

在这里插入图片描述
即取seed的基本块路径上distance最小值

3.4 Constraint生成

基本方法:根据给定的信息源,找到合适的target site和data condition来填写预先设置的constraint模板
可生成来源:①来自内存错误检测器的崩溃记录(crash dump)②补丁更改日志(patch changelog)
模板:
1、nT
nT类型即多个target site,适合需要按照顺寻到达多个target site但不需要data condition的crash类型
例:Use-after-free、double-free、use-of-uninitialized-value
2、2T+D
两个target site加data condition
例:heap-buffer-overflow、stack-buffer-overflow
3、1T+D
一个target site加data condition
例:divide-by-zero、assertion-failure
PoC
对于漏洞这种,作者设计了算法来提取补丁中的信息填充到1T+D类模板中,分为以下四类分别操作
C1:异常检查类,target site为异常检查点,data condition为异常条件,关键字throw、error
C2:分支跳转类,target site为分支跳转点,data condition为“当前跳转条件!=原跳转条件”
C3:变量更换类,target site为被替换的变量,data condition为“当前变量!=打补丁前变量”
C4:不适用上述,不符合上述条件,则data condition为空

四、CAFL

作者根据CDGF的思想设计了CAFL,并由些许改进

4.1种子部分

为了防止局部最优,通俗讲就是这个seed并不适合变异下去,但是这个seed现在的distance还很小,优先级会很高,所以对种子权重进行了改动。
在这里插入图片描述
通过以上公式,seed如果模糊时间过长、长时间停留在某个distance没有改变,种子的权重就会降低

4.2实验

实验对象:AFLGo与CAFL
1、LAVA-1
选取了LAVA-1中18个崩溃来比较双方
在这里插入图片描述
可以看到这里CAFL在加入了data condition后时间大大缩短,证明了data condition的作用

2、Crash Reproduction
选了47个真实程序来测试,选取了其中的nT和1T+D类型的bug,并且使用了1T和nT以及nT+D来实验CAFL的效果
在这里插入图片描述
可以看出CAFL在整体性能上要好于AFLGo,但是在部分情况下加入了data condition反而效率下降,说明了data condition有时候反而会起到误导作用
3、PoC Generation
通过3.4里提到的从补丁中提取target site和data condition的规则来生成constraint,并由此生成PoC
在这里插入图片描述
效果要好于AFLGo

五、总结

总的来说就是一种改进distance计算方法,可进行对比的论文不多,效果还行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值