论文部分内容阅读
信息系统安全性格局的大变化,将软件安全性推到关乎全局的关键位置,安全分析是用于增强系统安全性的有效手段之一。由于设计阶段所形成的安全规范与编程规范通常较清晰地反映在源代码中,因此通过软件源代码安全分析方法自动检测系统中存在的安全漏洞具有重要意义。本文在对软件安全漏洞分类及相关软件安全分析技术研究的基础上,提出并实现了用于软件安全分析的编译器基础架构;采用自上而下的分析方法实现了程序语义分析,引入了类型系统形式化方法及基于自动机的定制安全分析手段,实现了典型安全漏洞的自动检测。论文研究的具体内容包括:(1)用于软件安全分析的编译器基础架构本文将传统用于编译器开发的编译器基础架构引入软件安全分析,提出了针对安全分析的基础架构模型。采用开放编译器工具ANTLR构造了C/C++与Java语言语法分析前端,为程序设计语言源代码构建完整的中间表示,引入了专用的程序基本语义信息收集层次,为安全分析提供了较为准确的程序语义信息,形成了一种支持全分析阶段安全检查及多种分析手段的软件源代码安全分析方法。(2)基于二叉决策图的指针别名分析本文提出并实现了一种基于二叉决策图的流敏感、上下文敏感及路径敏感的指针别名分析方法,实现了更为准确的指针别名信息抽取;基于自上而下的分析方法,提出了包括记忆式跨过程分析、路径数爆炸优化、结点重复分析优化以及不可达路径检测在内的组合优化方法,有效解决了敏感分析中的效率问题。(3)语义类型系统的形式化方法本文提出了一种面向安全分析的轻量级语义类型系统,以状态集合为依据给出了语义类型的定义,提出了包含类型推导规则与安全规范断言集合在内的语义类型系统模型,并以指针相关安全分析为例详细阐述了语义类型系统的构造方法。该类型系统为软件代码安全分析提供了统一的形式化模型,可直接应用于程序状态相关的软件安全漏洞检测。(4)基于自动机的定制化安全分析在语义类型系统模型及典型安全漏洞源代码模式分析的基础上,本文提出了一种基于自动机模型的定制化安全分析方法,在传统自动机模型的基础上,引入了语义约束及分支条件等新的状态转移约束,满足了复杂安全规则描述的需要;讨论了安全分析过程中详细的模式匹配及状态转移处理规则;并给出了一种基于静态报告安全漏洞的动态植入监测方法。(5)基于逆向迭代搜索的隐通道检测针对软件源代码中的隐通道安全漏洞,本文提出了一种专用的基于信息流图逆向迭代搜索的隐通道自动检测方法,采用完整语法与语义分析手段完成原始信息流提取,定义了库函数信息流规则以及信息流推导规则,提高了信息流收集的准确性与完整性;采用基于信息流图的带约束逆向深度优先搜索算法实现了潜在隐通道检测,并通过语法及语义规则实现了伪隐通道的筛选。论文提出的上述方法嵌入针对安全分析的编译器基础架构,构成了一种准确性与效率兼顾的软件源代码安全分析方法。依托论文工作相关的科研项目,作者对论文工作相关方法与技术进行了实现及验证,设计实现了相应的软件源代码安全分析工具,完成了典型安全漏洞的自动检测,通过了具有测试资质的第三方软件测试并进行了实际应用。