检测堆栈中返回地址被篡改的方法及装置制造方法及图纸

技术编号:20655250 阅读:36 留言:0更新日期:2019-03-23 06:54
本发明专利技术上述实施例提供一种检测堆栈中返回地址被篡改的方法及装置,本发明专利技术将返回地址和加密值都通过一个链式结构来存储并验证,本发明专利技术实施例具有安全性高、性能损耗小、设计复杂度低等有益效果。

【技术实现步骤摘要】
检测堆栈中返回地址被篡改的方法及装置
本专利技术涉及计算机
,更具体地,涉及检测堆栈中返回地址被篡改的方法及装置。
技术介绍
计算机技术和互联网的建设和发展,对整个社会的经济、文化、科技等各方面带来了巨大的推动和冲击,大量电信、电子商务、金融网络等信息化系统已经成为国家和政府的关键基础设施,因此如何确保计算机系统的安全已成为摆在我们面前迫切需要解决的难题。堆栈溢出漏洞是一个极其严重的系统安全漏洞,它是通过向一个有限的内存空间写入过长的数据,破坏系统的内存空间,导致系统运行异常、死机或重启。通过堆栈溢出攻击,使用攻击代码的地址覆盖函数指针,可以让攻击者获取部分或全部的系统控制权,这是一种极具威胁的安全隐患。现有技术中,对于堆栈溢出攻击主要的阻止和防御方式为通过影子栈和栈保护技术,保证返回地址不被恶意篡改。但影子栈和栈保护的安全性都不够,攻击者仍能找到一些办法来绕过上述两种防御技术进行攻击。
技术实现思路
为了解决上述问题,本专利技术实施例提供一种克服上述问题或者至少部分地解决上述问题的一种检测堆栈中返回地址被篡改的方法及装置。根据本专利技术实施例的第一方面,提供了一种检测堆栈中返回地址被篡改的方法,包括:S1,根据堆栈中栈顶帧中所存储的待验证返回地址和待验证返回地址所对应的加密值,基于任一加密值生成算法,获得待验证加密值;其中,所述堆栈中的第i帧中存储了第i个返回地址和一个随机数;所述堆栈中第i+1帧至栈顶帧中的任一帧中存储了所述任一帧所对应的返回地址和返回地址所对应的加密值;其中,返回地址所对应的加密值根据栈中所述任一帧的前一帧中存储的返回地址和返回地址所对应的加密值,基于所述任一加密值生成算法,获得的加密值;j>i≥1,其中j为栈顶帧的序号;S2,若待验证加密值与预先生成的正确加密值不同,则确认待验证返回地址被篡改;其中,所述正确加密值预先根据栈中栈顶帧的未被篡改的返回地址和未被篡改的返回地址所对应的加密值,基于所述任一加密值生成算法获得的。进一步,用于执行所述检测堆栈中返回地址被篡改的方法的处理器中,还包括一个Top寄存器,所述Top寄存器用于存储所述正确加密值,且Top寄存器中所存储的正确加密值只能通过预设指令修改。进一步,用于执行所述检测堆栈中返回地址被篡改的方法的处理器中,还包括一个用于执行所述任一加密值生成算法的加密计算模块。进一步,所述堆栈中任一返回地址,和与所述任一返回地址所对应的加密值分别单独保存在所述堆栈中同一栈帧内的不同位置上。进一步,S2还包括:若待验证加密值与预先生成的正确加密值相同,则确认待验证返回地址没有被篡改。根据本专利技术实施例的另一个方面,提供一种检测堆栈中返回地址被篡改的装置,包括:加密值计算模块,用于根据堆栈中栈顶帧中所存储的待验证返回地址和待验证返回地址所对应的加密值,基于任一加密值生成算法,获得待验证加密值;其中,所述堆栈中的第i帧中存储了第i个返回地址和一个随机数;所述堆栈中第i+1帧至栈顶帧中的任一帧中存储了所述任一帧所对应的返回地址和返回地址所对应的加密值;其中,返回地址所对应的加密值根据栈中所述任一帧的前一帧中存储的返回地址和返回地址所对应的加密值,基于所述任一加密值生成算法,获得的加密值;j>i≥1,其中j为栈顶帧的序号;验证模块,用于判断若待验证加密值与预先生成的正确加密值不同,则确认待验证返回地址被篡改;其中,所述正确加密值预先根据栈中栈顶帧的未被篡改的返回地址和未被篡改的返回地址所对应的加密值,基于所述任一加密值生成算法获得的。进一步,还包括一个Top寄存器,所述Top寄存器用于存储所述正确加密值,且Top寄存器中所存储的正确加密值只能通过预设指令修改。进一步,还包括一个用于执行所述任一加密值生成算法的加密计算模块。进一步,所述堆栈中任一返回地址,和与所述任一返回地址所对应的加密值分别单独保存在所述堆栈中同一栈帧内的不同位置上。进一步,所述验证模块还用于判断若待验证加密值与预先生成的正确加密值相同,则确认待验证返回地址没有被篡改。本专利技术上述实施例提供一种检测堆栈中返回地址被篡改的方法及装置,本专利技术将返回地址和加密值都通过一个链式结构来存储并验证,本专利技术实施例具有安全性高、性能损耗小、设计复杂度低等有益效果。附图说明图1为本专利技术实施例的一种检测堆栈中返回地址被篡改的方法的整体流程示意图;图2为本专利技术实施例的一种检测堆栈中返回地址被篡改的方法中加密链结构堆栈的示意图;图3为本专利技术实施例的一种检测堆栈中返回地址被篡改的方法中加密链结构堆栈的结构示意图;图4为本专利技术实施例的现有技术中堆栈的结构示意图;图5为本专利技术实施例的一种检测堆栈中返回地址被篡改的方法中调用指令执行与现有技术调用指令的区别示意图;图6为本专利技术实施例的一种检测堆栈中返回地址被篡改的方法中返回指令执行与现有技术返回指令的区别示意图;图7为本专利技术实施例的一种检测堆栈中返回地址被篡改的方法中非压缩结构和压缩存储结构的示意图;图8为本专利技术实施例的一种检测堆栈中返回地址被篡改的装置整体结构示意图。具体实施方式下面结合附图和实施例,对本专利技术的具体实施方式作进一步详细描述。以下实施例用于说明本专利技术,但不用来限制本专利技术的范围。下面,本专利技术说明书首先对各个基本概念和现有技术及缺陷作一个清楚的解释。内存漏洞:是指程序员在软件编写的过程中,对内存的操作上有时间上或者空间上的设计失误,产生使得程序可能做出违反程序本身设计的行为的问题。攻击者利用程序的内存漏洞,可以构造出各种攻击,执行恶意行为。缓冲区溢出:是最为常见的内存漏洞,向一个缓冲区中拷入超过该缓冲区长度的数据,即会产生缓冲区溢出,从而覆盖缓冲区以外的其他数据。而栈溢出漏洞又是缓冲区溢出漏洞中最为常见的一种,即向栈中拷入一个过长的数据,导致栈上的缓冲区数据溢出,从而覆盖栈上其他关键的数据。栈(stack):又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或调用,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈溢出:是缓冲区溢出的一种。由于缓冲区溢出而使得有用的存储单元被改写,往往会引发不可预料的后果。程序在运行过程中,为了临时存取数据的需要,一般都要分配一些内存空间,通常称这些空间为缓冲区。如果向缓冲区中写入超过其本身长度的数据,以致于缓冲区无法容纳,就会造成缓冲区以外的存储单元被改写,这种现象就称为缓冲区溢出。缓冲区长度一般与用户自己定义的缓冲变量的类型有关。函数调用:计算机编译或运行时,使用某个函数来完成相关命令。返回地址:栈中存储的数据中一个最为重要的数据就是函数返回地址。当调用一个函数时,调用指令(例如Call指令)会将函数返回地址压入栈中。当函数返回时,返回指令(例如Return指令)会读取栈中保存的返回地址,根据返回地址跳转到原来调用函数的位置,继续往下执行。利用栈溢出漏洞进行攻击最常用的方法就是利用栈溢出,覆盖返回地址,将返回地址改为一个攻击者设置的地址。当函数返回时,就会跳转到攻击者设置好的位置,执行攻击者希望执行的代码。ROP攻击:本文档来自技高网...

【技术保护点】
1.一种检测堆栈中返回地址被篡改的方法,其特征在于,包括:S1,根据堆栈中栈顶帧中所存储的待验证返回地址和待验证返回地址所对应的加密值,基于任一加密值生成算法,获得待验证加密值;其中,所述堆栈中的第i帧中存储了第i个返回地址和一个随机数;所述堆栈中第i+1帧至栈顶帧中的任一帧中存储了所述任一帧所对应的返回地址和返回地址所对应的加密值;其中,返回地址所对应的加密值根据栈中所述任一帧的前一帧中存储的返回地址和返回地址所对应的加密值,基于所述任一加密值生成算法,获得的加密值;j>i≥1,其中j为栈顶帧的序号;S2,若待验证加密值与预先生成的正确加密值不同,则确认待验证返回地址被篡改;其中,所述正确加密值预先根据栈中栈顶帧的未被篡改的返回地址和未被篡改的返回地址所对应的加密值,基于所述任一加密值生成算法获得的。

【技术特征摘要】
1.一种检测堆栈中返回地址被篡改的方法,其特征在于,包括:S1,根据堆栈中栈顶帧中所存储的待验证返回地址和待验证返回地址所对应的加密值,基于任一加密值生成算法,获得待验证加密值;其中,所述堆栈中的第i帧中存储了第i个返回地址和一个随机数;所述堆栈中第i+1帧至栈顶帧中的任一帧中存储了所述任一帧所对应的返回地址和返回地址所对应的加密值;其中,返回地址所对应的加密值根据栈中所述任一帧的前一帧中存储的返回地址和返回地址所对应的加密值,基于所述任一加密值生成算法,获得的加密值;j>i≥1,其中j为栈顶帧的序号;S2,若待验证加密值与预先生成的正确加密值不同,则确认待验证返回地址被篡改;其中,所述正确加密值预先根据栈中栈顶帧的未被篡改的返回地址和未被篡改的返回地址所对应的加密值,基于所述任一加密值生成算法获得的。2.根据权利要求1所述的方法,其特征在于,用于执行所述检测堆栈中返回地址被篡改的方法的处理器中,还包括一个Top寄存器,所述Top寄存器用于存储所述正确加密值,且Top寄存器中所存储的正确加密值只能通过预设指令修改。3.根据权利要求2所述的方法,其特征在于,用于执行所述检测堆栈中返回地址被篡改的方法的处理器中,还包括一个用于执行所述任一加密值生成算法的加密计算模块。4.根据权利要求1所述的方法,其特征在于,所述堆栈中任一返回地址,和与所述任一返回地址所对应的加密值分别单独保存在所述堆栈中同一栈帧内的不同位置上。5.根据权利要求1所述的方法,其特征在于,S2还包括:若待验证加密值与预先生成的正确加密值相...

【专利技术属性】
技术研发人员:陈李维李锦峰史岗孟丹
申请(专利权)人:中国科学院信息工程研究所
类型:发明
国别省市:北京,11

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

1