CN112955887A - 面向返回的编程防护 - Google Patents
面向返回的编程防护 Download PDFInfo
- Publication number
- CN112955887A CN112955887A CN201980073279.7A CN201980073279A CN112955887A CN 112955887 A CN112955887 A CN 112955887A CN 201980073279 A CN201980073279 A CN 201980073279A CN 112955887 A CN112955887 A CN 112955887A
- Authority
- CN
- China
- Prior art keywords
- function
- executable
- call
- response
- return
- 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
Links
- 230000006870 function Effects 0.000 claims abstract description 315
- 230000004044 response Effects 0.000 claims abstract description 54
- 238000000034 method Methods 0.000 claims description 37
- 230000002265 prevention Effects 0.000 claims description 25
- 238000010586 diagram Methods 0.000 description 7
- 230000008569 process Effects 0.000 description 7
- 239000012634 fragment Substances 0.000 description 3
- 230000001012 protector Effects 0.000 description 3
- 230000007123 defense Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 239000003795 chemical substances by application Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/554—Detecting local intrusion or implementing counter-measures involving event detection and direct action
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring 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
- G06F21/54—Monitoring 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 by adding security routines or objects to programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Storage Device Security (AREA)
Abstract
一种ROP攻击防护装置,由以下部分构成:在其中存储有防护函数的第一存储器区域,所述第一存储器区域被设置为可执行;以及在其中存储有多个操作函数的第二存储器区域,所述第二存储器区域被设置为不可执行,其中所述防护函数被设置为:响应于对所述多个操作函数之一的调用,并且进一步响应于至少一个预定规则,允许被调用操作函数的执行;并且在接收到来自所述被执行的操作函数的返回之后,将所述被执行的操作函数设置为不可执行。
Description
技术领域
本发明总体上涉及安全设备领域,更具体地,涉及一种用于防御面向返回的编程(ROP)攻击的系统和方法。
背景技术
ROP是一种计算机安全利用技术,即使在存在诸如可执行空间防护和代码签名之类的安全防御措施的情况下,该技术使得攻击者也可以执行恶意代码。通过ROP,攻击者可以控制调用堆栈并劫持程序控制流。然后,攻击者能够执行设备存储器中已经存在的精心选择的机器指令序列。这些序列称为“指令片段”。每个指令片段通常以返回指令结尾,并位于现有程序的子例程中和/或共享的库代码中。这些指令片段链接在一起,即使在采用可以阻止更简单攻击的防御的设备中,攻击者也可以执行任意操作。
一种防御ROP攻击的方法是地址空间布局随机化(ASLR)。在ASLR中,每次运行程序时,组件都会随机被移动到虚拟存储器中的不同地址。在车辆系统中,存在随机存取存储器(RAM)的大小受到限制,结果没有足够的RAM来运行来自RAM的二进制文件的情况。因此,在这种情况下,二进制文件将在闪存中运行。闪存对其可被改写的次数有限制。因此,ASLR只能执行有限的次数,因此不是一个好的解决方案。此外,写入闪存需要花费时间,因此在启动时将程序重新写入随机存储器单元将会增加不希望的延迟。
所期望的是一种无需执行ASLR即可防御ROP攻击的方法,并且现有技术还没有提供这样一种方法。
发明内容
因此,本发明的主要目的是克服现有技术ROP攻击防护的至少一些缺点。在一个实施方式中,这是由ROP攻击防护装置提供的,该装置包括:在其中存储有防护函数的第一存储器区域,该第一存储器区域被设置为可执行;以及在其中存储有多个操作函数的第二存储器区域,所述第二存储器区域被设置为不可执行,其中所述防护函数被设置为:响应于对所述多个操作函数之一的调用,并且进一步响应于至少一个预定规则,允许所述被调用操作函数的执行;并且在接收到来自所述被执行的操作函数的返回之后,将所述被执行的操作函数设置为不可执行。
在一个实施方式中,多个操作函数包括被调用函数和调用方函数,从调用方函数接收对被调用函数的调用,并且其中防护函数还被设置为:响应于调用,将调用方函数设置为不可执行;响应收到的返回,允许调用方函数的执行。在另一实施方式中,响应于至少一个预定规则,防护函数还被设置为确定调用的返回地址是否有效,其中,允许被调用操作函数的执行响应于调用的返回地址被确定为有效,并且其中,响应于调用的返回地址被确定为无效,所述防护函数还被设置为:不允许被调用操作函数的执行;并输出关于无效返回地址的通知。在另一实施方式中,确定返回地址有效包括确定返回地址不在防护函数的地址范围内,并且其中,确定返回地址无效包括确定返回地址在防护函数的地址范围内。
在一个实施方式中,对多个操作函数之一的调用包括:对防护函数的调用;以及关于被调用函数的地址的信息。在另一个实施方式中,执行的允许包括将第二存储器区域的部分定义为可执行,其中,将被执行的操作函数设置为不可执行包括将第二存储器区域的该部分定义为不可执行。在另一个实施方式中,将第二存储器区域的部分定义为可执行包括:以被允许执行的操作函数的地址范围的第一边界改写第一寄存器的值,并且以被允许执行的操作函数的地址范围的第二边界改写第二寄存器的值,其中将第二存储器区域的该部分定义为不可执行通过改写来执行。
在一个实施方式中,执行的允许包括将被调用操作函数复制到第一存储器区域,其中将被执行的操作函数设置为不可执行包括从第一存储器区域删除被执行的操作函数。
独立地,提供了一种面向返回的编程(ROP)攻击防护的方法,该方法包括:提供其中存储有多个操作函数的存储器区域,该存储器区域设置为不可执行;响应于对多个操作函数之一的调用,并进一步响应至少一个预定规则,允许被调用操作函数的执行;在接收到被执行的操作函数的返回之后,将被执行的操作函数设置为不可执行。
在一个实施方式中,多个操作函数包括被调用函数和调用方函数,从调用方函数接收对被调用函数的调用,其中该方法还包括:响应于调用,将调用方函数设置为不可执行;并响应收到的返回,允许调用方函数的执行。在另一实施方式中,响应于至少一个预定规则,该方法还包括:确定调用的返回地址是否有效,允许被调用操作函数的执行响应于该调用的返回地址被确定为有效;响应于该调用的返回地址被确定为无效,不允许被调用操作函数的执行并输出关于无效返回地址的通知。
在另一实施方式中,允许被调用操作函数的执行以及将被执行的操作函数设置为不可执行是由防护函数执行的,其中,确定返回地址有效包括确定返回地址不在保护函数的地址范围内,并且其中,确定返回地址无效包括确定返回地址在防护函数的地址范围内。在又一实施方式中,对多个操作函数之一的调用包括:对防护函数的调用;以及关于被调用操作函数的地址的信息。
在一个实施方式中,执行的允许包括将存储器区域的部分定义为可执行,并且其中将被执行的操作函数设置为不可执行包括将存储器区域的该部分定义为不可执行。在另一个实施方式中,将存储器区域的该部分定义为可执行包括:以被允许执行的操作函数的地址范围的第一边界改写第一寄存器的值,并且以被允许执行的操作函数的地址范围的第二边界改写第二寄存器的值,其中将存储器区域的该部分定义为不可执行通过改写执行。
在另一个实施方式中,执行的允许包括将被调用操作函数复制到存储器的可执行区域,并且其中将被执行的操作函数设置为不可执行包括从存储器的可执行区域删除执行的操作函数。
独立地,提供了面向返回的编程(ROP)攻击防护装置,该ROP攻击防护装置包括:处理器;在其中存储有当被处理器读取时使处理器实现防护函数的指令的第一存储器区域,该第一存储器区域被设置为可执行;在其中存储有当被处理器读取时使处理器实现多个操作函数的指令的第二存储器区域,该第二存储器区域被设置为不可执行,其中,响应于调用并且进一步响应于至少根据一个预定规则,处理器被设置为实现防护函数以:允许操作函数之一的执行;并且在完成被执行的操作函数之后,将被执行的操作函数设置为不可执行。
在一个实施方式中,多个操作函数包括被调用函数和调用方函数,从调用方函数接收对被调用函数的调用,其中,处理器还被设置为实现防护函数以:响应于该调用,将调用方函数设置为不可执行;响应收到的返回,允许调用方函数的执行。在另一实施方式中,响应于至少一个预定规则,处理器还被设置为实现防护函数以确定该调用的返回地址是否有效,其中,被调用操作函数的执行的允许响应于该调用的返回地址被确定为有效,并且其中,响应于所述调用的返回地址被确定为无效,处理器还被设置为实现防护函数以:不允许被调用操作函数的执行;并输出关于无效返回地址的通知。在另一实施方式中,确定返回地址有效包括确定返回地址不在防护函数的地址范围内,并且其中确定返回地址无效包括确定返回地址在防护函数的地址范围内。
在另一个实施方式中,对多个操作函数之一的调用包括:对防护函数的调用;以及关于被调用函数的地址的信息。在一个实施方式中,执行的允许包括将第二存储器区域的部分定义为可执行,其中,将被执行的操作函数设置为不可执行包括将第二存储器区域的该部分定义为不可执行。在一个实施方式中,执行的允许包括将被调用操作函数复制到第一存储器区域,其中将被执行的操作函数设置为不可执行包括从第一存储器区域删除执行的操作函数。
通过以下附图和描述,本发明的附加特征和优点将变得显而易见。
附图说明
为了更好地理解本发明并示出如何可以实现本发明,现在将纯粹通过示例的方式参考附图,在附图中,相同的附图标记始终表示相应的部分或元件。
现在详细地具体参考附图,要强调的是,示出的细节仅是示例性的,并且仅是为了说明性地讨论本发明的优选实施方式,并且为了提供被认为对本发明的原理和概念方面的最有用和最容易理解的描述而呈现了这些细节。在这一点上,没有试图比对本发明的基本理解所必须的更详细地示出本发明的结构细节,结合附图进行的描述对于本领域技术人员而言是显而易见的,本发明的几种形式可以如何进行。在实践中体现出来。在附图中:
图1是程序攻击防护装置的第一实施方式的高级概略示意图。
图2示出了根据某些实施方式的将预定义防护模块添加到二进制程序映像的方法的高级流程图;
图3示出了修补二进制图像以使函数分支到图2的预定义防护模块的方法的高级流程图。
图4示出了根据某些实施方式的程序攻击防护方法的高级流程图;和
图5示出了程序攻击防护装置的第二实施方式的高级示意图。
具体实施方式
在详细解释本发明的至少一个实施方式之前,应当理解,本发明的应用不限于在以下描述中阐述或在附图中示出的部件的构造和设置的细节。本发明可应用于其他实施方式或以各种方式被实践或执行。并且,应当理解,本文采用的措词和术语是出于描述的目的,而不应被认为是限制性的。
图1示出了ROP攻击防护装置10的高级示意图。ROP攻击防护装置10包括:处理器20;存储器防护单元(MPU)25;以及存储器30。如本领域技术人员所知,MPU25是硬件组件,其允许将预定义的存储器区域设置为不可执行。特别地,写在不可执行的存储器区域中的代码不能被执行。尽管为了简化起见,处理器20和MPU25被示为分离的单元,但这并不意味着以任何方式进行限制,并且在一个特定实施方式中,MPU25在处理器20内实现。在一个实施方式中,处理器20是微处理器。存储器30包括:至少一个不可执行区域40,其被设置为使得存储在其中的代码不能被处理器20执行;以及至少一个可执行区域50,其被设置为使得其中存储的代码可以由处理器20执行。在一个实施方式中,一个或多个专用寄存器记录哪些存储器区域是可执行的,而其余区域是不可执行的,下面的描述是关于这样的实施方式的。在另一实施方式中,专用的一个或多个寄存器记录哪些存储器区域是不可执行的,而其余区域是可执行的。在另一实施方式中,一个或多个第一专用寄存器记录哪些存储器区域是可执行的,而一个或多个第二专用寄存器记录哪些存储器区域是不可执行的。MPU 25响应于专用寄存器的值将存储器区域设置为不可执行的。在一个实施方式中,存储器30是闪存,即可以电擦除和重新编程的计算机存储介质。
如以下将进一步描述的,防护函数60被存储在可执行区域50中,并且多个操作函数70被存储在不可执行区域40中。如本文所使用的,术语操作函数是指执行任何类型操作的任何函数,没有限制。为了清楚起见,将调用另一个操作函数70的操作函数70在本文中称为调用方操作函数70。类似地,将被调用操作函数70在本文中称为被调用方操作函数70。此外,中断函数和初始化命令被存储在可执行区域50中。在另一个实施方式中,中断函数和初始化命令被存储在单独的可执行区域50中,与存储操作函数70的位置不同。防护函数60、操作函数70、中断函数和初始化命令中的每一个都包括计算机可读指令,该计算机可读指令在被处理器20读取时被设置成使处理器20执行相应的操作。
如将在下面进一步描述的,对操作函数70的任何调用都进入防护函数60。在一个实施方式中,在通过启动代码启用防护函数60之后,在调用方函数为存储在不可执行区域40中的操作函数70的情况下,防护函数60将调用方操作函数70设置为不可执行。特别地,在一个实施方式中,防护函数60调整特定寄存器的值,使得MPU25将包含调用方操作函数70的不可执行区域40的部分设置为不可执行。
防护函数60被设置为根据防护模型的至少一个预定规则来检测对操作函数70的调用中的异常。响应于例如通过主函数对被调用方操作函数70的调用,并且响应于至少一个预定规则,防护函数60分析存储在调用堆栈上的返回地址,以确定其是否为有效的返回命令。特别地,在所有函数都存储在存储器30的不可执行区域40中的实施方式中,防护函数60检查返回地址是否与防护函数60的地址相同。在攻击者引起堆栈溢出攻击以劫持返回地址的情况下,它不能跳转到任何操作函数70,因为它们都被设置为不可执行,并且跳转到任何操作函数70的任何尝试都将导致异常。然而,返回地址能够被劫持以便跳转到防护函数60。因此,如果返回地址是防护函数60,则识别为攻击。在一个或多个操作函数70被设置为返回防护函数60而不是另一操作函数70的实施方式中,防护函数60将允许返回。
在并非所有函数都被存储在不可执行区域40中,因此返回地址能够被劫持以跳转到其他函数的一个实施方式中,防护函数60将返回命令与预定参数进行比较,以确定该调用是否在合法参数范围内,例如是否允许被调用方操作函数70将数据返回到该地址。在另一实施方式中,仅当返回地址在调用方操作函数70的地址范围内时,防护函数60才确定该返回是有效的。因此,至少一个预定规则包括确定返回地址是否为有效的上述参数。
在确定该调用为有效的情况下,防护函数60允许执行被调用方操作函数70。特别地,在一个实施方式中,防护函数60调整特定寄存器的值,使得MPU25将包含被调用方操作函数70的不可执行区域40的部分设置为可执行的。在确定该调用为无效的情况下,防护函数60不允许执行被调用方操作函数70并且产生异常。在一个实施方式中,防护函数60生成指示无效调用的通知,并将该通知输出到预定输出。
在另一实施方式中,即使所有函数都被设置为不可执行,防护函数60也检查返回地址是否是到调用方操作函数70的。在返回地址为无效的情况下,防护函数60生成带有无效返回详细信息的通知。
由防护函数60接收被调用方操作函数70的返回,即被调用方操作函数70返回的数据。响应于接收到该返回消息,防护函数60将被调用方操作函数70设置为不可执行。特别地,在一个实施方式中,防护函数60调整特定寄存器的值,从而将包含被调用方操作函数70的不可执行区域40的部分定义为不可执行。另外,防护函数60允许执行调用方操作函数70。如上所述,在一个实施方式中,防护函数60调整特定寄存器的值,从而将包含调用方操作函数70的不可执行区域40的部分定义为可执行的。
总之,在任何给定时间仅允许执行单个操作函数70。在产生调用之后,调用方操作函数70被设置为不可执行,并且仅当调用堆栈上的返回地址有效时才允许执行被调用操作函数70。在完成执行并返回所请求的数据之后,被调用操作函数70被设置为不可执行,并且允许调用方操作函数70再次被执行。因此,无法实施ROP攻击。在其他应用中,这样的防护方法在汽车数据系统的防护中能够是有用的,例如在以下内容中描述的那些:国际申请公开文本WO 2018/037397(2018年3月1日公开);和以及美国临时专利申请62/617,668(2018年1月16日提交),其每一个的全部内容通过引用合并于此。
在一个非限制性实施方式中,其中ROP攻击防护装置10在TriCore微控制器中实现,TriCore微控制器可从德国新比贝格(Neubiberg)的Infineon Technologies AG商购获得,每个可执行地址范围被存储在专用的一对寄存器中,第一寄存器存储可执行范围的上边界的地址,第二寄存器存储可执行范围的下边界的地址。如上所述,第一寄存器对用于限定防护函数60的地址范围,第二寄存器对用于限定当前被允许执行的操作函数70的地址范围。控制寄存器的值被设置,以便两个寄存器对都被设置为定义可执行范围。允许操作函数70被执行包括:用要被执行的操作函数70的地址边界改写第二寄存器对的值。在一个实施方式中,当用允许的操作函数70的地址范围改写寄存器对值时,自动将被执行的操作函数70恢复为不可执行。因此,在上述实施方式中,由第一和第二寄存器对确定可执行范围50。通过第一寄存器对或其他寄存器对,初始化代码和中断函数被定义为可执行。没有被寄存器定义为可执行的任何存储器都被定义为不可执行区域40。
在另一非限制性实施方式中,其中ROP攻击防护装置10在MPC5777微控制器中实现,MPC5777微控制器可从荷兰埃因霍温的NXP Semiconductors NV商购获得,有24组可调存储器范围,其中6组专用于代码,12组专用于存储器,而6组既可以用于代码也可以用于存储器。有5个寄存器:第一寄存器,用于选择要被配置的范围;第二寄存器,用于配置进程ID;第三寄存器,用于限定范围的上边界;第四寄存器,用于限定范围的下边界;第五寄存器,用于确定范围是可执行的还是不可执行的。如上所述,第一范围被配置为包括防护函数60,第二范围被配置为包括被允许执行的操作函数70的地址范围。在一个实施方式中,允许执行操作函数70包括:用第一寄存器选择第二范围;用操作函数70的地址范围的上边界改写第三寄存器中的值;用操作函数70的地址范围的下边界改写第四寄存器中的值。如上所述,在这样的实施方式中,当寄存器值被改写时,自动地将操作函数70设置为不可执行。
图2示出了当源代码不可用时向二进制程序映像添加预定义的防护模块(例如防护函数60)的方法的高级流程图。以下是关于可执行和可链接格式(ELF)文件的描述。在阶段1000中,通过修补脚本分析文件,以查找防护功能性(functionality)可以放入的可用空间。在阶段1010中,如果现有段中有足够的空间,则预定义防护模块的PROGBITS的一部分(即一部分程序内容)被修补脚本复制到阶段1000的空间内的二进制程序映像中。在一个实施方式中,仅复制运行预定义的防护模块所必需的PROGBITS部分,以节省空间。在将预定义的防护模块的PROGBITS复制到二进制程序映像中时,优选地,防护功能性内的不同部分之间的相对距离被保持。特别是,ELF文件的包含各种类型的数据并在运行时加载的部分需要被映射到CPU存储器中的地址。如本领域技术人员在本发明时所知,映射是分段来执行的。每个段包含一系列连续的PROGBITS部分,这些PROGBITS部分被一起加载到该段指定的地址。因此,为防护功能性添加的段将在运行时将添加的PROGBITS部分加载到进程地址空间。
在阶段1020中,如果现有段中没有足够的空间,则会通过修补脚本将两个新的段添加到ELF文件中。第一部分用于只读可执行文本,第二部分用于读写访问。然后,将防护功能性的各个部分添加到添加的段中。具体而言,读写访问PROGBITS部分包括数据和全局偏移表(GOT)。
在程序头表中列出了ELF文件的所有段。在阶段1020添加两个新段之后,程序头表不再适合其原始偏移量。因此,在阶段1030,程序头表被修补脚本移动到ELF文件的末尾。在阶段1040中,通过修补脚本将第三段添加到程序头表,第三段被设置为在运行时从其新位置将程序头表加载到进程地址空间,以允许进程被加载和执行。代码是与位置无关的,因此只要保持不同部分之间的相对距离,就无需对地址空间内的重定位进行任何修改。但是,有时代码中存在全局偏移量。这些偏移量被存储在GOT中,并在阶段1050中通过修补脚本进行修改,以反映地址的重定位。因此,将生成一个新的ELF文件,其中包含原始程序和预定义的防护模块。
图3示出了修补二进制映像的方法的高级流程图,该二进制图像例如是阶段1000-1050的所生成的ELF文件,因此函数分支到预定的防护模块,例如上述的防护函数60。在阶段2000中,修补脚本用对预定义防护模块的调用替换二进制映像中的调用操作码。例如,在ARM指令集中,操作码POP替换为BL xxxxx,其中xxxxx是从当前帧指针到预定义防护模块地址的相对偏移。对于存在复杂指令集的情况,返回的操作码可以具有不同的大小,例如16位或32位,返回的操作码被调用专用软件中断的调用所代替,该软件中断会跳转到预定义的防护模块。对预定义防护模块的新调用包含正在被调用的原始操作函数的地址。在一个实施方式中,二进制映像中的所有调用操作码被替换。在另一个实施方式中,调用操作码的预定列表被替换。
在阶段2020中,训练脚本扫描二进制程序映像,以针对每个调用确定每个调用方和被调用方函数的开始和结束地址,以及存储在防护库中的地址。在阶段2030中,利用地址数据和预定的验证参数来更新阶段2000的预定义防护模块的数据部分。
图4示出了根据某些实施方式的ROP攻击防护方法的高级流程图。在阶段3000,提供其上存储有多个操作函数的存储器区域,该存储器区域被设置为不可执行。在可选阶段3005中,在一个实施方式中,调用方函数是多个操作函数之一。在这样的实施方式中,响应于阶段3000的调用方函数对多个操作函数之一的调用,将调用方函数设置为不可执行。在可选阶段3007中,响应于可选阶段3005的调用并且进一步响应于以下描述的阶段3010的至少一个预定规则,执行确定以确定可选阶段3005的调用的返回地址是否有效。
在阶段3010中,响应于阶段3000的对多个操作函数之一的调用,可选地可选阶段3005和3007的调用,并且进一步响应于至少一个预定规则,被调用操作函数的执行被允许。在一个实施方式中,允许执行阶段3010的被调用操作是响应于该调用的返回地址被确定为有效的。在一个实施方式中,执行的允许由防护函数执行。特别地,在一个实施方式中,对操作函数的每次调用包括对防护函数的调用以及关于被调用操作函数的地址的信息。在一个实施方式中,确定返回地址有效包括确定返回地址不在阶段3010的防护函数的地址范围内。在另一实施方式中,执行的允许包括将阶段3000的存储器区域的一部分定义为可执行,该部分包括允许的操作函数的地址范围。在另一个实施方式中,将所述部分定义为可执行包括:用被允许执行的操作函数的地址范围的第一边界改写第一寄存器的值,以及用被允许执行的操作函数的地址范围的第二边界改写第二寄存器的值。
在阶段3020中,在从阶段3010的执行的操作函数接收到返回之后,将被执行的操作设置为不可执行。在一个实施方式中,通过防护函数来执行将被执行的操作函数设置为不可执行。在另一个实施方式中,将被执行的操作设置为不可执行包括将阶段3010的部分定义为不可执行,该部分包括执行的操作函数的地址范围。在又一实施方式中,通过阶段3010的改写来自动执行将该部分定义为不可执行。在可选阶段3030中,响应于阶段3020的接收到的返回,允许执行阶段3005的调用方函数。
在可选阶段3040中,响应于阶段3010的调用的返回地址被确定为无效,不允许执行阶段3010的被调用操作,并且输出关于无效返回地址的通知。在一个实施方式中,确定返回地址无效包括确定返回地址在阶段3010的防护函数的地址范围内。
图5示出了根据某些实施方式的ROP攻击防护装置100的高级示意图。当在运行时间期间(例如在与安全有关的车辆系统组件中)不允许访问MPU时,使用ROP攻击防护装置100代替ROP攻击防护装置10。ROP攻击防护装置100包括:处理器110;MPU 115;存储器120;和存储器130。如上所述,存储器120或其预定区域由MPU 115设置为不可执行。存储器130或其预定区域是可执行的。在一实施方式中,存储器120是闪存。在另一个实施方式中,存储器130是RAM。在一个实施方式中,存储器130或其可执行区域已经在其中存储了防护函数140。如上所述,中断函数和初始化命令被存储在可执行存储器130中。存储器120或其不可执行区域已经在其中存储了多个操作函数150。在另一个实施方式中,存储器120具有可执行区域和不可执行区域。在这样的实施方式中,可执行区域中存储有防护函数140,并且不可执行区域中存储有多个操作函数150。防护函数140,操作函数150,中断函数和初始化命令中的每一个都包括计算机可读指令,当由处理器110读取时,它们被设置成使处理器110执行相应的操作。
防护函数140的操作在所有方面都与防护函数60的操作相似,不同之处在于允许执行操作函数150包括将操作函数150复制到存储器130并且将操作函数150设置为不可执行的操作包括从存储器130中删除操作函数150。特别地,诸如主函数之类的操作函数150在存储器130上启动并调用被调用操作函数150。响应于该调用的返回地址被确定为有效防护函数140从存储器130中删除调用方操作函数150,并将被调用方操作函数150复制到可以执行该函数的存储器130中。一旦从被调用方操作函数150接收到返回消息,防护函数140就从存储器130中删除被调用方操作函数150,并将调用方操作函数150复制回存储器130。防护函数140还将该返回消息发送到调用方操作函数150中的返回地址。
为了避免由于具有既可写又可执行的存储器区域而引起的安全风险,优选地,将防护函数140定义为可以写入存储器130的唯一进程。例如,在MPC574XG中,MPC574XG可从荷兰埃因霍温的NXP Semiconductors N.V.商购获得,能够使用以下代码来完成这样的定义:
SMPU_1.RGD[1].WORD4.B.PID=0x1;
SMPU_1.RGD[1].WORD4.B.PIDEN=0x1;//enablePID
SMPU_1.RGD[1].WORD5.B.VLD=0x1;//enable descriptor[0]
这仅允许进程ID 1写入存储器130的预定义区域。
在防护功能性140中,代码将防护功能性定义为进程ID 1,从而定义了只有防护功能性140才能写入存储器130的区域:
_MTSPR(SPR_PID,1);
应当理解,为清楚起见在单独的实施方式的上下文中描述的本发明的某些特征也可以在单个实施方式中组合提供。相反,为简洁起见在单个实施方式的上下文中描述的本发明的各种特征也可以单独地或以任何合适的子组合来提供。特别地,已经通过分类对每个受电设备进行了标识来描述本发明,但是这并不意味着以任何方式进行限制。在替代实施方式中,所有受电设备均被平等对待,因此不需要通过其相关功率要求来识别类别。
除非另有定义,否则本文中使用的所有技术和科学术语具有与本发明所属领域的普通技术人员通常所理解的相同含义。尽管与本文描述的那些方法类似或等同的方法可以用于本发明的实践或测试中,但是本文描述了合适的方法。
本文提及的所有出版物,专利申请,专利和其他参考文献均通过引用整体并入本文。如有冲突,应以专利说明书及其定义为准。另外,材料,方法和实施方式仅是说明性的,并不意图是限制性的。
本领域技术人员将认识到,本发明不限于上文已经具体示出和描述的内容。相反,本发明的范围由权利要求书限定,并且包括上文描述的各种特征的组合和子组合,以及本领域技术人员在阅读前述描述后将想到的其变型和修改。
Claims (23)
1.一种面向返回的编程(ROP)攻击防护装置,包括:
在其中存储有防护函数的第一存储器区域,所述第一存储器区域被设置为可执行;以及
在其中存储有多个操作函数的第二存储器区域,所述第二存储器区域被设置为不可执行,
其中所述防护函数被设置为:
响应于对所述多个操作函数之一的调用,并且进一步响应于至少一个预定规则,允许所述被调用操作函数的执行;并且
在接收到来自所述被执行的操作函数的返回之后,将所述被执行的操作函数设置为不可执行。
2.根据权利要求1所述的ROP攻击防护装置,其中,所述多个操作函数包括:所述被调用函数和调用方函数,从所述调用方函数接收对所述被调用函数的所述调用;并且
其中所述防护函数还被设置为:
响应于所述调用,将所述调用方函数设置为不可执行;
响应于所述接收到的返回,允许所述调用方函数的执行。
3.根据权利要求1所述的ROP攻击防护装置,其中,响应于所述至少一个预定规则,所述防护函数还被设置为确定所述调用的返回地址是否有效,
其中,所述被调用操作函数的所述执行的所述允许响应于所述调用的所述返回地址被确定为有效,并且
其中,响应于所述调用的所述返回地址被确定为无效,所述防护函数还被设置为:
不允许所述被调用操作函数的所述执行;并且
输出关于无效返回地址的通知。
4.根据权利要求3所述的ROP攻击防护装置,其中,所述确定返回地址有效包括确定返回地址不在所述防护函数的地址范围内;并且
其中,所述确定返回地址无效包括确定返回地址在所述防护函数的地址范围内。
5.根据权利要求1所述的ROP攻击防护装置,其中,对所述多个操作函数之一的所述调用包括:
对所述防护函数的调用;和
关于所述被调用函数的地址的信息。
6.根据权利要求1-5中任一项所述的ROP攻击防护装置,其中,所述执行的所述允许包括将所述第二存储器区域的部分定义为可执行;并且
其中,所述将所述被执行的操作函数设置为不可执行包括将所述第二存储器区域的所述部分定义为不可执行。
7.根据权利要求6所述的ROP攻击防护装置,其中,所述将所述第二存储器区域的所述部分定义为可执行包括:以被允许执行的所述操作函数的地址范围的第一边界改写第一寄存器的值,并以被允许执行的所述操作函数的地址范围的第二边界改写第二寄存器的值,并且
其中,所述将所述第二存储器区域的所述部分定义为不可执行是通过所述改写执行的。
8.根据权利要求1-5中任一项所述的ROP攻击防护装置,其中,所述执行的所述允许包括将所述被调用操作函数复制到所述第一存储器区域,并且
其中所述将所述被执行的操作函数设置为不可执行包括从所述第一存储器区域中删除所述被执行的操作函数。
9.一种面向返回的编程(ROP)攻击防护方法,所述方法包括:
提供其中存储有多个操作函数的存储器区域,所述存储器区域被设置为不可执行;
响应于对所述多个操作函数之一的调用,并且进一步响应于至少一个预定规则,允许所述被调用操作函数的执行;并且
在接收到来自所述被执行的操作函数的返回之后,将所述被执行的操作函数设置为不可执行。
10.根据权利要求9所述的ROP攻击防护方法,其中,所述多个操作函数包括所述被调用函数和调用方函数,从所述调用方函数接收对所述被调用函数的调用,并且,
其中,该方法还包括:
响应于所述调用,将所述调用方函数设置为不可执行;和
响应于所述接收到的返回,允许所述调用方函数的执行。
11.根据权利要求9所述的ROP攻击防护方法,其中,响应于所述至少一个预定规则,所述方法还包括:
确定所述调用的返回地址是否有效,所述被调用操作函数的所述执行的所述允许响应于所述调用的所述返回地址被确定为有效;
响应于所述调用的所述返回地址被确定为无效,不允许所述被调用操作函数的所述执行并输出关于无效返回地址的通知。
12.根据权利要求11所述的ROP攻击防护方法,其中,所述允许所述被调用操作函数的执行以及所述将被执行的操作函数设置为不可执行是由防护函数执行的,
其中,所述确定返回地址有效包括确定返回地址不在防护函数的地址范围内,并且
其中,所述确定返回地址无效包括确定返回地址在防护函数的地址范围内。
13.根据权利要求12所述的ROP攻击防护方法,其中,对所述多个操作函数之一的调用包括:
对所述防护函数的调用;和
关于被调用操作函数的地址的信息。
14.根据权利要求9至13中的任一项所述的ROP攻击防护方法,其中,所述执行的所述允许包括将存储器区域的部分定义为可执行;并且
其中,所述将被执行的操作函数设置为不可执行包括将存储器区域的所述部分定义为不可执行。
15.根据权利要求14所述的ROP攻击防护方法,其中,所述将存储器区域的所述部分定义为可执行包括:以被允许执行的操作函数的地址范围的第一边界改写第一寄存器的值,并以被允许执行的操作函数的地址范围的第二边界改写第二寄存器的值,并且
其中,所述将存储器区域的所述部分定义为不可执行是通过所述改写执行的。
16.根据权利要求9至13中的任一项所述的ROP攻击防护方法,其中,所述执行的所述允许包括将所述被调用操作函数复制到存储器的可执行区域,并且
其中,所述将被执行的操作函数设置为不可执行包括从存储器的可执行区域中删除被执行的操作函数。
17.一种面向返回的编程(ROP)攻击防护装置,包括:
处理器;
在其中存储有在被所述处理器读取时使所述处理器实现防护函数的指令的第一存储器区域,所述第一存储器区域被设置为可执行;以及
在其中存储有在被所述处理器读取时使所述处理器实现多个操作函数的指令的第二存储器区域,所述第二存储器区域被设置为不可执行,
其中,响应于调用并且进一步响应于至少一个预定规则,所述处理器被设置为实现所述防护函数以:
允许所述多个操作函数之一的执行;并且
在完成所述被执行的操作函数之后,将所述被执行的操作函数设置为不可执行。
18.根据权利要求17所述的ROP攻击防护装置,其中,所述多个操作函数包括:所述被调用函数和调用方函数;从所述调用方函数接收对所述被调用函数的所述调用;并且
其中,所述处理器还被设置为实现所述防护函数以:
响应于所述调用,将所述调用方函数设置为不可执行;
响应于所述接收到的返回,允许所述调用方函数的执行。
19.根据权利要求17所述的ROP攻击防护装置,其中,响应于所述至少一个预定规则,所述处理器还被设置为实现所述防护函数以确定所述调用的返回地址是否有效,
其中,所述被调用操作函数的所述执行的所述允许响应于所述调用的所述返回地址被确定为有效,并且
其中,响应于所述调用的所述返回地址被确定为无效,所述处理器还被设置为实现所述防护函数以:
不允许所述被调用操作函数的所述执行;和
输出关于无效返回地址的通知。
20.根据权利要求19所述的ROP攻击防护装置,其中,所述确定返回地址有效包括确定返回地址不在所述防护函数的地址范围内;并且
其中,所述确定返回地址无效包括确定返回地址在所述防护函数的地址范围内。
21.根据权利要求17所述的ROP攻击防护装置,其中,对所述多个操作函数之一的所述调用包括:
对所述防护函数的调用;和
关于所述被调用函数的地址的信息。
22.根据权利要求17至21中的任一项所述的ROP攻击防护装置,其中,所述执行的所述允许包括将所述第二存储器区域的部分定义为可执行;并且
其中,所述将所述被执行的操作函数设置为不可执行包括将所述第二存储器区域的所述部分定义为不可执行。
23.根据权利要求17至21中的任一项所述的ROP攻击防护装置,其中,所述执行的所述允许包括将所述被调用操作函数复制到所述第一存储器区域,并且
其中所述将所述被执行的操作函数设置为不可执行包括从所述第一存储器区域中删除所述被执行的操作函数。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201862756595P | 2018-11-07 | 2018-11-07 | |
US62/756,595 | 2018-11-07 | ||
PCT/IL2019/051192 WO2020095295A1 (en) | 2018-11-07 | 2019-11-01 | Return-oriented programming protection |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112955887A true CN112955887A (zh) | 2021-06-11 |
Family
ID=68887089
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980073279.7A Pending CN112955887A (zh) | 2018-11-07 | 2019-11-01 | 面向返回的编程防护 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11893113B2 (zh) |
EP (1) | EP3877881A1 (zh) |
CN (1) | CN112955887A (zh) |
WO (1) | WO2020095295A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117237182A (zh) * | 2023-11-16 | 2023-12-15 | 武汉凌久微电子有限公司 | 一种基于批量片段处理的rop单元组处理方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005032182A (ja) * | 2003-07-11 | 2005-02-03 | Sony Corp | プログラム、攻撃コード抽出装置およびその方法 |
CN104268471A (zh) * | 2014-09-10 | 2015-01-07 | 珠海市君天电子科技有限公司 | 一种检测面向返程的编程攻击的方法及装置 |
US20150215335A1 (en) * | 2014-01-27 | 2015-07-30 | Webroot Inc. | Detecting and preventing execution of software exploits |
CN105260659A (zh) * | 2015-09-10 | 2016-01-20 | 西安电子科技大学 | 一种基于qemu的内核级代码重用型攻击检测方法 |
CN105303104A (zh) * | 2012-01-16 | 2016-02-03 | 高通股份有限公司 | 用以禁止返回定向编程的动态执行阻止 |
CN105723348A (zh) * | 2013-12-17 | 2016-06-29 | 英特尔公司 | 使用事务性存储器检测未授权存储器修改及访问 |
CN106687972A (zh) * | 2014-10-20 | 2017-05-17 | 英特尔公司 | 针对有效gadget控制转移的攻击保护 |
KR20180039830A (ko) * | 2016-10-11 | 2018-04-19 | 서울대학교산학협력단 | 코드 재사용 공격 탐지 장치 및 그 방법 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060176822A1 (en) * | 2005-02-09 | 2006-08-10 | International Business Machines Corporation | Method, system, service, and computer program product for identifying incorrect domain name to internet protocol (IP) address mappings |
US9569612B2 (en) * | 2013-03-14 | 2017-02-14 | Daniel Shawcross Wilkerson | Hard object: lightweight hardware enforcement of encapsulation, unforgeability, and transactionality |
US9292684B2 (en) | 2013-09-06 | 2016-03-22 | Michael Guidry | Systems and methods for security in computer systems |
US9646154B2 (en) * | 2014-12-12 | 2017-05-09 | Microsoft Technology Licensing, Llc | Return oriented programming (ROP) attack protection |
US10437998B2 (en) | 2015-10-26 | 2019-10-08 | Mcafee, Llc | Hardware heuristic-driven binary translation-based execution analysis for return-oriented programming malware detection |
KR101816866B1 (ko) * | 2016-08-10 | 2018-01-10 | 한국전자통신연구원 | 감시 대상 시스템의 기밀성 및 무결성 감시 장치 및 방법 |
WO2018037397A1 (en) | 2016-08-23 | 2018-03-01 | C2A-Sec, Ltd. | Data bus protection device and method |
US10885183B2 (en) * | 2017-09-28 | 2021-01-05 | International Business Machines Corporation | Return oriented programming attack protection |
US11822951B2 (en) * | 2020-06-10 | 2023-11-21 | Vmware, Inc. | Hypercall authentication in a guest-assisted virtual machine introspection (VMI) implementation |
-
2019
- 2019-11-01 CN CN201980073279.7A patent/CN112955887A/zh active Pending
- 2019-11-01 US US17/289,821 patent/US11893113B2/en active Active
- 2019-11-01 WO PCT/IL2019/051192 patent/WO2020095295A1/en unknown
- 2019-11-01 EP EP19820886.0A patent/EP3877881A1/en active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005032182A (ja) * | 2003-07-11 | 2005-02-03 | Sony Corp | プログラム、攻撃コード抽出装置およびその方法 |
CN105303104A (zh) * | 2012-01-16 | 2016-02-03 | 高通股份有限公司 | 用以禁止返回定向编程的动态执行阻止 |
CN105723348A (zh) * | 2013-12-17 | 2016-06-29 | 英特尔公司 | 使用事务性存储器检测未授权存储器修改及访问 |
US20150215335A1 (en) * | 2014-01-27 | 2015-07-30 | Webroot Inc. | Detecting and preventing execution of software exploits |
CN104268471A (zh) * | 2014-09-10 | 2015-01-07 | 珠海市君天电子科技有限公司 | 一种检测面向返程的编程攻击的方法及装置 |
CN106687972A (zh) * | 2014-10-20 | 2017-05-17 | 英特尔公司 | 针对有效gadget控制转移的攻击保护 |
CN105260659A (zh) * | 2015-09-10 | 2016-01-20 | 西安电子科技大学 | 一种基于qemu的内核级代码重用型攻击检测方法 |
KR20180039830A (ko) * | 2016-10-11 | 2018-04-19 | 서울대학교산학협력단 | 코드 재사용 공격 탐지 장치 및 그 방법 |
Non-Patent Citations (2)
Title |
---|
FEI YAN: "Baseline Is Fragile: On the Effectiveness of Stack Pivot Defense", 《2016 IEEE 22ND INTERNATIONAL CONFERENCE ON PARALLEL AND DISTRIBUTED SYSTEMS (ICPADS)》, 19 January 2017 (2017-01-19), pages 406 - 413 * |
詹珣: "针对ROP攻击的块粒度地址空间随机化防御技术的研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》, vol. 2016, no. 03, 15 March 2016 (2016-03-15), pages 138 - 219 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117237182A (zh) * | 2023-11-16 | 2023-12-15 | 武汉凌久微电子有限公司 | 一种基于批量片段处理的rop单元组处理方法 |
CN117237182B (zh) * | 2023-11-16 | 2024-02-13 | 武汉凌久微电子有限公司 | 一种基于批量片段处理的rop单元组处理方法 |
Also Published As
Publication number | Publication date |
---|---|
US20210397705A1 (en) | 2021-12-23 |
US11893113B2 (en) | 2024-02-06 |
EP3877881A1 (en) | 2021-09-15 |
WO2020095295A1 (en) | 2020-05-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9805188B2 (en) | Control flow integrity system and method | |
EP3779745B1 (en) | Code pointer authentication for hardware flow control | |
US20060064737A1 (en) | Security deployment system | |
JP2014513348A (ja) | 統合拡張ファームウェアインタフェース準拠計算装置内のシステムセキュリティデータベースおよびファームウェア格納部を変更する要求を処理するシステムおよび方法 | |
US20200380150A1 (en) | Method of encoding and decoding memory data for software security, recording medium and apparatus for performing the method | |
US20220366037A1 (en) | Domain transition disable configuration parameter | |
US20190370439A1 (en) | Secure system on chip for protecting software program from tampering, rehosting and piracy and method for operating the same | |
US11893113B2 (en) | Return-oriented programming protection | |
US11113392B2 (en) | Executable binary code insertion | |
US11847222B2 (en) | System and method for preventing unwanted bundled software installation | |
US8392714B2 (en) | Secure overlay manager protection | |
WO2017182089A1 (en) | Method for write-protecting boot code if boot sequence integrity check fails | |
WO2016126206A1 (en) | Method for obfuscation of code using return oriented programming | |
CN112948863B (zh) | 敏感数据的读取方法、装置、电子设备及存储介质 | |
CN113032737B (zh) | 软件的保护方法、装置、电子设备及存储介质 | |
CN112784261B (zh) | 用于程序运行的方法及相应的系统、计算机设备和介质 | |
US20240289434A1 (en) | Method and Apparatus for Operating a Computer | |
CN113826098A (zh) | 内核运行时随机化的装置和方法 | |
AU2018315624A1 (en) | Method and apparatus for operating a computer | |
WO2021116653A1 (en) | Intermodal calling branch instruction | |
CN110569205A (zh) | 安全系统单芯片及其操作方法 | |
CN115510441A (zh) | 一种用于实现跨进程注入的方法 | |
CN116010946A (zh) | 一种数据处理方法、装置、电子设备及存储介质 |
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 |