以模块粒度的影子堆栈违规强制制造技术

技术编号:35559053 阅读:21 留言:0更新日期:2022-11-12 15:41
以模块粒度而不是线程或进程粒度实施影子堆栈违规。在基于调用外部模块的应用二进制的代码的线程的执行期间处理异常,该应用二进制被启用以用于影子堆栈强制。该异常是由于从线程的调用堆栈弹出的返回地址与从线程的影子堆栈弹出的返回地址之间的不匹配引起的。处理异常包括:确定异常是由外部模块中的指令的执行引起的,以及确定外部模块是否被启用以用于影子堆栈强制。至少基于这些确定,在外部模块被启用以用于影子堆栈强制时,线程的执行被终止,或者当外部模块未被启用以用于影子堆栈强制时,线程被允许继续执行。线程被允许继续执行。线程被允许继续执行。

【技术实现步骤摘要】
【国外来华专利技术】以模块粒度的影子堆栈违规强制

技术介绍

[0001]在大多数现代计算架构中,操作系统针对每个线程向调用堆栈(有时称为机器堆栈或执行堆栈)分配部分系统存储器。此调用堆栈用于促进应用代码中的过程调用(例如,函数、例程等)。通常,每次在线程执行期间调用过程时,都会将新的堆栈帧添加或“推送”到该线程的调用堆栈。此堆栈帧通常由过程的“序言”创建,该过程可以保存返回调用上下文所需的状态信息(例如,过程退出后要执行的下一条指令的返回地址、保存的寄存器值等),为传递给过程的任何参数分配存储器,为过程的局部变量分配存储器等。堆栈帧中包含的特定数据以及该数据的布局取决于处理器架构、操作系统等而变化。当过程退出时,它的堆栈帧被从线程的调用堆栈中去除或“弹出”。此堆栈帧通常由过程的“结尾”去除,这可以恢复调用上下文所需的保存信息(例如,通过将保存的返回地址放置在程序计数器或指令计数器中,来恢复保存的寄存器值等),并且释放堆栈帧占用的所有调用堆栈存储器。
[0002]近来,一些操作系统和/或处理器已经包含了对影子堆栈的支持。影子堆栈是一种保护过程的存储的返回地址免受恶意或无意修改的机制,诸如当调用堆栈“缓冲器溢出”导致过程在完成时返回到其正确返回地址以外的地址时(例如,在恶意代码内,而不是调用上下文)。例如,恶意行为者可能能够通过利用过程的边界检查中的缺陷,超出分配给过程的堆栈帧中的参数和/或局部变量的存储器量进行写入、以及写入过程堆栈帧中的用于存储过程的返回地址的堆栈存储器,来完成堆栈缓冲器溢出攻击。因此,恶意行为者可以使用堆栈缓冲器溢出将过程存储的存储器地址替换为新的存储器地址(例如,在恶意行为者自己的代码中,或在从过程返回时不期望被执行的代码中)。线程的影子堆栈是次级的独立堆栈,它对于线程的正常调用堆栈“充当影子(shadow)”。当为应用的线程启用影子堆栈强制(enforcement)时,执行该应用的每个过程序言都会导致返回地址被存储在线程的调用堆栈和线程的影子堆栈两者中。另一方面,执行该应用的每个过程结尾会导致从线程的调用堆栈和线程的影子堆栈两者中加载返回地址,然后进行比较。如果调用堆栈与影子堆栈之间的返回地址的两条记录不同,则检测到影子堆栈违规并终止线程(或线程所属的进程)。

技术实现思路

[0003]目前,对整个线程(或进程)实施影子堆栈违规,而不管实际触发违规的特定代码。但是,从应用二进制执行的线程经常执行不属于应用二进制本身的代码。例如,应用经常调用不属于应用部分的模块内的过程。例如,模块可以采用共享库的形式,诸如WINDOWS下的动态链接库(DLL)或LINUX下的共享对象。这些库可以是操作系统的部分,也可以由第三方提供。因此,使用现有的影子堆栈违规处理技术,如果为应用启用了影子堆栈强制,并且如果为该应用执行的线程在执行由该应用代码调用的模块期间遇到影子堆栈违规,则整个线程(可能包括线程所属的整个进程)被终止。
[0004]此处描述的至少一些实施例以模块粒度而不是以整个线程(或进程)的粒度来实施影子堆栈违规。例如,当在线程的堆栈上检测到影子堆栈违规时,不是简单地终止线程(或其所属的进程),实施例包括新的附加检查以确定在执行被调用模块期间是否发生了影
子堆栈违规,如果是这样,为该模块是否启用了影子堆栈强制。如果在执行模块期间发生影子堆栈违规,并且如果为该模块启用影子堆栈强制,则实施例继续终止线程(或线程所属的进程)。然而,如果为该模块未启用影子堆栈强制,则一些实施例选择允许线程继续执行,而不是像典型的那样终止线程。因此,这里的实施例决定是否以模块粒度而不是线程(或进程)粒度终止线程(或它所属的进程)。
[0005]可以理解,以模块粒度而不是典型的线程/进程粒度执行影子堆栈违规,这可以增加计算机系统的整体安全性,并且提高应用利用影子堆栈技术的技术能力。例如,在许多情况下,应用作者希望将应用配置为通过应用自己的代码实施执行影子堆栈违规,但允许在应用调用的模块内执行的代码执行影子堆栈违规。在一个示例中,应用可以调用有效篡改返回地址的模块(例如,经由面向返回的编程(ROP))。例如,应用可以在防病毒应用将代码注入应用的环境中执行,这会导致应用调用这样的模块。在另一示例中,应用可以调用非恶意触发(例如,由于错误)影子堆栈违规的模块。不是由于与这些模块的交互而需要完全禁用该应用上的影子堆栈强制,本文的实施例在允许被调用模块代码的影子堆栈违规的同时(即,不终止应用)对应用的代码实施影子堆栈违规。通过这种方式,即使应用调用有意篡改返回地址或尚不兼容影子堆栈的外部模块,也可以为应用启用影子堆栈强制。因此,这里的实施例使得能够对应用使用影子堆栈强制——即使在由于应用所依赖的模块或由于应用执行的环境而以前不可能或不切实际的情况下。
[0006]一些实施例涉及以模块粒度实施影子堆栈违规的方法、系统和计算机程序产品。线程的执行在处理器处启动。这包括启动应用二进制的第一可执行代码的执行,该应用二进制调用外部模块的第二可执行代码。应用二进制启用了影子堆栈强制。至少基于处理器处的线程的执行,处理异常。该异常是由从与线程对应的调用堆栈中弹出的第一返回地址和从与线程对应的影子堆栈中弹出的第二返回地址之间的不匹配而触发的。处理异常包括确定异常是由执行外部模块的第二可执行代码中的指令引起的,以及确定外部模块是否启用了影子堆栈强制。基于已确定外部模块是否启用了影子堆栈强制,处理异常包括执行以下之一:(i)至少基于启用影子堆栈强制的外部模块,终止线程的执行,或(ii)至少基于未启用影子堆栈强制的外部模块,允许线程继续执行。
[0007]其他实施例针对在使用规则的同时以模块粒度实施执行影子堆栈违规的方法、系统和计算机程序产品。线程的执行在处理器处启动。这包括启动应用二进制的第一可执行代码的执行,该应用二进制调用外部模块的第二可执行代码。应用二进制文件启用了影子堆栈强制。至少基于处理器处的线程的执行,处理异常。异常是由从与线程对应的调用堆栈中弹出的第一返回地址和从与线程对应的影子堆栈中弹出的第二返回地址之间的不匹配触发的。处理异常包括确定异常是由执行外部模块的第二可执行代码中的指令引起的,确定外部模块是否启用影子堆栈强制,以及至少基于外部模块的身份(identity)标识规则。基于已确定外部模块是否启用了影子堆栈强制,处理异常包括执行以下之一:(i)至少基于启用影子堆栈强制的外部模块来终止线程的执行;(ii)至少基于未启用影子堆栈强制的外部模块以及指定不应允许影子堆栈违规的规则,来终止线程的执行;或(iii)至少基于未启用影子堆栈强制的外部模块以及指定应允许影子堆栈违规的规则,来允许线程继续执行。
[0008]提供该
技术实现思路
以简化形式介绍概念的选择,这些概念将在下面的详细描述中进一步描述。本
技术实现思路
并非旨在标识所要求保护的主题的关键特征或基本特征,也不旨在
用作确定所要求保护的主题的范围的帮助。
附图说明
[0009]为了描述能够获得本专利技术的上述和其他优点和特征的方式,将参照附图中示出的具体实施例对上文简要描述的本专利技术进行更具体的描述本文档来自技高网
...

【技术保护点】

【技术特征摘要】
【国外来华专利技术】1.一种计算机系统,包括:处理器;以及计算机可读介质,其上存储有计算机可执行指令,所述计算机可执行指令由所述处理器可执行,以使所述计算机系统以模块粒度实施影子堆栈违规,所述计算机可执行指令包括由所述处理器可执行以使所述计算机系统至少执行以下的指令:在所述处理器处启动线程的执行,包括启动应用二进制的第一可执行代码的执行,所述应用二进制调用外部模块的第二可执行代码,所述应用二进制已被启用以用于影子堆栈强制;以及至少基于所述线程在所述处理器处的执行,来处理异常,所述异常由从与所述线程对应的调用堆栈弹出的第一返回地址和从与所述线程对应的影子堆栈弹出的第二返回地址之间的不匹配触发,包括:确定所述异常是由所述外部模块的所述第二可执行代码中的指令的执行引起的;确定所述外部模块是否被启用以用于影子堆栈强制;以及基于已确定所述外部模块是否被启用以用于影子堆栈强制,执行以下之一:至少基于所述外部模块被启用以用于影子堆栈强制来终止所述线程的执行;或者至少基于所述外部模块未被启用以用于影子堆栈强制来允许所述线程继续执行。2.根据权利要求1所述的计算机系统,其中当所述外部模块被编译以用于影子堆栈遵从时,所述外部模块被启用以用于影子堆栈强制。3.根据权利要求1所述的计算机系统,其中当所述外部模块被编译为选择进入影子堆栈强制时,所述外部模块被启用以用于影子堆栈强制。4.根据权利要求1所述的计算机系统,其中当所述外部模块未被编译以用于影子栈遵从时,所述外部模块不被启用以用于影子堆栈强制。5.根据权利要求1所述的计算机系统,其中当所述外部模块被编译为选择退出影子堆栈强制时,所述外部模块不被启用以用于影子堆栈强制。6.根据权利要求1所述的计算机系统,其中确定所述异常是由在所...

【专利技术属性】
技术研发人员:J
申请(专利权)人:微软技术许可有限责任公司
类型:发明
国别省市:

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

1