论文部分内容阅读
缓冲区溢出漏洞是一个在各种类型操作系统和程序都广泛存在的一个安全漏洞,也是被黑客最多使用的攻击漏洞。目前大多数缓冲区溢出检测工具是基于源代码的,极大限制了工具的使用范围。传统二进制环境静态识别模型存在一些固有缺陷,主要集中在指针别名以及变量类型识别。本文提出了一种动态与静态技术相结合的二进制漏洞挖掘方法弥补了大部分缺陷。本文从分析x86 CPU架构和指令开始,详细介绍了二进制文件的反编译,虚拟执行环境VM的设计。在VM的设计里,设计了和真实CPU一样的IA-32基本执行环境,可以执行原生x86指令。通过VM,考察指令执行状态,跟踪寄存器的变化,解决了指针别名的问题。通过记录VM中虚拟内存每条指令访存地址,最后统计计算出每条访存指令实际访问的变量地址,解决了变量精确识别的问题。在现代的程序中,包含了大量的库函数。为了尽可能的避开这些库函数,本文提出了新的快速库函数识别技术。新的快速库函数识别技术相对于现有的技术,提高了识别准确度,但是识别库的存储和重建复杂。在控制流分析中,引用了图论里的区间图理论,将程序流图划分为不相交的区间子图。通过区间图的简约,逐步识别出程序流图的嵌套控制结构。在数据流分析中,计算了传统的数据流方程,针对二进制环境的特点,提出了一个简易有效的类型识别算法。针对不安全函数调用和写内存循环2种字符串拷贝操作,研究写内存循环导致的溢出问题,提出一种流相关、上下文无关的检测算法。在循环关键属性识别里,再一次结合VM,计算循环状态差值,从中发现变化量,由此解决了控制变量和控制位移的计算。文章最后介绍了缓冲区溢出漏洞检测模型在实际中的应用,实验结果表明检测模型可以很好的检测可执行程序中常见类型的缓冲区溢出漏洞。