【论文分享】Sequence Directed Hybrid Fuzzing

2 篇文章 1 订阅

这篇文章发表于CCF B类会议SANER 2020,是ICPC 19年一篇工作的改进版Sequence coverage directed greybox fuzzing

主要的变化是原来是单纯的fuzz,现在是hybird Fuzz,也就是加入了符号执行来作为辅助。

这篇工作要解决的问题是:现有的定向模糊测试没有在effectness和efficiency上达到很好的平衡,也很难基于随机变异来覆盖复杂的路径。

方法

文章主要是在能量调度算法和种子选择策略做了修改。能量调度算法是根据目标序列和种子执行轨迹的相似度进行比较。种子选择策略在lolly基础上,又多考虑了到达目标的路径上的必要点。变异输入部分再结合concolic execution来高效生成覆盖复杂条件的输入。

文章的总体框架如下所示,分为静态分析和动态分析两个部分。

静态分析首先把目标序列和源码的行号转化为基本块,并且基于dominant tree analysis求出ETS。其中ETS表示的是enhanced target sequence,意思是目标序列和到达目标序列的必要节点的结合。然后插桩主要是为了在运行时获得分支覆盖率和目标执行轨迹的信息。

动态分析部分,fuzzer的输入是插桩后的二进制和ETS,然后fuzz的过程时,把种子放在三种级别的队列中,分别是L1,L2,L3,表示高优先级,普通优先级,低优先级。Concolic Executor的输入是测试的二进制(PUT)和L1级别的种子,并且把新生成的种子放在L2级别。

image-20220216172449097

Static Analysis

为了支持细粒度的调度种子,文章考虑了目标序列的覆盖率以及他们的执行上下文(也就是到达目标序列的必要节点)。执行上下文获取的算法如下图所示:

image-20220217105107067

在控制流图中,如果到达节点n的每条路径都需要经过节点d,那么就叫节点d为节点n的支配节点。如果树上的每个节点只支配自身及其子节点,就叫这个树为支配树。

上面的算法里,n0是entry node,N是所有基本块的集合。对于一个基本块n,他的支配节点是节点n所有前驱节点的支配节点的交集。所以,一开始的时候,对于任意一个节点n,先将他的支配节点的集合设为N。然后再迭代式地移除不属于节点n的支配节点(5-9行)。最后13行-15行是去获取属于目标序列(Target Sequence)的必要节点。

接下来是插桩部分,除了插桩获取覆盖率信息外,SDHF也对ETS的基本块进行插桩,来获取目标执行轨迹TET。覆盖率信息和TET和ETS的相似度将被用于确定种子的优先级。

比如下面的例子,种子的执行轨迹是“aegabdfg”,由静态分析得到的ETS是abcg,通过插桩得到的TET是ababg。

image-20220217110654254

dynamic analysis

动态分析部分主要是fuzzer和concolic executor的交互。

1)fuzzing process

fuzz的总的流程如下所示。首先从种子队列S中取出一个种子s,并且给种子赋予能量p。种子的能量决定了变异这个种子的时间。然后,fuzzer对种子进行变异,并且生成新的种子s‘,如果s’产生了crash,就会把这个种子放在Sx集合中。对于每个新生成的种子s‘,都会去计算种子执行轨迹与ETS的相似度sim以及是否有增加覆盖率cov。如果相似度大于某个阈值d并且有新增覆盖率,则把种子加入L1优先级队列,如果相似度大于d,但没有新增覆盖率,则要放到L2中。如果种子相似度没有大于阈值也没有新增覆盖率,就放到L3。持续这个过程直到超时或者手动中止。

image-20220217114303629

2)concolic execution

concolic execution是fuzzing过程的一个辅助手段,它以部分匹配的种子作为输入,来生成更高相似度的种子。因为fuzzer是依靠随机变异来生成种子,即使fuzzer生成了高相似度的种子,也不能确定新生成的种子接近了目标序列。concolic execution能够获取种子执行的路径并且生成执行特定路径的输入。

这部分的算法如下图所示。首先执行给定的种子S,获得种子S执行的路径Trace。然后遍历路径Trace上的基本块,根据最大匹配前置路径,找到转换点SP的基本块,获取转换点基本块另一个没执行过的子节点的约束,生成新的种子。

image-20220217185724959

实验

在LAVA-M上与QSYM比较发现漏洞效率,TTE表示发现漏洞的时间。

image-20220217191920235

和BugRedux,AFLGo比较复现漏洞的有效性。

image-20220217192202079

与Lolly比True Positives Verifification的能力

image-20220217192408062

最后再用工具挖到了几个真实的漏洞:

image-20220217192519751

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

破落之实

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值