One Fuzzing Strategy to Rule Them All
相关链接
One Fuzzing Strategy to Rule Them All
概述
在本文中作者提出了对变异策略havoc的研究,通过调查在不同模糊测试器上havoc的实际执行时间与边覆盖的关系、以及havoc在不同模糊测试器下执行相同时间后边覆盖的差异,作者提出只要给havoc足够的执行时间,就能带来更高的边覆盖,同时也会降低不同模糊器之间的边覆盖差异。同时作者测试了stack size ,以及不同的变异策略(单元变异和块变异)对havoc性能的影响,并基于此提出了一个多臂老虎机模型。
背景
在进行漏洞挖掘中,模糊测试已经成为了一种主流的漏洞挖掘工具。而在此期间出现的很多fuzzer都使用了一种havoc的随机搜索机制,以提高代码的覆盖率。
然而,作者发现,在这些使用了havoc的模糊器中,大部分采用的都是havoc的默认设置,基于此,带着havoc是否还能在fuzzer中表现出更大的潜能这一问题,作者进行了本文的实验研究。
基于覆盖的模糊测试过程如下:
模糊测试器会从语料库中选定一个种子并传递给havov进行变异,havoc的变异由变异次数和编译器叠加次数决定。havoc会根据种子的实时信息决定种子的变异次数,即模糊器需要执行多少次havoc操作。确定havoc的变异次数后,在每次变异之前havoc还需要确定一个变异器叠加次数,并根据该次数从变异策略中随机选择变异方法进行叠加,havoc的变异策略如下所示:
其中红色字体部分为单元变异,表示编译单个字节或单词,而蓝色部分则表示块变异,变异非确定性数量的字节。havoc同时是随机选择变异策略叠加在一起最后生成一个新的种子。
在将havoc集成到模糊器上时,不同的fuzzer之间也存在一定的差别,主要有两种集成方式,顺序执行和多线程并行的方式,其执行过程如下: