AFLGO:定向灰盒模糊测试

之前介绍过AFL,今天讲一下AFLGO,这个是2017年的成果,在AFL的基础上优化了种子选取。把给定的源码位置设置为Targets,然后AFLGO能在AFL的基础上把离距离Target更近的种子给予更多的能量,使AFLGO能够更快的覆盖Target并测试我们感兴趣的地方。他在以下场景非常适用。

补丁测试
在程序出现漏洞后通常会打补丁,在补丁后的版本可以针对补丁部分重点测试,查看新版本是否有新的漏洞。

漏洞重现
在有些上报的漏洞中处于隐私问题不会提供出发的输入,仅仅会报告漏洞出现在代码的哪些位置,那么AFLGO就可以针对漏洞出现的位置重点测试,重现能触发漏洞的输入。

静态分析的验证
在静态分析得到可能出现问题的漏洞代码后,可以使用AFLGO进行问题代码位置的动态测试。

AFLGO主要的工作主要在利用AFL的LLVM模式(AFL编译LLVM方法),在Clang编译的时候画出CG(call graph)和CFG(control flow graph),然后算出每一个基本块距离Targets目标点的距离。然后动态运行的时候,插桩的代码就会计算距离,给种子一个distance量,根据distance给种子分配不同的变异能量。这篇文章主要是结合自己的想法翻译AFLGO的论文,对于AFLGO源码的分析在(这篇文章).


编译静态距离计算


CG和CFG

Call Graph是调用图,打开IDA就可以看到一个函数调用另一个函数,CG的单元是函数function。函数function是比基本块BB大的量,因为一个function里面有循环、分支跳转。
CFG的是控制流图,单元量是基本块BB。Intra-CFG,不同function的BB跳转构成的CFG叫做Inter-CFG,Intra-CFG就是一个function里面的BB跳转。AFLGO采用了Intra-CFG,因为这个更简单操作,在原先AFL的代码上改动不大,不会加上过多的overhead。

计算

输入是Target的位置,如


main.c:544
main.c:680


Clang可以知道target的Tf(target functions)和Tb(target BBs)

function-level distance

首先说一下函数级的距离,LLVM可以在CG中算出两个函数中最短(边数量最少)的距离df(n1,n2)。在这里用了调和平均数而不是算术平均。
在这里插入图片描述

basic-level distance

对于一个函数中的每一个基本块都可以计算其基本块级别的距离,方法就是对于每一个基本块,计算他离可以跳转下个函数的基本块的距离,加上待跳转的函数与Tf的df即可。
在这里插入图片描述




动态计算种子距离

在动态运行插桩后的程序时会统计运行过的基本块集合,然后计算种子距离
在这里插入图片描述
然后当前距离最大的种子距离取为maxD,最小的取为minD,每个种子就取得一个(0,1)的距离。在这里插入图片描述



基于模拟退火的调度算法

模拟退火算法是一种马尔可夫链蒙特卡罗方法(MCMC),用于在一个很大的、通常是离散的搜索空间中,在一个可接受的时间预算内逼近全局最优。
简单就是在最开始,这个调度算法会一致对待所有的种子,给予最大的随机可能性,称为exploration时期。当大于时间阈值后,进入exploitation时期,对favor的种子更多的变异能量。
在这里插入图片描述
在这里插入图片描述


## 调度算法的集成 AFL本身的调度算法基于种子的运行时间、种子的大小、种子的发现时间、种子的生成代数。 AFL原来的调度能量为Pafl(s)、AFLGO利用距离生成的调度能量为p(s,Tb)的话,集成后的距离为 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200526213516678.png) 这样算出来,不会过度弱化其他种子的重要性也可以强化目标位置的导向型。在exploitation时期,可以近似出调度能量差如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200526213715882.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200526213727530.png)
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值