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

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

A device that detects tampered return addresses in the stack

The embodiment of the present invention provides a device for detecting the tampered return address in the stack. The return address and hash value are stored and verified by a chain structure. The embodiment of the present invention has the advantages of high security, low performance loss and low design complexity.

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

【技术保护点】
1.一种检测堆栈中返回地址被篡改的装置,其特征在于,包括hash值计算模块、验证模块和Top寄存器:hash值计算模块,用于根据堆栈中栈顶帧中所存储的待验证返回地址和待验证返回地址所对应的hash值,基于任一hash值生成算法,获得待验证hash值;其中,所述堆栈中的第i帧中存储了第i个返回地址和一个随机数;所述堆栈中第i+1帧至栈顶帧中的任一帧中存储了所述任一帧所对应的返回地址和返回地址所对应的hash值,其中,返回地址所对应的hash值根据栈中所述任一帧的前一帧中存储的返回地址和返回地址所对应的hash值,基于所述任一hash值生成算法,获得的hash值;j>i≥1,其中j为栈顶帧的序号;验证模块,用于若待验证hash值与预先生成的正确hash值不同,则确认待验证返回地址被篡改;其中,所述正确hash值预先根据栈中栈顶帧的未被篡改的返回地址和未被篡改的返回地址所对应的hash值,基于所述任一hash值生成算法获得的;Top寄存器,用于存储所述正确hash值,且Top寄存器中所存储的正确hash值只能通过预设指令修改。

【技术特征摘要】
1.一种检测堆栈中返回地址被篡改的装置,其特征在于,包括hash值计算模块、验证模块和Top寄存器:hash值计算模块,用于根据堆栈中栈顶帧中所存储的待验证返回地址和待验证返回地址所对应的hash值,基于任一hash值生成算法,获得待验证hash值;其中,所述堆栈中的第i帧中存储了第i个返回地址和一个随机数;所述堆栈中第i+1帧至栈顶帧中的任一帧中存储了所述任一帧所对应的返回地址和返回地址所对应的hash值,其中,返回地址所对应的hash值根据栈中所述任一帧的前一帧中存储的返回地址和返回地址所对应的hash值,基于所述任一hash值生成算法,获得的hash值;j>i≥1,其中j为栈顶帧的序号;验证模块,用于若待验证hash值与预先生成的正确hash值不同,则确认待验证返回地址被篡改;其中,所述正确hash值预先根据栈中栈顶帧的未被篡改的返回地址和未被篡改的返回地...

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

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

1