一种重构CoSy中间表示的缓冲区溢出检测方法技术

技术编号:7759009 阅读:230 留言:0更新日期:2012-09-14 00:50
本发明专利技术旨在提供一种重构CoSy中间表示的缓冲区溢出检测方法,即对源代码进行分析来对缓冲区溢出进行检测的方法。该方法包括(1)CoSy编译器分析扫描源程序,生成中间表示CCMIR;(2)重构CCMIR文本,并为所有非静态局部变量增加安全属性,用于对缓冲区溢出进行判定;(3)对最终的中间表示CCMIR进行缓冲区溢出的判定。通过这样的方法能够快速的重构代码,重构过程简单易行,具有良好的通用性,重构后使得对程序中潜在的会造成缓冲区溢出的错误的检测更快速高效。

【技术实现步骤摘要】

本专利技术涉及一种重构CoSy编译后的中间表示并进行缓冲区溢出检测的方法,属于信息安全

技术介绍
随着计算机技术和通讯技术的迅速发展,整个社会对计算机技术的依赖程度越来越高,各方面对系统的安全性要求越来越高。而现实情况是,计算机系统的安全事件有愈演愈烈的趋势,在近几年的安全事件中与缓冲区相关的安全事件超过了 50%。采用C语言开发的程序缓冲区溢出安全事件具有高发生率。C语言在计算机软件开发中具有不可替代的作用,被广泛应用于嵌入式开发、系统软件、应用软件等各个方面,而C语言自身缺乏安全机 制。正是由于C本身的缺陷,同时又广泛应用,造成了目前缓冲区溢出攻击横行的状況。缓冲区溢出是病毒编写者和特洛伊木马编写者偏爱使用的一种攻击方法。攻击者或者病毒善于在系统当中发现容易产生缓冲区溢出之处,运行特别的程序,获取优先级别,指示计算机破坏文件,改变数据,纰漏敏感信息,产生后门访问点,感染或者攻击其他计算机。一方面现在缓冲区溢出已经发展成了基于栈的缓冲区溢出、基于堆/BSS的缓冲区溢出、格式化缓冲区等多种方式,而且有很多的模板可以直接套用,实现方便。另ー方面由于软件设计理论中,程序的正确性始终是未解決的问题,即是否能设计出绝对正确的软件是无法得到证明的,也从根本上决定了漏洞(bug)的存在,同时由于软件开发存在大量人为的因素,使得漏洞无法避免。这些因素共同作用,加剧了缓冲区溢出引发的安全问题。目前用来检测缓冲区溢出漏洞的方法主要有两种动态检测和静态检測。动态检测通过输入测试数据,动态执行程序来发现软件中存在的错误。动态检测虽然可以不修改程序的源代码,但是它对测试数据的输入有很大的依赖性,这就对发现软件中的错误有一定的局限性。同时随着程序规模的扩大,状态空间急剧增大,动态检测难以覆盖日益増大的程序状态空间,很多安全漏洞问题使用动态测试很难被发现。另外,软件运行过程中进行检測,发现错误后进行修改代价也比较大,是早期发现错误进行修改所需成本的好多倍。因此在动态检测前对软件进行静态检测可以尽早发现软件中的漏洞,加快开发速度。静态检测主要是通过对源代码进行分析,来判断是否存在缓冲区溢出漏洞。静态检测相对于动态检测的特点是a)它明确分析对象为源代码而不是更抽象的系统描述;b)其目标不是证明源代码或者系统设计符合特殊的安全策略,而是发现可能的不安全因素。静态检测包括(I)词汇分析(lexical analysis)法,收集不安全函数并为之建立数据库,通过源代码与数据库中数据的比较来验证是否存在不安全因素;(2)限制条件(constraints)分析法,通过设计限制条件来判断程序对该函数的使用是否违反操作;(3)程序流(flow-based analysis)法,通过对控制流图、函数调用关系图等语法、语义信息的分析来判断。这些静态检测方法各有优缺点,限制条件分析法,以其检测全面,判断准确,成为ー种比较好的缓冲区溢出检测机制。其中有一种简单易实施的方法,具体为(1)针对待分析源程序,直接利用GCC编译器生成抽象语法树; (2)消除抽象语法树中的冗余信息;消除冗余信息的方法是根据语法树中“srcp”字段来判定该节点是否是冗余信息。(3)遍历消除冗余信息后的抽象语法树,为每个缓冲区増加ー个区间对,表示对应缓冲区的初始分配区间alloc和实际长度区间Ien ;初始分配区间alloc (var) = ;实际长度区间表示为len=,a,c和b,(!分别表示初始分配区间和实际长度区间的上限和下限; (4)将与缓冲区相关的待分析源程序语句和函数调用抽象为对应缓冲区区间对的操作,即对初始分配区间alloc和实际长度区间Ien进行更新; (5)判断每个缓冲区的状态若b^ C,则该缓冲区为安全状态,不会发生缓冲区溢出;若c < b < d,则缓冲区为不安全状态,可能会发生缓冲区溢出;若a彡d,则判定为缓冲区为危险状态,肯定会发生缓冲区溢出。这种方法的缺点是(I)冗余算法只针对GCC编译器产生的抽象语法树,不具有通用性,对于类似的其它编译系统产生的抽象语法树,算法实现起来需要较大改动。(2)为每个缓冲区増加ー个区间对,表示方法不够准确,会导致检测不全面。例如忽略了对联合体,结构体变量的判断。(3)对缓冲区状态的判断方法也不够准确,会导致判定结果不准确。
技术实现思路
本专利技术的目的在于克服上述技术中的不足,提供一种重构CoSy (ACE公司的编译器开发工具)中间表示的缓冲区溢出检测方法,是ー种简便快捷的缓冲区溢出检测机制。按照本专利技术提供的技术方案,所述重构CoSy中间表示的缓冲区溢出检测方法,包括以下步骤 a、CoSy编译器分析扫描源程序,生成中间表示文档CCMIR(Common CoSyMedium-level Intermediate Representationノ ; b、重构CCMIR文本,并为每个局部变量增加安全属性,用于对缓冲区溢出进行判定; c、对重构后的CCMIR进行缓冲区溢出的判定。具体的,步骤a中編译器对源程序进行词法分析和语法分析,生成文本格式的中间表示文档CCMIR。步骤b包括 bl.定义DTD规则,将CCMIR文本转化为XML文本存储; b2.利用解析工具重新建立CCMIR文档,并在重构的过程中对每个非静态局部变量增加安全属性,用来对缓冲区溢出进行判断; b3.在重构的过程中去掉与分析程序流和数据流无关的信息。所述步骤bl将CCMIR文本分为四类,用于定义DTD规则 第一类、CCMIR的标识位每遇到一个标识位bbx,建立一个结点元素node与之对应,将结点的标识属性值记录为X ; 第二类、变量声明为姆ー个变量建立结点元素node的子元素variable, variable有四个属性,分别是变量名称、变量类型、变量的大小、变量存储类别。所述变量的存储类别分为静态存储区和动态存储区;若该变量是结构体或联合体变量,则为其每个成员变量建立属性; 第三类、记录中的表达式为姆个表达式建立结点元素node的子元素expression,expression有两个属性,分别是表达式类型和具体的表达式内容,所示表达式类型用来区分一般表达式和函数调用; 第四类、记录中的跳转语句跳转语句包含goto语句和if语句;为跳转语句建立边元素edge,在边元素中建立四个子元素,分别是from元素记录起始节点、to_l元素记录左子树节点、to_r元素记录右子树节点、if_condition元素记录跳转条件,如果不存在if语句,则 if_condition 值为 I。步骤b2利用XML文本解析器解析XML文本,重新建立CCMIR,步骤为 b21.依次读入XML文本的元素; b22.判断读入的是结点元素还是边元素; b23.若读入的是结点元素,则根据其变量类型属性建立相应的树节点,读子元素及其属性,判断是否需要给该变量増加安全属性; b24.若读入的是边元素,就在from、to_l和to_r标识的节点之间建立复杂关系。步骤b23所述的安全属性的増加方法是若子元素为variable,读该子元素的变量存储类别属性,若所述变量存储类别属性为动态存储区,则为该变量增加整数区间对,即安全属性;若该变量是结构体或联合本文档来自技高网
...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:张梅娟阮园黄嵩人于宗光
申请(专利权)人:中国电子科技集团公司第五十八研究所
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1