[发明专利]一种基于GCC抽象语法树的缓冲区溢出漏洞检测方法有效
申请号: | 201010240908.1 | 申请日: | 2010-07-30 |
公开(公告)号: | CN101908006A | 公开(公告)日: | 2010-12-08 |
发明(设计)人: | 胡昌振;邹家莘;王崑声;马锐;薛静锋 | 申请(专利权)人: | 北京理工大学 |
主分类号: | G06F11/00 | 分类号: | G06F11/00 |
代理公司: | 北京理工大学专利中心 11120 | 代理人: | 付雷杰 |
地址: | 100081 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 gcc 抽象 语法 缓冲区 溢出 漏洞 检测 方法 | ||
技术领域
本发明涉及一种缓冲区溢出漏洞的检测方法,特别涉及一种基于GCC抽象语法树的缓冲区溢出漏洞检测方法,属于信息安全技术领域。
背景技术
随着计算机技术的迅速发展,人类社会的信息化程度越来越高,整个社会的政治、经济、军事、文化以及其他领域对计算机信息系统的依赖程度也越来越高。在这种情况下,计算机系统的安全性得到了人们越来越多的关注。然而,大型软件、系统的编写需要许许多多程序员共同完成,他们将一个软件或系统分成若干板块,分工编写,然后再汇总,测试;最后再修补、发布,因此在软件中存在安全漏洞几乎是不可避免的。软件安全漏洞指软件设计实现过程中被引入的、在数据访问或行为逻辑等方面的缺陷。这些漏洞常常被攻击者利用,从而使程序行为违背一定的安全策略。基于上述原因,目前对软件安全漏洞检测技术的研究越来越受到重视。
按照检测过程中是否需要执行程序的标准,软件安全漏洞检测技术分为动态检测和静态检测。
(1)静态检测
静态检测方法大致可分为三类:
第一类是基于词法分析的检测方法。对应于早期检测工具,例如Grep工具等。它出现的时间较长,且发展较成熟,其优点是:漏洞特征以数据的形式独立于分析程序存在,可以灵活扩展;另外,词法分析可以保证较好的执行效率。但它的缺点非常明显:以数据形式存在的特征库并不能对漏洞进行充分、完整的描述,从而造成漏洞信息收集的不完整,也限制了与之配合的相关算法仅能进行词法分析,因此影响了检测能力。
第二类是注释驱动的约束分析和检测方法。它虽然引入了语法分析,却是基于程序验证系统的思想和方法进行的。这要求操作人员对检测目标非常熟悉,甚至需人工编写程序规范和注释,因此检测的自动化程度较低。David Evans以及David Larochelle所研究的Splint以及基于Splint所作的改进都是属于这种方法。
第三类方法为将源码的特征进行抽象、建模,将漏洞检测问题转化为约束分析和求解的问题。它们一般基于已有的程序分析工具(如商业软件codesurfer)实现,其优点是:这些程序分析工具的功能非常强大,能够生成抽象语法树、函数调用关系图、控制流图甚至指针指向关系图等语法、语义信息。使用工具提供的编程接口,可以直接基于这些信息进行分析,从而减小了设计上的复杂度。目前,在该类方法中,有一种较为通用、检测效果也比较好的缓冲区溢出漏洞的检测方法,具体为:
第1步:针对待分析源程序,直接利用GCC编译器生成抽象语法树AST。
第2步:遍历第1步产生的抽象语法树AST,将每个缓冲区与一个整数对相关联,称该整数对为对应缓冲区的属性信息,该整数对包括分配空间大小max_length和已用长度used_length。
第3步:将与缓冲区相关的待分析源程序语句和函数调用抽象为对缓冲区属性信息(分配空间大小max_length和已用长度used_length)的操作。
第4步:判断分配空间大小max_length和已用长度used_length的大小关系。如果max_length<used_length,则判断其发生缓冲区溢出。
这种方法的缺点是:①直接针对GCC编译器生成的抽象语法树AST进行分析检测,而GCC产生的抽象语法树文本中包含许多有助于编译的细节信息,例如由“#include”命令产生的未被源程序用到的函数及结构,以及编译过程中产生的一些内部函数、类型声明、出错信息、常量等,这些信息不利于代码分析。在数量上,对一个很小的编译单位,大概能产生其1000倍的抽象语法树文本,最终产生的抽象语法树会占据整个内存。对于复杂的源程序,这些方法的检测效率将大大降低。②在第2步中,缓冲区的属性信息用一个整数对来表示,这种表示方法不够准确,会导致判定结果不准确。
(2)动态检测
动态检测是在程序运行过程中注入测试数据,通过对程序的运行环境(包括环境变量、内存、堆和栈等)进行分析,观察程序运行是否正常、程序行为是否满足要求,来检测程序是否存在漏洞。动态检测技术的优点是不直接面对源代码,不需要修改目标程序源代码,这在一定程度上提高程序的保密性。但其明显的不足是动态检测技术对输入的依赖性,只有当特定的输入是程序执行到危险点时,漏洞才会被发现,因此,定位不准确、漏报率高。
发明内容
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京理工大学,未经北京理工大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201010240908.1/2.html,转载请声明来源钻瓜专利网。