栈帧地址随机化方法及相关设备技术

技术编号:26504333 阅读:38 留言:0更新日期:2020-11-27 15:31
本申请提供了一种栈帧地址随机化方法及相关设备,涉及信息安全技术领域;该方法包括:获取进程创建时分配的初始栈顶地址与配置的随机化范围值;确定随机化因子;基于初始栈顶地址、随机化范围值与随机化因子确定随机化后的栈顶地址。本申请可应用在嵌入式系统中实现进程初始化时栈帧地址的随机化。

【技术实现步骤摘要】
栈帧地址随机化方法及相关设备
本申请涉及信息安全
,具体而言,本申请涉及一种栈帧地址随机化方法及相关设备。
技术介绍
缓冲区溢出(bufferoverflow),是针对程序设计的缺陷,向程序输入使缓冲区溢出的内容(通常是超过缓冲区能保存的最大数据量的数据),从而破坏程序运行、在程序运行中断时获取程序乃至系统的控制权。通过缓冲区溢出来攻击操作系统的行为严重威胁着操作系统的安全,目前基于缓冲区溢出进行攻击主要有两类:一是在程序的地址空间里植入恶意代码并使之运行;二是修改栈帧返回地址的内容,通过返回库函数(return-to-library)指向不安全的库函数并运行。现有技术中,针对上述第一类攻击,在硬件技术中,通过使被攻击程序的数据段地址空间不可执行,从而使得攻击者无法执行被植入攻击程序输入缓冲区的恶意代码;在软件技术中,利用GCC编译器的stackguard栈保护检测栈缓冲区溢出。针对第二类攻击,采用地址空间布局随机化(Addressspacelayoutrandomization,ASLR)技术,对共享库、可执行程序、堆、栈等进行随机,增加攻击者猜测库函数地址的难度。嵌入式系统相对于其他大型系统而言存在以下问题:一是嵌入式微控制器(Micro-controllerUnit,MCU)没有硬件的内存管理单元(MemoryManageUnite,MMU),代码均运行在物理地址上,地址空间不能随机化;二是嵌入式系统应用程序和操作系统一起编译成一个单一的镜像,没有共享库,运行时镜像加载到固定的地址上,除了栈,其他均不能进行随机化。然而,现有技术中并未提供有效地在嵌入式系统中引入栈帧地址随机化的技术方案。
技术实现思路
本申请的目的旨在至少能解决上述的技术缺陷之一,特提出以下技术方案:第一方面,提供了一种栈帧地址随机化方法,所述方法包括:获取进程创建时分配的初始栈顶地址与配置的随机化范围值;确定随机化因子;基于所述初始栈顶地址、随机化范围值与随机化因子确定随机化后的栈顶地址。可选地,所述获取进程创建时分配的初始栈顶地址与配置的随机化范围值之前,还包括:根据进程创建时的参数确定是否进行栈顶地址的随机化处理;在确定进行随机化处理时,执行所述获取进程创建时分配的初始栈顶地址与配置的随机化范围值步骤。可选地,所述确定随机化因子,包括:判断是否存在真随机数发生器;若存在,采用所述真随机数发生器生成第一随机数作为随机化因子;若不存在,基于系统中的随机事件数据与系统的随机函数确定随机化因子。可选地,所述基于系统中的随机事件数据与系统的随机函数确定随机化因子,包括:基于系统中的随机事件数据生成随机修正值;结合所述随机修正值与随机函数生成第二随机数作为随机化因子;其中,所述随机事件数据包括表征当前中断的次数、当前的温度值、当前的电压值中至少一项的数据。可选地,所述基于所述初始栈顶地址、随机化范围值与随机化因子确定随机化后的栈顶地址,包括:将所述随机化范围值与随机化因子进行取余处理,确定第一随机值;基于所述第一随机值与栈寄存器所占字节确定第二随机值;基于所述初始栈顶地址与所述第二随机值确定随机化后的栈顶地址。可选地,当所述进程为动态创建的进程时,所述方法还包括:基于所述随机化后的栈顶地址释放内存。第二方面,提供了一种栈帧地址随机化装置,包括:获取模块,用于获取进程创建时分配的初始栈顶地址与配置的随机化范围值;第一确定模块,用于确定随机化因子;第二确定模块,用于基于所述初始栈顶地址、随机化范围值与随机化因子确定随机化后的栈顶地址。可选地,所述装置,还包括判断模块,用于根据进程创建时的参数确定是否进行栈顶地址的随机化处理;在确定进行随机化处理时,执行所述获取进程创建时分配的初始栈顶地址与配置的随机化范围值步骤。可选地,所述第一确定模块,包括:判断单元,用于判断是否存在真随机数发生器;第一生成单元,用于存在真随机数发生器时,采用所述真随机数发生器生成第一随机数作为随机化因子;第一确定单元,用于不存在真随机数发生器时,基于系统中的随机事件数据与系统的随机函数确定随机化因子。可选地,所述第一确定模块,包括:修正单元,用于基于系统中的随机事件数据生成随机修正值;第二生成单元,用于结合所述随机修正值与随机函数生成第二随机数作为随机化因子;其中,所述随机事件数据包括表征当前中断的次数、当前的温度值、当前的电压值中至少一项的数据。可选地,所述第二确定模块,包括:取余单元,用于将所述随机化范围值与随机化因子进行取余处理,确定第一随机值;随机单元,用于基于所述第一随机值与栈寄存器所占字节确定第二随机值;第二确定单元,用于基于所述初始栈顶地址与所述第二随机值确定随机化后的栈顶地址。可选地,当所述进程为动态创建的进程时,所述装置还包括:释放模块,用于基于所述随机化后的栈顶地址释放内存。第三方面,提供了一种栈帧地址随机化系统,包括:随机化地址分配模块、随机化因子生成模块;其中,所述随机化地址分配模块用于获取进程创建时分配的初始栈顶地址与配置的随机化范围值以及随机化因子,并基于所述初始栈顶地址、随机化范围值与随机化因子确定随机化后的栈顶地址;所述随机化因子生成模块用于确定随机化因子。第四方面,提供了一种电子设备,该电子设备包括:一个或多个处理器;存储器;一个或多个应用程序,其中一个或多个应用程序被存储在存储器中并被配置为由一个或多个处理器执行,一个或多个程序配置用于:执行根据本申请第一方面提供的栈帧地址随机化方法。第五方面,提供了一种存储介质,为计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本申请第一方面提供的栈帧地址随机化方法。本申请提供的技术方案带来的有益效果是:本申请提供了一种栈帧地址随机化方法及相关设备,在该方法中根据进程创建时分配的初始栈顶地址、随机化范围值以及随机化因子,调整栈顶地址可生成随机化的栈顶地址,可应用在嵌入式系统中实现进程初始化时栈帧地址的随机化。附图说明为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。图1为本申请实施例提供的栈帧地址随机化方法的第一种流程示意图;图2为本申请实施例提供的栈帧地址随机化方法的第二种流程示意图;图3为本申请实施例提供的栈帧地址随机化方法中与确定随机化因子步骤相关的流程示意图;图4为本申请实施例提供的栈帧地址随机化方法中与确定随机化栈顶地址步骤相关的流程示意图;图5为本申请实施例提供的栈帧地址随机化方法的第三种流程示意图;图6为本申请实施例提供的栈帧地址随机化方法中确定随机化栈顶地址的原理框架图;图7为本申请实施例应用栈帧地址随机化方法时进程运行100次后各随机化栈顶地址出现次数的示意图;图8为本申请实施例应用栈帧地址随机化方法时进程运行100次后各随机化栈顶地址随机分布的示意图;图9为本申请实施例提供的栈帧地址本文档来自技高网
...

【技术保护点】
1.一种栈帧地址随机化方法,其特征在于,所述方法包括:/n获取进程创建时分配的初始栈顶地址与配置的随机化范围值;/n确定随机化因子;/n基于所述初始栈顶地址、随机化范围值与随机化因子确定随机化后的栈顶地址。/n

【技术特征摘要】
1.一种栈帧地址随机化方法,其特征在于,所述方法包括:
获取进程创建时分配的初始栈顶地址与配置的随机化范围值;
确定随机化因子;
基于所述初始栈顶地址、随机化范围值与随机化因子确定随机化后的栈顶地址。


2.根据权利要求1所述的方法,其特征在于,所述获取进程创建时分配的初始栈顶地址与配置的随机化范围值之前,还包括:
根据进程创建时的参数确定是否进行栈顶地址的随机化处理;
在确定进行随机化处理时,执行所述获取进程创建时分配的初始栈顶地址与配置的随机化范围值步骤。


3.根据权利要求1所述的方法,其特征在于,所述确定随机化因子,包括:
判断是否存在真随机数发生器;
若存在,采用所述真随机数发生器生成第一随机数作为随机化因子;
若不存在,基于系统中的随机事件数据与系统的随机函数确定随机化因子。


4.根据权利要求3所述的方法,其特征在于,所述基于系统中的随机事件数据与系统的随机函数确定随机化因子,包括:
基于系统中的随机事件数据生成随机修正值;
结合所述随机修正值与随机函数生成第二随机数作为随机化因子;
其中,所述随机事件数据包括表征当前中断的次数、当前的温度值、当前的电压值中至少一项的数据。


5.根据权利要求1所述的方法,其特征在于,所述基于所述初始栈顶地址、随机化范围值与随机化因子确定随机化后的栈顶地址,包括:
将所述随机化范围值与随机化因子进行取余处理,确定第一随机值;<...

【专利技术属性】
技术研发人员:王艳伟邹仕洪张广伟黄浩东
申请(专利权)人:北京元心科技有限公司
类型:发明
国别省市:北京;11

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

1