首页> 中国专利> 用于防御基于返回导向编程(ROP)的攻击的方法和系统

用于防御基于返回导向编程(ROP)的攻击的方法和系统

摘要

本发明的实施例提供用于防御ROP攻击的方法和系统。所述方法包括:在二进制文件中识别可替换指令对,所述可替换指令对包含用于将第一组寄存器推动到栈存储器上的第一指令以及用于使所述第一组寄存器从所述栈存储器弹出的第二指令;产生用于所述可替换指令对的等效指令对,所述等效指令对包含用于将第二组寄存器推动到所述栈存储器上的第一等效指令以及用于使所述第二组寄存器从所述栈存储器弹出的第二等效指令,其中所述第二组寄存器包含所述第一组寄存器以及所述可替换指令对不使用的至少一个额外寄存器;以及分别用所述第一等效指令和所述第二等效指令覆盖所述第一指令和所述第二指令。

著录项

  • 公开/公告号CN106687973A

    专利类型发明专利

  • 公开/公告日2017-05-17

    原文格式PDF

  • 申请/专利权人 华为国际有限公司;新加坡管理大学;

    申请/专利号CN201680002571.6

  • 发明设计人 高德斌;

    申请日2016-02-01

  • 分类号G06F21/52;

  • 代理机构北京龙双利达知识产权代理有限公司;

  • 代理人秦卫中

  • 地址 新加坡樟宜商务园中央1#03-03

  • 入库时间 2023-06-19 02:09:24

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-11-22

    授权

    授权

  • 2017-06-09

    实质审查的生效 IPC(主分类):G06F21/52 申请日:20160201

    实质审查的生效

  • 2017-05-17

    公开

    公开

说明书

技术领域

本发明大体上涉及返回导向编程(Return Oriented Programming,ROP)缓解策略,且更确切地说,涉及用于防御自动编码机/高级精简指令集计算(Reduced InstructionSet Computing,RISC)机器(Advanced Reduced Instruction Set Computing Machine,ARM)架构上运行的移动计算机系统中的基于ROP的攻击的方法和系统。

背景技术

ROP是使攻击者能够在不注入代码的情况下实现恶意目标的高级软件开发技术。基于ROP的攻击技术广泛用于软件和系统开发中以避开不可执行的存储和代码签名等现代安全防御技术。基于ROP的攻击技术可以应用于各种计算机系统中,例如,在X86平台上操作的桌上型计算机系统和在ARM架构上运行的移动计算机系统,例如,苹果手机操作系统(iPhone operating system,iOS)和谷歌安卓操作系统。

已提出多种缓解策略来保护X86平台免受基于ROP的攻击,例如,内存地址随机化机制(Address Space Layout Randomization,ASLR)和指令随机化。然而,不存在能够应用于在ARM架构上运行的移动计算机系统的有效ROP缓解策略。

发明内容

为了提供一种用于防御计算机系统上的基于ROP的攻击的有效ROP缓解策略,尤其是用于防御ARM架构上运行的移动计算机系统上的基于ROP的攻击的有效ROP缓解策略,本发明的实施例提供一种用随机化等效指令对执行指令对上的指令替换的新颖指令随机化技术。

根据本发明的一个方面,提供一种用于防御ROP攻击的方法。所述方法包括:

从二进制文件中识别可替换指令对,所述可替换指令对包含用于将第一组寄存器推动到栈存储器上的第一指令以及用于使第一组寄存器从栈存储器弹出的第二指令,其中第一组寄存器包含至少一个通用寄存器;

产生用于可替换指令对的等效指令对,所述等效指令对包含用于将第二组寄存器推动到栈存储器上的第一等效指令以及用于使第二组寄存器从栈存储器弹出的第二等效指令,其中第二组寄存器包含第一组寄存器以及可替换指令对不使用的至少一个额外寄存器;以及

分别用第一等效指令和第二等效指令覆盖第一指令和第二指令。

在本发明的一个实施例中,通过以下操作产生等效指令对:基于用于可替换指令对的可选通用寄存器组确定用于可替换指令对的替代指令对组;以及从所确定的替代指令对组中选择随机替代指令对作为等效指令对。在本发明的另一实施例中,通过以下操作产生等效指令对:从用于可替换指令对的可选通用寄存器组中选择至少一个额外寄存器;以及基于选定的至少一个额外寄存器产生等效指令对。在本发明的这两个实施例中,可选通用寄存器组根据可替换指令对的指令类型来确定并且可替换指令对不使用。

在本发明的一个实施例中,二进制文件包括在将加载到计算机系统中的压缩应用文件中,所述方法进一步包括:解开压缩应用文件以定位来自解开后的应用文件的二进制文件;以及在通过用所产生的等效指令对覆盖二进制文件中所识别的可替换指令对来修改解开后的应用文件之后,重新打包修改后的应用文件。

在本发明的另一实施例中,在从二进制文件中识别可替换指令对之前,所述方法进一步包括:如果将映射到存储器中的文件具有二进制格式,那么确定将在文件映射过程期间映射到存储器中的文件为二进制文件;以及将二进制文件映射到存储器中。

根据本发明的另一方面,提供一种用于防御ROP攻击的系统。所述系统包括:处理器以及存储器,存储器与处理器可通信地耦合,用于存储可由处理器执行以致使处理器执行以下操作的指令:

从二进制文件中识别可替换指令对,所述可替换指令对包含用于将第一组寄存器推动到栈存储器上的第一指令以及用于使第一组寄存器从栈存储器弹出的第二指令,其中第一组寄存器包含至少一个通用寄存器,

产生用于可替换指令对的等效指令对,所述等效指令对包含用于将第二组寄存器推动到栈存储器上的第一等效指令以及用于使第二组寄存器从栈存储器弹出的第二等效指令,其中第二组寄存器包含第一组寄存器以及可替换指令对不使用的至少一个额外寄存器,以及

分别用第一等效指令和第二等效指令覆盖第一指令和第二指令。

根据本发明的另一方面,提供一种非暂时性计算机可读存储媒体,其具有存储于其上的指令,所述指令如果由计算机系统执行将致使计算机系统执行上述用于防御ROP攻击的方法。

通过本发明的实施例中提供的ROP缓解策略,在ARM架构上运行的应用程序和系统能够成功地免受基于ROP的攻击。不需要将额外的指令和控制流传递引入到二进制文件中,因此指令的长度和相关二进制文件的大小将保持不变,且不需要从别处恢复控制流。

附图说明

将参考附图详细描述本发明,在附图中:

图1是说明根据本发明第一实施例的用于防御基于ROP的攻击的方法的流程图;

图2A说明根据第一实施例的一个实例的从其识别可替换指令对的二进制文件的一部分;

图2B说明其中用等效指令对覆盖图2A中的可替换指令对的二进制文件的一部分。

图3A示出根据第一实施例的另一实例的在可替换指令对之间插入的基于sp的寻址指令;

图3B示出在用等效指令对覆盖图3A中的可替换指令对之后的修改后的基于sp的寻址指令;

图3C示出图3B中的基于sp的寻址指令中的偏移值修改;以及

图4是说明根据本发明第二实施例的用于防御基于ROP的攻击的方法的流程图。

具体实施方式

在以下描述中,阐述许多特定细节以便提供对本发明的各种说明性实施例的透彻理解。然而,本领域熟练技术人员将理解,可以在不具有这些具体细节中的一些或全部的情况下实践本发明的实施例。应理解,本文中所用的术语仅仅是出于描述特定实施例的目的,并且并不打算限制本发明的范围。在附图中,相同参考标号在若干视图中始终指代相同或相似功能性或特征。

本发明的实施例提供一种用于计算机系统的ROP缓解策略,所述计算机系统具体来说是在ARM架构上运行的移动计算机系统。此策略能够显著减小计算机系统上的基于ROP的攻击的可能性。

图1是说明根据本发明第一实施例的防御基于ROP的攻击的方法100的流程图。在此实施例中,方法100应用于重写目标应用程序以供移动计算机系统执行,以防止对手成功地在此目标应用程序上执行基于ROP的攻击。

在块101中,解开目标应用程序以定位其中的至少一个二进制文件。

在实施例的一个实例中,移动计算机系统配备有谷歌安卓操作系统,目标应用程序是安卓应用程序,例如,命名为FEReader的电子书阅读器。在此实例中,使用用于解开和重新打包安卓应用程序的安卓安装包(Android PacKage,APK)工具来解开目标应用程序。应注意,在实施例的其它实例中,可使用其它工具来解开目标应用程序,这取决于目标应用程序的类型。

在块102中,从二进制文件中识别可替换指令对。可替换指令对包含用于将第一组寄存器推动/存储到栈存储器上的PUSH指令以及用于使第一组寄存器从栈存储器弹出/移除的POP指令。

参考图2A,其说明根据第一实施例的一个实例的从其识别可替换指令对的二进制文件的一部分。如图2A中示出,在换行符共享库中识别可替换指令对,其中PUSH指令是set_linebreaks_utf16:000015cc push{r4,r5,r6,r7,lr};POP指令是00001600 pop{r4,r5,r6,r7,pc}。在前述两个指令中,r4、r5、r6、r7是通用寄存器;lr是当PUSH指令完成时专用于保持存储器地址恢复的链接寄存器;pc是程序计数器,其也是专用寄存器,用于保持将被执行的下一指令的存储器地址。根据前述PUSH指令和POP指令,在此实例中,第一组寄存器包含将通过此可替换指令对推动和弹出的四个通用寄存器r4、r5、r6、r7。

应注意,由可替换指令对使用的通用寄存器的数目可以变化并且由可替换指令对使用的第一组寄存器包含至少一个通用寄存器。

在块103中,产生将用于覆盖可替换指令对的等效指令对。等效指令对包含等效PUSH指令和等效POP指令。等效PUSH指令用于将第二组寄存器推动/存储到栈存储器中;等效POP指令用于使第二组寄存器从栈存储器弹出/移除。第二组寄存器包含第一组寄存器以及不在第一组寄存器内且选自可选通用寄存器组的至少一个额外寄存器。

根据可替换指令对的指令集类型确定可选通用寄存器组。具体来说,可选通用寄存器组包含可用于可替换指令对的指令集类型的通用寄存器中的至少一个,通用寄存器r0和被可替换指令对使用的那些寄存器除外。通常,可选通用寄存器组包含可用于可替换指令对的指令集类型的所有通用寄存器,通用寄存器r0和被可替换指令对使用的那些寄存器除外。如果可替换指令对的指令集类型是THUMB指令集,那么总共存在八个可用的通用寄存器r0至r7。如果可替换指令对的指令集类型是ARM指令集,那么总共存在十二个可用的通用寄存器r0至r11。

在此实施例中,可以通过以下操作产生等效指令对:根据可选通用寄存器组产生用于可替换指令对的替代指令对组;随后从替代指令对组中选择随机指令对作为等效指令对。应注意,替代指令对组包含至少一个替代指令对。

或者,可以通过以下操作产生等效指令对:从可选通用寄存器组中选择至少一个额外寄存器,随后使用选定的额外寄存器产生等效指令对。

在如图2A中示出的实例中,可替换指令对的指令集类型是THUMB指令集,因此可用的通用寄存器包含r0至r7。由于r4至r7已被可替换指令对使用,因此可以从r1至r3中选择至少一个额外寄存器。表1展出在图2A的实例中的用于可替换指令对的所有替代指令对。

表1

在块104中,用所产生的等效指令对覆盖可替换指令对。具体来说,用所产生的等效指令对的等效PUSH指令覆盖可替换指令对的PUSH指令,所述PUSH指令用于将第一组寄存器推动/存储到栈存储器上,所述等效PUSH指令用于将第二组寄存器推动/存储到栈存储器中。用所产生的等效指令对的等效POP指令覆盖可替换指令对的POP指令,所述POP指令用于使第一组寄存器从栈存储器弹出/移除,所述等效POP指令用于使第二组寄存器从栈存储器弹出/移除。参考图2B,在此实例中,等效指令对包含:push{r1,r2,r3,r4,r5,r6,r7,lr}和pop{r1,r2,r3,r4,r5,r6,r7,pc}用于覆盖图2A中示出的可替换指令对,即,PUSH指令:push{r4,r5,r6,r7,lr}和POP指令:pop{r4,r5,r6,r7,pc}。

在块105中,确定是否在可替换指令对之间,即,在PUSH指令与POP指令之间,插入基于栈指针(stack pointer based,基于sp)的寻址指令。如果在可替换指令对之间插入基于sp的寻址指令,那么流程次序进行到块106;如果不在可替换指令对之间插入基于sp的寻址指令,那么流程次序进行到块107。

在块106中,基于用于可替换指令对中的额外寄存器的数目以及用于可替换指令对中的每个额外寄存器的长度来修改基于sp的寻址指令中的偏移值。

具体来说,在产生用于可替换指令对的等效指令对的步骤中,如果使用n个额外寄存器并且额外寄存器中的每一个具有m字节的长度,那么基于sp的寻址指令中的偏移值将修改为:原始偏移值+m×n。在图3A至3C中示出实施例的一个实例。参考图3A,在可替换指令对之间,即,在PUSH指令push{r4,lr}与POP指令pop{r4,pc}之间,插入基于sp的寻址指令“ldr r1,[sp,#0xC]”。如图3B和3C中示出,仅使用具有4字节长度的一个通用寄存器r6来产生覆盖可替换指令对的等效指令对。因此,基于sp的寻址指令中的偏移值被修改为#0x10=#0xC+#0x4×1。

在块107中,重新打包修改后的目标应用程序。

在第一实施例中,用于防御基于ROP的攻击的方法通过选择待推动和弹出的至少一个额外寄存器而引入指令随机化技术。在目标应用程序的装载过程期间执行此指令随机化技术。在其它实施例中,可以在目标应用程序的执行过程期间执行此指令随机化技术。

根据本发明的第二实施例,在系统的文件映射过程期间执行指令随机化技术。为了实现此,应对系统的文件映射过程进行修改以启用指令随机化能力。

图4说明根据本发明的第二实施例的用于防御基于ROP的攻击的方法400。

在块401中,检查将映射到计算机系统的存储器中的文件以确定所述文件是否为二进制文件。如果待映射文件是二进制文件,那么在将二进制文件映射到存储器中之后,流程次序进行到块402;如果待映射文件不是二进制文件,那么在将文件映射到存储器中之后,流程次序进行到块407,即,继续原始文件映射过程。

在块402中,在二进制文件中识别可替换指令对。可替换指令对包含用于将第一组寄存器推动/存储到栈存储器上的PUSH指令以及用于使第一组寄存器从栈存储器弹出/移除的POP指令。

此步骤类似于在本发明的第一实施例中的块102中示出的步骤,不同之处包含:在第二实施例中,在存储器中的文件图像上执行可替换指令对的识别,而在第一实施例中,在文件系统中的文件上执行可替换指令对的识别。

在块403中,产生将用于覆盖可替换指令对的等效指令对。

在块404中,用等效指令对覆盖可替换指令对。

在块405中,确定是否在可替换指令对之间,即,在PUSH指令与POP指令之间,插入基于栈指针(stack pointer based,基于sp)的寻址指令,如果在可替换指令对之间插入基于sp的寻址指令,那么流程次序进行到块406;如果不在可替换指令对之间插入基于sp的寻址指令,那么流程次序进行到块407。

在块406中,基于用于等效指令对中的至少一个额外寄存器的数目以及用于等效指令对中的每个额外寄存器的长度来修改基于sp的寻址指令中的偏移值。

在第二实施例中,将偏移值的修改更新到存储器。而在第一实施例中,将偏移值的修改更新到目标应用程序中的二进制文件。

块403至块406中示出的步骤中的技术和策略类似于块203至块206中示出的那些技术和策略,因此在第二实施例中不再进行详细描述。

在块407中,继续原始文件映射过程。

上述用于防御基于ROP的攻击的方法可以通过计算机系统执行,所述计算机系统包括处理器以及存储器,存储器与处理器可通信地耦合,用于存储可由处理器执行以致使处理器执行以下操作的指令:在二进制文件中识别可替换指令对,所述可替换指令对包含用于将第一组通用寄存器推动到栈存储器上的第一指令以及用于使第一组通用寄存器从栈存储器弹出的第二指令,其中第一组通用寄存器包含至少一个通用寄存器;产生用于可替换指令对的等效指令对,所述等效指令对包含用于将第二组通用寄存器推动到栈存储器上的第一等效指令以及用于使第二组通用寄存器从栈存储器弹出的第二等效指令,其中第二组通用寄存器包含第一组通用寄存器以及可替换指令对不使用的至少一个额外寄存器;以及用所产生的等效指令对覆盖可替换指令对。

根据本发明的一个实施例,当产生等效指令对时,处理器进一步用于根据用于可替换指令对的可选通用寄存器组确定用于可替换指令对的替代指令对组,并且随后从所确定的替代指令对组中随机选择替代指令对作为等效指令对。根据本发明的另一实施例,当产生等效指令对时,处理器进一步用于从用于可替换指令对的可选通用寄存器组中选择至少一个额外寄存器,并且随后基于选定的至少一个额外寄存器产生等效指令对。

在前述两个实施例中,可选通用寄存器组根据可替换指令对的指令类型来确定并且可替换指令对不使用,如果可替换指令对是ARM指令对,那么可选通用寄存器组包含可替换指令对不使用的r1至r11中的至少一个。如果可替换指令对是Thumb指令对,那么可选通用寄存器包含可替换指令对不使用的r1至r7中的至少一个。

根据本发明的另一实施例,如果处理器确定在可替换指令对之间插入基于sp的寻址指令;那么处理器进一步用于基于用于等效指令对中的至少一个额外寄存器的数目以及每个额外寄存器的长度来修改基于sp的寻址指令中的偏移值。

在本发明的一个实施例中,二进制文件包括在将加载到计算机系统中的压缩应用文件中,处理器进一步用于:

解开压缩应用文件以定位来自解开后的应用文件的二进制文件;以及在通过用所产生的等效指令对覆盖二进制文件中所识别的可替换指令对来修改解开后的应用文件之后,重新打包修改后的应用文件。

在本发明的另一实施例中,处理器进一步用于:在从二进制文件中识别可替换指令对之前,如果将映射到存储器中的文件具有二进制格式,那么确定将在计算机系统的文件映射过程期间映射到存储器中的文件为二进制文件;以及将二进制文件映射到存储器中。

参考在ARM架构上运行的移动计算机系统描述了前述说明。然而,应了解,本发明的实施例还适合应用于其它平台/操作系统,例如,X86平台,甚至应用于其它安全方向,例如,水印。

如从上文将了解,本发明的实施例提供一种用于防御针对ARM架构上运行的移动计算机系统的基于ROP的攻击的有效方法。本发明的实施例中所揭示的方法能够由想要保护目标应用程序和移动计算机系统免受基于ROP的攻击的任何当事人使用,例如,应用程序开发者、经销商、移动系统开发者以及应用程序的终端用户。对于应用程序经销商,例如,Google Play,其可以在应用程序被下载到用户装置中时执行本发明的方法。对于移动系统开发者,其可以在系统的文件映射过程期间引入用于执行所述方法的若干行额外代码。对于应用程序的终端用户,其可以安装将在目标应用程序的装载过程期间启用本发明的方法的单独应用程序。

本发明的实施例引入一种指令随机化技术,所述指令随机化技术在PUSH指令和POP指令等指令对上执行指令替换,并且用随机化等效指令对覆盖可替换指令对。通过此指令随机化技术,在ARM架构上运行的应用程序和系统能够成功地免受基于ROP的攻击。此外,此指令随机化技术不将额外指令或额外控制流传递引入到二进制文件中,因此指令的长度和二进制文件的大小将保持不变。另外,参考本发明的前述实施例,栈存储器的布局和可替换指令对的内容将同时改变,因此将不需要其它性能代价。

应理解,上文描述的实施例和特征应被视为示例性的且不具有限制性。例如,上述实施例可以彼此组合使用。本领域熟练技术人员根据对本说明书的考量和对本发明的实践将清楚许多其它实施例。因此,本发明的范围应该通过参考所附权利要求书以及此类权利要求书所授予的等效物的完整范围来确定。此外,出于描述明确性的目的使用了某些术语且这些术语不会限制本发明的所揭示实施例。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号