预览加载中,请您耐心等待几秒...
1/3
2/3
3/3

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

基于动态污点分析的二进制程序导向性模糊测试方法 一、引言 随着信息安全问题的日益严峻,软件漏洞扫描和安全测试技术逐渐成为了计算机科学领域中一个非常重要的研究方向。而模糊测试是其中最为有效的一种方法。在传统的模糊测试中,一个测试用例会被自动产生并输入到目标程序中,从而测试目标程序的稳定性,但这种方法往往无法对程序中的漏洞进行检测。为此,提高模糊测试的有效性和精度逐渐成为模糊测试研究的重点,本文介绍了一种基于动态污点分析的二进制程序导向性模糊测试方法,可以提高测试效率和准确性。 二、相关工作 在传统的模糊测试中,测试用例是随机生成的,往往不能有效的测试程序中的漏洞。为解决这一问题,出现了基于符号执行的模糊测试技术。该技术可以有效地自动产生测试用例,并输入至目标程序中,进而测试程序中的漏洞。然而,该方法仍存在一些问题,如路径爆炸、符号执行的不完全性等问题。 基于此,又出现了利用动态污点分析技术的模糊测试方法。该方法能够有效地跟踪程序中的数据流动情况,可以检测目标程序的漏洞和缺陷。但常规思路下,这种方法无法准确地算出程序的数据流动,而且当程序较大时,执行时间也较长。 三、方法介绍 因此,为了解决这个问题,我们提出了一种新的基于动态污点分析的二进制程序导向性模糊测试方法。该方法主要包含四部分:(1)把程序分块;(2)构造模糊测试数据;(3)动态污点分析;(4)筛选有效的测试用例。 1.把程序分块 首先,我们需要把程序分成多个块,并标记程序中的关键函数。其主要目的是为了减少运行时间,同时也可以减少分析过程中的误差。我们通过对程序的静态分析来提取程序中的每个块和关键函数,并生成代码片段。 2.构造模糊测试数据 对于每个关键函数,我们需要构造多组模糊数据,并将其导入到程序块中。通过随机生成输入数据,并且将其设置为污点,这些污点会随着程序运行时的数据传输而传递。因此,我们能够精确的检测出这些数据对于程序产生的影响。 3.动态污点分析 在构造完互不相关的测试用例后,我们需要对程序中的每个块进行动态分析。我们通过注入污点来跟踪程序的数据流,这样我们就能够精确地生成测试用例,并检测这些测试用例是否存在漏洞。具体分析方法有两种: (1)利用模糊测试数据,执行程序块,并记录污点数据在运行过程中的传输路径。当程序执行回到原点时,所有的污点都需要被清空,以为接下来的测试积累更多的污点。 (2)执行程序块,生成污点,将污点在程序块的各个执行路径中传播,记录下来,生成传播图。根据传播图,我们可以找到产生这些污点的原因,并进一步优化分析过程。 4.筛选有效的测试用例 当程序块执行结束后,我们需要筛选出有效的测试用例,即导致程序崩溃和或是导致漏洞的测试用例。我们使用syscall子系统跟踪程序运行时的系统函数调用,简化了结果的分析。在测试用例可用性高的情况下,测试用例的覆盖率极高,同时漏洞的发现率也更高。 四、实验结果 我们使用了针对性漏洞、内存映射文件和网络协议堆栈等测试集对我们的方法进行了测试。所有的测试均在Ubuntu16.04中完成,其硬件环境包括Corei7-6700CPU、32GMemory、1TBSSD。我们和AFL、FairFuzz等其他模糊工具进行了比较,结果显示我们的方法可以更快,更准确地检测到漏洞。我们的方法对于大型程序的测试效率远高于传统的方法和基于符号执行的方法。 五、结论 本文提出的基于动态污点分析的二进制程序导向性模糊测试方法通过运用模糊及污点分析,使得程序测试更加有效和准确。我们的方法具有高效性、高覆盖率和漏洞发现率等优势。与其他模糊测试工具相比,我们的工具能够在更短的时间内发现更多的漏洞及缺陷,使得安全测试更加全面。需进一步适用性实践来验证该方法的全面性、实用性及实用价值。