论文部分内容阅读
随着信息共享的普及,各种应用软件相继出现。软件功能越来越多样,代码的控制结构也越来越复杂。随之而来的安全问题也引起社会各方面的广泛关注。为了维护信息系统的安全,高效实用的软件安全检测及漏洞分析技术供不应求。越来越多的研究团队加入到软件漏洞检测这一研究项目中,研究重点大多只集中在漏洞检测的某一方面,并且对软件漏洞分析技术的理解也不全面。本文以漏洞分析为基础,研究综合性的软件安全检测方法。论文的主要研究内容如下。首先,在阅读大量相关文献的基础上,深入研究软件漏洞的定义及其特点、软件漏洞的分类与分级,同时从静态分析和动态分析两方面归纳总结目前国内外关于软件安全检测方法及工具的主要研究成果,为论文进一步研究工作奠定基础。其次,针对基于源码的软件安全检测,提出逆向跟踪的符号执行方法。该方法首先通过模式匹配技术收集源码中所有安全敏感函数,并以这些安全敏感函数作为节点构建数据流树,从数据流树中计算并得到可能的执行路径。然后通过输入符号,执行所有产生的执行路径来生成程序约束;根据预定义的安全需求,计算所有执行路径上的安全约束;给出程序约束生成及安全约束生成算法。最后在生成的程序约束和安全约束基础上,给出检测源码程序中漏洞的方法。再次,针对基于二进制程序的软件安全检测,提出基于污点分析的动态符号执行方法。首先给出方法的描述,该方法采用污点分析技术对程序中的数据流进行分析,并快速定位与符号输入相关的首条指令。然后,根据输入的符号执行二进制程序,为了提高符号执行阶段的速度提出了三种优化策略,包括白名单的构建、无关状态消除和路径搜索优化。最后,为了验证本文提出的两种软件检测方法的有效性,分别进行了实验,同时进行工具的对比分析。经过对数据结果的分析,表明本文中提出的基于源代码的逆向追踪符号分析技术在精确性和查全率方面具有优势、基于二进制程序的动态符号执行优化方法在执行速度上也具有优势。