论文部分内容阅读
随着计算机科学技术的发展,互联网时代的到来,软件安全问题尤为突显,使得软件的安全性分析提到了前所未有的高度。通过对软件代码进行相关安全性分析,查找出目标程序的潜在漏洞并修复,可以确保程序能够运行在一个较高的安全级别。代码分析技术一般分为两种:静态代码分析、动态代码分析。静态代码分析是指在不运行程序的前提下进行的分析过程,所以分析的误报率一般相对较高。动态代码分析在程序的执行过程中,根据当前程序的状态判断是否触发了一个潜在漏洞,可以降低分析的误报率。然而程序的一次动态执行,不能完全反应程序当中所有可能的状态行为。符号执行可以通过原始输入迭代产生新输入的方法,生成程序的多个输入,从而能够驱动程序执行不同的路径,在一定程序上提高了代码分析覆盖率。本文以二进制可执行程序为分析对象,提出了基于动态符号执行的二进制代码分析方法。对二进制程序执行过程的运行时信息进行动态监测,发现程序中可能存在的漏洞,由于获得的信息是程序真实的状态行为,可有效地降低分析的误报率。采用动态符号执行,在程序的执行过程中,记录每次执行的路径约束条件,并根据路径选择算法指导生成新的约束条件,通过约束求解生成新的程序输入,新输入可以驱动程序执行不同的路径,从而提高了程序执行的代码覆盖率。基于上述所提出的代码分析方法,本文设计与实现了一个二进制可执行程序的代码分析工具原型:DSE-BAT。该工具主要由二进制代码分析模块和动态符号执行模块构成。二进制代码分析模块在程序实际运行过程中完成对程序的安全性分析,可以有效地降低分析的误报率;动态符号执行模块则可以生成程序的多个输入,驱动程序执行不同的路径,从而有效地降低了分析的漏报率。为了验证该方法和工具的有效性,本文对DSE-BAT进行了一系列测试:通过功能测试,保证DSE-BAT分析过程的正确性;通过一个缓冲区溢出的漏洞实例,测试DSE-BAT能够发现程序潜在漏洞的能力;通过覆盖率测试,测得DSE-BAT分析的块覆盖率可达80%以上。测试结果表明,本文所研究的方法和工具已达到预期目标。