Directed Greybox Fuzzing分析
当前进展
定向符号执行(DSE) 效率低,工具Katch(针对补丁的测试工具),引擎BugRedux
定向灰盒模糊器(DGF)的工具AFLGo 好得多
OSS-Fuzz 是一个针对安全关键库和其他开源项目的持续测试平台 。
2017年ACM会议
本文内容
在本文中,我们介绍了定向灰盒模糊控制(DGF) ,它的重点是到达一组给定的目标位置在程序中。 在高层次上,我们将可达性强制转换为最佳化问题,并使用一种特殊的启发式算法来最小化生成的种子到目标的距离。 为了计算种子距离,我们首先计算和测量每个基本块到目标的距离。 虽然种子距离是过程间的,但是我们的新方法只需要对调用图进行一次分析,而对于每个过程内的 CFG 只需要进行一次分析。 在运行时,模糊器聚合每个运行的基本块的距离值来计算种子距离作为它们的平均值。 DGF用来使种子间距最小化的元启发式算法被称为模拟退火算法[19] ,并以功率调度的形式实现。 能量计划控制所有种子的能量[6]。 种子的能量特性决定了种子fuzzing的时间。 与所有灰盒模糊技术一样,通过将分析移动到编译时,我们可以最小化运行时的开销
Dgf 将目标位置的可达性转换为最佳化问题,而现有的定向(白盒)模糊方法将可达性转换为迭代约束补偿问题。
本文的定向灰盒模糊是基于CG和CFG的,使用距离测量和基于退火的功率调度的实现方法,在补丁测试和crash复制领域很有用
本文的主要工作:
- 灰盒模拟和模拟退火的集成
- 一种跨过程的距离的正式测量方法,可以同时考虑多个目标,可以在测量时有效地预先计算,并在运行时得到最佳结果
- 将定向灰盒模糊作为 AFLGo 实施,该功能在 https://github.com/AFLGo/AFLGo 公开提供,
- 将 AFLGo 作为补丁测试工具整合到 OSS-Fuzz 的全自动化工具链中,该工具在 https://github.com/AFLGo/OSS-Fuzz 公开发布
- 大规模评估定向灰盒燃烧作为补丁测试和碰撞复制工具的效率和实用性
实现方案
将函数 n 与目标函数 Tf 之间的函数级目标距离 df (n,Tf)定义为 n 与任意可达目标函数 Tf 之间函数距离的调和平均值
模拟退火(SA) 是一种马尔科夫蒙特卡洛方法(MCMC) ,用于在一个可接受的时间预算内,在一个非常大的,通常是离散的搜索空间内,逼近全局最优解。 的主要特征
先通过将一个函数的所有调用位点与被调用函数的第一个基本块连接起来,构造跨过程控制流图(iCFG)。 这需要几个小时。 一旦有了 iCFG,它将计算每个基本区块在 iCFG 内的目标距离,作为通往任何目标的最短路径的平均长度。这也可能需要几个小时。 Bb-level 目标距离的核心是基于 Djikstra 的最短路径算法,该算法的最坏情况复杂度为 o (v2) ,其中 v 为节点数。
怎么感觉这么熟悉。。