摘要

随着软件开发环境和业务逻辑的复杂度不断增加,大量的堆内存对象生命周期及其引用关系造成堆内存操作行为错综复杂,极易引发程序错误造成漏洞.模糊测试作为高效的软件代码错误检测技术,常用于漏洞挖掘.然而,目前最先进的模糊测试工具专注于代码全覆盖功能测试,忽略了执行时堆内存操作状态信息,从而错过堆内存漏洞发现机会.针对上述问题,提出了一种基于堆操作行为引导的灰盒模糊测试方法 HeapAFL,在不依赖漏洞先验知识的情况下,其通过静态分析插桩基础堆操作函数及其参数监测执行时控制流和数据流变化,反馈堆操作行为信息,指导模糊测试中种子优先变异阶段,探索多样化堆操作行为从而更高概率触发堆内存错误类漏洞.在6个真实应用程序上验证方法效果,并与6个最先进的模糊测试工具进行比较,实验中的CPU总共测试了4 032 h.实验结果表明,HeapAFL在漏洞挖掘效果和崩溃发现效率上优于对比工作.在漏洞挖掘数量上,HeapAFL相比于基准模糊测试方法AFL, AFLFast,PathAFL,TortoiseFuzz,Angora,Memlock分别提升了1.32倍,1.39倍,1.92倍,1.56倍,2.78倍,2.08倍.最终,HeapAFL在数据集上挖掘到了25个堆内存错误类漏洞,其中包括19个已知的漏洞(即1 day)和6个未知的漏洞(即0 day),并报告给CVE(common vulnerabilities and exposures)官方漏洞库后已经获得了2个CVE漏洞编号,其余漏洞正在等待审核.

全文