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计算方法,可进行对比的论文不多,效果还行