[发明专利]一种基于GCC抽象语法树的缓冲区溢出漏洞检测方法有效
申请号: | 201010240908.1 | 申请日: | 2010-07-30 |
公开(公告)号: | CN101908006A | 公开(公告)日: | 2010-12-08 |
发明(设计)人: | 胡昌振;邹家莘;王崑声;马锐;薛静锋 | 申请(专利权)人: | 北京理工大学 |
主分类号: | G06F11/00 | 分类号: | G06F11/00 |
代理公司: | 北京理工大学专利中心 11120 | 代理人: | 付雷杰 |
地址: | 100081 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明涉及一种缓冲区溢出漏洞的检测方法,特别涉及一种基于GCC抽象语法树的缓冲区溢出漏洞检测方法,属于信息安全技术领域。本发明利用GCC编译器对待分析源程序进行操作,生成抽象语法树;消除抽象语法树文本中所有与分析数据流、控制流无关的信息并保持有用信息的完整性;然后将其用于程序分析中,通过对抽象语法树上相关结点的监控来达到缓冲区溢出漏洞的分析和检测的目的。与传统的没有消除冗余的解析方法相比,本方法具有更好的实用性和更高的效率与准确率。 | ||
搜索关键词: | 一种 基于 gcc 抽象 语法 缓冲区 溢出 漏洞 检测 方法 | ||
【主权项】:
一种基于GCC抽象语法树的缓冲区溢出漏洞检测方法,其特征在于:其具体操作步骤如下:步骤一、针对待分析源程序,直接利用GCC编译器生成抽象语法树AST;所述待分析源程序为C/C++源程序;步骤二、在步骤一的基础上,消除抽象语法树AST中的冗余信息;具体为:第1步:遍历抽象语法树AST中的所有结点,根据抽象语法树AST的结点中的“srcp”字段的情况将所有结点分为3种类型:a.如果“srcp”字段的值是源文件名,则将该节点标记为有用结点;b.如果“srcp”字段不是源文件名,则将该节点标记为无用结点;c.如果该结点中不含“srcp”字段,则将该节点标记为待定结点;第2步:重新遍历抽象语法树AST中的所有结点,并将所有被标记为有用结点和无用结点的结点称为父结点;对于每一个父结点,依此查找它的各个子结点,并按照以下规则进行判定:a.若父结点为有用结点,其子结点为待定结点,则将该子结点标记为有用结点;b.若父结点为有用结点,其子结点为无用结点,则将该子结点标记为无用结点;c.若父结点为无用结点,其子结点为待定结点,则将该子结点标记为无用结点;d.若父结点为无用结点,其子结点为有用结点,则将该子结点标记为有用结点;重复本步骤直至待定结点的数量为零;第3步:重新遍历抽象语法树AST中的所有结点,如果该节点或者其子节点包含“call_expr”,即该节点或者其子节点包含调用表达式,并且该节点或者其子节点被标记为无用结点,则将该节点及其子节点标记为有用结点;经过步骤二的操作,即可得到消除冗余信息的抽象语法树AST′;步骤三、遍历步骤二产生的去除冗余信息后的抽象语法树AST′,为每个缓冲区增加一个区间对,称该区间对为对应缓冲区的属性信息,该属性信息包括表示对应缓冲区的初始分配区间alloc和实际长度区间len;初始分配区间alloc表示为:alloc(var)=[mvar,nvar];实际长度区间len表示为:len(var)=[xvar,yvar];其中,var为缓冲区变量;mvar,nvar,xvar,yvar分别为正整数,mvar,nvar表示初始分配区间alloc的下限和上限;xvar,yvar表示实际长度区间len的下限和上限;步骤四、在步骤三的基础上,将与缓冲区相关的待分析源程序语句和函数调用抽象为对缓冲区属性信息的操作,即对初始分配区间alloc和实际长度区间len进行更新;步骤五、在步骤四的基础上,判断每个缓冲区的状态:具体为:a.若yvar≤nvar,则判断该缓冲区为安全状态,不会发生缓冲区溢出;b.若xvar≤nvar≤yvar,则判断该缓冲区为不安全状态,可能会发生缓冲区溢出;c.若nvar≤xvar,则判断该缓冲区为危险状态,肯定会发生缓冲区溢出;对可能会和肯定会发生缓冲区溢的情况作出报警提示;经过上述步骤的操作,即可检测出缓冲区溢出漏洞。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京理工大学,未经北京理工大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201010240908.1/,转载请声明来源钻瓜专利网。