用于硬件流控制的代码指针验证的制作方法

文档序号:12513037阅读:171来源:国知局
用于硬件流控制的代码指针验证的制作方法与工艺

软件实施错误,例如遗漏或不正确输入验证,可导致越界缓冲区存取和存储器损坏。这些实施错误可导致软件在正常条件下变得不稳定或最终失效。然而,当输入被意图攻击计算机系统的恶意方操控时,攻击者可利用这些存储器损坏和溢出错误来改变软件代码的预期行为,并执行由攻击者确定的代码或功能性。

攻击者通常通过盖写存储器中的数据结构(例如返回地址、函数指针或虚表指针)取得对执行的控制。在大型和传统的代码库中寻找和修理全部可利用的存储器损坏错误并不总是可能的。因此,许多计算机系统含有被称作“利用减轻机制”的一般防御特征,其有效地对抗攻击者用来利用这些错误取得对目标计算机系统的控制和/或破坏目标计算机系统的众所周知的技术。

通常包含于计算机系统中的利用减轻机制的一些实例包含:数据执行防止(DEP)、堆栈保护(SP)和地址空间布局随机化(ASLR)。在DEP技术中,全部代码区被标记为只读,并且全部可写入区是不可执行的。通常,代码区的只读特性和可写入区的不可执行特性是通过处理器的存储器管理单元(MMU)强制执行。此技术可防止攻击者将其自己的代码放入数据区中并将执行流引导到所述代码。在SP方法中,编译程序实施用于检测堆栈上的缓冲区溢出的功能。由于就在本地阵列后的堆栈上经常存在返回地址或所保存的链接寄存器,所以基于堆栈的缓冲区溢出会很容易被利用。攻击者可致使本地阵列溢出并盖写返回地址/链接寄存器,且重新引导软件的执行流。许多常规堆栈保护实施方案将保护值插入到函数序言中的堆栈上,并且在从所述函数返回之前,检查所述值的修改。如果已发生缓冲区溢出,那么保护值连同返回地址将已经被盖写,因为保护值位于缓冲区与返回地址之间的堆栈中。保护值必须是随机和/或不可预测的值,以确保SP方法的安全。在ASLR方法中,应用程序的存储器布局可在每次执行时随机化。举例来说,可随机确定用于代码、静态数据、堆栈和堆的基地址。此方法使得利用难以进行,因为攻击者需要预测他们需要瞄准/操控以进行成功攻击的代码/数据/指针的位置。



技术实现要素:

根据本发明的用于强制执行处理器中的软件程序的流控制的实例方法包含:分析所述软件程序的程序代码,以识别所述程序代码中的代码指针;基于所述代码指针产生验证标记;以及用所述验证标记来修改所述程序代码中的代码指针,以产生带标记的代码指针。

此类方法的实施方案可包含以下特征中的一或多者。用所述验证标记来修改程序代码中的代码指针以产生带标记的代码指针进一步包含通过将掩码应用于所述验证标记和所述代码指针来产生所述带标记的代码指针。通过将掩码应用于所述验证标记和所述代码指针来产生带标记的代码指针进一步包含:使用所述掩码从所述验证标记选择第一组位;以及用所述第一组位来代替所述代码指针的对应于所述第一组位的第二组位,以产生带标记的代码指针。识别所述程序代码中的多个,且识别所述程序代码中的所述多个代码指针共用的标记位以确定掩码。验证所述带标记的代码指针,响应于所述验证标记已更改而执行错误处置,且响应于验证标记尚未更改而执行与所述代码指针相关联的地址处的程序指令。验证所述带标记的代码指针包含使用所述掩码从所述带标记的代码指针确定经恢复的代码指针值。使用所述掩码从所述带标记的代码指针提取嵌入的验证标记值。至少部分地基于所述经恢复的代码指针和上下文值来产生经恢复的验证标记。使用所述掩码从所述经恢复的验证标记提取带掩码的标记值。将所述带掩码的标记值与所述嵌入的验证标记值进行比较,以确定所述带标记的代码指针是否已更改。

根据本发明的用于强制执行处理器中的软件程序的流控制的实例设备包含:用于分析所述软件程序的程序代码来识别所述程序代码中的代码指针的装置;用于基于所述代码指针来产生验证的装置;以及用于用所述验证标记来修改所述程序代码中的所述代码指针以产生带标记的代码指针的装置。

此设备的实施方案可包含以下特征中的一或多者。所述用于用所述验证标记来修改程序代码中的代码指针以产生带标记的代码指针的装置包含用于通过将掩码应用于所述验证标记和所述代码指针来产生所述带标记的代码指针的装置。所述用于通过将掩码应用于所述验证标记和所述代码指针来产生所述带标记的代码指针的装置进一步包含:用于使用所述掩码从所述验证标记选择第一组位的装置;以及用于用所述第一组位来代替所述代码指针的对应于所述第一组位的第二组位以产生所述带标记的代码指针的装置。用于识别程序代码中的多个代码指针的装置;以及用于识别所述程序代码中的所述多个代码指针共用的标记位以确定所述掩码的装置。用于验证所述带标记的代码指针的装置;用于响应于所述验证标记已更改而执行错误处置的装置;以及用于响应于所述验证标记尚未更改而执行与所述代码指针相关联的地址处的程序指令的装置。用于使用所述掩码从所述带标记的代码指针确定经恢复的代码指针值的装置。

根据本发明的用于强制执行处理器中的软件程序的流控制的实例设备包含处理器,其经配置以:分析所述软件程序的程序代码,以识别所述程序代码中的代码指针;基于所述代码指针产生验证标记;以及用所述验证标记来修改所述程序代码中的代码指针,以产生带标记的代码指针。

此设备的实施方案可包含以下特征中的一或多者。经配置以用所述验证标记来修改所述程序代码中的代码指针以产生所述带标记的代码指针的所述处理器进一步经配置以通过将掩码应用于所述验证标记和所述代码指针来产生所述带标记的代码指针。经配置以通过将掩码应用于所述验证标记和所述代码指针来产生所述带标记的代码指针的所述处理器进一步经配置以:使用所述掩码从所述验证标记选择第一组位;且用所述第一组位来代替所述代码指针的对应于所述第一组位的第二组位,以产生所述带标记的代码指针。所述处理器进一步经配置以识别所述程序代码中的多个代码指针,且识别所述程序代码中的所述多个代码指针共用的标记位以确定所述掩码。所述处理器进一步经配置以验证所述带标记的代码指针;响应于所述验证标记已更改而执行错误处置;以及响应于所述验证标记尚未更改而执行与所述代码指针相关联的地址处的程序指令。经配置以验证所述带标记的代码指针的所述处理器进一步经配置以使用所述掩码从所述带标记的代码指针确定经恢复的代码指针值。所述处理器进一步经配置以使用所述掩码从所述带标记的代码指针提取嵌入的验证标记值。

根据本发明的一种在其上储存有用于强制执行处理器中的软件程序的流控制的计算机可读指令的非暂时性计算机可读媒体包含经配置以致使计算机进行以下操作的指令:分析所述软件程序的程序代码以识别所述程序代码中的代码指针;基于所述代码指针产生验证标记;以及用所述验证标记来修改所述程序代码中的代码指针,以产生带标记的代码指针。

经配置以致使所述计算机用所述验证标记来修改所述程序代码中的代码指针以产生带标记的代码指针的所述指令进一步包括:经配置以致使所述计算机通过将掩码应用于所述验证标记和所述代码指针来产生所述带标记的代码指针。经配置以致使所述计算机通过将所述掩码应用于所述验证标记和所述代码指针来产生所述带标记的代码指针的所述指令进一步包括经配置以致使所述计算机进行以下操作的指令:使用所述掩码从所述验证标记选择第一组位;以及用所述第一组位来代替所述代码指针的对应于所述第一组位的第二组位,以产生带标记的代码指针。经配置以致使所述计算机进行以下操作的指令:识别所述程序代码中的多个代码指针;且识别所述程序代码中的所述多个代码指针共用的标记位以确定掩码。经配置以致使所述计算机进行以下操作的指令:验证所述带标记的代码指针;响应于所述验证标记已更改而执行错误处置;且响应于所述验证标记尚未更改而执行与所述代码指针相关联的地址处的程序指令。经配置以致使所述计算机验证所述带标记的代码指针的所述指令进一步包括:经配置以致使所述计算机使用所述掩码从所述带标记的代码指针确定经恢复的代码指针值的指令。经配置以致使所述计算机使用所述掩码从所述带标记的代码指针提取嵌入的验证标记值的指令。

附图说明

图1是其中可实施本文所论述的代码指针验证技术的实例计算机系统的功能框图。

图2是用于代码指针验证的实例过程的流程图。

图3是用于根据图3中说明的代码指针验证过程来验证已受保护的代码指针的实例过程的流程图。

图4是用于产生验证标记的实例过程的流程图。

图5是用于用验证标记来修改代码指针以产生带标记的代码指针的实例过程的流程图。

图6是用于根据图3中说明的代码指针验证过程来验证已受保护的代码指针的实例过程的流程图。

图7是用于产生掩码的实例过程的流程图。

图8是说明用于为图4中说明的代码指针加标记的过程的实例的图。

图9是说明用于验证图5中说明的带标记的代码指针的过程的实例的图。

具体实施方式

提供用于在硬件中实施代码指针验证以防止恶意或不良写入的译码修改将由计算机系统的处理器执行的软件代码中的代码指针的技术。本文所揭示的技术可用以为软件代码中的代码指针加标记。所述标记可用以在处理器执行到与所述代码指针相关联的地址的跳转或分支指令之前,将代码指针验证为到可执行码的有效指针。如果带标记的代码指针的验证失败,那么所述处理器可经配置以执行可用以停止执行所述程序代码的错误处置程序,因而阻止可由已经修改或损坏的代码指针指向的任何恶意代码的执行。

可以使得攻击者难以伪造有效标记的方式来为代码指针加标记。可创建表示代码中可通过软件代码的逻辑流中的间接跳转或分支到达的仅有位置的验证标记。在一些实施方案中,所述标记可为使用仅处理器知晓的私用密钥来加密的密码学验证标记,从而使得更改所述标记更难。

本文所揭示的技术可帮助防止已通过存储器损坏错误盖写的代码指针无意中被用作间接跳转或调用的目标。

实例硬件

图1是可用以实施本文所揭示的各种技术的计算机系统100的框图。计算机系统100可用以至少部分地实施图2到9中所说明的过程。

计算机系统100包括通用处理器110、无线接口125、网络接口165和非暂时性存储器160,其通过总线115彼此连接。无线接口125可包含无线接收器、发射器、收发器和/或其它元件,其使计算机系统100能够使用与一或多个无线广域网(WWAN)系统、无线局域网(WLAN)和/或可用以发送和/或接收数据的其它类型的无线通信协议相关联的无线通信协议来发送和/或接收数据。无线接口125通过线132连接到天线134以用于将通信发送到经配置以使用无线通信协议通信的装置,或从所述装置接收通信。除图1中所说明的收发器之外或代替于所述收发器,计算机系统100可包含一或多个收发器,其经配置以使用其它无线协议来接收和/或发送通信。

网络接口165可经配置以将计算机系统100连接到一或多个有线网络连接。网络接口165可经配置以允许计算机系统100经由一或多个有线数据连接发射和接收数据。

处理器110可为智能装置,例如个人计算机中央处理单元(CPU)(例如公司或所制作的那些中央处理单元)、微控制器、专用集成电路(ASIC)等。存储器160是可包含随机存取存储器(RAM)、只读存储器(ROM)或其组合的非暂时性存储装置。存储器160可存储含有用于控制处理器110以执行本文中所描述功能的指令的处理器可读、处理器可执行软件代码(尽管所述描述可解读所述软件执行所述功能)。所述软件可通过经由网络连接下载而加载到存储器160上,从磁盘上载等。此外,软件可能不可直接执行,例如需要在执行之前编译。

存储器160中的软件经配置以使处理器110能够执行各种动作,包含实施用于保护本文所论述的代码指针验证技术的各种技术。

处理器110可包含一或多个寄存器,其可用以存储用于本文所揭示的代码指针验证技术的配置数据。举例来说,处理器110包含掩码寄存器110-A、值寄存器110-B、旗标寄存器110-C和上下文寄存器110-C。掩码寄存器110-A可用以存储用以为代码指针加标记且验证带标记的代码指针的当前掩码的掩码位。图8和9中说明此类掩码数据(掩码810)的实例,图7中说明用于产生此类掩码的实例过程。所述值寄存器110-B可用以存储当带标记的代码指针去标记以验证所述指针且恢复所述代码指针的原始值时使用的当前值的值。图8和9中说明此类值数据(值805)的实例,图7中说明用于产生所述值数据的实例过程。旗标寄存器110-C可经配置以含有可用以启用和/或停用本文所揭示的代码指针验证和/或堆栈指针保护技术的旗标。上下文寄存器110-C可用以含有与处理器110正执行的程序代码相关联且用于产生与程序代码的代码指针相关联的验证标记的当前上下文值。图8和9中说明此类背景数据的实例(上下文值825)。其它过程,例如图2到6中说明的那些过程,可存取和/或修改存储在寄存器110-A、110-B、110-C和110-D中的值。其它实施方案中所包含的寄存器的数目可变化。

处理器110可提供:用于分析所述软件程序的程序代码以识别所述程序代码中的代码指针的装置;用于基于所述代码指针产生验证标记的装置;以及用于用所述验证标记来修改所述程序代码中的代码指针以产生带标记的代码指针的装置。处理器110还可提供用于通过将掩码应用于所述验证标记和所述代码指针来产生所述带标记的代码指针的装置。处理器110还可提供以下各项来提供用于通过将掩码应用于所述验证标记和所述代码指针来产生所述带标记的代码指针的装置:用于使用所述掩码从所述验证标记选择第一组位的装置;以及用于用所述第一组位来代替所述代码指针的对应于所述第一组位的第二组位以产生所述带标记的代码指针的装置。处理器110还可提供:用于识别所述程序代码中的多个代码指针的装置;以及用于识别所述程序代码中的所述多个代码指针共用的标记位以确定所述掩码的装置。处理器110还可提供:用于验证所述带标记的代码指针的装置;用于响应于验证标记已更改而执行错误处置的装置;以及用于响应于所述验证标记尚未更改而执行与所述代码指针相关联的地址处的程序指令的装置。处理器110还可提供用于使用所述掩码从所述带标记的代码指针确定经恢复的代码指针值的装置。

实例实施方案

图2是可用以实施本文所揭示的代码指针验证技术的用于强制执行处理器中的软件程序的流控制的过程的流程图。图2中所说明的过程可使用图1中所说明的计算机系统100来实施。图1中所说明的实例计算机系统100提供其中可实施图2中所说明的过程的一个计算机系统的一个实例,并且图2中所说明的过程可通过具有与图1中所说明的实例不同的架构的计算机系统的处理器实施。

可分析软件程序的程序代码,以识别所述程序代码中的代码指针(阶段205)。待分析的程序代码可为源代码或可为二进制代码。所述代码指针可表示到可从程序代码执行的流的跳转点或分支点到达的程序代码的指令的地址。恶意方可尝试通过用与和代码指针最初与之相关联的一个指令不同的指令相关联的地址修改所述代码指针,来获得对所述程序代码的流的控制。图1中说明的过程开始将所述程序代码中的代码指针识别为用于减轻例如上文所论述的那些的存储器损坏利用的技术。

图1中说明的实例过程包含识别对其强制执行流控制的程序代码中的代码指针。虽然图1中所说明的实例论述识别一个代码指针,图1中所说明的所述过程可适于识别包含于所述程序代码中的多于一个代码指针。处理器110可经配置以在处理器110执行所述程序代码之前,识别所述程序代码中的代码指针或代码指针。举例来说,处理器110可经配置以在处理器110加载程序代码时且在执行动态或静态链接时,识别所述程序代码中的代码指针。

可为所述代码指针产生验证标记(阶段210)。可使用将使得恶意方难以在不检测的情况下修改指向不同地址的代码指针的过程来产生验证标记。在一些实施方案中,可使用处理器110所维持的私用密钥来加密所述代码指针的至少一部分,且可使用代码指针的经加密部分来产生所述代码指针的验证标记。图5和7中说明用于产生代码指针的验证标记的实例过程。

可用验证标记来修改程序代码中的代码指针,以产生带标记的代码指针(阶段215)。可用在阶段210中产生的验证标记来全部或部分地代替所述代码指针。取决于计算机系统100的配置,可能无法将额外数据附加到代码指针,而不对计算机系统100进行显著的架构改变。因此,本文所揭示的技术用验证标记来修改所述代码指针,且在执行与带标记的代码指针相关联的地址处的指令之前,检验所述带标记的代码指针尚未经修改。此方法不需要对计算机系统100的架构的显著改变,因为所述带标记的代码指针适合分配给不带标记的代码指针的存储器空间内。此外,修改代码指针本身可使得恶意代码较难以将程序流再引导到有效地址。所述恶意代码将需要能够产生用于所要的目标地址的有效验证标记,且修改代码指针以产生到所述地址的有效带标记代码指针,以便将所述程序执行的流再引导到所述地址。

图3是用于验证已受保护的代码指针的实例过程的流程图。图3中说明的过程可用以验证已使用图2中所说明的过程来修改的代码指针。此外,可修改图2中所说明的过程以包含图3中说明的过程的步骤。图3中所说明的过程可使用图1中所说明的计算机系统100来实施。图1中所说明的实例计算机系统100提供其中可实施图3中所说明的过程的一个计算机系统的一个实例,并且图3中所说明的过程可通过具有与图1中所说明的实例不同的架构的计算机系统的处理器实施。

可验证带标记的代码指针(阶段310)。在包含带标记的代码指针的程序代码的执行期间的某一时刻处,处理器可碰到带标记的代码指针并验证所述带标记的代码指针,以确定所述带标记的代码指针是否已更改。举例来说,所述带标记的代码指针可能已被恶意或不良写入的代码更改。举例来说,带标记的代码指针可能已被利用允许攻击者修改与代码指针相关联的存储器地址的值的存储器损坏或存储器溢出错误的恶意活动修改。在一些实施方案中,处理器110可经配置以通过重新产生与代码指针相关联的验证标记,并将重新产生的验证标记与从带标记的代码指针提取的验证标记进行比较以确定所述两个标记是否匹配,来确定所述带标记的代码指针已更改。如果所述标记匹配,那么所述带标记的代码指针尚未更改,且如果所述标记不匹配,那么所述带标记的代码指针已更改。图6中说明用于验证带标记的代码指针的实例过程。图6中所说明的过程可用以使用图3中说明的修改技术来验证已受保护的代码指针。

现在返回到图3,可响应于验证标记已经更改而执行错误处置(阶段315)。处理器110可经配置以执行可用以停止其中带标记的代码指针已更改的程序代码的执行的各种类型的错误处置程序。举例来说,处理器110可经配置以设定指示带标记的代码指针已更改的旗标。处理器110可经配置以在所述程序代码中执行辨别所述旗标已设定且经配置以响应错误条件的指令。举例来说,所述程序代码可包含以受控方式终止所述程序代码的执行,并清理存储器中与正执行的程序代码相关联的任何数据的指令。所述程序代码还可包含警告上面正执行所述程序代码的计算装置的用户错误已发生且所述程序代码将要关闭的指令。所述程序代码中还可包含其它指令,其致使处理器110将信息写入到提供关于所出现的错误的信息的记录。所述程序代码还可包含可致使处理器110将所述记录发送到远程服务器的指令,所述远程服务器例如为与创建或分配了所述程序代码的内容提供商相关联的内容提供商服务器。处理器110还可经配置以响应于错误旗标被设定而不是错误处置路由被包含于处理器110正执行的程序代码中而执行上文所论述错误处置。处理器110还可经配置以响应于确定带标记的代码指针已经修改或更改而不从带标记的代码指针恢复原始代码指针。因此,带标记的代码指针将不引用有效地址,且可引起异常。处理器110可经配置以类似于对处理器110正执行的程序代码中的无效地址的任何参看来处置此异常。举例来说,处理器110可经配置以响应于识别到无效地址而执行标准错误处置例程,例如缓慢地停止所述程序代码的执行,将错误信息写入到记录,将记录信息发送到内容创建者或提供商,通知上面正执行程序代码的计算装置的用户所述程序代码因为错误必须关闭,和/或其它步骤。这些错误处理方法可防止所述程序代码的流被恶意代码或不良写入的代码再引导。

可响应于验证标记尚未更改而执行与所述代码指针相关联的地址处的程序指令(阶段320)。处理器110可经配置以响应于正验证带标记的代码指针而执行与所述带标记的代码指针相关联的地址处的程序指令。如果带标记的代码指针被成功地验证,那么所述代码指针不大可能已经被恶意代码或存储器利用更改,且程序执行的流可以位于与所述代码指针相关联的存储器地址处的指令继续。

图4是用于产生验证标记的实例过程的流程图。图4中说明的过程可用以实施图2中所说明的过程的阶段210。图4中说明的过程可使用图1中说明的计算机系统100来实施。图1中说明的实例计算机系统100提供其中可实施图4中说明的过程的一个计算机系统的一个实例,且图4中说明的过程可由具有与图1中说明的实例不同的架构的计算机系统的处理器实施。将参考图8的图来论述图4中说明的过程,其提供用于产生代码指针的验证标记且用于修改所述代码指针以产生带标记的代码指针的过程的实例。

可存取与处理器110相关联的私用密钥(阶段405)。所述私用密钥可用于产生可用以修改代码指针的验证标记。所述密钥应保持机密,且存储在处理器110可存取但处理器110正执行的进程无法存取的大体上不可存取的存储器位置中,以便使所述密钥保持安全,免受希望在计算机系统100上执行恶意代码的那些人破坏。在一些实施方案中,可存在与计算机系统100的处理器110相关联的多于一个密钥。举例来说,许多ARM处理器和HEXAGON处理器具有与之相关联的多个执行(权限)等级,例如:监视、核心和用户执行模式。这些权限等级中的每一者可含有一或多个执行环境。举例来说,每一用户模式进程在执行环境内在“用户”权限等级处操作,且这些进程由操作系统(OS)核心管理。在一些实施方案中,客户OS可在计算机系统100上实施。客户OS可在执行环境内在“核心”权限等级处操作,且由管理程序或虚拟机监视器(VMM)管理。在具有多个权限等级的环境中,可为与计算机系统100的处理器110相关联的每一权限等级定义一组保护参数。这些保护参数可包含用于为代码指针加标记且用于检验带标记的代码指针的密钥、用于为代码指针加标记的掩码和值、用以启用和/或停用代码指针检验的处理器旗标,和/或其它安全性特征,例如基于硬件的堆栈保护。与执行上下文相关联的参数从在相同或较低权限等级操作的其它执行上下文隐藏。处理器110可经配置以包含用于存储与每一权限等级相关联的保护参数的寄存器。处理器110还可经配置以暴露指令来读取和设定保护参数,使得在特定权限等级执行的代码可读取和设定用于下一较低权限等级的配置寄存器。在一些实施方案中,处理器110经配置以使得准许监视器或管理程序管理与其当前权限等级相关联的密钥以及与下一最低权限等级(如果存在)相关联的那些密钥。处理器110可经配置以使得较高权限等级负责在创建和/或切换下一较低权限等级的处理上下文时产生和/或改变密钥。在阶段405中,与适当的权限等级相关联的密钥与执行环境相关联。在不支持多个执行环境和/或权限等级的情况下,或在不是针对每一权限等级提供不同安全性的情况下,可从处理器110的寄存器存取与所述处理器相关联的密钥。

可存取与程序代码相关联的上下文信息(阶段410)。所述上下文信息可与特定执行环境相关联,且可包括与所述特定执行环境相关联的唯一且机密的值。在一些实施方案中,可能不使用上下文信息。然而,上下文信息提供额外安全性等级。举例来说,如果攻击者能够通过利用程序代码的信息泄露脆弱性来从存储器读取带标记的代码指针,那么攻击者仍可潜在地控制所述程序代码的流,来调用与所述带标记的代码指针相关联的验证入口点中的任一者。攻击者将被限制于使用包含于所述利用中的带标记的代码指针中的地址,但所述带标记的代码指针可彼此取代来更改程序流。但,上下文的添加进一步限制了攻击者通过上下文来对代码指针进行分组的能力。引入上下文作为验证功能的额外自变量,且仅具有相同上下文的指针可彼此取代。因此,包含所述上下文的本文所揭示的技术可用以强制执行程序代码的控制流完整性(CFI),其条件是在加载时,用恰当的上下文为代码指针加标记。

处理器110可经配置以使得在相同执行等级操作的执行环境无法存取与在相同或较高等级操作的其它执行环境相关联的上下文信息。处理器110可经配置以使得在较高权限等级操作的执行环境可能够存取、修改和/或产生与在较低权限等级操作的执行环境相关联的上下文信息。在一些实施方案中,处理器110可经配置以使得在较高权限等级操作的执行环境可能够存取、修改和/或产生与仅在低于当前权限等级的一个等级操作的执行环境相关联的上下文信息。

可将加密算法应用于所述代码指针,以产生验证标记(阶段415)。所述加密算法可为消息验证码(MAC)。图8中说明的实例实施方案使用MAC算法830来产生验证标记835。对MAC算法830的输入是在阶段405中获得的密钥820、在阶段410中获得的上下文信息825,以及将加标记的代码指针815。可使用MAC算法830和密钥820来对上下文信息825和代码指针815进行加密。上下文信息815可包括可在产生验证标记以提供额外安全性层时使用的唯一值。尝试对代码指针做出未经授权的修改以试图取得对程序代码的执行流的控制的恶意方将不知道与其中正执行程序代码的执行环境相关联的上下文信息,且将不容易能够复制验证标记835。举例来说,如果恶意方曾能够利用允许存取带标记的代码指针的存储器错误,那么带标记的代码指针可仅被与相同上下文相关联的其它带标记的代码指针取代。

图5是用于用验证标记来修改代码指针以产生带标记的代码指针的实例过程的流程图。图5中说明的过程可用以实施图2中所说明的过程的阶段215。图5中所说明的过程可使用图1中所说明的计算机系统100来实施。图1中所说明的实例计算机系统100提供其中可实施图5中所说明的过程的一个计算机系统的一个实例,并且图5中所说明的过程可通过具有与图1中所说明的实例不同的架构的计算机系统的处理器实施。将参考图8的图来论述图5中说明的过程,其提供用于产生代码指针的验证标记且用于修改所述代码指针以产生带标记的代码指针的过程的实例。

可使用掩码来选择来自所述验证标记的与所述代码指针相关联的位(阶段505)。在图8中示出的实例中,可将掩码810应用于代码指针815和验证标记835,以产生带标记的代码指针840。图7中说明的过程说明可用于产生掩码810的一种技术。此外,如上文所论述,所述掩码可与特定执行环境和/或与处理器110所实施的特定权限等级相关联。在图8中所说明的实例中,所述掩码经配置以选择19个位:16个上部位和3个最低有效位。所述掩码用以从代码指针815选择对应的位。

可用选自验证标记的位来代替代码指针中的位,以产生带标记的代码指针(阶段510)。在图8中所说明的实例中,用验证标记位来代替代码指针815中对应于选自验证标记的那些位的位,以产生带标记的代码指针840。举例来说,可使用以下表达式来导出带标记的代码指针840的值:

(指针&~掩码)|(标记&掩码)

其中“指针”值表示代码指针815的值,“~掩码”值表示掩码810的相反值,“标记”值表示验证标记835,且“~掩码”值表示掩码810的值。

带标记的代码指针可存储在与代码指针相关联的存储器位置中(阶段515)。可将带标记的代码指针840写入到存储器160中的位置或其它存储器位置,其中最初存储代码指针815。处理器110可经配置以在执行与带标记的代码指针840相关联的地址处的指令之前,解码并验证带标记的代码指针840。尝试修改带标记的代码指针840的恶意方在不知道用以产生验证标记835的算法、用以选择应用来自验证标记835的位代替代码指针815的哪些位的掩蔽值810(在本文中也被称作掩码810),和/或用以产生验证标记835的上下文信息825和密钥820的情况下,将不能够产生所述代码指针的有效值。

或者,可修改图5中说明的用于产生带标记的代码指针的过程,使得可如上文在阶段505中所论述那样选择来自验证标记835的位,但可修改阶段510,使得来自代码指针的位是选自使用掩码810的相反值的代码指针。选自验证标记835的位和选自代码指针815的位可接着组合以创建带标记的代码指针840。

图6是用于根据图4中说明的代码指针验证过程来验证已受保护的带标记的代码指针的实例过程的流程图。图6中说明的过程可用以实施图3中所说明的过程的阶段310。图6中所说明的过程可使用图1中所说明的计算机系统100来实施。图1中说明的实例计算机系统100提供其中可实施图6中说明的过程的一个计算机系统的一个实例,且图6中所说明的过程可由具有与图1中所说明的实例不同的架构的计算机系统的处理器实施。将参考图8和9的图来论述图6中所说明的过程,其提供用于从带标记的代码指针恢复验证标记且用于确定所述带标记的代码指针是否已更改的过程的实例。

可使用掩码来确定从带标记的代码指针恢复的代码指针值(阶段605)。可使用用于图5中说明的过程的阶段505中的掩码810从带标记的代码指针840确定经恢复的代码指针905,以产生用以修改代码指针并创建带标记的代码指针840的验证标记835。如上文所论述,所述掩码可与处理器110相关联,且处理器110可具有对用于不同执行环境和/或权限等级的不同掩码的存取权。处理器110可经配置以在处理器110已实施多个执行环境和/或权限等级的情况下,为与正执行的程序代码相关联的执行环境和/或权限等级选择适当的掩码810。使用所述掩码来从带标记的代码指针840选择用来自验证标记835的位代替的位。带标记的代码指针840的选定位由值805代替,所述值是这些位的原始值,以产生经恢复的代码指针905。用于确定值805且用于产生掩码位的过程在图7中说明,且将在下文详细论述。

举例来说,可使用以下表达式来导出经恢复的代码指针905的值:

(值&掩码)|(带标记的代码指针&~掩码)

其中“值”表示值805所表示的共用位集合,“掩码”值表示掩码810的值,“带标记的代码指针”值表示带标记的代码指针840,且“~掩码”值表示掩码810的相反值。

可至少部分地基于经恢复的代码指针、上下文值和密钥来产生经恢复的验证标记(阶段610)。在图9中说明的实例中,通过将MAC算法830应用于经恢复的代码指针905来产生经恢复的验证标记915。MAC算法830接收密钥820、经恢复的代码指针905和上下文值825作为输入。用于产生经恢复的验证标记915的过程类似于图4和8中说明的其中产生带标记的代码指针840的过程。除最初用以产生带标记的代码指针840的密钥820和上下文信息825之外,还提供经恢复的代码指针905,作为MAC逻辑830的输入。MAC逻辑830输出经恢复的验证标记915。

可使用所述掩码从带标记的代码指针提取嵌入的验证标记值(阶段615)。可使用用以从带标记的代码指针840提取经恢复的代码指针905的掩码810从代码指针提取嵌入的验证标记910。

举例来说,可使用以下表达式来导出嵌入的验证标记910的值:

经恢复的代码指针&掩码

其中“经恢复的代码指针”表示经恢复的代码指针905的值,且“掩码”值表示掩码810的值。

可从经恢复的验证标记915提取带掩码的标记值(阶段620)。如在图8和9的实例中可看出,选自经恢复的代码指针905以创建嵌入的验证标记910的所述位集合并不包含最初包含验证标记835的所有的位。然而,在将掩码810应用于经恢复的验证标记915之后,可将经恢复的验证标记915与嵌入的验证标记910进行比较。可将掩码810应用于经恢复的验证标记915,以产生带掩码的标记920。此过程类似于上文所论述的用于从带标记的代码指针840确定嵌入的验证标记910的过程。

举例来说,可使用以下表达式导出带掩码的标记920的值:

经恢复的标记&掩码

其中“经恢复的标记”表示经恢复的代码指针905的值,且“掩码”值表示掩码810的值。

将经恢复的验证标记与嵌入的验证标记进行比较(阶段625)。阶段625也由图9的框925表示。接着可将带掩码的标记920与嵌入的验证标记910进行比较以产生结果930。如果带掩码的标记920与嵌入的验证标记910进行比较,那么带标记的代码指针840已成功地验证,且结果930可包含验证成功的指示。带标记的代码指针840的值不大可能已经更改,因为产生带标记的代码指针840并将其放入存储器中。如果带掩码的标记920并不与嵌入的验证标记910匹配,那么带标记的代码指针840尚未成功地验证,且结果930可包含验证不成功的指示。带标记的代码指针840的值已经更改或损坏,因为已产生带标记的代码指针840并存储在存储器中。处理器110可经配置以在验证未能阻止恶意程序代码承担对处理器110正执行的程序代码的流的控制的情况下,执行错误处置程序。

图7是用于产生可结合本文所论述的代码指针验证技术使用的掩码的实例过程的流程图。图7中所说明的过程可使用图1中所说明的计算机系统100来实施。图1中说明的实例计算机系统100提供其中可实施图6中说明的过程的一个计算机系统的一个实例,且图7中所说明的过程可由具有与图1中所说明的实例不同的架构的计算机系统的处理器实施。可在执行图2到6、8和9中说明的过程之前,执行图7中说明的过程。举例来说,图7中说明的过程可在处理器110正执行程序代码的静态或动态链接时执行。处理器110还可经配置以在执行图2到6、8和9中说明的过程之前的其它时间,执行图7中说明的过程。

可将程序代码中所识别的多个代码指针进行比较(阶段705)。处理器110可经配置以将程序代码中的多个代码指针进行比较,以确定与所述代码指针相关联的地址中的共用位集合。可用验证标记值来代替一组程序代码中的代码指针共用的位,而不损害所述代码指针,且不需要用于存储所述验证标记的额外存储空间。此方法可帮助可需要对处理器110的架构做出改变以支持本文所揭示的代码指针验证技术的次数最小化。

可识别与代码指针相关联的地址中的共用位集合(阶段710)。所述共用位集合可用作图8和9中说明的实例中所说明的值805的基础,且在图6中说明的过程中用于验证带标记的代码指针840。在图8和9中示出的实例中,代码指针具有共用的16个上部位和3个最低有效位。处理器110可经配置以将从与代码指针相关联的地址中的共用位集合导出的值805存储在处理器110可存取的寄存器或其它存储器中,之后当处理器110需要验证与所述程序代码相关联的代码指针时,可存取所述寄存器或其它存储器。处理器110可经配置以将值805放置在从其它执行上下文中正执行的程序代码和/或通过相同和/或较低权限等级处正执行的程序代码不可存取的寄存器或其它存储器位置中。

可程序代码供使用的地址空间可为有限的,且代码指针可寻址的存储器的量通常比代码指针可寻址的存储器的量大得多。在一些系统中,例如一些64位系统,可由代码指针表示的可能可寻址的范围进一步受限。处理器110还可经配置以使得静态和动态链接器经配置以使存储器中的程序代码段对准,使得代码在运行时封装在一起。这可导致代码指针具有较多的共用位,从而增加可用以将验证标记信息存储在带标记的代码指针中的位的数目。

可基于与代码指针相关联的地址中所识别的共用位来产生掩码(阶段715)。举例来说,基于从将程序代码中的代码指针进行比较以识别来自所述代码指针的共用位而导出的值805来产生图8和9中说明的实例中的掩码810。图8和9中未说明比较步骤,且在这些图中所说明的加标记和验证过程之前将已经执行。可将掩码810中的位设定成二进制值1,其中代码指针中的每一者中的对应位共享相同的值,且可将掩码810中的位设定成二进制值0,其中所述代码指针中的每一者中的对应位并不全部共享相同的值。处理器110可经配置以将掩码810存储在从其它执行上下文中正执行的程序代码和/或通过相同和/或较低权限等级处正执行的程序代码不可存取的寄存器或其它存储器位置中。

取决于应用,可通过各种装置来实施本文中所描述的方法。举例来说,这些方法可在硬件、固件、软件或其任何组合中实施。对于硬件实施方案,处理单元可实施于一或多个专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理装置(DSPD)、可编程逻辑装置(PLD)、现场可编程门阵列(FPGA)、处理器、控制器、微控制器、微处理器、电子装置、经设计以执行本文中所描述功能的其它电子单元,或其组合内。

对于固件和/或软件实施方案,可用执行本文中所描述的功能的模块(例如,程序、函数等等)来实施所述方法。在实施本文所描述的方法时,可使用有形地体现指令的任何机器可读媒体。举例来说,软件代码可存储在存储器中,并且由处理器单元执行。存储器可在处理器单元内或处理器单元外部实施。如本文中所使用,术语“存储器”是指任何类型的长期、短期、易失性、非易失性或其它存储器,且并不限于任何特定类型的存储器或特定数目的存储器或特定类型的媒体。有形媒体包含机器可读媒体的一或多个物理物品,例如随机存取存储器、磁性存储装置、光学存储媒体等等。

如果以固件和/或软件实施,那么可将所述功能作为一或多个指令或代码存储在计算机可读媒体上。实例包含编码有数据结构的计算机可读媒体和编码有计算机程序的计算机可读媒体。计算机可读媒体包含物理计算机存储媒体。存储媒体可为可由计算机存取的任何可用的媒体。作为实例而非限制,此种计算机可读媒体可包括RAM、ROM、EEPROM、CD-ROM或其它光盘存储器,磁盘存储器或其它磁性存储装置,或任何其它可用于存储呈指令或数据结构形式的所要程序代码且可由计算机接入的媒体;如本文中所使用,磁盘和光盘包含压缩光盘(CD)、激光光盘、光学光盘、数字多功能光盘(DVD),软性磁盘和蓝光光盘,其中磁盘通常以磁性方式再现数据,而光盘用激光以光学方式再现数据。以上各项的组合也应包含在计算机可读媒体的范围内。此些媒体还提供可为机器可读的非暂时性媒体的实例,且其中计算机为可从此些非暂时性媒体读取的机器的实例。

在不脱离本发明或权利要求的精神或范围的情况下,本文中所论述的一般原理可应用于其它实施方案。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1