论文部分内容阅读
漏洞是计算机系统在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷和不足。漏洞广泛存在于各种软件中,危害严重。大量的病毒、木马、蠕虫利用计算机的漏洞进行广。泛的传播,造成了严重的经济损失和社会危害。由于漏洞引起问题的严重性,漏洞挖掘工作的重要性也就不言而喻了。漏洞挖掘技术可分为针对源代码和可执行代码两大类。其中针对源码的漏洞挖掘技术已经比较成熟;而针对可执行代码进行分析涉及编译器、指令系统、可执行文件格式等多方面的知识,难度很大,目前还处于研究探索阶段,国内外都没有开发出非常成熟实用的产品。有鉴于此,针对可执行代码的漏洞挖掘技术已经成为软件漏洞挖掘领域的一个重要的研究方向。在可执行代码的漏洞挖掘中最普遍的方法是Fuzzing(模糊测试),该方法的缺点是由于缺乏对程序的理解,测试是完全随机且盲目的,难以保证效率。基于源码的分析有一种符号执行技术,该技术可以用于对程序流程的理解,但是由于其自身的性质和二进制代码与源代码环境差异,使得这种技术较难应用于二进制代码的分析。如果能在二进制环境下应用,与Fuzzing技术结合,形成一种智能Fuzzing方法,将会极大的提高二进制代码漏洞挖掘中Fuzzing测试的效率。本课题研究如何解决符号执行应用于二进制代码漏洞挖掘的难点,提出一种基于动态调试结合虚拟执行的符号执行技术,应用于二进制代码分析中,并结合传统的Fuzzing测试技术形成一种智能Fuzzing测试方法,并开发了相应的原型系统。系统包括五个功能模块:调试器模块、输入点定位模块、反汇编模块、符号执行模块和智能FUZZ测试模块。该系统以Windows环境下可执行PE文件(包括可执行文件EXE及其加载的动态链接库DLL文件)为检测对象,通过调试器加载被测可执行程序获得二进制代码,对二进制代码进行中间表达的转化,出于效率考虑,将单纯的动态单步跟踪改为虚拟执行,进行虚拟符号执行,分析程序执行路径和外部输入的对应关系,提取出路径条件集合,然后通过有规律的改变路径条件,生成能够覆盖不同路径的测试用例,从而进行高效的基于路径覆盖的智能Fuzzing测试。从而提高漏洞挖掘的效率。由于有符号执行提供的关于程序流程的信息,在定位漏洞的同时,还能提供输入数据的传播路径及其它有关漏洞成因的重要信息,帮助分析人员快速的分析漏洞的成因,以便提出相应的补救办法。本文设计并实现了一种基于动态调试和虚拟执行的二进制符号执行系统,并通过实验验证了该系统的正确性。然后将该方法与传统的Fuzzing技术结合,形成了一种新的智能Fuzzing方法,用于可执行程序的漏洞挖掘。