一种结合指针分析的软件安全漏洞动态检测方法

文档序号:6598212阅读:108来源:国知局
专利名称:一种结合指针分析的软件安全漏洞动态检测方法
技术领域
本发明涉及一种软件安全漏洞动态检测方法,特别涉及一种结合指针分析的软件 安全漏洞动态检测方法,属于信息安全技术领域。
背景技术
随着黑客攻击事件数量的不断上升,蠕虫在Internet上的泛滥,信息安全逐渐成 为人们眼中的焦点。信息安全中的一个核心问题就是存在于计算机系统中的软件安全漏 洞,恶意的攻击者可以利用这些安全漏洞提升权限,访问未授权资源,甚至破坏敏感数据。 计算机软件的普遍应用带给人们越来越多的便捷,并日益影响人们的日常生活,但计算机 软件中存在大量的错误及漏洞,隐藏着巨大的风险。阻止系统攻击和入侵的根本解决途径 是在软件缺陷被利用之前发现并进行分析和研究。目前已有的使用到指针技术的软件安全漏洞动态检测方法的操作步骤为首先, 把待检测程序中出现的所有指针都表示成为胖指针,即,形如{void*,type*,void*}的三 元组形式,其中type*与原指针等价,两个void*指针分别指向原指针的上界和下界;对于 悬浮指针,其中左边的void*指针与原指针未发生悬浮指针错误时所指向的内容一致,而 右边的void*指针指向的是原指针指向内容的下一个地址;然后在待检测程序的运行过程 中,通过检测比较胖指针中的两个void*指针,来判断待检测程序中是否有缓冲区溢出漏 洞和悬浮指针漏洞。该方法的缺陷是需要将待检测程序中所有的指针都表示成为胖指针,因为一个胖指针通常为普通 指针的3倍大小,因此该方法对系统资源的消耗是十分巨大的。

发明内容
本发明的目的是针对已有的结合指针分析进行软件安全漏洞动态检测技术存在 的系统资源开销高的问题,提出一种新的结合指针分析的软件安全漏洞动态检测方法。本 发明首先识别出待检测程序中的不安全的指针,然后将其表示成为胖指针,再通过运行待 检测程序,不断地查看胖指针中包含的指针状态信息找到待检测程序存在的漏洞。该方法 能够同时检测多种漏洞,如缓冲区溢出漏洞和悬浮指针漏洞等,同时降低系统资源的消耗。本发明的目的是通过以下技术方案实现的。本发明的一种结合指针分析的软件安全漏洞动态检测方法的具体操作步骤如 下步骤一、进行指针预处理,得到全部指针的指向集通过基于流非敏感、上下文非敏感的指针分析方法对待检测程序中的指针进行静态分析,得到全部指针的指向集;并将一个标记符号加入到参与地址运算的指针的指向集 中;所述基于流非敏感、上下文非敏感的指针分析方法包括但不限于Steensgaard算法、Andersen 算法、one level flow 算法,优选为 Andersen 算法。步骤二、从指针指向集中识别出不安全的指针依次对步骤一获得的指针指向集的内容进行判断,识别出不安全的指针,当出现 以下四种情况,及判断其为不安全指针①当一个指针的指向集中包含步骤一所述的标记符号时,则认为该指针为不安全 指针;②当一个指针指向了一个存放在堆栈中的变量,即该指针指向变量的生命周期短 于指向该指针的变量时,认为该指针为不安全指针;③当发现赋值操作符左边的表达式中出现对该指针进行取内容的运算时,则认为 该指针为不安全指针;④当出现对指针进行释放或者删除的情况时,则认为该指针为不安全指针。
步骤三、将步骤二中得到的不安全指针表示成为胖指针(Fat Pointer)。步骤四、通过对步骤三得到的胖指针中的两个附加指针的检测,判断待检测程序 中是否有缓冲区溢出漏洞和悬浮指针漏洞。有益效果本发明首先找到待检测程序中可能出现指针漏洞的指针,然后将其表示成为胖指 针,再通过在待检测程序运行过程中,不断地查看胖指针中包含的指针状态信息来检测出 当前软件系统的是否存在指针漏洞。该方法能够同时检测多种漏洞,如缓冲区溢出漏洞和 悬浮指针漏洞等,同时降低了系统资源消耗。


图1为本发明关于结合指针分析的软件安全漏洞动态检测方法的一种具体实施 方式的流程示意具体实施例方式下面结合附图和实施例对本发明技术方案进行详细描述。本发明的一种结合指针分析的软件安全漏洞动态检测方法的流程示意图如图1 所示,具体操作步骤如下待检测程序如下int a[10];int*p = a ;int*q = ρ ;*(ρ+11) = 5 -J/产生缓冲区溢出漏洞int i = 10 ;int*r = new (int);r = &i ;delete r ;//没有把r赋值为NULL,可能产生悬浮指针错误= 15 ;//产生悬浮指针错误步骤一、进行指针预处理,得到全部指针的指向集。
步骤一、进行指针预处理,得到全部指针的指向集采用Andersen算法,并将标记符号“ Y”加入到参与地址运算的指针的指向集中, 得到如下的指针指向集,q<a, p> ;p<a, ¥> ;r<&i> ; 步骤二、从指针指向集中识别出不安全的指针。根据步骤一中得到的指针指向集,可以得出ρ和r为不安全指针。步骤三、将步骤二中得到的不安全指针表示成为胖指针(Fat Pointer)。指针p,其对应的胖指针表示形式为{a,p,a+10};指针r,其对应的胖指针表示形 式为{null, r, null}。步骤四、通过对步骤三得到的胖指针中的两个附加指针的检测,判断被检测程序中是否有缓冲区溢出漏洞和悬浮指针漏洞。对于指针p,其边界为[a,a+10],程序中出现了 p+11的操作(对应的解析为 a+11),通过比较边界发现a+11超出了其使用边界因此判断为缓冲区溢出漏洞。对于指针 r,其边界为[null,null],后面使用了 *r = 15的运算,超出了 r的使用边界,因此r为悬 浮指针漏洞。
权利要求
一种结合指针分析的软件安全漏洞动态检测方法,其特征在于其具体操作步骤如下步骤一、进行指针预处理,得到全部指针的指向集通过基于流非敏感、上下文非敏感的指针分析方法对待检测程序中的指针进行静态分析,得到全部指针的指向集;并将一个标记符号加入到参与地址运算的指针的指向集中;步骤二、从指针指向集中识别出不安全的指针依次对步骤一获得的指针指向集的内容进行判断,识别出不安全的指针,当出现以下四种情况,及判断其为不安全指针①当一个指针的指向集中包含步骤一所述的标记符号时,则认为该指针为不安全指针;②当一个指针指向了一个存放在堆栈中的变量,即该指针指向变量的生命周期短于指向该指针的变量时,认为该指针为不安全指针;③当发现赋值操作符左边的表达式中出现对该指针进行取内容的运算时,则认为该指针为不安全指针;④当出现对指针进行释放或者删除的情况时,则认为该指针为不安全指针;步骤三、将步骤二中得到的不安全指针表示成为胖指针;步骤四、通过对步骤三得到的胖指针中的两个附加指针的检测,判断待检测程序中是否有缓冲区溢出漏洞和悬浮指针漏洞。
2.如权利要求1所述的一种结合指针分析的软件安全漏洞动态检测方法,其特征在 于所述基于流非敏感、上下文非敏感的指针分析方法包括但不限于Steensgaard算法、 Andersen 算法、one level flow 算法。
3.如权利要求1或2所述的一种结合指针分析的软件安全漏洞动态检测方法,其特征 在于所述基于流非敏感、上下文非敏感的指针分析方法,优选为Andersen算法。
全文摘要
本发明涉及一种软件安全漏洞动态检测方法,特别涉及一种结合指针分析的软件安全漏洞动态检测方法,属于信息安全技术领域。本发明首先识别出待检测程序中的不安全指针,然后将其表示成为胖指针,再通过运行待检测程序,不断地查看胖指针中包含的指针状态信息找到待检测程序存在的漏洞。该方法能够同时检测多种漏洞,如缓冲区溢出漏洞和悬浮指针漏洞等,同时降低系统资源的消耗。
文档编号G06F21/22GK101833631SQ20101011054
公开日2010年9月15日 申请日期2010年2月9日 优先权日2010年2月9日
发明者曲洋, 王崑声, 胡昌振, 薛静锋, 马锐 申请人:北京理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1