首页> 中国专利> 用于保护程序以防控制流操纵以及以防有错误的程序运行过程的方法和设备

用于保护程序以防控制流操纵以及以防有错误的程序运行过程的方法和设备

摘要

本发明涉及一种用于保护程序以防控制流操纵的方法,其中用于产生和检验控制流标记序列的保护程序指令被插入到该程序的至少一个包含程序指令的程序指令序列中。

著录项

  • 公开/公告号CN101779210A

    专利类型发明专利

  • 公开/公告日2010-07-14

    原文格式PDF

  • 申请/专利权人 西门子公司;

    申请/专利号CN200880103333.X

  • 发明设计人 B·迈耶;M·沙夫休特尔;H·瑟谢克;

    申请日2008-07-10

  • 分类号G06F21/00(20060101);

  • 代理机构72001 中国专利代理(香港)有限公司;

  • 代理人胡莉莉;李家麟

  • 地址 德国慕尼黑

  • 入库时间 2023-12-18 00:05:42

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2014-03-05

    授权

    授权

  • 2010-10-27

    实质审查的生效 IPC(主分类):G06F21/00 申请日:20080710

    实质审查的生效

  • 2010-07-14

    公开

    公开

说明书

技术领域

本发明涉及一种用于保护程序以防控制流操纵的方法和设备,并且用于检测有错误的程序运行过程。

背景技术

在任意硬件上运行的安全关键的程序应用中,存在如下危险:攻击者试图通过外部影响有针对性地干扰实施程序应用的硬件并且由此改变正常的程序运行过程。在加密过程中,对程序运行过程的改变足以提取在正常条件下被安全地存储在硬件中的密钥,并且足以因此有损于加密系统。

图1用于图示本发明所基于的问题。

图1示出了常规的数据处理系统中的口令输入的流程图。首先,用户被要求输入口令。在进行了口令输入之后,由该数据处理系统检查该口令的正确性。如果该口令正确,则允许接入该数据处理系统的资源。在口令有错误的情况下,拒绝数据存取。

在图1中被示为流程图的程序例如在用于执行(Abarbeitung)以任意程序语言编写的程序指令的处理器中被实施。如果进行对硬件平台或处理器的攻击,则攻击者可以在用于检验口令的程序指令被执行的那个时刻实现:操纵该程序的程序流来使得尽管口令输入有错误仍然通过数据处理单元允许数据存取,也就是说,程序流错误地分支。

例如,攻击者可以借助于激光闪光(Laserblitzen)有针对性地在时间上和在空间上干扰各个指令或程序指令的执行,使得所实施的程序的控制流被变更。在此,例如各个转移指令可被中断,或者对子程序的调用也可被中断。

另一攻击可能性在于引起所计算的中间结果的改变。

发明内容

因而,本发明的任务是提供一种用于保护程序以防控制流操纵以及用于检测有错误的程序运行过程的方法和设备。

本发明提供了一种用于保护程序以防控制流操纵的方法,其中用于产生和检验控制流标记序列的保护程序指令被插入到该程序的至少一个包含程序指令的程序指令序列中。

在根据本发明的方法的实施形式中,控制流标记序列的控制流标记由数字、随机数、计数值、程序指令的指令操作码、程序指令的指令地址、程序指令的操作数或者由程序指令计数器的计数值构成。

在根据本发明的方法的实施形式中,保护程序指令或者保护程序指令序列根据控制流标记序列来计算检查值(Prüfwert)。

在根据本发明的方法的实施形式中,在直到该时刻为止所产生的控制流标记序列的具有恒定长度的部分上构成该检查值。

在根据本发明的方法的可替换的实施形式中,在直到该时刻为止所产生的整个控制流标记序列上构成检查值。

在根据本发明的方法的实施形式中,检查值由哈希值构成。

在根据本发明的方法的实施形式中,保护程序指令或者保护程序指令序列将所计算的检查值与参考控制流标记序列的参考值进行比较或者检查:所计算的检查值是否被包含在多个参考值中。

在根据本发明的方法的实施形式中,参考值由参考值哈希值构成。

此外,本发明还提供了一种用于保护程序以防控制流操纵的设备,其中用于产生和检验控制流标记序列的保护程序指令被自动插入到该程序的至少一个包含程序指令的程序指令序列中。

此外,本发明还提供了一种用于检测程序的有错误的程序运行过程的方法,其具有步骤:

-在该程序的程序运行过程期间产生控制流标记序列,以及

-如果所产生的控制流标记序列与所存储的参考控制流标记序列不一致,或者如果所产生的控制流标记序列并不被包含在多个所存储的参考控制流标记序列中,则检测到有错误的程序运行过程。

在根据本发明的用于检测有错误的程序运行过程的方法的实施形式中,控制流标记序列包含在所有情况下由数字、随机数、计数值、指令操作码、指令地址、操作数或者由程序指令计数器的指令计数值构成的控制流标记。

在根据本发明的方法的实施形式中,如果所计算的检查值与所计算的参考值不一致,或者如果所计算的检查值并不被包含在多个所计算的参考值中,则有错误的程序运行过程被检测到。

此外,本发明还提供了一种用于检测程序的有错误的程序运行过程的设备,其具有:

-用于在该程序的程序运行过程期间产生控制流标记序列的装置,以及

-用于在所产生的控制流标记序列与所存储的参考控制流标记序列不一致时或者在所产生的控制流标记序列并不被包含在多个所存储的参考控制流标记序列中时检测程序的有错误的程序运行过程的装置。

此外,本发明还提供了一种计算机程序,该计算机程序具有为了防止控制流操纵而被插入的保护程序指令,所述保护程序指令被设置用于产生和检验控制流标记序列。

在根据本发明的计算机程序的实施形式中,控制流标记序列的控制流标记在所有情况下由数字、随机数、计数值、指令操作码、指令地址、操作数或者由指令计数值构成。

此外,本发明还提供了一种用于存储计算机程序的数据载体,所述计算机程序具有为了防止控制流操纵而被插入的保护程序指令,所述保护程序指令被设置用于产生和检验控制流标记序列。

附图说明

下面,参考附图来说明用于保护程序以防控制流操纵以及用于检测有错误的程序运行过程的根据本发明的方法和根据本发明的设备的实施形式。

图1示出了用于解释本发明所基于的问题的流程图;

图2示出了用于图示根据本发明的用于保护程序以防控制流操纵以及用于检测有错误的程序运行过程的可能的行为方式的流程图;

图3示出了要保护的程序的控制流的例子;

图4示出了图3中示例性示出的程序的控制流图;

图5示出了按照根据本发明的方法的实施形式的参考控制流标记序列的生成的例子;

图6示出了用于阐述根据本发明的方法的工作方式的在出现错误的情况下的控制流标记序列的例子;

图7示出了用于阐述根据本发明的方法的工作方式的在出现错误的情况下的控制流标记序列的另一例子;

图8示出了用于图示按照根据本发明的方法所保护的计算程序的代码列表。

具体实施方式

图2示出了根据本发明的用于保护程序以防控制流操纵以及用于检测程序的有错误的程序运行过程的方法中的基本行为方式。

首先,未受保护的程序被读入。该程序包含多个程序指令,所述程序指令由硬件根据控制流来执行。该硬件例如包含微处理器。该程序的控制流除了具有要顺序执行的程序部分之外还具有程序分支。

图3示出了示例性的计算机程序的流程图,所述计算机程序包含多个程序步骤S1至S9。图3中所示的程序步骤S1至S9中的每个程序步骤都包括一个或更多要执行的程序指令。图4是与图3中所示的流程图相关联的控制流图。如从图3、4中可以认识到的那样,所示出的实例程序具有更多程序分支S3、S4、S6。在图4中,按照图3的程序的控制流被示为有向图。该计算机程序包含要顺序经过的程序部分以及包含表示程序分支的节点,所述要顺序经过的程序部分被示为该图的棱边(Kante)。因而,对程序的特定的实施可以被示为该控制流图内的路径。根据本发明的方法允许在实施程序之后确定:该程序在其实施期间已经经过了哪条路径。

如图2所示,为了实现这一点,原始的未受保护的计算机程序首先被转换成受保护的程序。在此,为了保护该程序以防控制流操纵,该未受保护的程序通过如下方式被转换:用于产生和检验控制流标记序列的保护程序指令(S-PB)被插入到未受保护的程序的至少一个包含程序指令PB的程序指令序列中。

因此,为了确定该程序的实施路径,测试点或控制流标记被插入到顺序实施的程序部分中,所述顺序实施的程序部分对应于该控制流图的棱边。在此,在一种实施形式中,在每个顺序实施的程序部分中插入至少一个测试点或控制流标记。

所插入的控制流标记可以是数字、随机数、计数值、程序指令的指令操作码、程序指令的指令地址、程序指令的操作数或者程序指令计数器的计数值。所插入的测试点或标记可以例如被简单地连续编号。此外,在测试点上当前被插入的指令的地址可被用作标记。此外还可能把所实施的程序指令或指令本身或者其操作数用作标记。此外还可能在制订该程序期间随机地生成标记。

在根据本发明的用于保护程序以防控制流操纵的方法的实施形式中,被插入到该程序的原始程序指令序列中的保护程序指令或者保护程序指令序列根据所述控制流标记序列计算出检查值。在此,在每个测试点上执行对检查值的计算,该计算与先前的测试点的至少一个标记有关。所计算的检查值例如可以由哈希值构成。

在根据本发明的方法的实施形式中,针对直到该时刻为止所产生的整个控制流标记序列构成检查值。

在根据本发明的用于保护程序以防控制流操纵的方法的可替换的实施形式中,在直到该时刻为止所产生的控制流标记序列的具有恒定长度的部分上构成检查值。

在根据本发明的用于保护程序以防控制流操纵的方法的实施形式中,所插入的保护程序指令或者保护程序指令序列S-PB将所计算的检查值(其例如包含哈希值)与参考控制流标记序列的参考值进行比较。如果所计算的检查值与该参考值一致,则很大可能以正确的次序经过程序部分的计算机程序的实施路径。如果所计算的检查值与该参考值不一致,则很大可能该程序的实施错误存在。

在根据本发明的用于保护程序以防控制流操纵的方法的可能的实施形式中,保护程序指令或者保护程序指令序列检查:所计算的检查值是否被包含在多个预给定的参考值中。所述参考值例如可以是参考哈希值。

根据所使用的用于计算检查值的方法,可以局部地验证程序的部分实施路径。

在根据本发明的方法的实施形式中,所计算的检查值与固定数目的紧接在前面经过的测试点有关。

在根据本发明方法的可替换的实施形式中,检查值与到现在为止所经过的整个实施路径的标记有关。如果程序的到现在为止的整个实施路径被检验,则得到以下优点:对应用中的控制流的验证遍布许多测试点。因此,借助于被精确调整的攻击试图绕过检查值与参考值的各个比较的攻击也很大可能在另外的测试点上被检测到。

通过插入保护程序指令S-PB而被保护的程序使得在运行程序期间能够检测到对程序控制流的操纵。

为此,在受保护的含有被插入的保护程序指令的计算机程序的运行期间,在程序运行过程期间产生控制流标记序列。

如果在此所产生的控制流标记序列与所存储的参考控制流标记序列并不一致,或者如果所产生的控制流标记序列并不被包含在多个事先所存储的参考控制流标记序列中,则有错误的程序运行过程被检测到。

图5示出了用于阐述根据本发明的方法的简单的计算机程序的控制流图。该计算机程序是简单的循环。只要计数值i<5,则进行特定的计算。该控制流图的棱边是要顺序执行的程序部分,而节点对应于程序分支。

在正常情况下,在没有操纵的情况下,棱边A、B、C以相关联的下列参考控制流标记序列而被执行:AB AB AB AB AB C。

这意味着,包含棱边AB的循环被经过五次,并且接着通过棱边C跳转到该程序的结尾。每个程序或每个程序部分都具有可确定的表示正确的程序运行过程的参考控制流标记序列。

图6示出了在第三次经过图5中所示的程序循环时出现错误F1的情况下的控制流标记序列。

在出现错误F1的情况下的控制流标记序列为:AB AB AB C。

图7示出了在第三次迭代(i=3)中的循环结尾处出现错误F2的情况下的控制流标记序列。在出现错误F2的情况下,该控制流标记序列为:AB AB A。

如能从图6、7中的例子中认识到的那样,在计算机程序的程序分支上出现的每个错误F都具有典型的或表征性的控制流标记序列,所述控制流标记序列偏离于无错误运行的程序的参考控制流标记序列。

因而,在根据本发明的方法中,为了进行错误检测而将保护程序指令S-PB插入到原始计算机程序的程序代码中。

图8示意性地示出了利用保护程序指令S-PB而被保护的计算机程序,该计算机程序被保护以防控制流操纵。程序计数器(Programm-Counter)PC指向要执行的程序指令PB。在测试点上,保护程序指令被插入到该程序运行过程中。所述保护程序指令S-PB例如根据控制流标记序列来计算检查值。在图8中所示的例子中,保护程序指令S-PB-1根据包含多个控制流标记的控制流标记序列来计算哈希值作为检查值。在图8中所示的例子中,所述控制流标记包含在前的程序指令PC1至PCi的程序计数器PC的程序指令计数值。

在另一测试点上设置有另一保护程序指令S-PB2,所述另一保护程序指令S-PB2同样根据控制流标记来计算哈希值作为检查值。在所述第二保护程序指令S-PB2的情况下,所述控制流标记同样由在前的程序指令的程序指令计数值PC构成(PCi+1…PCj)。

另一保护程序指令S-PB 3将通过第一保护程序指令S-PB1所确定的和存储的检查值、即哈希值HASH1与参考值HASH1-REF进行比较。此外,第三保护程序指令S-PB3将通过第二保护程序指令S-PB2所计算的检查值HASH2与参考值HASH2-REF进行比较。

在图8中所示的实施例中,保护程序指令S-PB3将所计算的检查值与参考控制流标记序列的参考值进行比较。

在可替换的实施形式中可以检查:所计算的检查值、例如HASH1、HASH2是否被包含在多个预给定的所存储的参考值中。

在根据本发明的方法的可能的实施形式中,由保护程序指令针对直到该时刻为止所产生的整个控制流保护序列构成检查值。

在根据本发明的方法的可替换的实施形式中,在直到该时刻为止所产生的控制流标记序列的具有恒定长度的部分上构成检查值。程序指令PB例如可以由汇编程序语言形式的程序指令或者程序指令序列构成。

CPU内的程序指令计数器或程序计数器PC指向程序存储器的其上存放有下一要执行的程序指令的存储器地址。

例如,用于将变量的值X存储在寄存器R1中的汇编程序指令的例子是:

MOV R1,X。

该程序指令具有指令操作码MOV以及操作数。

当前在测试点上被插入的指令或程序指令的地址例如可被用作标记。可替换地,也可能使用程序指令或指令本身和/或程序指令的参数。例如,如果使用程序计数器的地址,则检查值可以在使用子程序调用的情况下被计算出,因为在执行子程序调用时,程序计数器的当前值通常被置于微控制器的栈上。如果根据本发明的方法被应用于如下程序:该程序在其运行时间期间被移位并且因而测试点在程序制定时不具有固定地址,则对程序计数器的地址的计算可以相对于固定点、例如相对于所实施的程序的开始处或者相对于所实施的程序的结尾处来进行。

如果与指令或程序指令或者其地址无关地确定测试点的标记,则也能相对简单地在程序制定时预先计算相关联的检查值。此外,在一种实施形式中可能给不同的测试点配备有相同的标记,并且通过这种方式使得可以对于所描述的行为方式来区分相应的相关联的顺序的程序部分。

在根据本发明的方法的其中地址和/或程序指令或指令被用作控制流标记的实施形式中,对检查值的确定更复杂,因为具体值随着程序的每次变化或者随着由开发工具的汇编器或者编译器进行的每个翻译过程而变化,并且因而必须被匹配。

在根据本发明的方法的可能的实施形式中,所插入的保护程序指令计算哈希值作为检查值。哈希函数或所计算的哈希值的哈希函数对冲突具有足够的抵抗力。在此,所述哈希函数被选择为使得确保不同测试点的检查值的冲突是足够罕见的。这使得能够区分测试点的经过。

在根据本发明的方法的可能的实施形式中,计算检查值,所述检查值局部地验证该程序的所经过的实施路径中的仅仅一部分。例如,恒定数目的最后所经过的标记可以被暂存,并且可以仅仅对于这些被暂存的标记进行对检查值的计算。然后,所暂存的标记或控制流标记在程序实施期间像窗那样在该程序的到现在为止所经过的实施路径的标记上推动。

在其它的实施变型方案或实施例中,在同时包含有硬件或执行程序指令的微处理器的情况下例如采用硬件计数器,所述硬件计数器与所实施的指令无关地对微处理器的时钟周期同时进行计数。

在根据本发明的方法的实施形式中,这种硬件计数器在该程序实施的开始时被初始化,并且接着该硬件计数器在实施应用或计算机程序期间被允许自由运转,其中当前的计数器读数在计算检查值的时刻被用作控制流标记。在一种实施形式中,需要微控制器的不同指令或程序指令的实施时间是恒定的,以便获得不同程序运行的可再现的计数器读数。除此之外,在所述实施形式中,计算机程序或软件允许不具有拥有非确定性的副作用的程序部分,诸如向端口轮询外部结果的中断例程或者程序部分。除此之外,在该实施形式中,需要应用或程序的控制流图的不同的顺序经过的程序部分或分段拥有不同的运行时间,或者至少对在不同的顺序经过的分段或程序部分中的检查值的计算在对于相应的计数器读数的不同时刻发生,以便也可以通过所计算的检查值来区分顺序分段或程序部分,并且可以可靠地检测到错误攻击。

根据本发明的方法执行对受保护的程序的实施路径的直接验证。在此,防止程序的程序实施中的错误的保护被耦合到该应用或该程序处理的数据上。根据本发明的方法与由应用所计算出的数据中的冗余无关,而且也与所计算的中间结果无关。

根据本发明的用于保护程序以防控制流操纵以及用于检测程序的有错误的程序运行过程的方法尤其是具有如下优点:用于保护程序的保护程序指令也可以在事后被集成到或被自动插入到已有的程序或应用中。因此,仅必须已知各个程序的控制流图。因而,在一种实施形式中,为了实施保护措施,在所期望的测试点上插入保护程序指令或者插入用于计算和验证检查值的合适子程序的调用就足以。

与通过所存储的数据内的冗余或通过所计算的中间结果的不变量的常规的保护机制不同,根据本发明的方法的另一优点在于:试图改变循环实施的数目以便由此操纵所计算的中间结果的攻击也可以被可靠地检测到。

根据本发明的方法的另一优点在于:为了插入保护程序指令,不同安全等级是可伸缩的,或在该方法中可以考虑要保护的应用或要保护的程序的安全需求。根据所使用的硬件和错误模型,通过所使用的控制流标记和检查值的类型和大小以及通过用于计算检查值的方法能调节检测到程序的控制流中的错误的概率。次外,还能采用产生不规则的随机出现的检查值的序列的方法,所述检查值序列比例如循环计数器更难以被攻击操纵。

根据本发明的方法尤其适于保护加密算法的实施以防错误攻击。为了抑制对加密算法的实施时间进行流分析(Stromanalysen)和分析,所述加密算法通常被实施为使得所述实施既不拥有与数据有关的分支也不拥有与数据有关的实施时间。因而,在这种实施方式中,实施路径仅仅与输入数据的长度有关,并且与输入数据的具体值无关。因而,这样的算法具有固定的实施路径,所述固定的实施路径利用根据本发明的方法可容易地验证。

根据本发明的方法允许通过稍微改变软件或程序来确保要保护的应用和该程序的正确控制流。受保护的程序能够很大可能独立地验证:以正确的次序实施对于正确的程序实施需要的或相关的所有程序部分。此外,可以确保经过具有正确数目的程序循环。根据本发明的方法保护程序尤其是以防如下攻击:所述攻击试图干扰或者阻碍循环、跳转或者子程序调用的实施。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号