计算机代码完整性检查

文档序号:1324099 发布日期:2020-07-14 浏览:19次 >En<

阅读说明:本技术 计算机代码完整性检查 (Computer code integrity checking ) 是由 尤瓦尔·伊特金 艾哈迈德·塔姆 于 2019-12-30 设计创作,主要内容包括:一种装置,其具有存储固件的固件存储器,加载至少一部分固件以供处理器执行的高速缓存存储器,以及具有已定义的校正子存储位置并在与存储在高速缓存存储器中的固件相关联的高速缓存行条目上迭代执行以下操作的固件检查引擎:选择高速缓存行条目;验证在高速缓存行条目中映射的地址是否映射到固件存储器中的地址,并且当高速缓存行条目被锁定并且高速缓存行条目中映射的地址映射到固件存储器中的地址时,比较高速缓存行条目的内容与存储在固件存储器中的固件中的对应地址的内容,并产生指示该装置的完整性是否受到损害的完整性结果。摘要并不意味着是限制性的。(An apparatus having a firmware memory to store firmware, a cache memory to load at least a portion of the firmware for execution by a processor, and a firmware inspection engine having defined syndrome storage locations and iteratively performing the following on cache line entries associated with the firmware stored in the cache memory: selecting a cache line entry; verifying whether the address mapped in the cache line entry maps to an address in firmware memory, and when the cache line entry is locked and the address mapped in the cache line entry maps to an address in firmware memory, comparing contents of the cache line entry with contents of a corresponding address in firmware stored in firmware memory and generating an integrity result indicating whether integrity of the apparatus is compromised. The abstract is not meant to be limiting.)

计算机代码完整性检查

技术领域

本发明总体上涉及检查计算机代码的完整性,并且尤其但非排他地涉及检查计算机固件代码的完整性。

背景技术

一些用于检查计算机代码的完整性的系统、尤其是用于在系统初始化的时刻检查计算机系统软件的完整性的系统是已知的。

发明内容

在某些实施例中,本发明试图提供一种改进的系统和方法,总体上用于检查计算机代码的完整性,并且尤其但非排他性地用于检查计算机固件代码的完整性。

因此,根据本发明的示例性实施例,提供了一种装置,其包括:固件存储器,该固件存储器被配置为存储固件;高速缓存存储器,该高速缓存存储器被配置为从该固件存储器加载该固件的至少一部分以供处理器执行;和固件检查引擎,该固件检查引擎被配置为访问该高速缓存存储器和该固件存储器,该固件检查引擎具有存储已知初始值的已定义的校正子存储位置,该固件检查引擎还被配置为在与存储在该高速缓存存储器中的该固件的该至少一部分相关联的多个高速缓存行条目上迭代地执行以下操作:A)从该多个高速缓存行条目中选择高速缓存行条目;B)验证在该高速缓存行条目中映射的地址是否映射到该固件存储器中的地址,并产生固件映射结果;以及C)当该高速缓存行条目被锁定并且该固件映射结果指示该高速缓存行条目中映射的地址映射到该固件存储器中的地址时,将该高速缓存行条目的内容与存储在该固件存储器中的该固件中的对应地址的内容进行比较,并产生指示该装置的完整性是否受到损害的完整性结果。

此外,根据本发明的示例性实施例,当该高速缓存行条目的该内容与存储在该固件存储器中的该固件的该对应地址的该内容不匹配时,该完整性结果指示该装置的完整性已受到损害。

仍进一步根据本发明的示例性实施例,该固件检查引擎还被配置为:D)当以下至少一项为真时,使用该完整性结果计算校正子值,并将该校正子值存储在该固件检查引擎中的内部存储装置中的该已定义的校正子存储位置中:该完整性结果指示该高速缓存行的该内容与存储在该固件存储器中的该固件中的该对应地址不匹配;在该高速缓存行条目中设置了“脏”高速缓存指示;以及第一结果指示该高速缓存行条目中的该固件地址未映射到该固件存储器中的地址。

另外,根据本发明的示例性实施例,该固件检查引擎被配置为在该处理器对指令的执行期间进行操作。

此外,根据本发明的示例性实施例,该固件存储器包括运行时只读固件存储器。

此外,根据本发明的示例性实施例,该已定义的校正子存储位置包括安全位置,该安全位置的内容不可通过在该处理器中运行的软件来修改。

仍进一步根据本发明的示例性实施例,在与存储在该高速缓存存储器中的该固件的该至少一部分相关联的所有高速缓存行条目上执行在多个高速缓存行条目上迭代执行的操作。

另外,根据本发明的示例性实施例,以随机或伪随机顺序执行在多个高速缓存行条目上迭代执行的操作。

此外,根据本发明的示例性实施例,该校正子值包括CRC值。

进一步根据本发明的示例性实施例,该校正子值包括哈希值。

仍然根据本发明的示例性实施例,该已知初始值为零。

另外,根据本发明的示例性实施例,该装置还包括与该固件检查引擎可操作地相关联的通信接口,该通信接口被配置为向该装置外部的目的地发送消息,该消息指示该装置是否处于受损害的状态。

此外,根据本发明的示例性实施例,该通信接口被配置为仅在从该固件检查引擎接收到该校正子值与该已知初始值不同的指示时才将该消息发送到该装置外部的目的地。

此外,根据本发明的示例性实施例,该装置外部的目的地包括预先配置的目的地。

进一步根据本发明的示例性实施例,该目的地包括以下中的一个或多个:主机计算机;基板管理控制器;以及外部可信根。

仍然根据本发明的示例性实施例,该通信接口包括PCIe接口。

另外,根据本发明的示例性实施例,该通信接口包括网络通信接口。

此外,根据本发明的示例性实施例,该消息包括加密的消息。

此外,根据本发明的示例性实施例,使用以下之一对该加密的消息进行加密:对称加密;以及非对称加密。

仍然根据本发明的示例性实施例,该消息包括签名的消息。

另外,根据本发明的示例性实施例,该高速缓存存储器在该装置的外部。

此外,根据本发明的示例性实施例,该装置包括该高速缓存存储器。

根据本发明的另一示例性实施例,还提供一种方法,该方法包括:提供被配置为存储固件的固件存储器;提供被配置为从该固件存储器加载该固件的至少一部分以供处理器执行的高速缓存存储器;以及提供被配置为访问该高速缓存存储器和该固件存储器的固件检查引擎,该固件检查引擎具有存储已知初始值的已定义的校正子存储位置;以及该固件检查引擎在与存储在该高速缓存存储器中的该固件的该至少一部分相关联的多个高速缓存行条目上迭代地执行以下操作:A)从该多个高速缓存行条目中选择高速缓存行条目;B)验证在该高速缓存行条目中映射的地址是否映射到该固件存储器中的地址,并产生固件映射结果;以及C)当该高速缓存行条目被锁定并且该固件映射结果指示该高速缓存行条目中映射的地址映射到该固件存储器中的地址时,将该高速缓存行条目的内容与存储在该固件存储器中的该固件中的对应地址的内容进行比较,并产生指示该装置的完整性是否受到损害的完整性结果。

附图说明

结合附图,从下面的详细描述中将更全面地理解和了解本发明,其中:

图1是根据本发明示例性实施例构造和操作的、用于检查计算机代码完整性的系统的简化框图;

图2是图1的系统的一部分的示例性实施例的简化框图图示;和

图3是图1的系统的一部分的示例性操作方法的简化流程图。

具体实施方式

以下概述提供了对本发明的某些示例性实施例的一般性非限制性介绍。

本发明的发明人认为,用于检查计算机系统代码的完整性的已知系统通常被用于在系统启动的时刻检查计算机系统代码的完整性,并且这种系统不能有效地检测在系统启动的时刻通过了完整性检查的计算机系统代码后来被损坏的可能性。一般而言,不应受到未经授权的改变的重要计算机系统代码被保存在闪存固件存储存储器中,并在系统启动(初始化)的时刻被读入高速缓存存储器中。在系统启动的时刻检查闪存固件存储存储器中的代码的完整性的方法是已知的(其细节不是本发明的示例性实施例的范围的一部分)。例如,可以使用秘密密钥利用非对称密码签名算法对固件(或其哈希)进行签名;在系统启动的时刻,可以使用公共密钥来检查签名以确保固件的完整性。

作为非限制性示例,如果在计算机系统上运行的软件以未经授权的方式成功改变了高速缓存内容,则可能会发生系统启动后的固件损坏。在本发明的某些示例性实施例中,如下所述,提供了一种系统和方法,其目的是检测这种损坏并阻止尝试操作其系统代码已被损坏的计算机系统。

现在对图1进行参考,其是根据本发明的示例性实施例构造和操作的、用于检查计算机代码的完整性的系统的简化框图。

在某些示例性实施例中,图1的系统包括片上系统(SOC)100,该片上系统可以包括或可以被包括在例如网络交换机、联网接口控制器(NIC)或另一合适的系统中。被包括在图1的系统中的多个其他组件被示为被包括在SOC 100中;可替代地,那些组件中的至少一些不必被包括在SOC 100中。SOC 100的示例是非限制性示例;尽管在一些示例性实施例中,可以使用诸如SOC 100之类的片上系统,但是应当理解,不需要使用SOC 100来实现图1的系统。

作为特定的非限制性示例,SOC 100可以包括:专用集成电路(ASIC);现场可编程门阵列(FPGA);或操作相关联的适当的多个数字和/或模拟元件,这些元件例如包括一个或多个处理器、存储器、一个或多个网络接口、一个或多个实现安全特征的元件、一个或多个控制模块等等。

图1的SOC 100包括处理器(在本文中也被称为“嵌入式CPU”)110,该处理器110可操作来执行存储在高速缓存存储器120中的指令(在本文中也被称为“代码”)。处理器110还可操作来执行存储在一个或多个其他存储器(未示出)中的指令。

通常,在SOC 100的启动时刻,经由闪存控制器140从固件存储装置(在本文中也被称为“闪存”或“固件存储器”)130中加载高速缓存存储器120。通常,固件存储器是只读的(或者至少在运行时是只读的,在本文中也被称为“运行时只读”)。固件存储器130可以如图1中所绘在SOC 100的外部,或者可以可替代地在SOC 100的内部。如上所述,在启动时刻,方法(其细节不是本发明的示例性实施例的范围的一部分)可以被用来在系统启动的时刻检查存储在固件存储器130中的代码的完整性。例如,可以使用秘密密钥利用非对称密码签名算法对存储在固件存储器130中的固件(或其哈希)进行签名;在系统启动的时刻,可以使用公共密钥来检查签名以确保固件的完整性。

图1的SOC 100还包括在下面更详细描述的固件检查引擎(在本文中也被称为“爬虫”)150。图1的SOC 100还可以包括:

1)安全通知消息生成器160,其与固件检查引擎150和主机接口170(其可以包括任何适当的主机接口,诸如,作为非限制性示例,包括PCIe接口)通信。如下文更详细描述的,安全通知消息生成器160可操作来生成消息,并经由主机接口170将所生成的消息发送给主机(未示出,在图1的系统外部)。类似地,安全通知消息生成器160可操作来经由边带接口(未示出)将所生成的消息发送给或者还发送给外部基板管理控制器(BMC)(未示出)和/或外部可信根(可信根在硬件安全领域是众所周知的;外部可信根例如可以采取动作以指示SOC 100受到损坏);以及

2)安全通知分组生成器180,其与固件检查引擎150和网络接口190(其可以包括任何适当的网络接口,诸如,作为非限制性示例,包括任何适当的互联网网络接口)通信。如下文更详细描述的,安全通知分组生成器180可操作来生成一个或多个分组,并经由网络接口190将所生成的(一个或多个)分组发送到网络(未示出,在图1的系统外部),以递送到网络位置。

在示例性实施例中,在设备重置后,安全通知消息生成器160和/或安全通知分组生成器180是一次性可配置的。一旦由设备级重置后开始运行的安全启动代码配置,安全通知消息生成器160和/或安全通知分组生成器180直到下一次设备级重置才能够被禁用并且能够被重新配置,因此确保了一旦识别出安全隐患,对应的消息将被生成并且设置无法被篡改。

现在简要描述图1装置的操作。对图1装置的操作的描述是示例性的,并不意味着限制。

如上所述,在SOC 100的启动时刻,从固件存储装置130向高速缓存存储器120加载固件;此时,使用如上所述的常规方法检查已加载固件的完整性。

当嵌入式处理器110操作时,固件检查引擎150可操作来检查高速缓存存储器120,以便确定存储在高速缓存存储器120中的固件的完整性是否仍然完整,或者相反地,存储在高速缓存器120中的固件是否已被篡改或以其他方式已被破坏(变得缺乏完整性)。由固件检查引擎150使用的示例性方法的细节在下面更详细地描述。

通常但非必要地,固件检查引擎150将检查高速缓存存储器120中的所有位置,以便在从固件存储装置130加载固件之后排除对高速缓存存储器120中存储的固件进行甚至很小的改变的可能性。此外,可能希望固件检查引擎150以随机或伪随机顺序检查高速缓存存储器120中的位置,以便克服对高速缓存存储器120中存储的固件的“聪明的”更改,“聪明的”更改被设计来阻止线性检查。

如果固件检查引擎150判定存储在高速缓存存储器120中的固件缺乏完整性,则固件检查引擎150可以分别指令安全通知消息生成器160和安全通知分组生成器180之一或二者以生成消息或分组,指示由于存储在高速缓存存储器120中的固件的完整性缺乏而导致SOC 100不能被依赖。安全通知消息生成器160然后可以经由主机接口170将所生成的消息发送到主机计算机(未示出),然后该主机计算机可以基于SOC 100不能被依赖而采取任何适当的动作。类似地,安全通知分组生成器180然后可以经由网络接口190将所生成的分组(或多个所生成的分组)发送到适当的一个或多个网络目的地(未示出),然后该一个或多个网络目的地可以基于SOC 100不能被依赖而采取任何适当的动作。

紧接在上面指出的适当动作的非限制性示例包括:主机计算机禁用SOC 100与主机计算机之间的连接(诸如例如PCIe连接);主机计算机重置SOC 100;主机计算机将SOC100断电;以及网络目的地指出不再依赖SOC 100和/或其主机计算机,并且因此从其发出的消息的合法性存疑。

应该理解的是,在本发明的某些示例性实施例中,除了发送指示固件缺乏完整性的消息之外,安全通知消息生成器160和/或安全通知分组生成器180可以操作来发送其他消息,以确保安全通知消息生成器160和/或安全通知分组生成器180及其相应的目的地的通信是可操作的,并且不受攻击者的篡改。然后,这些消息可以由主机、BMC和/或远程网络目的地使用来跟踪SOC 100与相应的目的地之间的功能连接。

现在另外对图2进行参考,图2是图1系统的一部分的示例性实施例的简化框图图示。具体地,图2在示例性实施例中更详细地描绘了图1的高速缓存存储器120和固件检查引擎150,以及描绘了图1系统的其他元件。图2中描绘的图1的元件在图2中被赋予相同的附图标记。

除非本文另外描述,否则在示例性实施例中,固件检查引擎150及其元件可以例如以在SOC 100中的具有非易失性存储装置(未示出)的“片上”可编程逻辑、“硬连线”逻辑、一次性可编程逻辑、FPGA等来实现。

如本领域中已知的,高速缓存存储器120包括多个高速缓存行210。多个高速缓存行210中的每一个包括:

1.脏指示220。脏指示220指示诸如通过由CPU 110对其进行写入的特定高速缓存行是否已被改变,因为从其源(在图1和图2的系统的情况下,源是固件存储器130)读取该行。

2.锁定指示225。锁定指示指示特定高速缓存行是否被“锁定”并且其内容不能被替换。

3.映射地址230,映射地址指示特定高速缓存行被映射到的地址。在图1和图2的系统中,地址通常是(但不是必须)固件存储装置130中的地址,因为高速缓存120通常旨在存储来自固件存储装置130中的地址的数据,可以理解,高速缓存120也可以存储来自其他位置的数据。

4.数据字段240,其包括与映射地址230相对应的数据。映射地址230可以是闪存130中的地址。在一般情况下,数据字段240可以包括源自CPU 110的写操作的数据。在图1和图2的示例性实施例的情况下,当映射地址230映射到存储在闪存130中的固件时,数据字段240应仅包括来自固件存储装置的内容。

图2的固件检查引擎150可以包括控制逻辑250。在示例性实施例中,控制逻辑250包括可编程逻辑电路(尽管可替代地,控制逻辑250可以包括“硬连线”逻辑)。控制逻辑250经由内部总线255与CPU 110可操作地通信,并且被配置为控制固件检查引擎150的操作。在本发明的示例性实施例中,控制逻辑250经由内部总线255而由处理器110配置为系统启动的一部分。

控制逻辑250与图1的安全通知分组生成器180和安全通知消息生成器160可操作地通信。

固件检查引擎150还可以包括:

校正子计算器260,其在示例性实施例中可以例如以在SOC 100中的具有非易失性存储装置(未示出)的“片上”可编程逻辑、“硬连线”逻辑、一次性可编程逻辑、FPGA等来实现。对于如下所述被检查的多个高速缓存行210中的每个高速缓存行,校正子计算器260可以将校正子更新计算为校正子值;设计校正子,使得当多个高速缓存行210中的任何一个没有发现问题时校正子值为零。校正子更新计算在下面更详细地描述。在示例性实施例中,校正子值被存储在固件证明测量结果存储装置320中,该固件证明测量结果存储装置320通常包括诸如合适的寄存器之类的存储器(在下文中描述,并且在本文中也被称为“已定义的校正子存储位置”)。一般来说,证明测量结果存储装置320不能被固件检查引擎150外部的CPU110上运行的软件访问。

地址映射检查器270。地址映射检查器包括存储器接口,该存储器接口针对高速缓存120的给定的高速缓存行210接收所述高速缓存行210的映射地址230,并将映射地址230传递给控制逻辑250。如果控制逻辑250通过对映射地址230的检查确定映射地址230映射到固件地址(在本文中也被称为“固件映射”)并且所述高速缓存行的脏指示220不是“脏”的,则给定的高速缓存行210“通过了地址映射测试”;否则,给定的高速缓存行210“未通过地址映射测试”,这是缺乏完整性的指示。

在示例性实施例中,校正子计算的更新可以(对于给定的高速缓存行210)基于存储在高速缓存行210中的数据与闪存120中的对应位置中的对应数据之间的比较(通常发生在返回数据比较器290中,如下所述)。如果给定的高速缓存行210没有产生“固件映射”结果,则不检查数据并且不将其包括在校正子计算的更新中。校正子更新值计算的任何非零结果指示完整性问题,并且因此,在示例性实施例中,非零结果被用来更新存储在固件证明测量结果存储装置320中的校正子值(如下所述)。例如,对于任何给定的高速缓存行210,校正子更新的实际计算可以基于任何适当的哈希函数或任何适当的CRC函数。

高速缓存存储器扫描器280,其选择高速缓存行210中的行以进行检查(“扫描”)。可以以随机或伪随机的顺序选择高速缓存行210,以便克服对存储在高速缓存存储器120中的固件的“聪明的”更改,“聪明的”更改被设计为阻止高速缓存行的线性检查。然而,应当理解,可替代地,可以线性地检查高速缓存行210(诸如例如,在向前方向上连续地;在向后方向上连续地;等等);或非线性地但不是随机或伪随机地检查高速缓存行210。可以理解的是,在本发明的示例性实施例中,以原子操作(在单个时钟周期内)处理多个高速缓存行210中的每个所选行,使得存储在所选择的高速缓存行中的数据、所选择的高速缓存行的映射地址和所选择的高速缓存行的脏指示全部被同时采样,从而确保特定高速缓存行210中的高速缓存内容的正确解释;这允许固件检查引擎150在读取(采样)所选行之后以较低的速度处理所选择的高速缓存行的高速缓存行内容。

返回数据比较器290。对于由高速缓存存储器扫描器280选择的高速缓存行210中的每个高速缓存行:

-所选行210的数据字段被读入到返回数据比较器290中;如果被需要(当所选行210映射到固件存储装置130时),则固件存储装置(闪存)130中的对应条目的数据经由闪存控制器140被读入到返回数据比较器290中;当需要数据比较时,将两个数据值进行比较;并且比较的结果被发送到控制逻辑250。如果两个数据值相等,则这是缺乏完整性的指示。

将所选择的高速缓存行210的脏指示返回至控制逻辑250;如果脏指示表明当所选行210产生“固件映射”结果时所选行210为“脏”,则这是缺乏完整性的指示,这在控制逻辑250中得到了注意并得到处理。

闪存访问发起器300,其操作来访问闪存130。闪存访问发起器300由控制逻辑250控制。当将固件存储装置(闪存)130中的内容与高速缓存行数据240进行比较时,闪存访问发起器300向闪存控制器140发起读取请求,以读取与高速缓存行210中的映射地址230相对应的对应固件数据。

证明密钥存储装置310。证明密钥存储装置存储密钥,该密钥可以是用于任何适当的非对称加密或签名算法的私有密钥(如本领域中已知的)或者可以是用于任何适当的对称加密或证明算法的密钥(如本领域中已知的)。存储在固件证明测量结果存储装置320中的固件检查过程的结果可以在经由消息生成器160作为消息的一部分或者经由分组发生器180作为分组的一部分被发送或者经由内部总线255被供应给CPU 110之前被加密和/或签名,以向消息/分组的接收者确保该消息/分组的内容是真实的。

现在对图3进行参考,图3是图1系统的一部分的示例性操作方法的简化流程图,图3的方法鉴于上述内容而在很大程度上是不言自明的,其在示例性实施例中是由固件检查引擎150执行的。图3的方法包括以下步骤:

在固件检查引擎中,以下步骤中指示的操作在与存储在高速缓存存储器中的固件的至少一部分相关联的多个高速缓存行条目上迭代地执行(步骤350)。如上所述,通常但非必须地,在所有高速缓存行条目上执行这些步骤。

A)从多个高速缓存行条目中选择高速缓存行条目(步骤355,在示例性实施例中由高速缓存存储器扫描器280执行)。如上所述,可以以随机或伪随机的顺序进行选择;可以线性地进行选择;或者可以非线性地但不是随机或伪随机的顺序进行选择。

B)关于高速缓存行条目中映射的地址是否指向固件地址(在示例性实施例中,由地址映射检查器270检查高速缓存行条目中的地址)进行检查;产生结果(在本文中也被称为“固件映射结果”)。如果第一结果指示映射到高速缓存行条目中的地址指向固件地址,则该特定高速缓存行条目不是感兴趣的。

C)关于是否在高速缓存行条目中设置了“脏”高速缓存指示(在示例性实施例中,由控制逻辑250)进行检查。

D)如果高速缓存行条目产生“固件映射”结果并且被锁定,则将高速缓存行条目的内容与存储在固件存储器中的固件中的对应地址的内容进行比较,并产生结果(在本文中也被称为“第二结果”)。可以理解的是,映射到固件存储器的给定高速缓存行条目通常将在它反映了来自固件的内容时被锁定,其应保留在高速缓存存储器中。如果高速缓存行条目未被锁定,则对于此步骤,该特定高速缓存行条目是不感兴趣的。

E)如果以下至少一项为真,则如上所述计算校正子值,并将其存储在已定义的位置中,诸如例如存储在固件检查引擎的内部存储装置中(诸如在特定示例中,存储在如上所述的固件证明测量结果存储装置320中):

-高速缓存行的内容与存储在固件存储器中的固件中的对应地址的内容不匹配;因此,损害的指示是关于固件的完整性并因此SOC的完整性受到损害的指示;

-在高速缓存行条目中设置了“脏”指示,该指示产生“固件映射”;和

-第一结果指示高速缓存行条目中的固件地址未映射到固件存储器中的固件地址。

步骤C和步骤E可以是可选的。

可以理解的是,如果期望,可以以ROM(只读存储器)形式来实现本发明的软件组件。如果期望,通常可以使用常规技术以硬件实现软件组件。还应当理解的是,软件组件可以例如作为计算机程序产品或在有形介质上被实例化。在一些情况下,将软件组件实例化为可由适当的计算机解释的信号是可能的,尽管在本发明的某些实施例中可能排除了这样的实例。

可以理解的是,为清楚起见,在分开的实施例的上下文中描述的本发明的各种特征也可以在单个实施例中被组合地提供。反过来,为简洁起见,在单个实施例的上下文中描述的本发明的各种特征也可以分开地或以任何合适的子组合来提供。

本领域技术人员将理解,本发明不限于上文已经具体示出和描述的内容。而是,本发明的范围由所附权利要求书及其等同物限定。

14页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:基于日志文件系统的非易失内存构建磁盘cache的方法及系统

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类