论文部分内容阅读
在层出不穷的软件漏洞中,缓冲区溢出漏洞已经成为当前危害最大、出现频率最高的漏洞,随着信息技术和网络技术的高速发展,缓冲区溢出漏洞日益变得严重。面向源码的缓冲区溢出漏洞检测技术相对比较成熟,但是在商业利益的驱动和市场经济条件下,很多软件都是以二进制程序的形式发布的,针对源码的检测方法不能有效地对二进制进行检测,使得这些软件的安全性无法得到保证。在现有的检测技术中动态分析方法居多,但是动态分析只能在运行时检测,且具有覆盖率低、运行代价较高等缺点。静态程序能够在程序运行前检测漏洞,避免造成重大损失,但是二进制程序缺少源码级别的变量、类型和程序结构信息,对其进行静态分析存在一定的难度。针对现存问题,本文提出了基于二进制程序的缓冲区溢出静态检测技术的研究,研究缓冲区溢出的概念和原理,基于逆向分析平台BinNavi,设计了一个对缓冲区溢出漏洞进行检测的工具。主要研究内容如下所示:1、基于中间语言的基础上,提出了一种基于漏洞模式的缓冲区漏洞易发点的检测方法。将不安全函数调用和循环拷贝操作导致的缓冲区溢出的漏洞形态抽象为特定的模式,在漏洞模式的基础上对缓冲区溢出漏洞点进行定位;2、为了降低上述检测方法中的误报率,基于数据依赖分析的过程内和过程间分析方法对漏洞进行筛选。过程内的分析基于逆向程序切片的算法,求解漏洞点的关键变量的数据依赖集合,并通过集合之间的关系对漏洞点进行筛选;过程间的分析基于函数摘要的方法跟踪数据来源,确定漏洞点的关键数据的最终来源,根据数据是否来自程序外部对漏洞进一步的筛选。基于BinNavi的逆向分析平台,利用上述方法设计并实现了一个二进制程序缓冲区溢出漏洞静态检测工具,选取程序对工具的功能和性能进行测试,实验结果表明,这个方法能够检测程序中的缓冲区漏洞并有效的减少检测结果中的误报情况,提高了漏洞的检测效率。