一种缓冲区溢出漏洞的定位方法与装置制造方法及图纸

技术编号:14182729 阅读:58 留言:0更新日期:2016-12-14 12:07
本发明专利技术涉及一种缓冲区溢出漏洞的定位方法和装置,该方法和装置可以在栈缓冲区溢出覆盖掉栈帧地址和函数返回地址的情况下,利用栈上的过时数据信息来重构函数调用关系链条,进一步通过重构的函数调用关系链条直接定位溢出函数。本发明专利技术的方法包括如下步骤:当缓冲区溢出发生后,使当前程序发生错误而中断执行,从而避免执行恶意代码;由当前ESP寄存器指向的地址作为起点,在栈上的过时数据中依次查找并确定过时栈帧指针和过时返回地址;所述过时返回地址的值即为溢出函数最后调用的子函数的返回地址,该返回地址对应的函数即为溢出函数。本发明专利技术不再采用栈调用函数依次回溯的方式,而是采用直接定位溢出函数的新方法,利用栈上的过时数据来定位漏洞函数,通过对不同情形做细分处理,使得过时数据从不可用变得可用,可以快速定位溢出函数和溢出地址。

Method and device for positioning buffer overflow vulnerability

The invention relates to a method and a device for positioning a buffer overflow, the method and the device can overwrite the stack frame address and function return address stack buffer overflow in the case, the use of the stack on the outdated data information to reconstruct the function call relationship chain, further through the reconstruction of function call chains directly overflow function. The method of the invention comprises the following steps: when the buffer overflow occurs after the current program error and interrupt execution, so as to prevent the execution of malicious code; the ESP register points to the address as the starting point, outdated data on the stack in order to find and identify obsolete and outdated stack frame pointer return address; the return date the address value is the return address function overflow function last call, the function return address corresponding to the overflow function. The invention does not use the stack call way back in turn, instead of using the new method of direct position overflow function, to locate the vulnerability function using outdated data on the stack, according to the different circumstances of subdivision processing, the outdated data available never become available, can quickly locate function overflow and overflow.

【技术实现步骤摘要】

本专利技术涉及一种缓冲区溢出漏洞的定位方法与装置,属于信息安全

技术介绍
在信息安全领域,软件漏洞分析是非常重要的一环,在众多的漏洞类型中,缓冲区溢出漏洞是最常见的一种漏洞类型。缓冲区溢出,根据缓冲区的位置不同,又分为栈的溢出,和堆的溢出。栈缓冲区溢出,是指通过向程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行攻击者构造的数据,以达到执行恶意代码的目的。在分析漏洞产生的原因时,迅速地定位到漏洞发生点是非常必要的。如果把引发缓冲区溢出的函数调用称为溢出函数,那么溢出函数的定位就有着至关重要的作用。目前业界对于如何定位溢出函数,基本的思路是栈回溯,即通过查看堆栈上的函数调用顺序来回溯定位溢出函数。函数调用会保存栈帧指针和返回地址,并由这些保存的栈帧指针在堆栈中构成一个称为调用栈的函数调用关系链。由于缓冲区溢出通常会破坏栈中的返回地址以及栈帧指针指向的内容,因此,通常溢出函数返回时,程序的执行流程会转向不可预料的地址,通常是恶意的shellcode代码。通过调试器定位到异常发生位置是比较容易的,但是获取原来的调用信息却是比较困难,原因在于缓冲区溢出覆盖了返回地址和栈帧指针,导致栈上的函数调用关系链被破坏,一旦这个链条被破坏,调试器会丢失掉这个调用关系。业界通常使用的栈回溯技术依赖于调用栈,在这种情况下并无法回溯到原来的调用者代码区,从而使得栈回溯失效。业界有些研究人员提出了先通过静态反编译,记录下函数调用关系图,然后在结合动态执行漏洞样本,来定位溢出函数的方法。这种方法可以克服上述提到的由缓冲区溢出覆盖栈帧导致的函数调用关系丢失的问题,但是这种方法有两方面的不足,一是依赖于反编译工具的能力,二是当程序的执行路径不同时,会引起误报。申请号200810089912.5的专利公开了一种故障定位的方法和装置。该方法包括:在由于函数调用异常导致进程出现异常的情况下,在程序空间中获取异常进程的程序指针的值和堆栈指针的值;根据获取的程序指针的值和堆栈指针的值获取堆栈指针指向的当前函数堆栈的大小以及当前函数堆栈的栈帧中所存储的返回指令;根据当前函数堆栈的大小和堆栈指针的值获取当前函数堆栈之后的函数堆栈的栈帧中存储的函数的返回指令;查找异常进程的可执行文件,并根据查找的可执行文件查找异常进程的符号表,根据在当前栈帧和其它栈帧中获取的返回指令在符号表中查找相应的函数。该专利的核心是利用栈回溯方法来做代码异常的位置定位,此种栈回溯方法是利用的栈上的有效数据。申请号201510170817.8的专利公开了一种基于函数调用的缓冲区溢出漏洞动态检测方法。该方法包括如下步骤:首先获取被测程序的函数调用指令地址和返回指令地址,构建输入参数、运行被测程序;当函数调用发生,获取基址寄存器中的值EBP_B;在函数调用结束时,获取基址寄存器中的值EBP_A;若EBP_B≠EBP_A,则记录漏洞并报警;若EBP_B=EBP_A,则判断无漏洞;重复上述过程直至被测程序运行结束,继续获取该次运行的函数调用信息,与软件异常行为模型进行匹配,若匹配,记录可能漏洞;若不匹配,则该次输入下程序的行为没有体现出缓冲区溢出漏洞的特征。构造大量输入重复检测。该方法能够进行动态检测,并提高检测效率。该专利是用来判断是否有缓冲区溢出漏洞的,也可以进一步定位溢出发生函数,它采取的方法是在函数调用之前记录当时的栈帧指针EBP,此时的EBP是调用者的栈帧指针,然后当函数调用结束后,再一次获取当时的栈帧指针EBP,然后通过比较两个EBP的值,判断是否此函数存在缓冲区溢出漏洞。这种方法的核心是要预先获取栈帧信息,通过比较预先获取的栈帧信息和实际得到的栈帧信息来判断是否溢出以及溢出位置。
技术实现思路
本专利技术的目的是提供一种缓冲区溢出漏洞的定位方法与装置,尤其是用于缓冲区栈溢出漏洞的定位,该方法与装置可以在栈缓冲区溢出覆盖掉栈帧地址和函数返回地址的情况下,利用栈上的过时数据信息来重构函数调用关系链条,进一步通过重构的函数调用关系链条直接定位溢出函数。为了达到上述目的,本专利技术的方法包括如下步骤:步骤1:当缓冲区溢出发生后,使当前程序发生错误而中断执行,从而避免执行恶意代码;步骤2:由当前ESP寄存器指向的地址作为起点,在栈上的过时数据中依次查找并确定过时栈帧指针和过时返回地址;步骤3:所述过时返回地址的值即为溢出函数最后调用的子函数的返回地址,该返回地址对应的函数即为溢出函数。其中,步骤1中使当前程序发生错误而中断执行的方法包括下列的一种或几种:开启操作系统的DEP功能,并且把漏洞程序使用DEP保护起来;更换操作系统的版本;更换操作系统的SP版本;更换操作系统的语言版本;更换漏洞程序的版本。其中,步骤2中,对于栈由高地址向低地址增长的情况,栈上的过时数据对应的是地址小于当前ESP寄存器指向的地址的数据。其中,在执行步骤2之前还包括判断当前函数的返回地址是否可以执行的判断步骤。其中,对于当前函数的返回地址不可执行的情况,步骤2中查找并确定过时栈帧指针和过时返回地址的具体方法为:(1)确定当前ESP寄存器指向的地址;(2)从当前ESP寄存器指向的地址开始,沿着栈顶抬高的方向,在栈上的过时数据中查找满足下列条件1和2的第一个值,该值即为过时栈帧指针的值;条件1:该值的大小属于栈的地址范围;条件2:该值和当前ESP寄存器的值的差值很小,且所述差值为当前平台整型数长度的倍数;(3)从所述过时栈帧指针的地址开始,在栈顶下降的方向找到与其相邻的值,该值即为过时返回地址。其中,对于当前函数的返回地址可以执行的情况,步骤2中查找并确定过时栈帧指针和过时返回地址的具体方法为:(1)确定当前ESP寄存器指向的地址;(2)从当前ESP寄存器指向的地址开始,沿着栈顶抬高的方向,在栈上的过时数据中查找一个值,该值的大小与当前EIP寄存器的值的差值很小,将查找到的满足所述条件的第一个值作为中间过时返回地址;(3)从所述中间过时返回地址的地址开始,在栈顶抬高的方向找到与其相邻的值,该值即为中间过时栈帧指针;(4)从所述中间过时栈帧指针的地址开始,沿着栈顶抬高的方向,在栈上的过时数据中查找一个值,该值等于所述中间过时栈帧指针的地址值,将查找到的满足所述条件的第一个值作为过时栈帧指针;(5)从所述过时栈帧指针的地址开始,在栈顶下降的方向找到与其相邻的值,该值即为过时返回地址。此外,为了达到上述目的,本专利技术的装置包括:中断保护模块,用于当缓冲区溢出发生后,使当前程序发生错误而中断执行,从而避免执行恶意代码;过时数据查找模块,用于由当前ESP寄存器指向的地址作为起点,在栈上的过时数据中依次查找并确定过时栈帧指针和过时返回地址;溢出函数定位模块,用于将所述过时返回地址的值作为溢出函数最后调用的子函数的返回地址,该返回地址对应的函数即为溢出函数。其中,所述中断保护模块中使当前程序发生错误而中断执行的具体处理包括下列的一种或几种:开启操作系统的DEP功能,并且把漏洞程序使用DEP保护起来;更换操作系统的版本;更换操作系统的SP版本;更换操作系统的语言版本;更换漏洞程序的版本。其中,过时数据查找模块中对于栈由高地址向低地址增长的情况,栈上的过时数据对应的是地址小于当前ESP寄存本文档来自技高网
...
一种缓冲区溢出漏洞的定位方法与装置

【技术保护点】
一种缓冲区溢出漏洞的定位方法,尤其是用于缓冲区栈溢出漏洞的定位方法,其特征在于,所述方法包括如下步骤:步骤1:当缓冲区溢出发生后,使当前程序发生错误而中断执行,从而避免执行恶意代码;步骤2:由当前ESP寄存器指向的地址作为起点,在栈上的过时数据中依次查找并确定过时栈帧指针(OLD_EBP)和过时返回地址(OLD_RET);步骤3:所述过时返回地址(OLD_RET)的值即为溢出函数最后调用的子函数的返回地址,该返回地址对应的函数即为溢出函数。

【技术特征摘要】
1.一种缓冲区溢出漏洞的定位方法,尤其是用于缓冲区栈溢出漏洞的定位方法,其特征在于,所述方法包括如下步骤:步骤1:当缓冲区溢出发生后,使当前程序发生错误而中断执行,从而避免执行恶意代码;步骤2:由当前ESP寄存器指向的地址作为起点,在栈上的过时数据中依次查找并确定过时栈帧指针(OLD_EBP)和过时返回地址(OLD_RET);步骤3:所述过时返回地址(OLD_RET)的值即为溢出函数最后调用的子函数的返回地址,该返回地址对应的函数即为溢出函数。2.根据权利要求1所述的方法,其特征在于,步骤1中使当前程序发生错误而中断执行的方法包括下列的一种或几种:开启操作系统的DEP功能,并且把漏洞程序使用DEP保护起来;更换操作系统的版本;更换操作系统的SP版本;更换操作系统的语言版本;更换漏洞程序的版本。3.根据权利要求1所述的方法,其特征在于,步骤2中,对于栈由高地址向低地址增长的情况,栈上的过时数据对应的是地址小于当前ESP寄存器指向的地址的数据。4.根据权利要求1-3中任一项所述的方法,其特征在于,在执行步骤2之前还包括判断当前函数的返回地址是否可以执行的判断步骤。5.根据权利要求4所述的方法,其特征在于,对于当前函数的返回地址不可执行的情况,步骤2中查找并确定过时栈帧指针(OLD_EBP)和过时返回地址(OLD_RET)的具体方法为:(1)确定当前ESP寄存器指向的地址;(2)从当前ESP寄存器指向的地址开始,沿着栈顶抬高的方向,在栈上的过时数据中查找满足下列条件1和2的第一个值,该值即为过时栈帧指针(OLD_EBP)的值;条件1:该值的大小属于栈的地址范围;条件2:该值和当前ESP寄存器的值的差值很小,且所述差值为当前平台整型数长度的倍数;(3)从所述过时栈帧指针(OLD_EBP)的地址开始,在栈顶下降的方向找到与其相邻的值,该值即为过时返回地址(OLD_RET)。6.根据权利要求4所述的方法,其特征在于,对于当前函数的返回地址可以执行的情况,步骤2中查找并确定过时栈帧指针(OLD_EBP)和过时返回地址(OLD_RET)的具体方法为:(1...

【专利技术属性】
技术研发人员:侯贺明程波
申请(专利权)人:武汉绿色网络信息服务有限责任公司
类型:发明
国别省市:湖北;42

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

1