论文部分内容阅读
混合模糊测试是一种新近提出的软件漏洞挖掘技术,由黑盒模糊测试和白盒符号执行两种方法结合,很快成为软件安全领域的研究热点。混合符号执行作为其中的重要技术之一,具有求解精确、指向性强、资源消耗巨大等特点。由于真实软件系统庞大复杂,基于二进制的混合符号执行依然存在可伸缩性(scalability)问题,导致混合模糊测试效率低下,不能实用。传统的混合模糊测试提升技术多聚焦于利用多种动静态分析手段辅助模糊测试,但忽略了混合符号执行自身的性能问题。本文基于混合模糊测试的方法架构和组成原理,针对混合符号执行的性能提升,以加强混合模糊测试漏洞挖掘效率为目标,展开下列研究。(1)评价体系建立与优化策略分析。混合符号执行作为混合模糊测试中的重要组成方法,其性能和开销对系统的整体影响通常比模糊测试的部分更大,具有特殊的性质,需要进行单独的性能与开销评价,当前研究缺乏对该评价体系的完整阐述。而混合模糊测试虽然由混合符号执行和模糊测试共同组成,但最终的评价体系一般还是遵循模糊测试的评价标准,存在局限性。本文提出了混合符号执行和混合模糊测试的评价体系,并依据评价体系对二者的优化策略分别进行分析。基于混合符号执行的评价体系,本文利用混合执行引擎Triton设计了一个综合测试平台,实现了6种混合符号执行优化方法的模拟,并进行了10个程序20个输入的分析实验,从“时间效率”、“内存开销”和“覆盖率提升”三个评价指标的角度进行测试,分析了不同优化方案提升的百分比数据,最终生成优化方案的性能序列,并提出了三种针对不同情况的优化选择方案,作为实际应用的参考,为混合符号执行优化的研究工作提出了指导目标。基于混合模糊测试的评价体系,本文提出了混合模糊测试架构中的三点重要问题,为提升混合模糊测试漏洞挖掘效率的研究工作提出了指导目标。(2)基于污点分析的混合符号执行约束缩减方法。从混合模糊测试的白盒符号执行一端出发,混合符号执行的可伸缩性问题是漏洞挖掘效率的主要瓶颈。约束膨胀问题是混合符号执行效率不高的主要原因之一,其成因来自于两个方面:第一,约束收集过程中由于环境建模导致环境相关额外约束引入;第二,约束求解过程中由于冗余约束存在导致求解效率低下。本文针对混合符号执行中的约束膨胀问题,提出了一种基于污点分析的约束缩减方法,该方法由两个模块组成:基于函数端符号化追踪的环境建模约束优化技术和基于输入部分符号化的冗余约束优化方法。本文实现了优化后的混合符号执行工具PSCE,实验评测证明,PSCE对比未经优化的混合符号执行工具Triton在时间开销上优化了37.54%,在内存开销上优化了20.62%,在代码覆盖率方面提升了3.96%。(3)基于混合符号执行优化的混合模糊测试漏洞挖掘系统架构设计。已有的混合模糊测试架构中常有以精确性换执行效率,导致漏洞挖掘性能不高的问题。本文针对混合模糊测试漏洞挖掘架构设计问题,说明混合模糊测试的精确性问题来源于两点:第一,混合符号执行本身的过于优化导致精确性问题;第二,混合模糊测试整体架构导致精确性问题。本文提出了一种基于混合符号执行优化的混合模糊测试漏洞挖掘架构设计,从两个方面对漏洞挖掘效率进行提升:兼顾精确性和效率的混合符号执行自身优化、混合模糊测试漏洞挖掘架构中的分支调度方案。本文实现了两个漏洞挖掘原型工具,一是基于QSYM进行优化的PSYM,在漏洞测试集LAVA-M上发现已知漏洞的个数增加了148个;二是基于PSCE的漏洞挖掘架构PSFuzzer,对比已有工作,在覆盖率方面,比AFL、Triton和QSYM分别高出5.16%、7.32%和6.14%;在触发已知漏洞的平均时间上,比AFL、Triton和QSYM分别快了3.62倍、3.37倍和4.1倍;在平均发现崩溃数量上,比AFL、Triton和QSYM分别多了18个、28.91个和18.92个。PSFuzzer还在5个最新版本的程序中发现17个零日漏洞。(4)基于混合模糊测试平衡点理论的分支调度方法。基于覆盖率的模糊测试缺乏指向性,会导致覆盖率平坦问题。在混合模糊测试中,这个问题可以通过混合符号执行的分支选择方法进行缓解。本文提出了一种混合模糊测试的平衡点理论与调节模型,将混合模糊测试研究模型化为一个寻找最佳平衡点的问题,其中动态平衡点问题即分支调度问题。在混合模糊测试过程中,会产生大量待混合符号执行分析的新输入,每个输入中又有大量分支指令,为了在有限时间和资源的限制下达到最大覆盖率,需要对输入和分支进行仔细的选择。本文提出了一种基于分支调度的选择性混合模糊测试的方案,包括两个内容:第一,基于三个评价指标的重要分支选择算法,对每个分支计算一个权重;第二,基于分支权重的优先级分数算法,用于选择分数最高的输入,进行混合符号执行的分析。本文在QSYM的基础上实现了方案中的两个算法,实现原型工具SHFuzz,并在20个真实程序上进行测试,平均覆盖率可提升8.4%,发现独特漏洞数量增加100个,发现已知漏洞效率提升7.85倍,并且发现了QSYM无法发现的新漏洞。