● 摘要
软件作为当今信息社会的重要基础设施,已广泛应用于能源、交通、通信、金融和国防等安全攸关领域中。随着软件的规模越来越大、内部结构越来越复杂,其中的安全漏洞数量也急剧增加。软件中的任何安全漏洞都可能导致非常严重的后果,因此如何自动化地检测软件中的安全漏洞,已成为信息安全研究领域亟需解决的重大课题。程序分析指对程序进行自动分析,以验证、确认或发现软件性质(或者规约、约束)的过程或活动。软件漏洞是软件的安全缺陷,一般表示为软件所违背的安全性质。软件漏洞检测指对程序进行自动分析,以发现软件漏洞的过程或活动,通常可认为软件漏洞检测是程序分析的一个子集。动态分析、静态分析和符号执行是在程序语义不同抽象层次上的三种程序分析方法。动态分析是指通过运行具体程序并获取其输出或内部状态等信息的程序分析方法。静态分析是指在不运行软件的前提下对程序进行分析的方法。而符号执行是指通过引入符号变量取代输入中的具体值来模拟程序执行的程序分析方法。本文旨在利用程序分析方法系统地研究软件漏洞检测技术,并实现具有一定通用性或者实用价值的自动化漏洞检测工具。本文的主要研究工作和创新点如下:分析了主流的符号执行方法的实现原理,并对其遭遇到的路径爆炸问题、各种约束相关问题(例如约束困顿、符号注入、约束爆炸和约束收集)和环境交互问题等主要问题进行了深入研究。针对路径爆炸问题,提出了4种缓解措施,包括:循环控制、无关路径剪除、路径选择以及并行符号执行;针对符号注入问题,提出了多种符号注入方法;针对约束爆炸问题,提出了简化路径约束的符号变量常量化和符号文件常量化方法;针对环境交互问题,提出了一种针对系统调用的环境建模方法。基于这些措施和方法,实现了一款检测软件中内存错误类漏洞的符号执行原型工具LISP。使用多种开源程序对该工具进行了评估,不仅发现了测试用例中所有已知的内存错误类漏洞,还在广为使用的程序中发现了2个未公开的内存错误类漏洞。评估结果表明:LISP是一款可对大规模的实际软件进行漏洞检测的有效工具。对静态分析中的污点数据流分析方法进行了研究。首次明确地提出并深入分析了驱动程序中频繁出现的写污点值到污点地址漏洞模式。综合利用反编译、数据流分析和污点检测等多种技术,提出了一种针对该种漏洞模式的检测方案,并实现了相应的原型工具T2T-B2C,该工具既可分析本地二进制代码,也可分析C源代码。使用多种反病毒程序中的驱动程序对该工具进行了评估,发现了6个未公开漏洞。评估结果表明:T2T-B2C是一款可检测写污点值到污点地址漏洞的有效工具,并可应用于较大规模程序的检测。分析了动态分析中的模糊测试方法,并对影响其通用性的输入向量识别、测试数据自动生成与注入以及异常检测等技术进行了研究。基于对缓冲区溢出漏洞模式的分析,综合反汇编代码静态分析、测试数据自动生成、基于自动调试的数据注入与异常检测三种技术,提出了一种针对缓冲区溢出漏洞的通用检测方案,并实现了相应的原型工具Bugsonar。使用一组基准测试集对该工具进行了评估,检测到所有的缓冲区溢出漏洞。评估结果表明:这种“三位一体”的缓冲区溢出漏洞检测方法是有效的,且具有一定的通用性。
相关内容
相关标签