论文部分内容阅读
随着信息技术的发展,软件安全越来越引起人们的普遍关注。为了提升软件的安全性,需要通过漏洞挖掘的方法发现软件中的潜在漏洞,然后修补该漏洞。在诸多的漏洞挖掘方法中,模糊测试是应用最广泛、发现软件漏洞最多的方法,它具有自动化程度高、不需要对软件进行深入分析等优点。为了提升模糊测试的效率,可以采用并行化的方法,目前并行化的模糊测试主要存在以下两点问题:其一是并行化主要针对单机多核情况,缺少适用于多主机分布式环境并行的测试用例生成方法;其二是缺少适用于并行的队列生成方法和去除重复crash数据的方法。本课题研究的是高效率模糊测试并行化的关键技术。论文针对目前并行化模糊测试存在的上述两个问题进行研究,本文主要内容及研究成果如下:(1)本文提出了一种面向并行的测试用例生成方法首先对目标程序进行初步分析,完成插桩、标识基本块、找出基本跳转等准备工作。然后对其中具有危险性的跳转进行标记。在测试用例生成过程中,先通过发现新的基本跳转生成测试用例,再通过跳转出现的次数进一步筛选测试用例并对标记为危险的跳转采用更严格的标准。该方法最大的优势在于适用于分布式的处理环境。(2)本文提出了在分布式环境下节点间的同步处理方法包括提出一种轮询机制来处理测试用例生成过程中多节点协调工作的问题,一种适用于分布式环境的队列合并方法和crash管理方法。轮询机制用来协调节点间的测试用例生成,这种轮询机制既保证了各节点在相互不干扰的情况下分别进行随机变异,又能极大限度减少重复测试,提升了并行化模糊测试的整体效率。在队列处理上,各节点通过概率优先级策略来选取测试用例,构成一个动态的本地队列,通过队列合并的方法来更新测试用例集合。在crash管理上,提出了一种分布式的crash管理方法,该方法是一种面向并行的、有效对测试产生的大量crash数据进行管理的方法,该方法通过识别新跳转来去除冗余,是一种简单高效的方法。(3)本文设计并实现了一个并行化的模糊测试系统利用前面提到的多种方法,设计并实现了在分布式的环境下,对软件漏洞进行并行化模糊测试的工具ParalFuzz,并通过实验验证了该工具进行并行化模糊测试的有效性。