对栈破坏利用的抑制制造技术

技术编号:15397027 阅读:50 留言:0更新日期:2017-05-19 11:32
在示例中,公开了一种用于阻止或减轻栈破坏攻击的栈保护引擎。所述栈保护引擎对用户空间进程而言可以透明地进行操作。在从父例程对子例程进行调用之后,所述栈保护引擎例如利用异或密码以及从密钥阵列中选择的密钥对栈上的返回地址进行编码。当所述子例程将控制返回到主例程之后,所述栈保护引擎对所述地址进行解码,并将控制返回。如果栈破坏攻击发生,则不对恶意返回地址适当地进行编码,从而使得当解码发生时,程序可能仅崩溃而不是将控制返回到恶意代码。

Inhibition of stack damage utilization

In the example, a stack protection engine for preventing or reducing stack destructive attacks is disclosed. The stack protection engine can transparently operate on a user space process. After calling from the parent routine, the stack protection engine encodes, for example, the return address on the stack using the XOR password and the key selected from the key array. When the subroutine returns control to the main routine, the stack protection engine decodes the address and returns the control. If the stack destruction attack occurs, the malicious return address is properly encoded, so that when the decoding occurs, the program may collapse only, rather than return the control to malicious code.

【技术实现步骤摘要】
【国外来华专利技术】对栈破坏利用的抑制相关申请的交叉引用本申请要求于2014年9月26日提交的题为“MitigationofStackCorruptionExploits(对栈破坏利用的抑制)”的美国技术申请号14/497,789的优先权,所述申请通过引用结合在此。
本申请涉及计算机安全领域,并且更具体地涉及一种用于对栈破坏利用进行抑制的栈保护引擎。
技术介绍
栈破坏利用是恶意软件(或可能疏忽的)攻击,其中,在父例程已经向子例程发出调用之后,恶意进程使用恶意进程的地址来覆写存储器栈上的返回地址。当子例程完成执行并且发出RET指令时,则控制可能传递至恶意进程,向攻击者提供对系统资源的访问。附图说明当与附图一起阅读时,将从以下详细描述中最充分地理解本公开。要强调的是,根据行业中的标准实践,各种特征并未按比例绘制,并且仅用于说明目的。实际上,为了讨论的清晰起见,可以任意地增大或者减小各种特征的尺寸。图1是根据本说明书的一个或多个示例的用户网络的网络层次图。图2是根据本说明书的一个或多个示例的计算设备的框图。图3是根据本说明书的一个或多个示例的计算操作的框图。图4是根据本说明书的一个或多个示例的计算操作的框图。图5是根据本说明书的一个或多个示例的计算操作的框图。图6是根据本说明书的一个或多个示例的计算操作的框图。图7是根据本说明书的一个或多个示例的计算操作的框图。图8是根据本说明书的一个或多个示例的计算操作的框图。图9是根据本说明书的一个或多个示例的计算操作的框图。图10是根据本说明书的一个或多个示例的计算操作的框图。图11是根据本说明书的一个或多个示例的计算操作的框图。图12是根据本说明书的一个或多个示例的计算操作的框图。图13是根据本说明书的一个或多个示例的方法的流程图。具体实施方式概述在示例中,公开了一种用于阻止或改善栈破坏攻击的栈保护引擎。栈保护引擎对用户空间进程而言可以透明地进行操作。在从父例程对子例程进行调用之后,所述栈保护引擎对栈上的返回地址进行编码,比如,利用异或密码以及从密钥阵列中选择的密钥。所述子例程将控制返回到主例程之后,所述栈保护引擎对所述地址进行解码,并将控制返回。如果发生栈破坏攻击,则没有适当地对恶意返回地址进行编码,从而使得,当发生解码时,程序可能仅崩溃而不是将控制返回到恶意代码。本公开的示例实施例以下公开提供了用于实施本公开的不同特征的许多不同实施例或示例。以下描述了部件和安排的具体示例以便简化本公开。当然,这些仅是示例并且并不旨在是限制性的。另外,本公开在各种示例中可以重复参考标号和/或字母。这种重复是出于简单和清晰的目的,并且本身并不指定所讨论的各种实施例和/或配置之间的关系。不同实施例可以有不同的优点,并且不一定需要任何实施例的任何特定优点。本说明书描述了一种用于抑制栈破坏利用的系统和方法。在一些情况下,在此公开的方法可以结合或作为综合安全方案的组成部分使用。例如,安全方案可以包括被设计成用于保护最终用户和企业的安全和隐私的反病毒程序、反恶意软件、反间谍软件和/或其他部件。但是,即使在部署了这种综合安全措施时,计算机安全也是安全架构师与试图危害安全的“黑帽”之间的永恒且不断发展的军备竞赛。安全方案可以涉及抑制包含了疏忽的安全缺陷的软件,所述安全缺陷可能本身就是有问题的或者可能为黑帽提供攻击向量。最终,在企业内(或在父母关心他们的孩子的计算机使用情况的家庭情境中),安全架构师必须防范本身无害但是违背企业或家庭政策的软件。本说明书中所公开的方法可以单独地或结合综合安全方案使用。当结合综合安全方案使用时,这些方法提供了可能必要的“故障安全”机制,例如,在直到在攻击中激活了程序的不良影响时才发现它们的“零天”利用的情况下。在其他情况下,在此公开的方法可以内置在微处理器中,从而使得栈破坏利用被内在地抑制,不论是否部署了其他安全措施。在本说明书的示例方法中,提供了一种用于拦截栈破坏利用或其他恶意软件的栈保护引擎。如在此描述的,当主例程向子例程发出调用时,可能发生栈破坏利用。当主例程调用子例程时,主例程将许多参数放置在存储器的“栈”部分上。在许多情况下,栈是后进先出(LIFO)缓冲器,返回地址被首先放置在栈上。因此,子例程可以将所有其它参数从栈中“弹出”并且在必要时根据它们来进行操作。在子例程完成其工作并且准备返回值之后,可以通过将最后一个值——返回地址从栈中弹出并且将其用作由处理器架构提供的返回(“RET”)指令的操作数而将控制返回到主例程。栈破坏恶意软件留意这种事件,并且在检测到主例程已经向子例程发出调用时,以及在子例程完成执行其进程之前,恶意软件覆写首先放置在栈上的返回地址。恶意软件所提供的新返回地址可以是由恶意软件作者提供的到恶意子例程的地址。因此,当子例程准备好将控制返回到主程序时,其将其认为是正确的返回地址的值从栈中弹出,并且然后发出RET指令,该地址作为操作数。然而,RET指令现在指向恶意软件子例程。因此,恶意软件子例程获得对恶意系统资源的访问。当父进程以提升的特权来执行时,问题可能更加严重。在那种情况下,恶意软件子例程可能从父子例程继承那些提升的特权。因此,目标栈破坏利用可能特别留意由具有提升的系统特权的进程进行的子例程调用,从而使得所述目标栈破坏利用可以继承那些特权并且具有更大的自由来对系统进行其恶意工作。根据本说明书的方法,可以阻止或改善栈破坏利用。这是通过以下方式完成的:提供后台进程,所述后台进程可以在软件或固件中提供,或者可以编码到微处理器的硬件中,在所述软件被放置到栈上之前,所述软件使用可逆编码来对返回地址进行编码。一旦子例程完成执行并且发出RET指令,就在控制返回到该地址之前对操作数中提供的返回地址进行解码。如果恶意软件在其间已经篡改了返回地址,那么对返回地址的解码将会失败。具体地,在一个实施例中,处理器不需要做出任何特别的努力来判定地址是否已经被篡改,而是仅对地址进行解码。如果地址已经被篡改,那么返回地址将是垃圾。即使垃圾地址是有效存储器地址,在具有兆字节或千兆字节可用存储器的当代系统中,垃圾地址也将极不可能地指向有效子例程或以其他方式执行一些有用的工作。因此,在没有在此所描述的栈保护引擎的情况下,栈破坏利用的最坏结果是由具有提升的特权的主例程所调用的子例程将控制返回到当时可自由访问用户的系统的恶意子例程。相比之下,具有如在此所描述的栈保护引擎的系统的最坏场景是返回地址将是垃圾,并且进程将会崩溃。另外,随着栈保护引擎变得更加流行,恶意软件作者将认识到栈破坏利用的值是最小的。因此,将存在很小的动机去写新的栈破坏利用。在存在更少的栈破坏利用的情况下,甚至在栈破坏尝试之后的崩溃危险将会大大降低。现将更具体地参照所附附图来讨论具有相关联的系统和方法的栈保护引擎,所述附图通过非限制性示例的方式公开了一个或多个实施例。图1是根据本说明书的一个或多个示例的分布式安全使能网络100的网络层次图。在图1的示例中,多个用户120操作多个计算设备110。具体地,用户120-1操作台式计算机110-1。用户120-2操作膝上型计算机110-2。最终用户120-3操作移动设备110-3。每台计算设备可以包括适当的操作系统,比如微软Windows、Linux、安卓、MacOSX、苹本文档来自技高网...
对栈破坏利用的抑制

【技术保护点】
一种计算设备,包括:存储器,所述存储器包括栈,所述栈包括返回地址位置;以及一个或多个逻辑元件,所述一个或多个逻辑元件包括栈保护引擎,所述栈保护引擎可操作用于:接收返回地址;使用密码对所述返回地址的至少一部分进行编码;以及将所述返回地址放置在所述栈的所述返回地址位置中。

【技术特征摘要】
【国外来华专利技术】2014.09.26 US 14/497,7891.一种计算设备,包括:存储器,所述存储器包括栈,所述栈包括返回地址位置;以及一个或多个逻辑元件,所述一个或多个逻辑元件包括栈保护引擎,所述栈保护引擎可操作用于:接收返回地址;使用密码对所述返回地址的至少一部分进行编码;以及将所述返回地址放置在所述栈的所述返回地址位置中。2.如权利要求1所述的计算设备,其中,所述栈保护引擎可操作用于对所述返回地址进行解码。3.如权利要求2所述的计算设备,其中,所述栈保护引擎可操作用于:在由父例程对子例程的调用之后,使用密码对所述返回地址的至少一部分进行编码,并且可操作用于:在从所述子例程返回到所述父例程之后,对所述返回地址进行解码。4.如权利要求1所述的计算设备,其中,所述栈保护引擎包括密钥阵列。5.如权利要求4所述的计算设备,其中,所述栈保护引擎可操作用于:将所述返回地址的一部分用作所述密钥阵列的索引。6.如权利要求4所述的计算设备,其中,所述栈保护引擎可操作用于:向所述密钥阵列分配伪随机密钥值。7.如权利要求6所述的计算设备,其中,所述栈保护引擎可操作用于:刷新所述密钥阵列。8.权利要求7所述的计算设备,其中,所述栈保护引擎可操作用于:根据周期性计划表来刷新所述密钥阵列。9.如权利要求4所述的计算设备,其中,所述密钥阵列相对于用户空间进程是只写的。10.如权利要求1至4中任一项所述的计算设备,其中,所述密码是异或,并且其中,编码包括从密钥阵列中选择编码密钥。11.如权利要求10所述的计算设备,其中,所述栈保护引擎可操作用于:使用异或密码对所述返回地址进行解码。12.如权利要求1至4所述的计算设备,其中,所述栈保护引擎对用户空间进程而言不可见地进行操作。13.如权利要求1至4所述的计算设备,其中,所述栈保护...

【专利技术属性】
技术研发人员:S·克罗
申请(专利权)人:迈克菲股份有限公司
类型:发明
国别省市:美国,US

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

1