[发明专利]一种Fuzz测试中的程序流跟踪方法及装置有效
申请号: | 201610082897.6 | 申请日: | 2016-02-05 |
公开(公告)号: | CN107045474B | 公开(公告)日: | 2020-12-04 |
发明(设计)人: | 朱东海 | 申请(专利权)人: | 阿里巴巴集团控股有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F11/34 |
代理公司: | 北京同达信恒知识产权代理有限公司 11291 | 代理人: | 朱佳 |
地址: | 英属开曼群岛大开曼*** | 国省代码: | 暂无信息 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 fuzz 测试 中的 程序 跟踪 方法 装置 | ||
本申请涉及计算机技术,特别涉及一种Fuzz测试中的程序流跟踪方法及装置。用以解决Fuzz测试中现有程序流跟踪方法执行效率低,应用范围有限的问题。该方法为:确定待测试程序后,每生成一个测试样本,通过预先配置的API调用CPU,基于当前启动的一个监视进程,采用相应的一个测试样本对待测试程序进行测试,以及记录测试过程中产生的程序流;这样,便将CPU的硬件特性与Fuzz测试相结合,实现了程序流的跟踪,不但提高了测试效率,同时,也提升了测试过程中的代码覆盖率,另一方面,可以支持windows和linux两种系统,也可以跟踪没有源代码的待测试程序,进一步提升了方案的应用广泛性。
技术领域
本申请涉及计算机技术,特别涉及一种Fuzz测试中的程序流跟踪方法及装置。
背景技术
Fuzz测试:即模糊测试,是一种软件测试技术。其核心思想是自动或半自动的随机生成测试样本输入到一个待测试程序中,并监视待测试程序的执行异常,如,崩溃,断言(assertion)失败等等,以发现可能的程序错误,例如,内存泄漏。模糊测试常常用于检测软件或计算机系统的安全漏洞。
Fuzz测试方法在漏洞挖掘中非常流行,当前Fuzz测试工具的趋势是根据测试样本的程序流跟踪结果来控制新的测试样本的生成,由于每次Fuzz测试需要运行大量的样本,需要有较轻便的程序流跟踪方法。目前较普遍的执行方法是:记录每次输入测试样本后,待测试程序运行产生的程序流(即程序执行过程中的指令序列),如果对程序流进行分析后确定进入了新的代码分支,则保留当前使用的测试样本,并作为后续测试样本的变异基础,如果对程序流进行分析后确定未进入新的代码分支,则丢弃当前使用的测试样本,重新基于预设规则生成新的测试样本。afl-fuzz便是根据这个思想编写的一个开源Fuzz测试工具。
afl-fuzz最初使用的程序流跟踪方法是在编译过程中对代码进行代码插桩,后面针对闭源软件又开发了利用Qemu模拟器实现程序流跟踪,其中,Qemu模拟器是一个x86模拟器,可以模拟计算机的各种硬件设备。
下面分别介绍这两种主流的方案。
第一种方案为:针对有源代码的待测试程序,afl-fuzz可以使用修改的编译器,在编译程序生成源代码后对源代码进行插桩并进行程序流跟踪。
然而,动态插桩工具存在兼容性不好的问题,许多待测试程序在插桩工具下,无法正常运行,且采用动态插桩工具时,系统的执行效率较低。
并且第一种方案只支持Linux系统,不支持Windows系统,应用范围有限。
第二种方案为:针对闭源的待测试程序,可以使用Qemu模拟器进行程序流跟踪。
然而,使用Qemu模拟器时,系统的执行效率较低,并且第二种方案也只支持Linux系统,不支持Windows系统,应用范围有限。
发明内容
本申请实施例提供一种Fuzz测试中的程序流跟踪方法及装置,用以解决Fuzz测试中现有程序流跟踪方法执行效率低,应用范围有限的问题。
本申请实施例提供的具体技术方案如下:
一种Fuzz测试中的程序流跟踪方法,包括:
生成一个测试样本,并启动一个监视进程;
通过预先配置的应用程序编程接口API调用中央处理器CPU,基于所述一个监视进程,采用所述一个测试样本对待测试程序进行测试;
记录测试过程中产生的程序流。
较佳的,生成一个测试样本之前,进一步包括:
判断本地是否设置有能够调用CPU完成程序流跟踪功能的API,确定存在时,判定本地的CPU支持程序流跟踪功能。
较佳的,记录测试过程中产生的程序流,包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于阿里巴巴集团控股有限公司,未经阿里巴巴集团控股有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201610082897.6/2.html,转载请声明来源钻瓜专利网。