用于硬件控制流施行的控制流传递的基于包的验证的方法和设备与流程

文档序号:15739604发布日期:2018-10-23 22:04阅读:216来源:国知局
用于硬件控制流施行的控制流传递的基于包的验证的方法和设备与流程

本申请主张在2016年3月3日在美国专利和商标局递交的第15/060,274号非临时申请的优先权和权益,所述申请的全部内容以引用的方式并入本文中。

技术领域

本发明大体上涉及控制流传递的验证,且更确切地说涉及用于硬件控制流施行的控制流传递的基于包的验证的方法和设备。



背景技术:

计算机频繁地被希望获得控制或操控软件行为的恶意攻击者定为目标。攻击者可获得软件控制的一种方式是利用软件缺陷或差错。举例来说,软件实施方案差错(例如,缺失或不正确输入验证)引起溢出或出界缓冲器存取和存储器损坏。在正常条件下,这些差错使得软件变得不稳定且最终崩溃。然而,当输入由恶意攻击者操控时,这些溢出错误或存储器损坏可以被利用以改变代码的预期行为并且执行由攻击者确定的代码或功能性。攻击者随后通常获得执行的控制的方式是通过覆写存储器中的数据结构,例如,返回地址、函数指针或虚表指针。

在大型和传统的代码库中寻找和修理全部可利用的存储器损坏错误并不总是可能的。因此,大部分系统含有被称作“利用缓解机构”的一般防御特征,所述特征可有效地抵抗攻击者用于利用这些错误来获得对目标系统的控制的众所周知的技术。

用于防止利用这些弱点的现有技术包含数据执行防止(DEP)、堆栈保护(SP)和地址空间布局随机化(ASLR)。还存在使用宏或函数调用混淆软件中的敏感指针的方案(glibc和Win32)。这防止了轻易地替换这些指针或暴露它们的值。由于性能担忧,与简单异或函数的混淆是在软件中可以完成的最好的。此外,通过加密或混淆,非常难以验证解密值。

相应地,存在对通过处理器执行的验证控制流的更简单的方式的需要以便更高效地防止攻击者利用软件缺陷或差错。



技术实现要素:

根据一方面,本发明提供用于控制流验证的方法。所述方法包含基于使用源包自身的内容的计算确定用于源包的第一标识符。另外,所述方法包含基于使用目标包的内容的计算确定用于源包所指向的目标包的第二标识符。比较第一标识符和第二标识符并且基于两个标识符的比较进行确定当第一和第二标识符被确定为不兼容时存在无效控制流。

在本发明的另一方面中,公开了用于控制流验证的设备。所述设备包含用于基于使用源包的内容的计算确定用于源包的第一标识符的装置。另外,所述设备包含用于基于使用目标包的内容的计算确定用于源包所指向的目标包的第二标识符的装置。另外,所述设备包含用于比较第一标识符和第二标识符并且当第一和第二标识符通过比较被确定为不兼容的时确定无效控制流的装置。

在再一方面中,公开了一种用于控制流验证的设备。所述设备包含经配置以用于基于使用源包的内容的计算确定用于源包的第一标识符的处理电路。另外,所述处理电路经配置以用于基于使用目标包的内容的计算确定用于源包所指向的目标包的第二标识符。此外,所述处理电路经配置以用于比较第一标识符和第二标识符并且当第一和第二标识符通过比较被确定为不兼容的时确定无效控制流。

在又一方面中,本发明提供具有一或多个指令的处理器可读存储媒体,所述一或多个指令在由至少一个处理电路执行时,使得至少一个处理电路基于使用源包的内容的计算确定用于源包的第一标识符。所述一或多个指令还经配置以使得处理电路基于使用目标包的内容的计算确定用于源包指向的目标包的第二标识符。所述指令还使得处理电路比较第一标识符和第二标识符并且当第一和第二标识符通过比较被确定为不兼容的时确定无效控制流。

附图说明

图1是在利用本发明所公开的方法和设备的计算机系统中软件和硬件的相互作用的示例图。

图2说明根据本发明用于控制流验证的示例性方法。

图3是说明经配置以实施用于验证控制流的方法的示例性系统的方块图。

图4是根据本发明具有无运算指令(NOP)的包的修改的说明。

图5说明根据本发明用于控制流验证的另一示例性方法。

图6说明根据本发明用于包含构建时间和编译时间元件的控制流验证的示例性方法。

具体实施方式

本发明提供用于更高效地提供控制流验证以便阻止对软件执行的攻击并且确保仅意图的控制流被执行的方法和设备。此处应注意从一开始,词语“示例性”在本文中用于意味着“充当实例、例子或说明”。本文中描述为“示例性”的任何实例或方面不一定解释为相对于其它实例或方面为优选的或有利的。

作为背景,图1说明计算机系统中软件(即,指令)和硬件的相互作用的示例图。可以存储在存储器装置(未图示)中的软件或源代码102通常通过编译器104编译,所述编译器获取源代码并且将源代码直接地转换成可由处理单元106(通过编译器104与处理单元106之间的虚线箭头指示)执行的二进制代码或更常见地转换成汇编语言或代码。在后一种情况下,由编译器104产生的汇编语言通过汇编器108汇编成可由处理单元106执行的二进制代码。

涉及软件和硬件的接口的另一概念是指令集架构(ISA),所述指令集架构充当软件与硬件(例如,处理单元106或相似处理器或控制器)之间的边界或接口。ISA通常包含(除其它之外)指令集、本地命令和数据类型、寄存器、寻址、中断和异常处理,以及外部输入/输出。另外,ISA包含运算代码或机器语言的集合的说明书,以及通过特定处理器或控制器实施的本地命令。此外,一些ISA实施指令包的概念,其中包是通过硬件并行地执行的指令的群组。使用指令包的ISA的一个实例是由高通研发的六边形架构,并且出于说明的目的本文中的实例适用于此ISA。然而,本文中所公开的概念可以适用于实施包或相似概念的任何指令集架构。

如本领域中已知,机器语言是通过离散陈述或指令构建的,并且这些指令可规定许多位置或运算,例如,用于算术、寻址和控制函数的特定寄存器、存储器位置或偏移,以及用于解释输入或运算元的寻址模式。这些指令还可以在简单实例中循序地执行,或者还可以按照在更复杂的运算中通过控制流指令指导的方式或次序执行。

对许多ISA(包含六边形)共用的运算或指令包含:(1)数据处理和存储器运算或指令(例如,将寄存器设置成值、从硬件装置中读取数据以及将数据写入到硬件装置、将来自存储器的数据复制到寄存器或将来自寄存器的数据写入到存储器等);(2)算术和逻辑运算或指令(例如,两个寄存器的加法,减法,乘法、除法、移位寄存器等);以及(3)控制流运算(例如,分支或跳转到程序中的另一位置)、如果满足特定条件那么条件性地跳转、间接跳转到另一位置(即,调用代码块并且作为程序将返回的返回点节省下一个指令的位置等)。此外,在实施包概念的ISA中,多个指令含于包内。作为来自六边形的实例,具有四(4)个指令的包例如可如下构建:

{r8=asl(r8,r2)

r4=add(r7,r4)

r5=add(r7,r5)

r6=add(r7,r6)}

在上述指令包中,第一指令起始以由寄存器2定义的偏移算术移位到寄存器8的左侧的性能并且结果被放入寄存器8中,第二指令是寄存器7和寄存器4的内容的加法运算,其随后被放入寄存器4中,第三指令是寄存器7和寄存器5的内容的加法运算,其随后被放入寄存器5中等等。

进一步注意到大部分ISA还实施执行无运算的无运算(NOP)指令,且经配置以确保不存在编程器-可存取寄存器、状态旗标或存储器中的任何一者的状态的变化或改变。NOP指令可用于实现多个不同目的,例如计时、迫使存储器对齐、防止危险、占据分支延迟槽、使例如跳转的现有指令无效,或放置-挂起以便稍后在程序中被有效指令替代。六边形中的NOP指令例如可以定义如下,其中每个字符表示1位:

0111 1 111--------PP--------------

在所说明的NOP中以短划线“-”标记的位表示未被定义的位,在六边形的情况下NOP数目22个未被定义的位,并且PP位指示包中的指令的位置信息。另外,应注意虽然一些指令可具有指令包中的固定位置,但是用于六边形的NOP指令并不具有固定位置并且可以放置在包中的四个指令位置当中的任何地方。

为了提供控制流的验证,例如,验证跳转,本发明所公开的方法和设备利用新半NOP类型的指令(从现在起所述指令将简单地表示为NOP指令),所述指令具有可以被设置成不改变指令或指令包的行为的任何值的多个“自由”位(F)。此外,本发明所公开的方法和设备采用多个硬件改变,这些将在稍后得到进一步详细的论述,其中硬件变更经配置以确保硬件利用新NOP指令以用于至少控制流的验证的目的。

考虑到NOP指令的构造,此指令可以仅如同相关的ISA中已知的正常NOP编码。在六边形的情况下,举例来说,NOP指令可如同标准六边形NOP来编码并且会具有表示为上文提到的自由位(F)的22个未被定义的位,然而所属领域的技术人员将了解还可以利用编码指令的其它方式。在一方面中,自由位可由预定义值来指示。在另一方面,自由位可以基于指令包内的指令来确定或计算(且更确切地说,具有一或多个控制流指令的控制传递包,例如,跳转或间接控制传递包)。在一个实例中,来自控制传递包中的所有指令的位使用预定义组合函数组合成单个F位值。计算出的F位值可随后表示为签名或标识符(ID),且更确切地说表示为用于控制传递包的源ID(SID)或用于目的地包的目标ID(TID)。

此处应注意NOP指令的使用可以适用于任何包,并且尤其适用于间接控制传递包。间接控制传递包包含至少一个间接控制流传递指令,如先前所提到。这可以是例如跳转到寄存器、调用到寄存器或返回。以下六边形包序列中的第二包是间接控制传递包的实例:

{immext(#3250070336)

r0=memw(##3250070380)}

{jumpr r0}

第一指令包提供用于将存储器位置的内容加载到寄存器(寄存器0)中。第二包包含跳转到该寄存器;即,寄存器0。应注意如果攻击者控制了存储器位置(即,位置##3250070380),那么举例来说他们可改变r0的值为一些任意常数并且控制执行。

相应地,使用源和目标包中的位计算出的ID可在运行时间使用以确定跳转是否是有效的,方法是确定源ID(SID)和目标ID(TID)是否兼容。进一步注意到在一方面中,如果间接控制流指令中的跳转是到包,例如先前通过非跳转指令(asl,添加)示出的包,那么此目标包还可包含与调用包相同的签名(例如,SID),并且因此等同性检查将足以确定其有效性。因此,如果攻击者试图控制寄存器(例如,上述包中的寄存器r0),那么攻击者将被阻碍,因为调用和目标包的签名并不匹配。另外,由于签名是在可执行代码中编码的,所以攻击者无法对跳转进行增益控制。

图2说明根据本发明用于控制流验证的示例性方法200。在一方面中,当执行控制-传递包时可以利用方法200,并且所述方法可通过处理器微处理器、控制器、微控制器、应用程序特定的处理器、数字信号处理器或其它处理装置操作。

方法200包含决定块202,其中处理单元评估控制传递包或间接控制传递包以确定是否将发生跳转,例如,举例来说,上文所论述的间接控制-传递包中的跳转。如果将不发生跳转,那么流前进到块204,其中包根据正常处理操作得到处理。替代地,如果将发生跳转,那么流前进到块206,其中确定用于控制传递包的签名(即,SID)。在一方面中,块206的过程包含使用组合函数,所述组合函数包含来自控制传递包中的指令的位。因此,所述函数可包含将来自包中的指令中的至少一些或甚至来自特定控制传递包中的所有指令的位组合到具有预先确定数目的位的单个值中。在一个实例中,这个值可以由F数目的自由位的单个F位值表示(等同于具有直接返回这个值且忽略包中所有其它位的组合函数)。在又一方面中,如同在例如六边形的特定ISA中已知的,自由位的数目是22位。自由位也可以在NOP中,如先前所论述。

应注意根据设计签名或ID值可以是预先确定的。在再一方面中,当控制-传递包的位是组合的以确定SID时,位的组合可以使用预先确定的组合函数实现。在涉及六边形的一个实例中,组合函数包含通过用于包中的每个指令的对应的位位置中的所有位的异或运算来确定SID的位0到13。在另一方面中,相同异或函数还可以应用于位18到23。此特定组合函数产生22位SID。然而,应注意,此功能性适用于其它ISA并且位的组合可以或多或少产生具有或多或少22位的SID。还应注意,用于控制-传递和目标包的组合函数可以是相同或不同的。

根据另一个方面,跳转的目标包可包含控制-传递包的SID或一些兼容ID值,使得当在运行时间比较两个ID时,计算出的目标ID(TID)被确定为兼容的。在兼容TID值的情况下,用于确定兼容性的匹配可包含具有0的余数的除法运算(例如,TID是SID的倍数)。

返回参考图2,在块206中计算签名或SID之后,流前进到处理块208。在块208处,针对作为控制流传递的目标的包计算TID。此计算可以通过组合函数实现,其包含组合来自目标包中的指令的位。在块208中计算TID之后,流前进到决定块210。

在块210处,进行确定控制-传递包的SID和目标包的TID的匹配或验证是否匹配、验证(即,目标是正确的跳转目的地)或相称。在一方面中,使用预定义验证函数可以实现此过程,其中函数返回布尔值(即,真实或错误、0或1等)。如果验证函数产生布尔值等于“真实”,那么这指示目标包是正确跳转或控制流,并且代码继续正常执行,如通过块214所示。如果验证函数返回“错误”,那么出现异常以发信号通知不良控制传递并且执行可以被停止以防止攻击者控制程序。

在涉及六边形的一实例中,验证函数可包含确定目标包中第一指令是否不是NOP,这指示目标包并不具有如根据本发明所公开的方法确定的正确签名。如果不是,那么函数返回错误(异常)。另外,如果控制-传递包的SID并不匹配目标包的第一指令中的22个自由位所定义的值(NOP)或不可被所述值除尽,那么函数也返回指示异常的错误或不匹配(在这里22个自由位将被解释为TID)。在这类情况下,控制流被停止,如在块212处所指示。在一方面中,如果处理单元发现不匹配,那么升高的异常可经配置以指示软件某事是错误的,以及将被消灭或通过操作系统操控的路线(例如,BIOS)。如果TID和SID匹配,那么函数返回“真实”或肯定并且处理正常前进,如在块214处所指示。

根据另一方面,新NOP指令还可用于调节用于每一控制-传递和目标包的ID,使得预期的控制传递被允许并且当尝试不正确的控制传递时异常升高。由于ID可以被选择为F位长并且NOP指令具有F个自由位,所以组合函数可以经选择使得任意值可以通过添加单个NOP指令被指派到ID。如果应用最大包长度,那么原始包可以被拆分成两个,并且随后NOP被添加到一或两个包以调节ID。举例来说,假设六边形控制-传递包含有4个指令。如果包的SID在一定程度上不能令人满意或不是所期望的,那么NOP无法简单地添加以修改它,这是因为六边形包中的指令的最大数目是四(4)个。然而,四(4)个指令中的一个可以拆分成不同的包,引起一个单个或单一(1)指令包和具有三个(3)指令的另一指令包。NOP可随后被添加到含有间接跳转的包以调节其SID。

另一方面,应注意源包中的NOP指令可以经放置使得NOP不是包中的第一指令。这种放置用于更好地避开未经授权的跳转(即,如果目标包不以NOP开始,那么一个示例性验证函数返回错误)。在另一方面,当除法被用作验证函数时,SID(以及它们的对应的目标NOP)可以每当可能时被设置成质数以便更好地避开冲突;即,未经授权的跳转。

另外,当除法被用作验证函数时,如果存在到任何给定目标的两个间接调用,那么根据一方面源的SID中的一个可以被重新指派为另一个的倍数。这允许两个调用的发生,代价是允许一些未经授权的跳转(从第二调用程序到第一调用程序的其它目标)。在多个调用程序的情况下相似过程可以应用若干次。给定架构可允许额外的优化。举例来说,在到给定目标的多个调用程序的情况下,仅含有NOP的新包可以正好插入在目标之前并且使得或迫使调用程序中的一个使用此新包作为其目标。实际上,这将不会以每调用程序添加一个多指令到二进制的文本区段为代价产生任何未经授权的跳转。

图3是说明经配置以实施用于验证控制流的方法的示例性系统300的方块图。系统300包含经配置以实施例如图2的方法的处理单元302或可比的处理电路或逻辑。处理单元302可以耦合到单独的或集成的存储器装置304。另外,处理单元302包含经配置以用于控制流验证的逻辑部分或电路306,如处理单元302中的控制流验证部分306所指示。

逻辑部分306包含组合函数或ID确定部分308,其经配置以确定用于特定源控制流包的ID或签名,但是还可确定用于控制流包的目标包的ID。部分308的功能性可包含之前结合图2所论述的组合函数。另外,控制流验证逻辑部分306可包含用于验证源和目标包的ID之间的匹配或兼容性的验证函数310。

具体地说,组合函数308可在构建时间处使用以组合来自源控制流包中的指令中的每一者的位以确定SID,其随后用于计算兼容TID。此TID可继而放入NOP中作为目标包中的第一指令使得当TID与SID进行比较时控制流被认为是正确的,例如,如同通过验证函数逻辑310所确定。

在参考先前所论述的间接控制流包的特定运行时间实例中,例如寄存器r0将含有是存储器中的偏移的数目。当在源包中存在跳转指令时(例如,“...{jumpr r0...”),处理单元(例如,单元302)获取源包并且以预先确定的方式组合其中的位以产生源ID,例如,通过组合函数逻辑308的运算。处理单元302可随后读取r0中的值(通过从寄存器314中读取312所说明,如所说明其可以在存储器装置304内,但是也可以与存储器装置304分开或者是处理单元302的一部分),并且在存储器(例如,存储器装置304)中查询目标包。作为实例,如果寄存器r0中的值(314)是10,那么程序将去往存储器中的偏移10(作为一个实例示出为存储器304中的存储器位置318),在如由读取316所指示的存储器位置处读取目标包,并且随后组合该目标包中的位以使用组合函数308获取新ID,作为一个实例。相应地,此处会存在两个ID或标记,它们彼此进行比较以确定匹配或一些其它兼容性;即,此处会是用于源包的第一ID和用于目标包的第二ID。目标ID(TID)将随后从目标包中计算出来并且与所存储的SID进行比较。应注意硬件可具有一或多个隐藏寄存器(即,不可通过指令集存取)以临时存储ID。作为一实例,存储器装置304可包含寄存器320以存储不可通过指令集存取的SID。

进一步注意到包含ID到包中的NOP指令的放置可以在构建时间实现(即,构建时间为编译或链接时间)。图4说明基于先前所论述的包的实例。此处,用于指示跳转的控制流包402的ID编码有NOP 404。图4还说明目标包406,其包含四个指令。如上文所论述,假设应用4的最大包长度,那么原始包可被拆分成两个并且随后NOP被添加到一个或两个包以调节ID。因此,目标包被拆分成含有3个指令和NOP 408的第一包以确定目标ID。进一步注意到在此实例中对于目标包来说NOP被放置为第一指令。取决于实施方案,NOP指令的位置可或可不考虑计算ID的函数。图4还说明包406中的四(4)个指令中的一个(例如,r8=asl(r8,r2))被拆分成一个单个指令包410,并且NOP 412随后可被添加到所述包。

还应注意,在构建时间,所有ID已知为它们可以针对每一相关包计算,并且可以保证它们匹配。随后,在运行时间,组合函数被应用于计算来自指令的编码的ID。应注意组合和验证函数是在构建和运行时间两者处已知的并且对于控制-传递包和目标包它们可以是相同或不同的。

图5说明根据本发明用于控制流验证的方法500的另一实例。方法500包含基于使用源包的内容的至少一部分(例如,指令或位)的计算确定源包的第一标识符(例如,SID),如块502中所示。源ID可以使用之前所描述的各种方法确定,例如,梳理包中的指令的位。在一方面中,块502的过程可以在处理单元(例如,单元302)或其它硬件的运行时间期间执行。另外,应注意,第一标识符是在编译或构建时间期间预先确定的值,并且因此在某种意义上是此时的包所固有的。如之前所论述,第一标识符的预先确定可包含:设置预先确定的值;基于组合源包内容来计算值;和/或确定预先确定的值,方法是在编译期间通过插入的NOP调节源包的内容使得当执行基于源包内容的计算时(例如,组合来自包中的指令中的位)在运行时间期间第一标识符将被确定或者是所得的。另外,应注意块502的过程可以通过处理单元(例如,单元302)实施或通过使用其它特定硬件实施。

接下来,方法500包含基于目标包内的内容或指令确定用于源包所指向的目标包(例如,TID)的第二标识符,如在块504处指示。此过程504包含基于使用目标包的内容(例如,包中的位或指令的至少一部分)的计算确定第二标识符(例如,目标包ID(TID)),其中计算将产生标识符,所述标识符是在构建或编译时间处已先前预先确定的。第二标识符(例如,TID)可能已使用之前所描述的各种方法在构建或编译时间处预先确定,例如梳理包中的指令的位或者插入NOP,所述NOP经配置使得当在运行时间处硬件将组合包的位以用于跳转的验证时包中的位或指令的组合将产生所期望的ID。在一方面中,块502的过程可以在处理单元(例如,单元302)或其它硬件的运行时间期间被执行。另外,应注意第一标识符是在编译或构建时间期间先前预先确定的值,并且因此在某种意义上是此时的包所固有的。另外,应注意块502的过程可以通过处理单元(例如,单元302)实施或通过使用其它特定硬件实施。

最后,方法500包含比较第一标识符和第二标识符并且当第一和第二标识符被确定为不兼容的时确定无效控制流,如块506所示。在块506中的此过程可包含之前所论述的验证函数中的一个,包含通过精确匹配或通过一个标识符被确定为其它标识符的倍数来确定兼容性。在一方面中,块506的过程可通过处理单元来执行,具体地说例如单元302和验证函数逻辑308。当未发现ID的兼容性时,随后运行时间异常升高,因为这可以指示攻击。应注意方法500可包含处理单元或其它特定硬件,所述处理单元或其它特定硬件确定当处理单元碰到跳转指令(例如,间接跳转)时方法500的过程将被执行或起始。

另一方面,应注意组合函数/ID确定逻辑308可经动态地配置使得可以作出是否使用组合函数来计算ID或简单地指派预定义ID的决定。类似地,验证函数逻辑310可经配置以在动态或混合使用方式中进行运算。在此情况下,验证可通过基于一个ID是另一ID的某一倍数以便确定兼容性来选择性地挑选匹配源和目标ID为等同的或匹配的来实现。在此情况下,某一指示(例如,旗标或位)可以通过编译器提供使得在运行时间期间处理器将知晓是否寻找精确匹配或倍数(或一些其它特征或条件以确定ID之间的兼容性)。还应注意,验证函数不限于精确匹配或基于倍数或除法的匹配,并且所属领域的技术人员将了解可以使用其它函数来确定源和目标ID的兼容性。

图6说明根据本发明用于包含构建或编译时间元件以及运行时间元件的控制流验证的方法600的实例。与方法500互补的方法600包含包中的跳转或调用流指令(例如,间接跳转或调用流指令)的识别,以及确定或设置用于源的标识符以及以将在运行时间期间使用的包为目标以验证控制流。方法600包含基于源包中的内容或指令(例如,SID)确定用于源包的第一标识符,以及调节源包以产生所确定的标识符,如方法600的块602中所示。在块602中的此过程可在构建时间执行并且包含确定用于源包的所期望的标识符,例如SID,方法是选择预先确定的ID或已经指派的ID,或使用组合函数组合来自包中的指令的位以基于包的内容计算对包特定的ID。在一方面中,必要时还可以调节源包以确保组合函数产生所期望的SID值。举例来说,源包的调节可以通过使用上文所论述的NOP指令来实现,当NOP指令插入到包中时将确保当包的位是组合的时,所得值将是所期望的ID值。应注意块602的过程可在编译或构建时间期间通过软件中的编译器来执行或通过使用特定硬件来执行。

接下来,方法600包含确定用于源包指向的目标包的第二标识符,如在块604处所指示。块604的过程还可包含必要时调节目标包以当组合函数在运行时间处通过硬件应用时产生所期望的标识符。在另一方面,此调节可包含插入在目标包中的NOP指令的使用,所述NOP指令经配置以确保当位被组合时,所得组合将产生所期望的ID。在块604中的过程可在构建时间处执行并且包含基于预先确定的集合ID或SID(即,出于验证调用流的目的使SID和TID值兼容)以及所公开的组合和验证函数确定第二标识符(例如,目标包ID)。并且,块604的过程可通过软件中的编译器执行,但是还可通过特定硬件执行。

最后,方法600包含利用第一标识符和第二标识符用于当在运行时间运算期间第一和第二标识符被确定为不兼容时确定无效控制流的如块606中所示的过程。此过程606可在运行时间处执行并且可包含之前所论述的验证函数中的一个,包含通过两个ID的精确匹配或通过一个标识符是另一个的倍数确定兼容性,仅举两个实例。具体地说,块606的过程可通过处理单元(例如,单元302)和验证函数逻辑308执行。还应注意,块606的过程对应于图5中所示的方法500。

进一步应注意,块602和604的过程可以是预先确定的或在图5或块606的过程的运行时间在实施方案之前被执行。在一方面中,在块602和604中实现的第一和第二标识符的预先确定可以在它们在处理器或装置(例如,移动无线装置)内的处理器中的存储和/或实施之前构建或编译成源代码或指令。因此,在一些方面中,标识符的预先确定可以被视为先验信息,所述先验信息允许处理器在运行时间例如随着这些标识符被构建到源代码中而验证调用流,所述源代码被传递到处理器或运行源代码的装置。

根据其它方面,应注意第一标识符是在编译期间通过以下项中的至少一或多个预先确定的:基于源包内容设置预先确定的值和/或调节源包的内容使得源包中的第一标识符将被确定为通过硬件在运行时间期间基于源包内容的计算的结果。类似地,第二标识符是在编译期间预先确定的使得其经配置以与第一标识符兼容,方法是至少调节目标包的内容使得目标包中的第二标识符将被确定为通过硬件在运行时间期间基于目标包内容的计算的结果。

在其它方面中,第一和第二标识符中的至少一个采用在编译期间可插入在包中的预定义指令的形式配置并且经配置以当放置在包内时不影响处理单元的运算,例如,NOP指令。另外,预定义指令可以放置为目标包中的第一指令,在运行时间期间其放置还可发信号通知到硬件所述包配置有标识符,所述标识符待用于比较源和目标包的标识符。

另一方面,应注意包通常是根据所公开的方法和设备在通过硬件的运行时间之前在编译或构建时间期间得到调节。因此,调节和NOP插入将通常在编译或构建时间处执行。尽管如此,应注意在其它方面中所属领域的技术人员可以构想出其它装置和计时可被设想出以调节包以实现所公开的控制流验证。

还应注意,本发明所公开的NOP指令的添加可增加存储器占用率和执行时间。举例来说,在六边形中每个NOP指令将添加存储器的4个字节。如果直接使用源包的SID而不添加任何NOP,那么每次跳转的存储器开销是近似地4字节(目标包中的NOP,除其TID与SID兼容的不需要任何调节的那些包以外,这将在多数情况下是罕见的)。取决于组合函数,这可产生具有相同SID的许多包,这将产生未经授权的控制传递。替代地,如果NOP被添加到每个间接控制-传递包,那么获得SID的完全控制,但是在六边形的例子中存储器开销近似地是每间接控制-传递8字节。

将仅NOP指令插入到跳转目标包中以消除控制传递的歧义的确形成了为了精确度的存储器的折衷。然而,如所属领域的技术人员将了解,本发明所公开的方法和设备提供允许编译器设计者达到存储器占用率与精确度之间的任何所期望的平衡的多个设计选项。还应注意,使用更复杂的组合和验证函数就未经授权的控制传递的数目而言可产生更好的结果,但是提高的复杂度将使它们更加缓慢。鉴于上述内容,所属领域的技术人员将了解本发明方法和设备可提供前向跳转(例如,跳转或调用)和后向路径(例如,返回)二者的保护。此外,本发明方法和设备不需要利用存储器内表或加密,由此降低了复杂度。并且,所述方法并不受代码重新安置的影响,而是简单的实施在编译器和硬件侧两者上。另一方面,本方法使得有可能获得在编译时间处允许的控制-传递的完整的可见度,分析返回-定向的编程(ROP)利用的潜能,以及在必要时重新指派ID。

应理解,在所公开的过程中的步骤的特定次序或层级仅仅是示例性方法的实例。应理解,基于设计偏好,过程中的步骤的特定次序或层级可以重新布置,同时保持在本发明的范围内。随附的方法权利要求按照样本次序呈现各种步骤的元件,并且如果有可能改变所述次序或层级,那么不必意图受限于所呈现的特定次序或层级。

所属领域的技术人员将理解,可使用多种不同技术及技艺中的任一者来表示信息及信号。举例来说,可通过电压、电流、电磁波、磁场或磁粒子、光场或光粒子或其任何组合来表示在整个上文描述中可能参考的数据、指令、命令、信息、信号、位、符号和芯片。

所属领域的技术人员将进一步了解,结合本文中所公开的实施例而描述的各种说明性逻辑块、模块、电路和算法步骤可实施为电子硬件、计算机软件或两者的组合。为清晰地说明硬件与软件的此可互换性,上文已大体就其功能性描述了各种说明性组件、块、模块、电路和步骤。此类功能性是实施为硬件还是软件取决于特定应用及强加于整个系统的设计约束。所属领域的技术人员可针对每一特定应用以不同方式来实施所描述的功能性,但这样的实施方案决定不应被解释为会引起偏离本发明的范围。

可用通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑装置、离散门或晶体管逻辑、离散硬件组件或其经设计以执行本文所描述的功能的任何组合来实施或执行结合本文中所公开的实施例而描述的各种说明性逻辑块、模块和电路。通用处理器可以是微处理器,但在替代方案中,处理器可以是任何常规处理器、控制器、微控制器或状态机。处理器还可实施为计算装置的组合,例如,DSP与微处理器的组合、多个微处理器的组合、一个或多个微处理器与DSP核心结合,或任何其它此类配置。

结合本文中所公开的实施例描述的方法或算法的步骤可直接体现于硬件、由处理器执行的软件模块或两者的组合中。软件模块可以驻留在RAM存储器、快闪存储器、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可移动磁盘、CD-ROM,或所属领域中已知的任何其它形式的存储媒体中。示例性存储媒体耦合到处理器,使得处理器可以从存储媒体读取信息以及将信息写入到存储媒体。在替代方案中,存储媒体可集成到处理器。处理器及存储媒体可驻留在ASIC中。ASIC可驻留在用户终端中。在替代方案中,处理器和存储媒体可以作为离散组件驻留在用户终端中。

提供对所公开的实施例的先前描述以使得所属领域的技术人员能够制作或使用本发明。所属领域的技术人员将容易了解对这些实施例的各种修改,且可在不脱离本发明的精神或范围的情况下将本文中所定义的一般原理应用于其它实施例。因此,本发明并不意图限于本文中所示的实施例,而应被赋予与本文中所公开的原理和新颖特征相一致的最广范围。

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