[发明专利]一种重构CoSy中间表示的缓冲区溢出检测方法有效
申请号: | 201210077106.2 | 申请日: | 2012-03-22 |
公开(公告)号: | CN102662834A | 公开(公告)日: | 2012-09-12 |
发明(设计)人: | 张梅娟;阮园;黄嵩人;于宗光 | 申请(专利权)人: | 中国电子科技集团公司第五十八研究所 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F9/45 |
代理公司: | 无锡市大为专利商标事务所 32104 | 代理人: | 殷红梅 |
地址: | 214035 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 cosy 中间 表示 缓冲区 溢出 检测 方法 | ||
技术领域
本发明涉及一种重构CoSy编译后的中间表示并进行缓冲区溢出检测的方法,属于信息安全技术领域。
背景技术
随着计算机技术和通讯技术的迅速发展,整个社会对计算机技术的依赖程度越来越高,各方面对系统的安全性要求越来越高。而现实情况是,计算机系统的安全事件有愈演愈烈的趋势,在近几年的安全事件中与缓冲区相关的安全事件超过了50%。采用C语言开发的程序缓冲区溢出安全事件具有高发生率。C语言在计算机软件开发中具有不可替代的作用,被广泛应用于嵌入式开发、系统软件、应用软件等各个方面,而C语言自身缺乏安全机制。正是由于C本身的缺陷,同时又广泛应用,造成了目前缓冲区溢出攻击横行的状况。
缓冲区溢出是病毒编写者和特洛伊木马编写者偏爱使用的一种攻击方法。攻击者或者病毒善于在系统当中发现容易产生缓冲区溢出之处,运行特别的程序,获取优先级别,指示计算机破坏文件,改变数据,纰漏敏感信息,产生后门访问点,感染或者攻击其他计算机。
一方面现在缓冲区溢出已经发展成了基于栈的缓冲区溢出、基于堆/BSS的缓冲区溢出、格式化缓冲区等多种方式,而且有很多的模板可以直接套用,实现方便。另一方面由于软件设计理论中,程序的正确性始终是未解决的问题,即是否能设计出绝对正确的软件是无法得到证明的,也从根本上决定了漏洞(bug)的存在,同时由于软件开发存在大量人为的因素,使得漏洞无法避免。这些因素共同作用,加剧了缓冲区溢出引发的安全问题。
目前用来检测缓冲区溢出漏洞的方法主要有两种:动态检测和静态检测。动态检测通过输入测试数据,动态执行程序来发现软件中存在的错误。动态检测虽然可以不修改程序的源代码,但是它对测试数据的输入有很大的依赖性,这就对发现软件中的错误有一定的局限性。同时随着程序规模的扩大,状态空间急剧增大,动态检测难以覆盖日益增大的程序状态空间,很多安全漏洞问题使用动态测试很难被发现。另外,软件运行过程中进行检测,发现错误后进行修改代价也比较大,是早期发现错误进行修改所需成本的好多倍。因此在动态检测前对软件进行静态检测可以尽早发现软件中的漏洞,加快开发速度。
静态检测主要是通过对源代码进行分析,来判断是否存在缓冲区溢出漏洞。静态检测相对于动态检测的特点是:a)它明确分析对象为源代码而不是更抽象的系统描述;b)其目标不是证明源代码或者系统设计符合特殊的安全策略,而是发现可能的不安全因素。静态检测包括:(1)词汇分析(lexical analysis)法,收集不安全函数并为之建立数据库,通过源代码与数据库中数据的比较来验证是否存在不安全因素;(2)限制条件(constraints)分析法,通过设计限制条件来判断程序对该函数的使用是否违反操作;(3)程序流(flow-based analysis)法,通过对控制流图、函数调用关系图等语法、语义信息的分析来判断。这些静态检测方法各有优缺点,限制条件分析法,以其检测全面,判断准确,成为一种比较好的缓冲区溢出检测机制。其中有一种简单易实施的方法,具体为:
(1)针对待分析源程序,直接利用GCC编译器生成抽象语法树;
(2)消除抽象语法树中的冗余信息;消除冗余信息的方法是根据语法树中“srcp”字段来判定该节点是否是冗余信息。
(3)遍历消除冗余信息后的抽象语法树,为每个缓冲区增加一个区间对,表示对应缓冲区的初始分配区间alloc和实际长度区间len;初始分配区间alloc(var)=[a, b];实际长度区间表示为len=[c,d],a ,c和b ,d分别表示初始分配区间和实际长度区间的上限和下限;
(4)将与缓冲区相关的待分析源程序语句和函数调用抽象为对应缓冲区区间对的操作,即对初始分配区间alloc和实际长度区间len进行更新;
(5)判断每个缓冲区的状态:若b≤c,则该缓冲区为安全状态,不会发生缓冲区溢出;若c≤b≤d,则缓冲区为不安全状态,可能会发生缓冲区溢出;若a≥d,则判定为缓冲区为危险状态,肯定会发生缓冲区溢出。
这种方法的缺点是:(1)冗余算法只针对GCC编译器产生的抽象语法树,不具有通用性,对于类似的其它编译系统产生的抽象语法树,算法实现起来需要较大改动。(2)为每个缓冲区增加一个区间对,表示方法不够准确,会导致检测不全面。例如忽略了对联合体,结构体变量的判断。(3)对缓冲区状态的判断方法也不够准确,会导致判定结果不准确。
发明内容
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国电子科技集团公司第五十八研究所,未经中国电子科技集团公司第五十八研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210077106.2/2.html,转载请声明来源钻瓜专利网。