[发明专利]面向源代码的基于不等式组求解的缓冲区溢出检测方法无效
申请号: | 200810057757.9 | 申请日: | 2008-02-15 |
公开(公告)号: | CN101241532A | 公开(公告)日: | 2008-08-13 |
发明(设计)人: | 徐国爱;张淼;刘宇航;杨义先 | 申请(专利权)人: | 北京邮电大学 |
主分类号: | G06F21/22 | 分类号: | G06F21/22 |
代理公司: | 北京德琦知识产权代理有限公司 | 代理人: | 夏宪富 |
地址: | 100876*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 面向 源代码 基于 不等式 求解 缓冲区 溢出 检测 方法 | ||
技术领域
本发明涉及一种如何在计算机软件源代码中检测缓冲区溢出的技术,确切地说,涉及一种基于不等式组求解的检测源代码中的缓冲区溢出的方法,属于信息安全中的软件安全技术领域。
背景技术
在进入信息化社会的今天,计算机软件的地位越来越重要。不断推陈出新的软件开发技术使得软件可以实现非常丰富、强大的功能,而呈现给用户的界面却更加简单、便捷。但是,与软件相关联的安全隐患也与日俱升,不仅在数量上远远超过以往的任何时间,而且危害程度也极为严重。软件的规模庞大、新研制的软件技术的不稳定性和经典软件技术的缺陷等都会导致各种软件安全漏洞。缓冲区溢出就是一类影响极为广泛、危害极其严重的软件安全漏洞。
缓冲区溢出是指计算机程序的指令向缓冲区内填充的数据超出了缓冲区的存储容量。当一个超长的数据进入到缓冲区时,超出部分的数据就会被写入其他缓冲区;因为其他缓冲区存放的可能是数据、下一条指令的指针、或者是其他程序的输出内容。这些内容就会被溢出数据所覆盖或破坏掉。黑客采用的一个传统伎俩就是利用有针对性的数据输入,将计算机程序导向至一个不确定的、程序意图之外的流程。2001年开始出现的红色代码蠕虫、2003年出现的Win32.slammer.worm等计算机病毒都属于这种情况,前者通过微软IIS服务程序处理请求数据包时发生缓冲区溢出,后者是利用了微软Windows平台的RPC缓冲区的溢出漏洞。
导致缓冲区溢出的根本原因是当前的主流操作系统在内存管理时缺乏基本的内存越界保护,现在的内存边界的越界处理除了由编译器发挥作用有限的保障作用以外,主要是依靠程序员的代码质量来保证。
目前,针对缓冲区溢出的防范主要采用以下几种基本方法:
(1)基于操作系统安全加固的方法:其基本原理是在操作系统引入专用于对内存进行边界检测的引擎,以确保软件在运行过程不会出现缓冲区溢出。
(2)基于编译器功能增强的方法:利用编译器必备的辅助功能-动态调试,在编译器的动态调试引擎中增加缓存是否越界操作的分析子模块,这是目前比较有效的一种检测缓冲区是否溢出的手段。
(3)基于源代码安全分析的方法:通过对软件源代码进行逻辑分析,指出其中可能存在缓冲区溢出隐患的代码所位于的具体源代码文件和行数。该方法通常被称为静态代码分析,也可以理解为程序员编写安全代码的方法的自动实现,是程序员编写安全代码的辅助工具。静态代码分析技术可方便地集成到编译器中。静态代码分析也是目前对缓冲区溢出防范技术研究的热点之一,Fortify、ITS4、BOON、CQual、MOPS、RATS和FlawFinder等软件都已不同程度地实现了基于静态代码分析的缓冲区溢出检测。
众所周知,缓冲区溢出的本质是在计算机程序运行过程中发生的缓存越界,而程序中的函数是可能实施这种溢出操作的基本单元。一些直接对内存实施写操作的函数(例如在C/C++中的字符串操作函数)很可能最终导致缓冲区溢出。为了描述方便,本发明将这些在缓冲区溢出检测中需要重点关注的函数称为危险函数。危险函数进行的内存操作意味着可能发生缓冲区溢出的风险,这是采用静态代码分析技术检测缓冲区溢出时的基本思想。
不同的危险函数对缓存区执行不同的写操作,它们发生缓冲区溢出的情形也各不相同。比如:对于函数strcpy(dest,sour),当第二个参数的实际长度超出第一个参数分配的长度,就会出现缓冲区溢出,否则正常。而对于函数strcat(dest,sour),如果第一个参数的实际长度与第二个参数的实际长度之和超过第一个参数分配的长度,则出现缓冲区溢出,否则正常。由此可见,危险函数是否存在缓冲区溢出的判断依据是该函数的缓冲区各个变量的长度属性是否满足某个约束条件,如果满足,不会出现缓冲区溢出;否则,就出现缓冲区溢出。
参见图1,介绍基于静态代码分析检测缓冲区溢出的传统方法的四个操作步骤:定义缓冲区相关参数的长度属性、建立危险函数约束条件、生成危险函数约束关系和判断危险函数的约束关系是否成立。
下面分别简要说明这四个操作步骤的具体内容:
步骤1,定义缓冲区相关参数的长度属性:为描述危险函数的约束条件,引入以下三个参数的长度属性定义和两种分别表示缓存区参数或变量的方法:
(1)Len( )获取指定缓存区的实际使用长度(整数);
(2)Alloc( )获取指定缓存区在程序中所分配的长度(整数);
(3)Value( )获取指定变量或常量的数值(整型)。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京邮电大学,未经北京邮电大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200810057757.9/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种AlGaInP基多层结构的深槽刻蚀方法
- 下一篇:浮栅制备方法