论文部分内容阅读
随着计算机技术和互联网技术的飞速发展,信息技术影响着人们日常生活的方方面面,但是信息技术在给社会带来巨大生产力的同时,计算机系统中存在的安全漏洞,也会使企业和个人的利益受到侵害。在对计算机系统进行攻击时,黑客经常以计算机系统内的软件漏洞作为攻击的突破点,因此对软件漏洞进行安全研究的重要性就不言而喻了。软件漏洞挖掘是软件安全研究领域中一个重要的研究方向,通过挖掘计算机系统中软件存在的未知漏洞,可以完善整个系统的薄弱点,提高计算机系统的安全。软件漏洞挖掘按照研究对象可分为针对源码的漏洞挖掘和针对二进制软件的漏洞挖掘,其中针对源码的漏洞挖掘已有成熟的商用工具,而由于语法信息和词法信息的匮乏,并没有出现成熟的针对二进制软件的漏洞挖掘上具,因此本文以二进制可执行程序作为研究对象。Fuzzing(模糊测试)是一种最普遍的二进制漏洞挖掘技术,通过对输入数据进行模糊化处理,以期可以发现程序内部存在安全漏洞。虽然Fuzzing测试操作简单,但由于缺乏对目标程序的理解,只是对输入数据进行随机变异,导致测试效率低下。测试样本的优劣是影响Fuzzing效率和效果的重要因素,本文以测试样本的优化为研究重点,将动静分析技术与Fuzzing技术相结合,提出了一种针对二进制可执行程序的智能漏洞挖掘技术,增强Fuzzing测试的导向性,提高漏洞挖掘的效率。为对测试样本进行优化,本文主要进行了以下研究:总结二进制高危漏洞模式。研究二进制软件漏洞的分类,并提出了三种以元操作序列为特征的漏洞模式,分别为基于危险函数调用的缓冲区溢出漏洞模式、基于循环写内存的缓冲区溢出漏洞模式和基于符号扩展指令的整数溢出漏洞模式。提取二进制程序高危漏洞隐患点。利用IDAPython开发了三种高危漏洞模式的匹配脚本,匹配脚本通过静态数据流分析,对漏洞模式定义的元操作进行匹配,依此提取目标二进制模块中存在的高危漏洞隐患点。提出基于漏洞隐患点最大覆盖率的样本优化方法。利用动态二进制插装技术,提取目标程序在动态执行过程中的运行时信息,分析样本对高危漏洞隐患点的覆盖率,依此评判样本优劣。研究动态污点分析技术,基于二进制插装平台开发了离线污点分析系统。对于特殊高危漏洞隐患点,当测试样本无法覆盖该隐患点时,利用离线动态污点分析系统指导测试样本的重构。此外动态污点分析技术也用于对程序异常的快速分析,协助构造漏洞利用代码。基于以上研究,本文设计并实现了基于动静结合的智能漏洞挖掘系统BugHunter,并利用BugHunter进行实际的二进制漏洞挖掘,通过0Day漏洞的挖掘过程,对BugHunter的有效性进行了验证。