结构状态覆盖导向的灰盒模糊测试技术
2021-01-29刘华渊苏云飞李瑞林唐朝京
西安电子科技大学学报 2021年1期
刘华渊,苏云飞,李瑞林,唐朝京
(国防科技大学 电子科学学院,湖南 长沙 410073)
1 代码覆盖导向的模糊测试问题分析
代码覆盖率导向的模糊测试技术是一种灰盒模糊测试技术,其通过提高代码覆盖率来发现程序中的漏洞。AFL[1](American Fuzzy Lop)是典型的代码覆盖导向的模糊测试工具,FairFuzz[2]、AFLFast[3]等工具都是基于AFL实现的。AFL通过轻量级的代码插桩,在运行时收集程序代码覆盖信息,并以此为依据保留提升代码覆盖的种子文件。此类工具主要区别在代码覆盖率的计算方式、种子筛选和能量调度策略[4]等方面。灰盒模糊测试技术[5-8]和静态分析[9-10]、符号执行[11-13]、污点分析[14-16]等技术结合,能够有效地增加代码覆盖率。
以图1所示代码来说明笔者关注的问题。该代码来自于RHG比赛中的heap buffer over flow BRHG-A006。此类程序包含while-switch-case结构,不同的输入会导致不同的case语句被执行。

图1 BRHG-A006简化版代码
该程序依据opt的值执行不同的堆操作模块,包括堆申请、堆内存写、堆内存读、堆内存释放模块。漏洞触发条件为堆申请空间小于堆内存写空间。

图2 崩溃样本控制流图
图2给出BRHG-A006中触发堆溢出漏洞的一个最简化的崩溃样本的控制流图。add会分配0x20长度的堆块,edit可以往堆块中写入任意长度的数据。触发漏洞的状态覆盖条件并不复杂,但AFL、FairFuzz、AFLFast在一个小时内均无法发现存在的堆溢出漏洞。
1.1 测试用例的结构状态分布


1.2 基本块跳转作为反馈指标的局限性
基于AFL实现的模糊测试工具将基本块跳转的覆盖次数作为评价变异效果的指标。考虑两个结构……
登录APP查看全文
