基于覆盖的灰盒模糊马尔可夫链
摘要
基于覆盖率的灰盒模糊(CGF)是一种不需要程序分析的随机测试方法。一个新的测试是通过稍微改变一个种子输入来生成的。如果测试练习了一条新的有趣的路径,它将被添加到种子集中;否则,它将被丢弃。我们观察到,大多数测试采用相同的少数“高频”路径,并制定策略,通过向低频路径倾斜,探索更多具有相同测试次数的路径。
我们使用马尔可夫链模型解释CGF的挑战和机遇,马尔可夫链模型规定了模糊化执行路径的种子生成执行路径J的输入的概率。每个状态(即种子)都有一个能量,指定从该种子生成的输入数量。我们表明,如果能量与平稳分布的密度成反比,并且每次选择种子时单调增加,则CGF的效率会显著提高。能量由功率计划控制。
我们通过扩展AFL实现了指数调度。在24小时内,AFLFast暴露了3个未经AFL暴露的先前未报告的CVE,并以比AFL快7倍的速度暴露了6个先前未报告的CVE。AFLFast比AFL至少产生一个数量级的独特崩溃。
主要内容
在本文中,我们提出了几种策略,将大部分模糊工作集中在低频路径上,以便在相同模糊量的情况下探索更多的路径。
AFL实现了一个功率调度,该调度分配一个能量,该能量在选择种子进行模糊化的时间s(i)内持续。几乎每次选择种子时,都会生成相同数量的输入。在某些情况下,AFL分配的能量可能远远超过发现新的有趣路径所需的最小能量;在其他情况下,AFL可能分配不到足够的能量。相比之下,AFLFast实现了一个功率调度,分配的能量为指数s(i)。当种子第一次模糊时,分配的能量非常低。此后,每次选择种子时?