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

申请号 : CN201010110545.X

文献号 : CN101833631B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 胡昌振王崑声曲洋马锐薛静锋

申请人 : 北京理工大学

摘要 :

本发明涉及一种软件安全漏洞动态检测方法,特别涉及一种结合指针分析的软件安全漏洞动态检测方法,属于信息安全技术领域。本发明首先识别出待检测程序中的不安全指针,然后将其表示成为胖指针,再通过运行待检测程序,不断地查看胖指针中包含的指针状态信息找到待检测程序存在的漏洞。该方法能够同时检测多种漏洞,如缓冲区溢出漏洞和悬浮指针漏洞等,同时降低系统资源的消耗。

权利要求 :

1.一种结合指针分析的软件安全漏洞动态检测方法,其特征在于:其具体操作步骤如下:步骤一、进行指针预处理,得到全部指针的指向集

通过基于流非敏感、上下文非敏感的指针分析方法对待检测程序中的指针进行静态分析,得到全部指针的指向集;并将一个标记符号加入到参与地址运算的指针的指向集中;

步骤二、从指针指向集中识别出不安全的指针

依次对步骤一获得的指针指向集的内容进行判断,识别出不安全的指针,当出现以下四种情况时,则判断其为不安全指针:①当一个指针的指向集中包含步骤一所述的标记符号时,则认为该指针为不安全指针;

②当一个指针指向了一个存放在堆栈中的变量,即该指针指向变量的生命周期短于指向该指针的变量时,认为该指针为不安全指针;

③当发现赋值操作符左边的表达式中出现对该指针进行取内容的运算时,则认为该指针为不安全指针;

④当出现对指针进行释放或者删除的情况时,则认为该指针为不安全指针;

步骤三、将步骤二中得到的不安全指针表示成为胖指针;

步骤四、通过对步骤三得到的胖指针中的两个附加指针的检测,判断待检测程序中是否有缓冲区溢出漏洞和悬浮指针漏洞。

2.如权利要求1所述的一种结合指针分析的软件安全漏洞动态检测方法,其特征在于:所述基于流非敏感、上下文非敏感的指针分析方法包括但不限于Steensgaard算法、Andersen算法、one level flow算法。

3.如权利要求1或2所述的一种结合指针分析的软件安全漏洞动态检测方法,其特征在于:所述基于流非敏感、上下文非敏感的指针分析方法,优选为Andersen算法。

说明书 :

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

技术领域

[0001] 本发明涉及一种软件安全漏洞动态检测方法,特别涉及一种结合指针分析的软件安全漏洞动态检测方法,属于信息安全技术领域。

背景技术

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

发明内容

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

附图说明

[0022] 图1为本发明关于结合指针分析的软件安全漏洞动态检测方法的一种具体实施方式的流程示意图;

具体实施方式

[0023] 下面结合附图和实施例对本发明技术方案进行详细描述。
[0024] 本发明的一种结合指针分析的软件安全漏洞动态检测方法的流程示意图如图1所示,具体操作步骤如下:
[0025] 待检测程序如下:
[0026] int a[10];
[0027] int*p=a;
[0028] int*q=p;
[0029] *(p+11)=5;//产生缓冲区溢出漏洞
[0030] int i=10;
[0031] int*r=new(int);
[0032] r=&i;
[0033] delete r;//没有把r赋值为NULL,可能产生悬浮指针错误
[0034] *r=15;//产生悬浮指针错误
[0035] 步骤一、进行指针预处理,得到全部指针的指向集。
[0036] 步骤一、进行指针预处理,得到全部指针的指向集
[0037] 采用Andersen算法,并将标记符号“¥”加入到参与地址运算的指针的指向集中,得到如下的指针指向集:,
[0038] q
[0039] p
[0040] r<&i>;
[0041] 步骤二、从指针指向集中识别出不安全的指针。
[0042] 根据步骤一中得到的指针指向集,可以得出p和r为不安全指针。
[0043] 步骤三、将步骤二中得到的不安全指针表示成为胖指针(Fat Pointer)。
[0044] 指针p,其对应的胖指针表示形式为{a,p,a+10};指针r,其对应的胖指针表示形式为{null,r,null}。
[0045] 步骤四、通过对步骤三得到的胖指针中的两个附加指针的检测,判断被检测程序中是否有缓冲区溢出漏洞和悬浮指针漏洞。
[0046] 对于指针p,其边界为[a,a+10],程序中出现了p+11的操作(对应的解析为a+11),通过比较边界发现a+11超出了其使用边界因此判断为缓冲区溢出漏洞。 对于指针r,其边界为[null,null],后面使用了*r=15的运算,超出了r的使用边界,因此r为悬浮指针漏洞。