用以禁止返回定向编程的动态执行阻止的利记博彩app

文档序号:9547486阅读:316来源:国知局
用以禁止返回定向编程的动态执行阻止的利记博彩app
【专利说明】用以禁止返回定向编程的动态执行阻止
分案串请的相关信息
本案是分案申请。该分案的母案是申请日为2013年1月5日、申请号为201380005427.4、发明名称为“用以禁止返回定向编程的动态执行阻止”的发明专利申请案。
技术领域
一个特征大体上涉及禁止软件系统中的恶意代码的操作,且更特定来说涉及实施执行阻止且默认地将存储器页标记为不可执行以便减少可用于软件系统中的返回定向编程开发的指令数目的方法和装置。
【背景技术】
执行软件的计算系统正在经历增长的大量攻击。这些攻击经常将恶意代码插入计算系统中且随后致使计算系统执行恶意代码的方式。恶意代码可执行许多不同操作,例如致使计算系统运行得比正常慢,监视计算系统上的活动,致使计算系统发射或接收用户可能不希望传送的信息,破坏持续和非持续存储器中的数据,以及使计算系统崩溃。
最近已提出有时称为返回定向编程(ROP)开发的攻击机制。一类ROP开发经常称为返回到libc攻击(或返回到libc中攻击)。返回到libc (或返回到libc中)攻击可通过两个属性识别:(a)其使用驻留在许多软件系统中的标准C库,以及(b)其直接跳到libc函数的进入点而不是其内部。ROP开发是有力的技术,其允许攻击者开发软件程序中的有效代码序列而无需将任何新的恶意代码注入到处理器的地址空间中。通过开发一些错误或弱点,攻击可得到对将从其执行指令的下一存储器地址的控制。在一个实例中,这可通过覆写保存在堆栈上的返回地址而发生。举例来说,此攻击可利用缓冲器溢出来指定到堆栈上的合法代码块的返回地址,其在合法函数返回时具有所要的效果。攻击指令指针和/或获得对下一存储器地址的控制的其它方式也是可能的。有效代码序列的小片断(经常称为小工具)可能被攻击者发现,随后串接在一起以形成新的恶意代码序列,进而避开针对代码注入的防御。
在传统ROP开发中,小代码片断是代码的以例如返回或跳转指令结束的部分。其它指令也可用作小工具终止指令。当调用函数时,在向经调用函数的返回的地址完成时,在所述调用之后的指令的地址被推送到堆栈上。因此,所述堆栈可包含许多返回地址,用于处理器跳转到经调用函数完成的时间。如果攻击可对堆栈写入信息,那么所述攻击可用恶意返回地址覆写既定返回地址。此返回地址可对应于由攻击识别的小工具中的一者。
通过操纵多个返回地址,控制调用堆栈的攻击可将多个小工具链接在一起以产生恶意代码序列,而从不需要将任何新代码注入处理器地址空间。通过这些恶意代码序列及其布置的选择,攻击可针对由小工具串组成的恶意程序而引起任意的行为。此类型的攻击是成功的,因为在大多数系统中代码和数据地址是可预测的。也就是说,攻击可在第一计算机中加载特定代码,检视第一计算机的堆栈以确定代码正如何加载,且当此代码加载在第二(目标)计算机中时使用此信息来开发返回堆栈。此攻击可大体上依赖于在不同计算机上以相同方式加载代码。
因此,需要可禁止返回定向编程攻击的稳健相应措施。

【发明内容】

本发明的实施例包含用于禁止开发堆栈和/或存储器中的脆弱性的设备、方法和计算机可读码。
提供一种在处理电路中操作的方法以通过可执行代码的执行阻止来阻碍返回定向攻击。可将存储器装置中的可执行代码的多个存储器页的第一子集的状态指示符设定为不可执行状态。举例来说,此状态指示符可用以实行驻留于所述多个存储器页的所述第一子集中的可执行代码的执行阻止。类似地,可将用于所述多个存储器页的第二子集的状态指示符设定为可执行状态,其中所述多个存储器页的第二子集包含到所述多个存储器页的第一子集中的函数的间接存根。应注意,可在所述多个存储器页的第一子集或第二子集中的至少一者的状态指示符已设定为不可执行状态之前和/或之后将可执行代码的所述多个存储器页加载到存储器装置中。可执行代码驻留的存储器装置可实施虚拟存储器。随后将函数调用引导到所述多个存储器页的所述第二子集中的对应间接存根,所述间接存根在引导来自所述多个存储器页的所述第一子集的被调用函数的执行之前修改所述多个存储器页的所述第一子集中的对应函数的所述状态指示符。间接存根可将所述多个存储器页的第一子集中的对应函数的状态指示符从不可执行状态修改为可执行状态以实现函数的执行。在完成所述函数调用后,所述方法可即刻返回到所述多个存储器页的所述第二子集中的所述对应间接存根,其中所述对应间接存根随后修改所述多个存储器页的所述第一子集中的所述对应函数的所述状态指示符。间接存根随后可将所述多个存储器页的第一子集中的对应函数的状态指示符从可执行状态修改为不可执行状态以停用函数的执行。
在一个实例中,实行执行阻止可包含当处理电路获取可执行代码用于执行时中止驻留于处于不可执行状态的存储器页中的任何可执行代码的执行。
在一个实例中,所述第一指令可为所述函数调用的部分且所述第二指令是所述对应函数的初始指令。可通过将所述第一指令绑定到所述第二指令以使得只有所述第一指令跟随有所述第二指令才不中止执行,来实施所述间接存根。
可执行代码可对应于单个应用程序和/或进程。在一些实施方案中,所述方法还可包含在完成所述函数调用后即刻冲刷所述处理电路的内部高速缓存存储器。在一些实施方案中,间接存根可在可执行代码的编译阶段或预编译阶段产生。
根据一个实例,用于所述函数的代码可驻留于所述多个存储器页的所述第一子集内的第一存储器页中。可跟踪处于所述可执行状态的所述第一存储器页的使用以确认何时所有进行中函数调用已完成执行所述第一存储器页内的对应代码。随后在完成最后进行中函数调用后即刻将所述第一存储器页的所述状态指示符设定于不可执行状态。
还可提供包括存储器装置和处理电路的处理装置。所述处理电路可经配置以:(a)将存储器装置中的可执行代码的多个存储器页的第一子集的状态指示符设定为不可执行状态;(b)将所述多个存储器页的第二子集的所述状态指示符设定为可执行状态,其中所述多个存储器页的所述第二子集包含到所述多个存储器页的所述第一子集中的函数的间接存根;和/或(C)将函数调用引导到所述多个存储器页的所述第二子集中的对应间接存根,所述间接存根在引导来自所述多个存储器页的所述第一子集的被调用函数的执行之前修改所述多个存储器页的所述第一子集中的对应函数的所述状态指示符。
根据另一方面,对应间接存根可包含限于由处理电路循序执行的至少第一指令和第二指令。如果第一指令之后是除了第二指令之外的任一指令,那么中止函数调用的执行。
提供在处理电路中操作的再一方法。产生包含多个函数的应用程序源代码。还获得和/或产生用于源代码中的每一函数的间接代码。可添加指令以致使源代码在加载到存储器中时经识别为不可执行。也可添加指令以致使间接代码在加载到存储器中时经识别为可执行。可在所述处理电路处变换所述源代码和间接代码以产生可执行代码。可执行代码可对应于单个应用程序和/或进程。间接存根可在可执行代码的编译阶段或预编译阶段产生。可编译源代码和间接代码以使得其在加载到存储器中时驻留于单独的存储器页中。在一个实例中,第一间接代码可致使在调用对应第一函数以执行时将第一函数的存储器状态指示符从不可执行状态切换到可执行状态。在另一实例中,第一间接代码可致使在对应第一函数终止执行时将第一函数的存储器状态指示符从可执行状态切换到不可执行状态。在又一实例中,与第一函数相关联的第一间接代码可适于指向第一函数,其中当产生可执行代码时,编译第一间接代码和第一函数以加载于不同存储器页中。
根据一个方面,间接代码可包含限于由处理电路循序执行的至少第一指令和第二指令。所述方法可进一步包括添加指令以致使在所述第一指令跟随有除了所述第二指令之外的任一指令的情况下中止所述间接代码的执行。
【附图说明】
图1是说明其中可实施用于禁止ROP攻击的一或多个特征的示范性操作环境、装置和/或系统的框图。
图2说明可在存储器中实施的示范性一般调用堆栈。
图3说明示范性处理电路,其可适于通过初始将可执行代码驻留的全部或大多数存储器空间标记为不可执行来实行执行阻止。
图4说明示范性处理电路的替代配置,其中数据执行阻止模块位于高速缓存存储器系统与存储器装置之间。
图5是说明适于实行增强数据执行阻止特征的处理电路的实例的框图。
图6说明用于产生恶意代码序列的受破坏调用堆栈的实例,包含串接在一起以形成返回定向编程(ROP)开发的小工具。
图7是说明在图5的处理单元的上下文中对小工具获取发生了什么的框图。
图8是说明用于禁止处理单元中的代码执行的一般示范性方法的流程图。
图9是说明在处理电路中操作的用于保护存储器免于ROP开发的另一示范性方法的流程图。
图10是说明用于保护存储器免于ROP开发的示范性方法的流程图。
图11是说明准许在需要或调用存储器区域时修改存储器区域的状态的间接层的示范性实施方案的框图。
图12是说明用于实施准许在需要或调用存储器区域时修改存储器区域的状态的间接层的方法。
图13说明用于在应用程序内实施允许修改应用程序可执行代码驻留的存储器区域的状态以保护对此些存储器区域的存取的间接层的方法。
【具体实施方式】
在以下描述中,参考附图,其中借助于图解说明而展示其中可实践本发明的特定实施例。实施例既定以充分的细节描述本发明的方面以使所属领域的技术人员能够实践本发明。在不脱离本发明的范围的情况下可利用其它实施例且可对所揭示实施例做出改变。不应在限制性意义进行以下详细描述,且本发明的范围仅由所附权利要求书界定。
术语“数据”在本文可以可互换方式使用以指代可由处理器使用的计算指令和可由处理器操作的数据。术语“数据”的使用的上下文应当使得当“数据”涉及指令时是明显的。在需要的情况下,指令可明确地称为指令或指令数据。
概述
本发明涉及用于通过在不使用时默认地将可执行和不可执行存储器页两者标记为“不可执行”来禁止开发存储器堆栈中的脆弱性的设备、方法和机器可读码。因此,处理电路可对存储器页中经标记为“不可执行”的函数/指令实施执行阻止,因此禁止对来自ROP攻击的指令的调用被执行。
根据一个特征,实施间接层,其中对可执行代码的所有函数调用均首先重定向到存根代码,其改变此些可执行代码所驻留的存储器状态。存根代码可将此可执行代码驻留的存储器区的存储器状态从默认“不可执行”状态改变为“可执行”状态。存根代码随后指向实际可执行代码。在一个实例中,此特征可在应用程序的源代码中和/或当将此应用程序编译为可执行码时实施。也就是说,间接层(例如,存根代码)可在源代码内原生地产生和/或其可在编译时间产生。
根据一个方面,处理电路可实施在“不可执行”存储器页中发现的代码/指令的执行阻止。含有可执行指令的存储器页初始加载到存储器中,且将所有页(除了用于间接层的存根代码所驻留的那些页)默认地标记为“不可执行”。从在处理电路上操作的合法应用程序起始的函数调用通过间接层(即,存根代码),其在从此些存储器页检索和/或执行指令/代码之前或同时地将存储器页的状
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1