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代码。通过调试器定位到异常发生位置是比较容易的,但是获取原来的调用信息却是比较困难,原因在于缓冲区溢出覆盖了返回地址和栈帧指针,导致栈上的函数调用关系链被破坏,一旦这个链条被破坏,调试器会丢失掉这个调用关系。业界通常使用的栈回溯技术依赖于调用栈,在这种情况下并无法回溯到原来的调用者代码区,从而使得栈回溯失效。业界有些研究人员提出了先通过静态反编译,记录下函数调用关系图,然后在结合动态执行漏洞样本,来定位溢出函数的方法。这种方法可以克服上述提到的由缓冲区溢出覆盖栈帧导致的函 ...
【技术保护点】
一种缓冲区溢出漏洞的定位方法,尤其是用于缓冲区栈溢出漏洞的定位方法,其特征在于,所述方法包括如下步骤:步骤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
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。