一种对AFL模糊测试器种子变异策略的优化方法技术

技术编号:33766682 阅读:13 留言:0更新日期:2022-06-12 14:17
本发明专利技术公开了一种对AFL模糊测试器种子变异策略的优化方法,首先,对于语料库队列中的每一个种子文件,遍历其每一个字节,监测改变后的测试文件是否导致被测程序产生新的路径或者导致崩溃;其次,将导致被测程序产生新的执行路径或者崩溃的字节标记为有效字节;最后,在后续对种子文件进行havoc随机变异时,根据有效字节数组进行选择性变异。本发明专利技术在AFL变异策略基础之上,使用有效字节数组的方式,减少了无效变异的次数,提高了模糊测试器的执行效率。行效率。行效率。

【技术实现步骤摘要】
一种对AFL模糊测试器种子变异策略的优化方法


[0001]本专利技术属于计算机软件领域,尤其是指模糊测试领域,具体涉及一种对AFL模糊测试器种子变异策略的优化方法。

技术介绍

[0002]随着社会不断发展,信息化给人类的衣、食、住、行等各个方面带来了极大的便利。生活中的各方面都离不开计算机软件的应用,如在线教育、智能交通服务、远程医疗、5G通信技术及各种社交、办公软件等领域。计算机软件给社会带来便利的同时,也潜在着一些安全问题。OpenSSL本身是一个进行安全通信、可以保障通信保密性和可靠性的应用程序,然而,在2014年,OpenSSL被爆出“心脏滴血”重大漏洞,攻击者可以通过这一漏洞,获取应用程序源码、用户的网络访问请求和用户的cookie信息,甚至可以获取到用户的电子邮件、银行卡账号密码等,带来了无法估量的损失;RPC远程过程调用是一个进程通讯机制,允许一台计算机执行另一条远程计算机上的代码,2003年,利用RPC一个漏洞的蠕虫“冲击波”在互联网上传播,感染了超过百万台计算机,该病毒会建立一个“后门”,运行攻击者远程控制被感染的计算机,同时会使系统崩溃,根据保守估算,“冲击波”造成至少达到5亿美元的经济损失,而这是由于代码中存在一个缓冲区溢出漏洞。为了保证软件的可靠性和信息的安全性,越来越多的技术关注于检测软件系统的内存安全性。
[0003]模糊测试(Fuzz)是一种动态软件测试技术,最早由Barton Miller教授于1989年在威斯康星大学开发。它是一种通过提供大量非预期的输入并监视程序运行异常结果来发现软件缺陷的方法。典型的模糊测试过程是将自动或半自动生成的随机测试用例作为程序的输入,反复驱动目标软件运行并监视程序运行,当发现异常时可以做出反应,以发现潜在的错误,比如缓冲区溢出等问题。模糊测试常用于寻找软件系统的漏洞和缺陷。模糊测试意味着自动地生成测试用例并执行,目的是发现安全漏洞。在过去的二十年中,模糊测试已成为软件安全测试的重要方法。目前,使用模糊测试在各种软件中发现了数千个安全漏洞。模糊测试使用简单并且有效,但测试存在一定的盲目性。
[0004]AFL(american fuzzy lop)由前Google安全研究员lcamtuf开发,是目前应用最广泛的模糊测试工具之一,首次采用源码编译插桩和QEMU模式来实现代码覆盖引导Fuzzing的方式。它在目标程序的中间代码中的每个代码块中插桩一个随机值,使用插桩后的边覆盖形式,可以获程序控制流中局部的细微变化。然后通过Fuzzer代码检测收集运行时路径覆盖的信息。AFL维护了一个测试文件的队列,在进行模糊测试的过程中,从队列的头部取出文件,用该文件作为输入执行目标程序,同时在执行的过程中对其进行变异,然后用变异后的文件喂给目标程序,检查是否会产生新的执行路径或者导致程序崩溃。同时,模糊测试过程涉及到大量的fork和执行目标程序的过程,为了提高运行效率,AFL实现了一套fork server机制:启动目标程序进程后,会运行一个fork server,模糊测试器并不负责fork子进程,而是与这个fork server通信,并由fork server来完成fork及继续执行目标程序的操作。这样设计的最大好处,就是不需要调用execve(),从而节省了载入目标文件和库、解
析符号地址等重复性工作。AFL可以有效地发现目标程序中的错误,尽管AFL高效且易于使用,但仍有改进的空间,比如AFL代码覆盖率有限且在随机变异阶段具有很大的不确定性。
[0005]总体来说,AFL的种子变异策略分为两大阶段:确定性变异和随机变异。确定性阶段主要的变异策略有:位翻转、数字加减运算、特殊值替换、字典值变异等。对于每一个输入的种子测试文件,变异的过程就是依次进行上述操作,并且每一种操作分不同的步长,确保输入文件的每一位和每个字节都会进行变异。而随机变异阶段包括:havoc大破坏变异策略和文件拼接变异策略。havoc阶段包含了各种完全随机的变异方式。具体包括:随机对某一个比特位进行翻转;随机将某个字节设置为特殊值;随机选取某个字,并设置为随机值的特殊值;随机选取某个双字,并设置为随机值的特殊值;随机将某个字节加、减随机数;随机选取某个字、双字,将其加、减随机数;随机将某个字节设置为随机数;随机删除部分字节;随机在文件的某个位置插入一段提供的或者生成的内容;随机将文件的一段替换为随机的内容;随机选取一个位置用随机的字典值替换或插入等。havoc阶段会随机选取上述变异策略中的一个或者多个进行变异。splice是AFL文件变异的最后一个阶段,该阶段将两个种子文件拼接得到新的文件,并对新生成的文件执行随机变异。
[0006]由上述介绍可知,在AFL对种子文件进行变异的时候,除了确定性变异阶段,还伴随着随机变异阶段,通常,大量新路径都是在随机变异阶段发现的。但是由于随机havoc阶段的变异盲目随机,会导致大量无效的测试用例的生成,影响模糊测试效率。实验表明,AFL在进行种子变异的时候,超过60%的变异操作不会产生任何新路径,这些变异都是无效的变异,提高种子变异的有效性是提升模糊测试效率的关键。针对此问题,本专利技术提出了一种对AFL模糊测试器种子变异策略的优化方法。

技术实现思路

[0007]专利技术目的:本专利技术提出一种对AFL模糊测试器种子变异策略的优化方法,减少AFL在随机阶段的无效变异次数,提高测试用例的生成质量,从而提升模糊测试的效率。
[0008]技术方案:本专利技术所述的一种对AFL模糊测试器种子变异策略的优化方法,包括:
[0009](1)对于语料库队列中的每一个种子文件,遍历其每一个字节,监测改变后的测试文件是否导致被测程序产生新的路径或者导致崩溃;
[0010](2)将导致被测程序产生新的执行路径或者崩溃的字节标记为有效字节;
[0011](3)在后续对种子文件进行havoc随机变异时,根据有效字节数组进行选择性变异。
[0012]进一步地,所述步骤(1)实现过程如下:
[0013]针对种子文件中不同字节对程序执行路径的影响,把执行相同路径的连续字节划分为同一输入域,对同一输入域中某些字节的变异导致目标程序执行路径的变化,不认为产生了新路径;在种子变异的确定性阶段的bitflip 8/8进行,依次对每个字节进行翻转,由此判断是否会产生新的路径。
[0014]进一步地,步骤(2)所述有效字节为元数据。
[0015]进一步地,所述步骤(2)实现过程如下:
[0016]首先,在AFL的种子变异的方法中定义一个长度等于输入种子文件字节长度的unsigned char类型数组shadow_map用来标识种子文件对应字节是否为有效字节;shadow_
map[i]为1表示测试用例的第i个字节为有效字节;如果对第i个字节进行变异后,AFL监测到被测程序产生了新的执行路径,则将shadow_map[i]赋值为1。
[0017]进一步地,所述步骤(3)实现过程如下:
[0018]在havoc阶段本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种对AFL模糊测试器种子变异策略的优化方法,其特征在于,包括以下步骤:(1)对于语料库队列中的每一个种子文件,遍历其每一个字节,监测改变后的测试文件是否导致被测程序产生新的路径或者导致崩溃;(2)将导致被测程序产生新的执行路径或者崩溃的字节标记为有效字节;(3)在后续对种子文件进行havoc随机变异时,根据有效字节数组进行选择性变异。2.根据权利要求1所述的对AFL模糊测试器种子变异策略的优化方法,其特征在于,所述步骤(1)实现过程如下:针对种子文件中不同字节对程序执行路径的影响,把执行相同路径的连续字节划分为同一输入域,对同一输入域中某些字节的变异导致目标程序执行路径的变化,不认为产生了新路径;在种子变异的确定性阶段的bitflip 8/8进行,依次对每个字节进行翻转,由此判断是否会产生新的路径。3.根据权利要求1所述的对AFL模糊测试器种子变异策略的...

【专利技术属性】
技术研发人员:张琦仵俊
申请(专利权)人:南京航空航天大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1