论文部分内容阅读
随着计算机技术的普及和Internet的飞速发展,信息安全问题日益突出,信息系统面临着前所未有的安全挑战和日益增多的威胁。其中,基于缓冲区溢出漏洞的攻击方式在当前和过去的几十年内被广泛采用,并可能长期存在。缓冲区溢出问题源于C/C++等高级语言相应的安全缺陷以及编程者的疏忽。其解决方法可分为攻击行为发生时的实时保护,和攻击行为发生前针对程序代码的漏洞发现和检测。前者由于实现代价较高且容易演化为拒绝服务攻击,其应用受到了限制,而后者则成为当前研究的重点,相关技术得到了深入的探讨和发展,并取得了许多成果。但它们具有以下不足:(1)早期检测工具仅作词法分析,存在较多的误报;(2)一些工具通过在源码中添加注释的方法进行分析,自动化程度受到限制;(3)许多检测方法依赖于一些通用的代码分析工具,检测效率不高。针对现有方法的不足,本文提出了一种针对C源码中缓冲溢出漏洞的静态检测方案。其设计目标包括(1)针对漏洞的词法、语法、语义特征,分层次实现检测器的功能模块,使漏洞特征提取更充分;(2)检测器的实现环节和执行过程均不依赖于其它的通用代码分析工具,以避免与漏洞检测无关的语义分析开销。基于以上设计目标,本方案提出并实现了一种C的等价文法:漏洞特征文法,并借助编译器生成工具YACC构造出一个对漏洞形式化特征敏感的语法分析器;以该分析器为框架,配合漏洞信息表示和漏洞判定等工作,最终实现了一个完整的漏洞检测工具原型。由于这种等价文法实现了漏洞形式化特征与普通C语法的分离,因此,由它生成的语法分析器具有对缓冲区溢出漏洞敏感的特点,从而使漏洞信息收集工作比较可靠和准确;另外,这种基于漏洞特征的文法分解为整个方案提供了一个形式化框架,保证了后期语义分析的针对性,并降低了算法设计的复杂度;由于方案并不依赖于已有的一些通用代码分析工具,从而使项目实施过程具有一定的灵活性。最后的实验结果证明,该检测工具有较好的检测准确性,并对一些较隐蔽的漏洞形式具有检测能力。