多链哈希栈结构及检测函数返回地址被篡改的方法技术

技术编号:22364412 阅读:55 留言:0更新日期:2019-10-23 04:47
本发明专利技术实施例提供一种多链哈希栈结构及检测函数返回地址被篡改的方法,所述多链哈希栈结构包括:N条链式结构,每条链式结构对应一个用于存储哈希值的top寄存器,多链哈希栈结构的任一帧中存储了当前帧所对应的函数体的返回地址和当前帧所在链式结构所对应的top寄存器中的哈希值;其中,当前帧所在的链式结构是根据当前帧所对应的函数体在多链哈希栈结构中的深度来确定的;当前帧所在链式结构所对应的top寄存器存储的是所述当前帧所在链式结构上的最新的哈希值;N为大于1的自然数。本发明专利技术实施例有效地缓解了由于相近的哈希运算的冲突造成的流水线停顿,减少了链式哈希栈的性能损耗。

The structure of Multi Chain hash stack and the method to detect the tampering of function return address

【技术实现步骤摘要】
多链哈希栈结构及检测函数返回地址被篡改的方法
本专利技术涉及计算机
,更具体地,涉及一种多链哈希栈结构及检测函数返回地址被篡改的方法。
技术介绍
堆栈溢出漏洞是一个极其严重的系统安全漏洞,它是通过向一个有限的内存空间写入过长的数据,破坏系统的内存空间,导致系统运行异常、死机或重启。通过堆栈溢出攻击,使用攻击代码的地址覆盖函数指针,可以让攻击者获取部分或全部的系统控制权,这是一种极具威胁的安全隐患。现有技术中提供了一种链式哈希栈结构,是一种新型的保护函数返回地址的防御手段。它在硬件上添加了两个寄存器,top寄存器和salt寄存器,top寄存器用来保存哈希值,salt寄存器用来保存哈希函数的密钥。当调用子函数时,把哈希值和返回地址依次压入栈中。然后把密钥、哈希值和返回地址一起做哈希运算,运算结果用来更新top寄存器的值。在函数返回时,把哈希值和返回地址一同弹出栈,并做哈希运算。运算结果与top寄存器中的值做对比。如果不同,则抛出一个异常;如果相同,则用栈中的哈希值更新top寄存器,返回到父函数中。链式哈希栈的安全性极高,即使攻击者能任意读写内存地址空间,也无法绕过这种防御机制。然而,现有技术中的链式哈希栈是一个单链结构,在单链实现中,深度为m的函数体保存的是第m个返回地址和第m-1个哈希值,也就是说,若第m-1个哈希值的运算未完成,第m个哈希值的运算必须进行等待,当哈希函数的运算周期增大时,链式哈希栈的性能损耗会急剧地加大,会引发流水线停滞问题。例如,当一次哈希运算需要80个时钟周期时,它的性能损耗大约为20%,极大地限制了链式哈希栈的实用性。专利技术内容本专利技术实施例提供一种克服上述问题或者至少部分地解决上述问题的多链哈希栈结构及检测函数返回地址被篡改的方法。第一方面,本专利技术实施例提供一种多链哈希栈结构,所述多链哈希栈结构包括N条链式结构,每条链式结构对应一个用于存储哈希值的top寄存器,所述多链哈希栈结构的任一帧中存储了当前帧所对应的函数体的返回地址和当前帧所在链式结构所对应的top寄存器中的哈希值;其中,所述当前帧所在的链式结构是根据当前帧所对应的函数体在所述多链哈希栈结构中的深度来确定的;其中,所述当前帧所在链式结构所对应的top寄存器存储的是所述当前帧所在链式结构上的最新的哈希值;其中,N为大于1的自然数。第二方面,本专利技术实施例提供一种检测函数返回地址被篡改的方法,基于如第一方面所述的多链哈希栈结构,包括:将所述多链哈希栈结构中的任一帧作为当前帧,当所述当前帧所对应的函数体调用子函数时,确定所述当前帧所在的链式结构,获取所述当前帧所在的链式结构所对应的top寄存器中的哈希值;将所述当前帧所对应的函数体的待验证返回地址和所述当前帧所在的链式结构所对应的top寄存器中的哈希值压入栈,并将入栈的返回地址和哈希值输入到一个哈希运算模块中进行哈希计算,获得一个新的哈希值,将所述新的哈希值存储至所述top寄存器中;当所述当前帧所对应的函数体返回时,将所述当前帧中存储的返回地址和哈希值弹出栈,并将出栈的返回地址和哈希值输入到另一个哈希运算模块中进行哈希计算,获得一个待验证的哈希值;若所述待验证的哈希值与所述top寄存器中存储的所述新的哈希值相等,则获知所述待验证返回地址未被篡改,并利用出栈的哈希值更新所述top寄存器;或者,若所述待验证的哈希值与所述top寄存器中存储的所述新的哈希值不相等,则获知所述待验证返回地址被篡改。第三方面,本专利技术实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第二方面所提供的检测函数返回地址被篡改的方法的步骤。第四方面,本专利技术实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第二方面所提供的检测函数返回地址被篡改的方法的步骤。本专利技术实施例提供的多链哈希栈结构及检测函数返回地址被篡改的方法,在现有链式哈希栈的基础上,通过将链式哈希栈切分成多条链式结构,每条链式结构对应一个top寄存器,当函数体连续调用或者连续返回时,相比于单链,多链结构在其存在依赖关系的每条链上相邻两次哈希运算之间的“间隔”更大了,可以减少流水线的停顿时间,甚至不停顿,有效地缓解了由于相近的哈希运算的冲突造成的流水线停顿,减少了链式哈希栈的性能损耗。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术实施例提供一种多链哈希栈结构的示意图;图2为本专利技术实施例提供的一种检测函数返回地址被篡改的方法的流程示意图;图3为本专利技术实施例提供的电子设备的实体结构示意图。具体实施方式为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。首先对本专利技术中涉及的基本概念和相关术语进行解释:栈(stack):又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。地址较低的一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈用来传递参数、存储返回信息,保存寄存器以及进行本地存储等。栈帧:当某个函数运行时,机器需要分配一定的内存去进行函数内的各种操作,这个过程中分配的那部分栈称为栈帧。栈帧是一段有界限的内存区间,由最顶端的两个指针界定,寄存器%ebp为帧指针,寄存器%esp为栈指针,寄存器%ebp保存了所分配内存的最高地址,寄存器%esp保存了所分配内存的最低地址,当程序执行时,栈指针(栈顶)可以移动。函数调用:计算机编译或运行时,使用某个函数来完成相关命令。当一个函数调用子函数时,在栈中会为这个子函数开辟一个新的帧。返回地址:栈中存储的数据中一个最为重要的数据就是函数返回地址。当调用一个函数时,调用指令(例如Call指令)会将函数返回地址压入栈中。当函数返回时,返回指令(例如Return指令)会读取栈中保存的返回地址,根据返回地址跳转到原来调用函数的位置,继续往下执行下一条指令。利用栈溢出漏洞进行攻击最常用的方法就是利用栈溢出,覆盖返回地址,将返回地址改为一个攻击者设置的地址。当函数返回时,就会跳转到攻击者设置好的位置,执行攻击者希望执行的代码。如图1所示,为本专利技术实施例提供一种多链哈希栈结构的示意图,所述多链哈希栈结构包括N条链式结构,每条链式结构对应一个用于存储哈希值的top寄存器,所述多链哈希栈结构的任一帧中存储了当前帧所对应的函数体的返回地址和当前帧所在链式结构所对应的top寄存器中的哈希值。具体地,本专利技术实施例提供一种用于保护函数返回地址的多链哈本文档来自技高网...

【技术保护点】
1.一种多链哈希栈结构,其特征在于,所述多链哈希栈结构包括N条链式结构,每条链式结构对应一个用于存储哈希值的top寄存器,所述多链哈希栈结构的任一帧中存储了当前帧所对应的函数体的返回地址和当前帧所在链式结构所对应的top寄存器中的哈希值;其中,所述当前帧所在的链式结构是根据当前帧所对应的函数体在所述多链哈希栈结构中的深度来确定的;其中,所述当前帧所在链式结构所对应的top寄存器存储的是所述当前帧所在链式结构上的最新的哈希值;其中,N为大于1的自然数。

【技术特征摘要】
1.一种多链哈希栈结构,其特征在于,所述多链哈希栈结构包括N条链式结构,每条链式结构对应一个用于存储哈希值的top寄存器,所述多链哈希栈结构的任一帧中存储了当前帧所对应的函数体的返回地址和当前帧所在链式结构所对应的top寄存器中的哈希值;其中,所述当前帧所在的链式结构是根据当前帧所对应的函数体在所述多链哈希栈结构中的深度来确定的;其中,所述当前帧所在链式结构所对应的top寄存器存储的是所述当前帧所在链式结构上的最新的哈希值;其中,N为大于1的自然数。2.根据权利要求1所述的多链哈希栈结构,其特征在于,所述当前帧所在的链式结构是根据当前帧所对应的函数体在所述多链哈希栈结构中的深度来确定的,具体为:设当前帧所对应的函数体在所述多链哈希栈结构中的深度为m,则当前帧所在的链式结构为第m%N条链式结构;其中,m为大于等于零的自然数。3.根据权利要求2所述的多链哈希栈结构,其特征在于,所述当前帧所在链式结构所对应的top寄存器存储的是所述当前帧所在链式结构上的最新的哈希值,具体为:当与所述当前帧处于同一链式结构上的前一帧所对应的函数体调用子函数时,将所述前一帧所对应的函数体的返回地址和哈希值压入栈,并将入栈的返回地址和哈希值输入到一个哈希运算模块中进行哈希计算,获得一个新的哈希值,将所述新的哈希值存储至所述top寄存器中;当所述前一帧所对应的函数体返回时,将所述前一帧中存储的返回地址和哈希值弹出栈,并将出栈的返回地址和哈希值输入到另一个哈希运算模块中进行哈希计算,获得一个待验证的哈希值;若所述待验证的哈希值与所述top寄存器中的哈希值相等,则获知所述前一帧所对应的函数体的返回地址和哈希值未被篡改,利用出栈的哈希值更新所述top寄存器。4.根据权利要求3所述的多链哈希栈结构,其特征在于,所述获得一个待验证的哈希值之后,还包括:若所述待验证的哈希值与所述top寄存器中的哈希值不相等,则获知所述前一帧所对应的函数体的返回地址被篡改,抛出一个异常。5.根据权利要求3所述的多链哈希栈结构,其特征在于,进行哈希计算时,轮番使用第1,2…,M个哈希运算模块,其中,M为大于等于N的自然数。6.根据权利要求3所述的多...

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

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

1