CN112000484A - 栈帧地址随机化方法及相关设备 - Google Patents

栈帧地址随机化方法及相关设备 Download PDF

Info

Publication number
CN112000484A
CN112000484A CN202010904467.4A CN202010904467A CN112000484A CN 112000484 A CN112000484 A CN 112000484A CN 202010904467 A CN202010904467 A CN 202010904467A CN 112000484 A CN112000484 A CN 112000484A
Authority
CN
China
Prior art keywords
randomized
randomization
random
top address
stack top
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202010904467.4A
Other languages
English (en)
Inventor
王艳伟
邹仕洪
张广伟
黄浩东
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Yuanxin Science and Technology Co Ltd
Original Assignee
Beijing Yuanxin Science and Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Yuanxin Science and Technology Co Ltd filed Critical Beijing Yuanxin Science and Technology Co Ltd
Priority to CN202010904467.4A priority Critical patent/CN112000484A/zh
Publication of CN112000484A publication Critical patent/CN112000484A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

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

Description

栈帧地址随机化方法及相关设备
技术领域
本申请涉及信息安全技术领域,具体而言,本申请涉及一种栈帧地址随机化方法及相关设备。
背景技术
缓冲区溢出(buffer overflow),是针对程序设计的缺陷,向程序输入使缓冲区溢出的内容(通常是超过缓冲区能保存的最大数据量的数据),从而破坏程序运行、在程序运行中断时获取程序乃至系统的控制权。通过缓冲区溢出来攻击操作系统的行为严重威胁着操作系统的安全,目前基于缓冲区溢出进行攻击主要有两类:一是在程序的地址空间里植入恶意代码并使之运行;二是修改栈帧返回地址的内容,通过返回库函数(return-to-library)指向不安全的库函数并运行。
现有技术中,针对上述第一类攻击,在硬件技术中,通过使被攻击程序的数据段地址空间不可执行,从而使得攻击者无法执行被植入攻击程序输入缓冲区的恶意代码;在软件技术中,利用GCC编译器的stack guard栈保护检测栈缓冲区溢出。针对第二类攻击,采用地址空间布局随机化(Address space layout randomization,ASLR)技术,对共享库、可执行程序、堆、栈等进行随机,增加攻击者猜测库函数地址的难度。
嵌入式系统相对于其他大型系统而言存在以下问题:一是嵌入式微控制器(Micro-controller Unit,MCU)没有硬件的内存管理单元(Memory Manage Unite,MMU),代码均运行在物理地址上,地址空间不能随机化;二是嵌入式系统应用程序和操作系统一起编译成一个单一的镜像,没有共享库,运行时镜像加载到固定的地址上,除了栈,其他均不能进行随机化。然而,现有技术中并未提供有效地在嵌入式系统中引入栈帧地址随机化的技术方案。
发明内容
本申请的目的旨在至少能解决上述的技术缺陷之一,特提出以下技术方案:
第一方面,提供了一种栈帧地址随机化方法,所述方法包括:获取进程创建时分配的初始栈顶地址与配置的随机化范围值;确定随机化因子;基于所述初始栈顶地址、随机化范围值与随机化因子确定随机化后的栈顶地址。
可选地,所述获取进程创建时分配的初始栈顶地址与配置的随机化范围值之前,还包括:根据进程创建时的参数确定是否进行栈顶地址的随机化处理;在确定进行随机化处理时,执行所述获取进程创建时分配的初始栈顶地址与配置的随机化范围值步骤。
可选地,所述确定随机化因子,包括:判断是否存在真随机数发生器;若存在,采用所述真随机数发生器生成第一随机数作为随机化因子;若不存在,基于系统中的随机事件数据与系统的随机函数确定随机化因子。
可选地,所述基于系统中的随机事件数据与系统的随机函数确定随机化因子,包括:基于系统中的随机事件数据生成随机修正值;结合所述随机修正值与随机函数生成第二随机数作为随机化因子;其中,所述随机事件数据包括表征当前中断的次数、当前的温度值、当前的电压值中至少一项的数据。
可选地,所述基于所述初始栈顶地址、随机化范围值与随机化因子确定随机化后的栈顶地址,包括:将所述随机化范围值与随机化因子进行取余处理,确定第一随机值;基于所述第一随机值与栈寄存器所占字节确定第二随机值;基于所述初始栈顶地址与所述第二随机值确定随机化后的栈顶地址。
可选地,当所述进程为动态创建的进程时,所述方法还包括:基于所述随机化后的栈顶地址释放内存。
第二方面,提供了一种栈帧地址随机化装置,包括:获取模块,用于获取进程创建时分配的初始栈顶地址与配置的随机化范围值;第一确定模块,用于确定随机化因子;第二确定模块,用于基于所述初始栈顶地址、随机化范围值与随机化因子确定随机化后的栈顶地址。
可选地,所述装置,还包括判断模块,用于根据进程创建时的参数确定是否进行栈顶地址的随机化处理;在确定进行随机化处理时,执行所述获取进程创建时分配的初始栈顶地址与配置的随机化范围值步骤。
可选地,所述第一确定模块,包括:判断单元,用于判断是否存在真随机数发生器;第一生成单元,用于存在真随机数发生器时,采用所述真随机数发生器生成第一随机数作为随机化因子;第一确定单元,用于不存在真随机数发生器时,基于系统中的随机事件数据与系统的随机函数确定随机化因子。
可选地,所述第一确定模块,包括:修正单元,用于基于系统中的随机事件数据生成随机修正值;第二生成单元,用于结合所述随机修正值与随机函数生成第二随机数作为随机化因子;其中,所述随机事件数据包括表征当前中断的次数、当前的温度值、当前的电压值中至少一项的数据。
可选地,所述第二确定模块,包括:取余单元,用于将所述随机化范围值与随机化因子进行取余处理,确定第一随机值;随机单元,用于基于所述第一随机值与栈寄存器所占字节确定第二随机值;第二确定单元,用于基于所述初始栈顶地址与所述第二随机值确定随机化后的栈顶地址。
可选地,当所述进程为动态创建的进程时,所述装置还包括:释放模块,用于基于所述随机化后的栈顶地址释放内存。
第三方面,提供了一种栈帧地址随机化系统,包括:随机化地址分配模块、随机化因子生成模块;其中,所述随机化地址分配模块用于获取进程创建时分配的初始栈顶地址与配置的随机化范围值以及随机化因子,并基于所述初始栈顶地址、随机化范围值与随机化因子确定随机化后的栈顶地址;所述随机化因子生成模块用于确定随机化因子。
第四方面,提供了一种电子设备,该电子设备包括:一个或多个处理器;存储器;一个或多个应用程序,其中一个或多个应用程序被存储在存储器中并被配置为由一个或多个处理器执行,一个或多个程序配置用于:执行根据本申请第一方面提供的栈帧地址随机化方法。
第五方面,提供了一种存储介质,为计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本申请第一方面提供的栈帧地址随机化方法。
本申请提供的技术方案带来的有益效果是:
本申请提供了一种栈帧地址随机化方法及相关设备,在该方法中根据进程创建时分配的初始栈顶地址、随机化范围值以及随机化因子,调整栈顶地址可生成随机化的栈顶地址,可应用在嵌入式系统中实现进程初始化时栈帧地址的随机化。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1为本申请实施例提供的栈帧地址随机化方法的第一种流程示意图;
图2为本申请实施例提供的栈帧地址随机化方法的第二种流程示意图;
图3为本申请实施例提供的栈帧地址随机化方法中与确定随机化因子步骤相关的流程示意图;
图4为本申请实施例提供的栈帧地址随机化方法中与确定随机化栈顶地址步骤相关的流程示意图;
图5为本申请实施例提供的栈帧地址随机化方法的第三种流程示意图;
图6为本申请实施例提供的栈帧地址随机化方法中确定随机化栈顶地址的原理框架图;
图7为本申请实施例应用栈帧地址随机化方法时进程运行100次后各随机化栈顶地址出现次数的示意图;
图8为本申请实施例应用栈帧地址随机化方法时进程运行100次后各随机化栈顶地址随机分布的示意图;
图9为本申请实施例提供的栈帧地址随机化系统的结构示意图;
图10为本申请实施例提供的栈帧地址随机化装置的结构示意图;
图11为本申请实施例提供的电子设备的结构示意图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
为了更好的理解及说明本申请实施例所提供的方案,下面首先对本申请所涉及的相关技术进行说明。
嵌入式系统:由硬件和软件组成,是能够独立进行运作的器件;其软件包括运行环境(应用程序)和操作系统;其硬件包括信号处理器、存储器、通信模块等在内的部件;即嵌入式系统包括嵌入式硬件、嵌入式操作系统、嵌入式应用程序。
栈帧地址随机化是地址空间布局随机化(Address space layoutrandomization,ASLR)技术的一种,实现了栈帧起始地址在一定程度上的随机化,令攻击者难以知悉需要攻击位置的地址,可以有效缓解基于返回库函数类型的缓冲区溢出攻击。然而,嵌入式系统应用程序和操作系统共用一个物理的地址空间,无法直接引入Linux内核成熟的ASLR技术解决缓冲区溢出攻击的问题。因此,当应用程序以进程运行时,如何对进程初始化时的栈帧地址进行随机化处理,是亟需解决的问题。
本申请提供的栈帧地址随机化方法及相关设备,旨在解决现有技术的如上技术问题。
下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
如图1所示,本申请实施例中提供了一种栈帧地址随机化方法,该方法可以由本申请提供的电子设备制定,具体包括以下步骤S101-S103:
步骤S101:获取进程创建时分配的初始栈顶地址与配置的随机化范围值。
具体地,进程(process)是指计算机中的程序关于某数据集合上的一次运行活动。相对地,程序是指令和数据的有序集合,而进程是程序在处理机上的一次执行过程;程序具有永久性,而进程则是暂时的。同一程序可以对应有多个进程。在每一个进程创建时,分配有一个固定的初始栈顶地址,若需要针对该初始栈顶地址进行随机化处理,还可同时配置随机化范围值;举例说明:假设初始栈顶地址为0x20001400,相应配置的随机化范围值为100时,表明初始栈顶地址可以在0x20001400~(0x20001400-100)的范围内进行随机。
可选地,随机化范围值可根据实际情况灵活配置,本申请对此不作限定。
步骤S102:确定随机化因子。
具体地,基于真随机数发生器,或基于系统中的随机事件数据与系统的随机函数确定随机化因子。
其中,真随机数发生器产生随机数的功能是指在芯片中硬件的真随机功能;在计算过程中,硬件随机数发生器(真随机数发生器,TRNG)是从物理过程而非计算机程序生成随机数的设备。
其中,系统中的随机事件数据是指系统中具有随机概率发生事件的数据,如系统当前的温度值、系统当前的电压值、系统当前中断的次数等。
其中,系统的随机函数(random函数)可生成随机数,在应用随机函数时,如random(x),x为一个正整数,通过随机函数可随机产生在0~x之间的一切正整数。如假设a:=random(100),即通过随机函数随机产生1个0~100之间的随机数赋给变量a。
具体地,在基于系统中的随机事件数据与系统的随机函数确定随机化因子时,可将随机函数对应的程序运行多次,以获得多个不同的随机数,进而提高随机性。
步骤S103:基于初始栈顶地址、随机化范围值与随机化因子确定随机化后的栈顶地址。
具体地,在本申请实施例中,栈帧地址随机化的处理主要是参考随机化范围值与随机化因子,在初始栈顶地址的基础上随机化生成若干随机化后的栈顶地址。
本申请提供的栈帧地址随机化方法中根据进程创建时分配的初始栈顶地址、随机化范围值以及随机化因子,调整栈顶地址可生成随机化的栈顶地址,可应用在嵌入式系统中实现进程初始化时栈帧地址的随机化,使得进程对应的栈顶地址不再是固定地址,达到防止恶意攻击的目的;进一步地,随机化因子由基于芯片硬件的真随机数发生器或基于系统的随机事件数据与随机函数确定,可有效提高随机性,进而提高系统的安全性。
结合上述实施例的描述,以下针对各个可行的实施例进行说明。
在一实施例中,如图2所示,步骤S101获取进程创建时分配的初始栈顶地址与配置的随机化范围值之前,还包括步骤S201-S203:
步骤S201:根据进程创建时的参数确定是否进行栈顶地址的随机化处理。
具体地,在本申请实施例中,无论是静态创建的进程还是动态创建的进程,内核态创建的进程还是用户态创建的进程,在进程创建时均携带有一个参数,该参数用于表征进程运行时是否需要对进程初始化后分配的初始栈顶地址进行随机化处理。
可选地,在完成进程的创建后,将在进程创建的初始化函数中解析创建时传入的参数,进而判断是否需要针对进程初始化后分配的初始栈顶地址进行随机化处理。
步骤S202:在确定进行随机化处理时,执行获取进程创建时分配的初始栈顶地址与配置的随机化范围值步骤。
步骤S203:在确定无需进行随机化处理时,初始栈顶地址即为进程运行时对应的栈顶地址。
在本申请实施例中,根据进程创建时的参数,灵活配置是否对初始栈顶地址进行随机化处理,有利于节省嵌入式系统的RAM空间。
在一实施例中,如图3和图6所示,步骤S102确定随机化因子,包括以下步骤S301-S303:
步骤S301:判断是否存在真随机数发生器。
步骤S302:若存在,采用真随机数发生器生成第一随机数作为随机化因子。
具体地,真随机数发生器包括以下几个功能:随机信号的产生、随机位采样、随机数形成和随机数序列的记录。
步骤S303:若不存在,基于系统中的随机事件数据与系统的随机函数确定随机化因子。
在本申请实施例中,采用真随机数发生器确定随机化因子的优先级高于采用系统中的随机事件数据与系统的随机函数确定随机化因子的优先级。直接采用真随机数发生器确定随机化因子有助于提高随机化的效率;而在没有真随机数发生器时,采用系统中的随机事件数据与系统的随机函数所确定的随机化因子,相对于仅采用系统的随机函数所确定得随机化因子而言,有利于提高随机性,进而提高系统的安全性。
在一实施例中,如图3和图6所示,步骤S102基于系统中的随机事件数据与系统的随机函数确定随机化因子,包括以下步骤S3031-S3032:
步骤S3031:基于系统中的随机事件数据生成随机修正值;其中,随机事件数据包括表征当前中断的次数、当前的温度值、当前的电压值中至少一项的数据。
具体地,所采集的系统中的随机事件数据中,各事件的发生具有随机性,基于该事件发生的随机性可有效提高随机修正值的随机性。
可选地,随机事件数据还可以是其他任何与系统相关的、具有随机性的事件数据。
步骤S3032:结合随机修正值与随机函数生成第二随机数作为随机化因子。
具体地,随机函数对应的程序可运行一次以获得一个随机数,进而结合随机修正值生成第二随机数;随机函数对应的程序也可运行若干次以获得若干个随机数后,在若干个随机数中随机抽取一个结合随机修正值生成第二随机数。其中,第二随机数为正整数。
可选地,随机函数在生成随机数时无需限定取值范围,当随机函数对应的程序仅运行一次时,可考虑采用较大的取值范围;当随机函数对应的程序运行多次时,每次运行对应的取值范围可相同也可不同(如第一次运行时采用random(10),第二次运行时采用random(100),第三次运行时采用random(10)......第N次运行时采用random(100))。
在一实施例中,采用真随机数发生器确定随机化因子,和采用随机事件数据与随机函数确定随机化因子为两种并列的方案,可择一使用。
在一实施例中,如图4和图6所示,步骤S103基于初始栈顶地址、随机化范围值与随机化因子确定随机化后的栈顶地址,包括以下步骤S401-S403:
步骤S401:将随机化范围值与随机化因子进行取余处理,确定第一随机值。
具体地,第一随机值为将随机化范围值与随机化因子相除得到的余数。假设当前随机化范围值为100,随机化因子(可为任意正整数)与100相余可得到一个范围在0~99内的第一随机值。
步骤S402:基于第一随机值与栈寄存器所占字节确定第二随机值。
具体地,由于栈寄存器占用4个字节,结合上述步骤S401的例子,可见,基于第一随机值(0~99)与栈寄存器所占字节可确定第二随机值为在0~24的大小。
步骤S403:基于初始栈顶地址与第二随机值确定随机化后的栈顶地址。
具体地,随机化后的栈顶地址=初始栈顶地址-第二随机值。
在本申请实施例中,结合上述的例子可见,当随机化范围值配置为100时,结合栈寄存器占用4个字节的情况,最多存在24个可进行随机化处理的值,若将进程运行100次,24个可能的栈顶地址出现的次数及分布概率如图7和图8所示。当进程运行100次时,出现的栈在0x20001394~0x200013f4之间,每次随机化的栈可能是图7中24个地址中的一个,每个地址的出现概率整体呈随机化分布,如图8所示。图8中,横坐标表示地址出现的次数(在1~100之间),纵坐标表示随机化后的栈顶地址(图中5代表地址0x2000138C,35代表地址0x20001401,7代表地址出现的最小值0x20001394,31代表地址出现的最大值0x200013f4)。
在一实施例中,如图5所示,当进程为动态创建的进程时,栈帧地址随机化方法还包括步骤S501:
步骤S501:基于随机化后的栈顶地址释放内存。
具体地,进程由两个部分组成,一是操作系统用来管理进程的内核对象(操作系统用来存放关于进程相关信息的空间),二是地址空间(包含所有可执行模块的代码和数据,还包含动态内存分配的空间)。针对于动态创建的进程,进程的栈也是动态分配的,因此,在进行栈帧地址随机化处理后,需要将真实使用的栈大小返回至内存池/内存堆,以回收已分配的冗余内存。举例说明:结合上述例子可见,当配置的随机化范围值为100时,对栈帧地址随机化处理后,存在冗余内存(最小冗余为4个字节,最大冗余为96个字节),对冗余的内容进行回收(释放),有利于节省系统RAM空间,提高利用率。
如图9所示,本申请实施例还提供一种应用于上述栈帧地址随机化方法的系统900,在该系统中至少包括:随机化地址分配模块903和随机化因子生成模块905;其中,随机化地址分配模块903用于获取进程创建时分配的初始栈顶地址与配置的随机化范围值以及随机化因子,并基于初始栈顶地址、随机化范围值与随机化因子确定随机化后的栈顶地址;随机化因子生成模块905用于确定随机化因子。
可选地,该系统900还包括进程创建模块901,用于创建进程并灵活配置携带的参数,该参数表征是否对进程创建时分配的初始栈顶地址进行随机化处理;若参数对应为需要进行随机化处理时,进程创建模块901还用于为进程配置随机化范围值。
可选地,该系统900还包括随机化判断模块902,用于获取进程创建模块901所创建进程的初始化函数,并解析进程创建时携带的参数,基于该参数判断是否需要对进程创建时分配的初始栈顶地址进行随机化处理,并将判断结果输出至随机化地址分配模块903。其中,当随机化判断模块902基于参数确定需要针对进程创建时分配的初始栈顶地址进行随机化处理时,判断结果还包括进程创建模块901配置的随机化范围值。在一可行的实施例中,若随机化判断模块902基于参数确定当前无需对初始栈顶地址进行随机化处理时,则不再向随机化地址分配模块903输出判断结果,以提高处理效率。
可选地,该系统900还包括随机事件采集模块904,用于采集系统中的随机事件数据,如当前系统的中断次数、当前温度值、当前电压值等数据,并将该随机事件数据输出至随机化因子生成模块905。
可选地,随机化因子生成模块905首先判断当前的芯片中是否有硬件的真随机功能,若有,则采用真随机数发生器生成第一随机数作为随机化因子输出至随机化地址分配模块903;若无,则基于随机事件采集模块904输出的随机事件数据生成随机修正值,进而结合随机修正值和随机函数生成第二随机数作为随机化因子并输出至随机化地址分配模块903。
可选地,随机化地址分配模块903首先基于随机化判断模块902输入的判断结果确定是否启动进行栈帧地址随机化的处理;在确定需要进行随机化处理后,则基于进程创建模块901在创建进程时分配的初始栈顶地址以及配置的随机化范围值、随机化因子生成模块905提供的随机化因子,三者一起进行栈顶地址的调整,生成具有随机性的栈顶地址。
可选地,该系统800还包括内存管理模块806,用于基于随机化后的栈顶地址释放内容。
请参阅图10,本申请实施例提供了一种栈帧地址随机化装置1000,该栈帧地址随机化装置1000可以包括:获取模块1001,用于获取进程创建时分配的初始栈顶地址与配置的随机化范围值;第一确定模块1002,用于确定随机化因子;第二确定模块1003,用于基于初始栈顶地址、随机化范围值与随机化因子确定随机化后的栈顶地址。
可选地,装置1000,还包括判断模块,用于根据进程创建时的参数确定是否进行栈顶地址的随机化处理;在确定进行随机化处理时,执行获取进程创建时分配的初始栈顶地址与配置的随机化范围值步骤。
可选地,第一确定模块1002,包括:判断单元,用于判断是否存在真随机数发生器;第一生成单元,用于存在真随机数发生器时,采用真随机数发生器生成第一随机数作为随机化因子;第一确定单元,用于不存在真随机数发生器时,基于系统中的随机事件数据与系统的随机函数确定随机化因子。
可选地,第一确定模块1002,包括:修正单元,用于基于系统中的随机事件数据生成随机修正值;第二生成单元,用于结合随机修正值与随机函数生成第二随机数作为随机化因子;其中,随机事件数据包括表征当前中断的次数、当前的温度值、当前的电压值中至少一项的数据。
可选地,第二确定模块1003,包括:取余单元,用于将随机化范围值与随机化因子进行取余处理,确定第一随机值;随机单元,用于基于第一随机值与栈寄存器所占字节确定第二随机值;第二确定单元,用于基于初始栈顶地址与第二随机值确定随机化后的栈顶地址。
可选地,当进程为动态创建的进程时,装置1000还包括:释放模块,用于基于随机化后的栈顶地址释放内存。
本申请实施例的栈帧地址随机化装置可执行本申请的实施例所提供的栈帧地址随机化方法,其实现原理相类似,本申请各实施例中的栈帧地址随机化装置中的各模块所执行的动作是与本申请各实施例中的栈帧地址随机化方法中的步骤相对应的,对于栈帧地址随机化装置的各模块的详细功能描述具体可以参见前文中所示的对应的栈帧地址随机化方法中的描述,此处不再赘述。
请参阅图11,在一个可选实施例中提供了一种电子设备,电子设备1100包括:处理器1101和存储器1103。其中,处理器1101和存储器1103相连,如通过总线1102相连。可选地,电子设备1100还可以包括收发器1104。需要说明的是,实际应用中收发器1104不限于一个,该电子设备1100的结构并不构成对本申请实施例的限定。
处理器1101可以是CPU(Central Processing Unit,中央处理器),通用处理器,DSP(Digital Signal Processor,数据信号处理器),ASIC(Application SpecificIntegrated Circuit,专用集成电路),FPGA(Field Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器1101也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线1102可包括一通路,在上述组件之间传送信息。总线1102可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(ExtendedIndustry Standard Architecture,扩展工业标准结构)总线等。总线1102可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器1103可以是ROM(Read Only Memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM(Electrically ErasableProgrammable Read Only Memory,电可擦可编程只读存储器)、CD-ROM(Compact DiscRead Only Memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。
存储器1103用于存储执行本申请方案的应用程序代码,并由处理器1101来控制执行。处理器1101用于执行存储器1103中存储的应用程序代码,以实现前述方法实施例所示的内容。
本申请实施例中提供了一种电子设备,该电子设备包括:存储器和处理器;至少一个程序,存储于存储器中,用于被处理器执行时,实现前述方法实施例中相应内容,与现有技术相比:本申请提供的栈帧地址随机化方法中根据进程创建时分配的初始栈顶地址、随机化范围值以及随机化因子,调整栈顶地址可生成随机化的栈顶地址,可应用在嵌入式系统中实现进程初始化时栈帧地址的随机化,使得进程对应的栈顶地址不再是固定地址,达到防止恶意攻击的目的。
本申请实施例提供了一种存储介质,为计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,当其在计算机上运行时,使得计算机可以执行前述方法实施例中相应内容。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (10)

1.一种栈帧地址随机化方法,其特征在于,所述方法包括:
获取进程创建时分配的初始栈顶地址与配置的随机化范围值;
确定随机化因子;
基于所述初始栈顶地址、随机化范围值与随机化因子确定随机化后的栈顶地址。
2.根据权利要求1所述的方法,其特征在于,所述获取进程创建时分配的初始栈顶地址与配置的随机化范围值之前,还包括:
根据进程创建时的参数确定是否进行栈顶地址的随机化处理;
在确定进行随机化处理时,执行所述获取进程创建时分配的初始栈顶地址与配置的随机化范围值步骤。
3.根据权利要求1所述的方法,其特征在于,所述确定随机化因子,包括:
判断是否存在真随机数发生器;
若存在,采用所述真随机数发生器生成第一随机数作为随机化因子;
若不存在,基于系统中的随机事件数据与系统的随机函数确定随机化因子。
4.根据权利要求3所述的方法,其特征在于,所述基于系统中的随机事件数据与系统的随机函数确定随机化因子,包括:
基于系统中的随机事件数据生成随机修正值;
结合所述随机修正值与随机函数生成第二随机数作为随机化因子;
其中,所述随机事件数据包括表征当前中断的次数、当前的温度值、当前的电压值中至少一项的数据。
5.根据权利要求1所述的方法,其特征在于,所述基于所述初始栈顶地址、随机化范围值与随机化因子确定随机化后的栈顶地址,包括:
将所述随机化范围值与随机化因子进行取余处理,确定第一随机值;
基于所述第一随机值与栈寄存器所占字节确定第二随机值;
基于所述初始栈顶地址与所述第二随机值确定随机化后的栈顶地址。
6.根据权利要求1所述的方法,其特征在于,当所述进程为动态创建的进程时,所述方法还包括:
基于所述随机化后的栈顶地址释放内存。
7.一种栈帧地址随机化装置,其特征在于,包括:
获取模块,用于获取进程创建时分配的初始栈顶地址与配置的随机化范围值;
第一确定模块,用于确定随机化因子;
第二确定模块,用于基于所述初始栈顶地址、随机化范围值与随机化因子确定随机化后的栈顶地址。
8.一种栈帧地址随机化系统,其特征在于,包括:随机化地址分配模块、随机化因子生成模块;
其中,所述随机化地址分配模块用于获取进程创建时分配的初始栈顶地址与配置的随机化范围值以及随机化因子,并基于所述初始栈顶地址、随机化范围值与随机化因子确定随机化后的栈顶地址;
所述随机化因子生成模块用于确定随机化因子。
9.一种电子设备,其特征在于,其包括:
一个或多个处理器;
存储器;
一个或多个应用程序,其中所述一个或多个应用程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于:执行根据权利要求1~6任一项所述的方法。
10.一种存储介质,为计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1~6任一项所述的方法。
CN202010904467.4A 2020-09-01 2020-09-01 栈帧地址随机化方法及相关设备 Pending CN112000484A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010904467.4A CN112000484A (zh) 2020-09-01 2020-09-01 栈帧地址随机化方法及相关设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010904467.4A CN112000484A (zh) 2020-09-01 2020-09-01 栈帧地址随机化方法及相关设备

Publications (1)

Publication Number Publication Date
CN112000484A true CN112000484A (zh) 2020-11-27

Family

ID=73464984

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010904467.4A Pending CN112000484A (zh) 2020-09-01 2020-09-01 栈帧地址随机化方法及相关设备

Country Status (1)

Country Link
CN (1) CN112000484A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112925717A (zh) * 2021-03-22 2021-06-08 北京字节跳动网络技术有限公司 用于确定调用栈栈帧的对象的方法、装置、设备和介质
CN114254400A (zh) * 2021-12-27 2022-03-29 中国人民解放军战略支援部队信息工程大学 基于动态影子栈的栈缓冲区溢出攻击防御方法及系统
CN114301729A (zh) * 2021-12-22 2022-04-08 北京海林自控科技股份有限公司 一种基于ntc的总线通信地址分配方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101621498A (zh) * 2008-06-30 2010-01-06 成都市华为赛门铁克科技有限公司 防御网络攻击的方法、装置以及设备
CN103995705A (zh) * 2014-06-04 2014-08-20 中国科学院信息工程研究所 一种操作系统地址空间随机化分配系统及方法
US20150047049A1 (en) * 2013-08-12 2015-02-12 Cisco Technology, Inc. Binary Translation and Randomization System for Application Security

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101621498A (zh) * 2008-06-30 2010-01-06 成都市华为赛门铁克科技有限公司 防御网络攻击的方法、装置以及设备
US20150047049A1 (en) * 2013-08-12 2015-02-12 Cisco Technology, Inc. Binary Translation and Randomization System for Application Security
CN103995705A (zh) * 2014-06-04 2014-08-20 中国科学院信息工程研究所 一种操作系统地址空间随机化分配系统及方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112925717A (zh) * 2021-03-22 2021-06-08 北京字节跳动网络技术有限公司 用于确定调用栈栈帧的对象的方法、装置、设备和介质
CN112925717B (zh) * 2021-03-22 2024-03-12 北京字节跳动网络技术有限公司 用于确定调用栈栈帧的对象的方法、装置、设备和介质
CN114301729A (zh) * 2021-12-22 2022-04-08 北京海林自控科技股份有限公司 一种基于ntc的总线通信地址分配方法及系统
CN114254400A (zh) * 2021-12-27 2022-03-29 中国人民解放军战略支援部队信息工程大学 基于动态影子栈的栈缓冲区溢出攻击防御方法及系统
CN114254400B (zh) * 2021-12-27 2024-05-03 中国人民解放军战略支援部队信息工程大学 基于动态影子栈的栈缓冲区溢出攻击防御方法及系统

Similar Documents

Publication Publication Date Title
US10509734B2 (en) Cryptographic pointer address encoding
CN112000484A (zh) 栈帧地址随机化方法及相关设备
CN112149149A (zh) 基于指针的数据加密
CN104036185B (zh) 基于虚拟化的宏内核操作系统载入模块权能隔离方法
CN113094700A (zh) 执行安全操作的系统以及系统执行安全操作的方法
US10528729B2 (en) Methods and systems for defending against cyber-attacks
EP3460709B1 (en) Devices and methods for secured processors
Weisberg et al. Enhancing Transportation System Networks Reliability by Securer Operating System
CN105468965A (zh) 一种动态堆栈内存管理方法
US10579791B2 (en) Technologies to defeat secure enclave side-channel attacks using fault-oriented programming
CN113673002A (zh) 一种基于指针加密机制和risc-v协处理器的内存溢出防御方法
CN111381905B (zh) 一种程序处理方法、装置及设备
Singh Identifying malicious code through reverse engineering
US20220350609A1 (en) Protection Against Timing-based Security Attacks on Re-order Buffers
Fu et al. RegKey: a register-based implementation of ECC signature algorithms against one-shot memory disclosure
US11886332B2 (en) Dynamic memory allocation methods and systems
JPS599937B2 (ja) 情報処理装置
CN115567199A (zh) 一种随机数种子生成方法、装置、电子设备及存储介质
CN110597641A (zh) 一种线性地址空间的布局方法及计算装置
CN113392395A (zh) 一种栈保护的方法及装置
EP2720170B1 (en) Automated protection against computer exploits
US20190042116A1 (en) Techniques for preventing memory corruption
Moghadam et al. Real-Time Control-Flow Integrity for Multicore Mixed-Criticality IoT Systems
CN113614703A (zh) 用于核特定内存映射的装置
JP7168776B2 (ja) 情報処理方法、情報処理装置及び記憶媒体

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20201127