掌桥专利:专业的专利平台
掌桥专利
首页

固件的安全验证

文献发布时间:2023-06-19 11:55:48


固件的安全验证

背景技术

一些计算系统在接通电源后或在重置后执行系统固件作为“启动(boot)”过程的部分。一些计算系统可以执行“恢复”固件而不是系统固件,以返回到稳定的、恢复的状态。为了安全起见,计算系统可以在系统存储器的持久的写保护区域中维护系统固件和恢复固件的部分,这些区域只能用对系统存储器的并发物理访问来覆盖。一些计算系统进一步执行制造商的验证过程,以确保固件和恢复固件完整性,在某些情况下,使用特定于硬件的验证密钥(例如,烧录到应用处理器的fuse中)来确保系统固件来自官方来源。

因此,安全性和完整性可以取决于制造的专有验证过程,包括管理特定于硬件的验证密钥的能力以及计算系统写保护系统存储器的能力。写保护特征可能会被例如能够物理访问系统存储器的用户破坏。对在制造期间分配给硬件的写保护特征和特定于硬件的验证密钥的过度依赖可能会不必要地限制对由计算系统执行的系统固件和恢复固件的可用性、定制和用户控制。

发明内容

描述了一种计算系统,用于安全地验证系统固件和恢复固件,以确保系统完整性,而不依赖制造的专有验证过程、特定于硬件的密钥或系统存储器的固有写保护特征。计算系统依赖于安全性处理器,该安全性处理器维护固件管理参数,该参数定义了过程,用于独立于集成电路制造商的掩模ROM(只读存储器)验证过程验证固件和恢复固件。安全性处理器确保固件或恢复固件被适当地签名并且与以前执行的版本一致,或者如果不同,则产生与在编译时嵌入固件中的预期结果一致的验证结果(例如,生成的散列值)。以这种方式,计算系统提高了对在计算系统内执行的固件和恢复固件的可用性、定制和用户控制。

在一个示例中,描述了一种计算系统,包括:应用处理器;存储器,包括固件和对应的恢复固件;安全性处理器,配置为配置为通过以下来验证固件或恢复固件作为应用处理器执行固件或恢复固件的条件:确定固件或由固件维护的恢复固件的预期散列;以及基于预期散列是否与固件或恢复固件的生成的散列匹配来验证固件或恢复固件。

在不同的示例中,描述了一种方法,包括:通过计算系统的安全性处理器从存储在计算系统的存储器中的固件为固件确定预期散列;为存储在存储器中的固件确定生成的散列;以及响应于确定预期散列与生成的散列对应,通过安全性处理器验证固件。

在另一个示例中,一种计算机可读存储介质包括指令,该指令在被执行时将计算系统的安全性处理器配置为从存储在计算系统的存储器中的固件为固件确定预期散列;为存储在存储器中的固件确定生成的散列;以及响应于确定预期散列与生成的散列对应来验证固件。

一种或者多种实施方式的细节在附图和以下描述中进行了阐述。其他特征和优点通过描述和附图并且通过权利要求书将变得显而易见。提供此发明内容是为了介绍在具体实施方式和附图中进一步描述的主题。因此,此发明内容不应被视为描述基本特征,也不用于限制所要求保护的主题的范围。

附图说明

下面描述了恢复固件的安全验证的一个或多个方面的细节。不同的实例中的相同的附图标记的使用在说明书和图中指示相似的元件:

图1是图示了配置为验证固件和恢复固件的示例计算系统的概念图。

图2是图示了配置为验证固件的安全性处理器的示例操作的流程图。

图3是图示了配置为验证恢复固件的安全性处理器的示例操作的流程图。

图4是图示了配置为执行固件或恢复固件的概率或部分验证的安全性处理器的示例操作的流程图。

图5是图示了配置为执行固件和恢复固件的安全验证的计算设备的概念图。

具体实施方式

在一些计算系统中,应用处理器执行系统固件作为加载和执行操作系统(OS)的条件。系统存储器的写保护部分可以存储系统固件的只读部分,并且系统存储器的可读写部分可以存储系统固件的可读写(或未保护)部分。系统存储器的写保护部分可以进一步包括计算系统在恢复模式下操作时执行的专门的“恢复固件”。恢复固件打算在恢复事件期间代替系统固件执行,以将计算系统配置为在稳定的恢复模式下操作。

在经过验证的启动过程中,计算系统的安全性处理器可以阻止应用处理器执行系统固件,直到安全性处理器可以验证存储在安全性处理器的内部存储器中的自己的安全性处理器固件(例如,“Cr50”)。在验证并执行安全性处理器固件之后,安全性处理器使应用处理器能够执行经过验证的启动过程。

一旦启用,应用处理器就执行嵌入“掩模ROM”(例如,在应用处理器内部并且在制造期间预先编程的一种只读存储器)内的指令,用于从系统存储器的写保护部分定位和检索系统固件的只读部分。掩模ROM可以将应用处理器配置为在执行系统固件的只读部分之前执行专有验证过程。例如,专有验证过程可以使应用处理器验证系统固件的只读部分是使用独特的、特定于硬件的密钥进行签名的,该密钥是在应用处理器内硬代码化的(例如,烧录到应用处理器的fuse)。如果掩模ROM可以使用独特的、特定于硬件的密钥来验证系统固件的只读部分,则应用处理器将执行只读系统固件。依赖于掩模ROM来验证系统固件,可以阻止用户安装“非官方的”第三方或用户定制的固件,该固件无法用独特的、特定于硬件的密钥来进行签名,因此无法使用独特的、特定于硬件的密钥来验证。

作为执行系统固件的可读写部分的条件,只读部分验证可读写部分在编译期间是用“官方的”根密钥进行签名的。计算系统可以将根密钥存储在系统存储器的写保护部分中。在系统存储器的写保护部分永远不会被损坏的假设下,响应于确定可读写部分是用根密钥进行签名的,应用处理器加载和执行系统固件的可读写部分。

以相似的方式,在计算系统在恢复模式下执行的情况下,系统固件的只读部分通过在执行恢复固件之前验证恢复固件是用根密钥进行签名的来保持系统完整性。通过维持系统存储器的写保护部分未被损坏的假设,响应于确定恢复固件是用根密钥进行签名的,应用处理器加载和执行恢复固件。如果恢复固件无法产生恢复密钥,则计算系统禁止执行恢复固件,直到安装和执行可以产生恢复密钥的恢复固件的官方版本。

虽然一些计算系统可以通过这种方式阻止执行不可验证的系统固件和恢复固件,但是这种经过验证的启动过程抑制了可用性、定制和用户控制。特定于硬件的和“官方的”根密钥可能只会被授权的开发者发现。此外,计算系统的安全性和完整性取决于特定于硬件的密钥以及系统存储器的写保护部分可以保护“官方的”根密钥的绝对信任。然而,官方的根密钥可以被能够物理访问系统存储器或以其他方法找到破坏系统存储器的写保护部分的复杂用户破坏。这样,不仅这种类型的经过验证的启动与其所可能的相比是较不安全的,而且可能阻止不是授权的开发者但希望执行第三方或定制固件的合法用户这样做,从而不必要地限制计算系统的可用性、定制和用户控制。

为了促进对固件的定制和用户控制,而不牺牲安全性和完整性,描述了一种计算系统,该计算系统依赖于安全性处理器和应用处理器,这些处理器配置为验证系统固件和恢复固件,而不依赖于制造的专有验证过程、特定于硬件的密钥或系统存储器的固有写保护特征。相反,安全性处理器部分基于包括完全性的程度的固件管理参数来验证固件,这些参数定义了过程,用于独立于例如涉及特定于硬件的密钥的集成电路制造商的掩模ROM(只读存储器)验证过程来验证固件和恢复固件。作为一个示例,固件管理参数可以指定执行部分或概率验证、完全或完整的验证、或根本不执行验证。

在验证系统固件的标头签名和/或体签名之后,安全性处理器生成散列(例如SHA-256)值,这些值与存储在系统存储器中的系统固件的对应块相关联。安全性处理器将生成的散列值与安全性处理器从固件体的只读部分得出的预期散列值进行比较。

因为恢复固件通常支持系统固件不支持的低级驱动和用户接口,所以恢复固件的大小通常比系统固件大。这样,安全性处理器可以依赖于更高性能的应用处理器来验证恢复固件。在验证恢复固件的标头和/或体签名之后,应用处理器生成散列值,这些散列值与存储在系统存储器中的恢复固件的相应块相关联。应用处理器可以自动生成和存储(例如,作为由操作系统执行的后台任务)恢复固件的散列值,例如,在系统固件最初成功启动和执行之后。

应用处理器将生成的散列值与应用处理器从固件体的只读部分得出的预期散列值进行比较。如果预期散列值和生成的散列值产生不匹配,则应用处理器将恢复固件已经验证失败通知给安全性处理器,并且禁止执行恢复固件。如果恢复固件的预期散列值和生成的散列值匹配,则应用处理器执行恢复固件。

响应于恢复固件未能通过应用处理器的检查,安全性处理器可能会尝试根据固件管理参数验证恢复固件。安全性处理器可以通过仅对照预期散列值检查一些生成的散列值来部分验证恢复固件。可替代地,安全性处理器可以执行完整的验证,并且对照预期散列值检查生成的散列值或根本不执行验证,完全绕过块检查。

以这种方式,计算系统可以独立于集成电路制造商的掩模ROM验证过程来验证固件和恢复固件,而不依赖于特定于硬件的密钥。计算系统替代地依赖于安全性处理器,以确保系统固件被适当地签名并且与以前执行的版本一致,或者如果不同,则产生与在编译时嵌入固件中的预期结果一致的验证结果(例如,生成的散列值)。以这种方式,计算系统可以提高对在计算系统内执行的固件和恢复固件的可用性、定制和用户控制。不是受制于官方的固件版本或预定硬件密钥,示例计算系统可以安全地执行定制或第三方固件,而不牺牲系统完整性。

通过将固件的验证与对特定于处理器的硬件密钥的知悉分离,本公开的技术可以使计算系统能够执行更多种类的固件和恢复固件程序。固件开发者不再需要对特定于硬件的验证密钥的深入的产品知悉和对所述特定于硬件的验证密钥的依赖,所述特定于硬件的验证密钥可能由可能或可能不愿意与固件开发者协调的硬件制造商控制。

另外,本公开的技术可以使计算系统能够抵御比计算系统以前可能已暴露于其中的攻击更广泛或不同范围的攻击。例如,以前的系统依赖于系统存储器的写保护,并且攻击者可以覆盖系统存储器的唯一方式是通过物理访问计算系统,包括存储器芯片或主板。这被称为“邪恶女佣”攻击,指的是某人长时间使设备无人监督的情况(例如,在伪装成酒店女佣获得对设备的访问的攻击者存在的情况下)。然而,一些计算系统必须抵御由例如本身可能是能够长期访问设备的授权用户的用户进行的附加类型的攻击。例如,一些学校向学生发放计算设备以及与它们的使用相关的严格策略。学校使用企业策略来限制学生在这些设备上可以做什么,在某些情况下是由于法律要求。一些学生可能不喜欢那些限制,因此可能会尝试规避企业策略。学生能够访问设备达一长时间段,这使依赖写保护来实施策略限制可能是不现实的。其他政府实体或私人公司在其自己的物理安全性中可能有缺口,这可能允许攻击者对设备有足够长的物理控制来传播邪恶女佣攻击。

在两种情况下,设备所有者可能希望检测攻击并且在攻击发生时限制设备功能性。限制可以采取多种形式,诸如:拒绝解密磁盘上的用户数据,拒绝向网站或无线接入点提供以前存储的凭证或根本拒绝启动。对于附加保护对启动速度的影响,所有者可能也有不同的容忍度。普通用户可能更喜欢更快的启动,代价是安全性有所降低,就像一些用户可能会使用短且容易被猜到的密码一样。企业用户可能更喜欢更安全的启动,即使安全性将启动时间增加了几秒。

在另一种情况下,攻击者可能会在修改固件(例如,将恶意代码嵌入设备中)之后使设备返回到商店。在将设备转售给新客户之前,商店应当确保设备上的固件没有被修改。类似地,设备可以返回到学校、政府和企业。现有的所谓的“店内返回(in-store return)”的用于验证的固件的过程可能是慢的、手动的,并且需要第二设备。

对于上述情况中的每种情况,本公开的技术可以使商店、学校、企业等能够在执行固件或恢复固件之前,通过依赖计算系统自动验证固件和恢复固件,来抵御这些更广泛的或不同的攻击。这样,与授权用户不同的设备的真正所有者可以确保他们控制的计算系统的完整性,而不必手动验证系统的完整性。

图1是图示了配置为执行恢复固件的安全验证的示例计算系统100的概念图。计算系统100可以形成任何类型的移动或非移动计算系统的部分。在移动计算系统中,计算系统100可以表示移动电话、膝上型计算机、可穿戴设备(例如手表、眼镜、耳机、衣服)、平板计算机、汽车/车载设备、便携式游戏设备、电子阅读器设备和远程控制设备的一个或多个组件。在移动计算系统中,计算系统100可以表示服务器、网络设备(例如路由器、交换机、防火墙)、台式计算机、电视设备、娱乐机顶盒设备、恒温器设备、车库开门器设备、其他家庭设备或电器、桌面助理设备、扬声器设备、非便携式游戏设备和业务会议设备的一个或多个组件。

计算系统100可以是片上系统(SoC)的部分。例如,计算系统100可以是移动电话的处理组件,该处理组件取代传统的中央处理单元(CPU)或中央控制器处理架构。计算系统100的分布式处理架构还可以使移动电话能够分担原本需要由单个CPU执行的工作,而不导致移动电话受到CPU性能瓶颈。

图1的计算系统100包括应用处理器102、存储104、存储器106和安全性处理器108。计算系统100的这些和其他组件通过总线110、112和114以及控制链路116A和116B以各种方式通信耦合。与图1所示的相比,计算系统100可以包括更多或更少的组件、总线或链路。

计算系统100包括总线110、112和114。应用处理器102通过在存储总线110上交换数据与存储104的控制器通信,使应用处理器102能够从存储104读取或写入存储104。以相似的方式,应用处理器102和安全性处理器104可以每一个通过在存储器总线112上交换数据与存储器106的控制器通信,使安全性处理器108和应用处理器102中的每一个能够从存储器106读取或写入存储器106。进一步地,安全性处理器108和应用处理器102可以通过在主机总线114上交换数据进行直接通信。应用处理器102配置为执行软件,包括固件、内核程序、操作系统软件,在操作系统内执行的应用等。

安全性处理器108包括控制链路116A和116B,用于促进对应用处理器102和存储器106进行控制。安全性处理器108可以通过在控制链路116A上输出控制信号来控制存储器106的写保护特征。在某些情况下,安全性处理器108可以监测写保护特征,例如,如果攻击者试图断开控制链路116A。通过在控制链路116B上输出控制信号,安全性处理器108可以将应用处理器置于重置或从重置释放应用处理器102。例如,安全性处理器108可以保持应用处理器处于重置状态,直到可以验证固件或恢复固件,此时安全性处理器从重置状态释放应用处理器102,以随后执行经过验证的固件或恢复固件。

图1中所示的总线110、112和114以及控制链路116A和116B仅仅是相互连接的一些示例,计算系统100可以在应用处理器102、存储104、存储器106和安全性处理器108之间包括这些相互连接。在计算系统100的其他示例中,可以使用计算系统100的组件之间的附加的或更少的接口、链路和连接。总线110、112和114以及控制链路116A和116B中的每一个都可以包括不同的总线结构中的任何一个或组合,诸如存储器总线结构、外围总线结构、通用串行总线结构、处理器或局部总线结构,这些结构促进各种总线架构中的任一个的组件间通信。

存储104配置为向计算系统100提供可执行指令(例如固件、恢复固件、软件、应用、模块、程序、功能)和数据(例如用户数据、操作数据)的持久存储,以支持可执行指令的执行。例如,存储104的控制器在存储总线110上进行通信,以在应用处理器102的命令下向存储104读或写输入。图1的示例中的存储104包括操作系统内核和操作系统文件系统的两个不同副本(A和B)以及支持操作系统内核和操作系统文件系统的安装和执行所需的其他数据。

存储104的示例包括易失性存储器和非易失性存储器、固定和可移除的媒体设备以及维护可执行指令和支持数据的任何适当的存储器设备或电子数据存储。存储104可以包括各种存储器设备配置中的随机存取存储器(RAM)、只读存储器(ROM)、闪速存储器和其他类型的存储存储器的各种实施方式。存储104不包括传播信号。存储104可以是固态驱动器(SSD)或硬盘驱动器(HDD)。

存储器106表示除了存储104之外的安全存储器设备,该安全存储器设备是被配置为存储执行安全启动和固件/恢复固件验证技术所需的数据的系统存储器(例如非易失性)。存储器可以是闪速存储器芯片,配置为在存储器总线112上与安全性处理器108和应用处理器102通信,该存储器总线112可以是串行外围接口(SPI)总线,并且在这种情况下,存储器106可以是SPI闪存芯片。在计算系统100的其他示例中,其他类型的非易失性存储器可以用于存储器106。

存储器106包括写保护区域和未保护或“非写保护”区域。在写保护区域中,存储器106包括启动描述符、系统固件的只读部分、恢复固件和根密钥(以及可能的其他信息,诸如用于对恢复固件进行签名的恢复密钥)。在未保护区域中,存储器106包括固件的可读写部分的两个不同副本以及其他数据。

维护固件和恢复固件可以占用存储器106的大区域。存储器106可以被分成“块”。将存储器106的大区域分解成多个块可能是可取的。固件映像可以跨越多个块。安全性处理器108可以维护存储器106中的固件和恢复固件,包括——在固件和恢复固件的体中嵌入——固件和恢复固件的每个块的预期散列,安全性处理器108继而可以对照该块的相应的生成的散列对该预期散列进行验证。在某些情况下,根据是否执行完整的验证,当固件或恢复固件包括多个块时,安全性处理器108和/或应用处理器102可以为多个块中的每一个或仅仅子集生成散列值。

存储器106的控制器可以修改或删除存储在存储器106的未保护区域中的数据。然而,当启用存储器106的写保护时,控制器无法修改或删除存储在存储器的保护区域中的数据。存储器106可以包括用于禁用写保护的物理特征,诸如物理按钮、物理引脚或物理开关。存储器106可以包括用于禁用写保护的电子接口,诸如特殊编程接口等。安全性处理器108可以在安全性处理器108和存储器106之间使用控制链路116A来发送禁用存储器106的写保护的信号,例如,以允许计算系统100安装固件的只读部分的新版本。

在存储器106中所存储的系统固件的只读部分可以包括体段和标头段。标头段可以包括信息,诸如:

·识别字节序列(例如“魔数”),以便在安全性处理器108中执行的固件可以从存储器106的其他块中识别标头,并且使标头和固件能够被存储在几个不同的可能地址之一。

·版本号,所述版本号将固件与特定设备型号相关联并且将系统固件与打算在其他设备型号上执行的其他版本区分开来。

·标头签名,所述标头签名使用验证密钥的公共一半(例如,存储在安全性处理器固件中)而被应用于标头段。私有一半可以在远程实体处被控制,所述远程实体诸如利用工作以确保计算系统100只执行可验证的固件的硬件制造商、操作系统开发者或其他实体。私有一半可以存储在安全性处理器固件中。

·验证子密钥,安全性处理器108使用所述验证子密钥来验证系统固件的体段。私有一半可以在远程实体处被控制,所述远程实体诸如利用工作以确保计算系统100只执行可验证的固件的硬件制造商、操作系统开发者或其他实体。私有一半可以存储在安全性处理器固件中。

固件映像的体段可以包括:

·体版本号,所述体版本号递增以区分系统固件和其他版本。

·体签名,所述体签名使用验证子密钥(例如,存储在系统固件的标头段中)而被应用于体段。私有一半可以在远程实体被控制,所述远程实体诸如利用工作以确保计算系统100只执行可验证的固件的硬件制造商、操作系统开发者或其他实体。

·存储器106的控制寄存器的预期值,所述预期值当启用存储器106的写保护时,控制存储器106的哪一部分被写保护。

·预期散列值的表,其中,每个条目都与存储固件或恢复固件的部分的存储器106的不同块对应。

·表中的条目的数量。

包含在固件的体段中的预期散列值的表中的每个条目都可以指定:

·块的在存储器106中的地址(或偏移)。

·块的大小(例如,以字节为单位)。

·分配给块用于验证的权重。权重可以表示为定点值、对数值或其他类型的参数。在概率验证方案中,最大权重可能导致块总是被验证。在概率验证方案中,最小权重可能导致块永远不会被验证。最大权重和最小权重之间的权重将导致块更经常或不经常被验证,这取决于权重是被分配更接近最大权重的值,还是被分配更接近最小权重的值。

·存储在块中的固件或恢复固件的部分的预期散列(例如SHA-256)。

应用处理器102是计算系统100的主要处理复合体,并且安全性处理器108是计算系统100的专门处理单元。尽管应用处理器102主要配置为执行指令(例如固件、恢复固件、内核软件、操作系统软件),以使计算系统100执行各种操作,但是安全性处理器108是配置为执行安全性和验证操作的支持处理器。例如,在计算系统100是移动计算机(例如移动电话)中的SoC的情况下,应用处理器102可以执行与操作系统相关联的指令和在操作系统所提供的操作环境中执行的应用。安全性处理器108可以与应用处理器102交互以管理操作系统的安全启动,并且可以在应用处理器102执行固件之前执行固件的验证,或者可以在计算系统100进入恢复模式的情况下,在应用处理器102执行恢复固件之前验证恢复固件。

应用处理器102和安全性处理器108可以每一个包括一个或多个控制器、微控制器、处理器、微处理器、硬件处理器、硬件处理单元、数字信号处理器、图形处理器、图形处理单元等的任何组合。应用处理器102和安全性处理器108可以每一个是集成处理器和存储器子系统(例如,实施为SoC),其处理计算机可执行指令以控制计算系统100的操作。在一些示例中,计算系统100可以用与处理和控制电路结合实施的硬件或固定逻辑电路系统中的任何一个或组合来实施,这些电路通常被识别为应用处理器102和安全性处理器108。

在安全性处理器108的内部非易失性存储器的区域中,安全性处理器维护固件管理参数(FWMP)、安全性处理器固件(SPFW)、生成的散列值和其他数据。安全性处理器108在执行安全性处理器固件之前使用内部验证过程验证安全性处理器固件(例如,在一些系统中被称为“Cr50”)。

固件管理参数表示由应用处理器102设置的配置参数。在一些示例中,计算系统100可能需要应用处理器102的密码来改变固件管理参数。在一些示例中,在计算系统100的初始设置之后,密码可以被删除或“忘记”,从而导致固件管理参数是静态的或被一次写入。

固件管理参数可以包括各种安全性相关设置,包括是否启用操作系统开发者模式、是否启用安全性芯片固件调试模式等。为了启用固件和恢复固件验证,固件管理参数可以包括一个或多个其他选项或安全性相关设置,包括强制在计算系统100每次启动时进行“完整验证”,而不是“概率验证”或“部分验证”或“不验证”(例如完全禁用验证的选项)的选项。参照其他图描述了关于各种验证模式的细节,包括完整验证和概率验证。

在一些示例中,安全性处理器108可以支持通过固件管理参数处置更多的选项或设置。例如,固件管理参数可以包括附加选项,用于使企业和开发人员能够实现在验证过程中的灵活性以针对复杂性和可用性权衡安全性。例如,除了只包括选择完整验证、概率验证或不验证的选项,固件管理参数还可以包括用户或安全性管理员调整权重并且因此调整在概率验证期间检查特定块的几率的选项。

在一些示例中,固件管理参数可以提供安全性处理器108的进一步的配置(例如,使企业和开发者能够实现更多灵活性以权衡安全性和可用性的设置)。例如,一个附加设置可以是针对附加到固件或恢复固件的特定块的分配权重的修改器,以调整在部分或概率验证期间将检查块的可能性。其他固件管理参数可以是一种设置,要求安全性处理器108检查特定于型号的验证数据(例如,在固件的标头段中),如果存在,则可选地检查特定于型号的验证数据并且如果不存在,则忽略检查,或完全忽略特定于型号的验证检查(例如,可能对开发者有用)。

安全性处理器108可以在安全性处理器108的内部非易失性存储器中维护验证状况信息,安全性处理器108和/或应用处理器102可以访问该内部非易失性存储器以执行固件或恢复固件验证。例如,安全性处理器108可以具有一个或多个平台配置寄存器,该平台配置寄存器可以被增加以更新到新的状态,但不会减少(在不移除电源的情况下)。作为一个示例,安全性处理器可以维护验证状况信息,包括:

·“生成的散列”,表示从应用于(例如,通过应用处理器102或安全性处理器108)固件或恢复固件的一个或多个块的安全散列函数输出的值。

·固件或恢复固件使用生成的散列是可以验证还是不可验证的状况指示符。

如上所述,在安全性处理器固件内,安全性处理器108可以维护验证密钥,用于验证应用于系统固件的标头段的标头签名。例如,从安全性处理器固件的标头段,安全性处理器108可以确定验证密钥(或其散列以用于保存存储),用于在编译期间验证应用于系统固件的标头签名(例如,系统固件验证密钥的私有一半是编译器知道的并且在编译期间应用于系统固件)。在继续验证系统固件的体之前,安全性处理器108最初可以对照存储在安全性处理器固件中(例如,嵌入Cr50的标头段中)的验证密钥检查应用于系统固件的标头签名。在继续验证系统固件之前,安全性处理器108随后可以对照存储在系统固件的体段中的验证子密钥检查应用于系统固件的体签名。

应用处理器102、安全性处理器108和存储器106在主机总线114和存储器总线112上交换数据,以验证已经加载到存储器106上的固件和恢复固件。应用处理器102可以初始化由安全性处理器108维护的固件管理参数,并且根据固件管理参数,安全性处理器108可以验证固件,包括生成固件的散列并且将生成的散列与安全性处理器108从存储在存储器106中的固件的体段提取的预期散列进行比较。安全性处理器108可以验证恢复固件,包括生成恢复固件的散列(或依赖于应用处理器102来生成恢复固件的散列),并且将生成的散列与安全性处理器108从存储在存储器106中的恢复固件的体段提取的预期散列进行比较。

在操作中,安全性处理器108最初可以使用由安全性处理器108维护的系统固件验证密钥(或其散列)验证固件的标头签名。如果安全性处理器108确定标头的签名是不正确的,则安全性处理器108可以关闭计算系统100,以阻止计算系统100加载和执行不兼容的或损坏的系统固件。假设标头系统固件的签名可以使用验证密钥进行验证,安全性处理器108可以确定应用于系统固件的体段的体签名是否是使用验证子密钥来生成的。如果安全性处理器108确定体段的签名是不正确的,则安全性处理器108可以关闭计算系统100,以阻止计算系统100加载和执行不兼容或损坏的系统固件。

假设体段的签名可以使用验证子密钥进行验证,安全性处理器108根据固件管理参数确定在存储器106中加载的系统固件或恢复固件的块的预期散列值。例如,在系统固件的完整检查期间,从系统固件的标头或体,安全性处理器108可以识别存储在存储器106中的系统固件的每个块的预期散列值。预期散列值可以保持系统固件的固定属性并且可以提前确定,例如,在编译时。作为执行系统固件和恢复固件的条件,安全性处理器108将当前存储在存储器106中的系统固件和恢复固件的块的生成的散列值与嵌入系统固件和恢复固件中的预定的预期散列值进行比较。

安全性处理器108可以将散列函数直接应用于在存储器106中加载的系统固件的块,或安全性处理器108可以依赖于应用处理器102来应用散列函数作为后台或操作系统任务。在任何一种情况下,这些生成的散列值都与预期散列值进行比较。如果安全性处理器108识别出散列之间的差异,则安全性处理器108可以将失败验证通知给应用处理器102,以阻止应用处理器102执行可能损坏或恶意的固件或恢复固件。

在随后的启动过程中,安全性处理器108可以通过刷新系统固件的生成的散列来重复上述验证过程,从而用系统固件的第二生成的散列取代系统固件的第一生成的散列。例如,如果系统固件以前验证失败,则安全性处理器可以重新生成与系统固件相关联的散列,以实现后续验证尝试。响应于确定系统固件的预期散列不与第二散列匹配,安全性处理器108可以指导应用处理器102进入恢复模式,或以另外的方式禁止执行系统固件。

在一些示例中,安全性处理器108可以控制计算系统100的输出组件,诸如发光二极管(LED)或扬声器,以指示固件或恢复固件何时验证失败。在其他时候它也可以被安全性处理器108使用,例如,以指示请求双因子认证。输出组件可以是由安全性处理器108使用的专用输出组件。在其他情况下,输出组件可以具有双重功能(例如,诸如电源或充电标识符或键盘或显示器背光)。安全性处理器108可以控制输出组件以指示失败的验证、成功的验证或其他状况。这样的输出组件可以具有双重用途(诸如电源或充电LED、或键盘或显示器背光)或可以有意集成到计算系统100中,以提供固件和恢复固件验证的状况。针对输出组件的典型控制方案可以包括将消息从应用处理器102发送给安全性处理器108,以控制输出组件。在其他示例中,安全性处理器108可以在引脚上具有脉冲宽度调制(PWM)捕获单元,以测量应用处理器102的输出,并且安全性处理器108可以具有其自己的PWM单元,以将输出复制到输出组件。在其他示例中,安全性处理器108可以具有内部开关,该内部开关可由应用处理器102控制以控制输出组件。

能物理访问计算系统100的攻击者可以移除输出组件或遮挡来自输出组件的光。通过在验证过程中控制输出组件,安全性处理器108通过在启动或登录过程中非常早地启用输出组件,使这种攻击更困难,类似于在发动期间立即显示汽车中的发动机检查灯几秒钟的方式。攻击者可以将输出组件连线到计算系统100中的另一个处理器,以尝试复制这种行为,但是涉及持久的、可能显著的硬件修改。

在某些情况下,安全性处理器108可以包括连接到写保护信号的单个开漏引脚。这是通过电阻器连接的,使调试器能够在制造期间覆盖该信号。移除这个电阻器对于攻击者来说是适度可行的方法,以阻止安全性处理器108能够驱动写保护信号并且阻止安全性处理器108能够检测写保护信号的当前状态两者。安全性处理器108可以包括连接到与第一写保护引脚完全相同的网的第二引脚。附加的引脚可以隐藏在主板的内层之下,以使干扰信号更困难。安全性处理器108可以监测该信号,以测量第一写保护引脚的真实状态。

攻击者需要关闭计算系统100电源,以阻止安全性处理器108检测到写保护引脚的状态变化。但是在启动时,安全性处理器108可以重新扫描系统存储器106并且识别变化。攻击者可以用更复杂的电路取代系统存储器106,该电路允许对SPI总线进行更多的控制,并且将新的存储器106堆叠在该电路的顶部。不过,这是更难的攻击,而且会留下物理证据。

虽然被描述为主要用于验证在应用处理器上可执行的固件,但是用于安全地验证恢复固件的技术也适用于其他处理器。例如,除了应用处理器102和安全性处理器108外,计算系统100还可以包括带有固件的其他处理器,诸如嵌入式控制器(EC)指纹传感器(FPMCU)、其他硬件单元、硬件加速器单元等。如果安全性处理器108可以访问另一处理器的固件,则安全性处理器108也可以以安全性处理器108验证应用处理器102的固件的方式验证固件和恢复固件。这样,其他处理器可以受益于安全验证提供的灵活性和安全性。

图2是图示了配置为验证固件的安全性处理器的示例操作的流程图。图2B是图示了配置为验证恢复固件的安全性处理器的示例操作的流程图。操作200包括步骤202至214。操作200可以按照不同的顺序执行或具有比图2所示的操作附加或更少的操作。安全性处理器108可以执行操作200,以验证在存储器106中维护的系统固件。

在图2中,安全性处理器108可以在计算系统100每次接通电源或重置期间执行操作200。响应于从睡眠模式转变出来,安全性处理器108可以执行操作200。响应于安全性处理器108的重置(例如,如果用户提供触发安全性处理器108重置的特定键输入组合),安全性处理器108可以执行操作200。

在202中,当安全性处理器108接通电源、唤醒或重置时,安全性处理器验证、加载并执行它自己的安全性处理器固件。在204中,安全性处理器108维护固件管理参数,包括用于验证固件的选项。换言之,安全性处理器108可以配置为基于从固件管理参数推断出的信息来验证系统固件或恢复固件,例如,通过在计算系统100每次启动时执行恢复固件的“完整验证”、“概率验证”或恢复固件的不验证。安全性处理器108可以存储状况信息和标志作为固件管理参数,安全性处理器108使用所述固件管理参数来确定验证的级别(例如,完整验证、部分或概率验证或不验证)以及确定由应用处理器102和/或安全性处理器108执行的以前的验证过程的结果。

固件管理参数可以在计算系统100的初始启动时由应用处理器102初始化。当执行恢复固件的完整验证时,安全性处理器108检查整个恢复固件,包括对照在固件的体段中记录的相应的预期散列来检查固件的每个块的生成的散列。当执行恢复固件的不验证时,安全性处理器108禁止为固件生成任何散列(例如,用于调试)。

固件的某些块可能不会影响计算系统100的功能性。在启动时或在恢复期间跳过某些块,可能允许计算系统100在更大范围的场景中操作,而不会大大减少计算系统100的安全性。这样,固件中的权重表可以指定与每个固件块相关联并且用于确定是否可以跳过块的权重因子。

在一些示例中,一些块在从深度睡眠恢复时或在进入低功率挂起模式——其中,应用处理器和/或安全性处理器可以关闭——时可能有更少的机会被使用。存在一些被正常启动使用的块,这些块不会影响从深度睡眠复原或进入低功耗挂起模式,诸如根密钥或固件的其他部分。在复原时跳过这些块可以在没有大大降低安全性的情况下改进复原时间。

在206中,安全性处理器确定计算系统100是否处于恢复模式或是否呈现正常的非恢复模式。例如,安全性处理器108可以响应于在计算系统100的键盘或其他输入组件处检测到特定输入而检查计算系统100的用户是否正手动选择恢复模式。在其他情况下,响应于接收到来自应用处理器102的验证恢复固件的请求,安全性处理器108可以进入恢复模式并且开始恢复固件的验证。应用处理器102可以在执行之前检查恢复固件。响应于检测到恢复固件的生成的散列和预期散列之间的不匹配,应用处理器102可以将进入恢复模式的命令传递(例如,通过主机总线114)到安全性处理器108。

响应于确定进入恢复模式,安全性处理器108执行图3所示的操作300。可替代地,响应于确定进入非恢复模式,安全性处理器通过执行步骤208继续以基于由安全性处理器108维护的固件管理参数自动验证系统固件。

在208A中,安全性处理器108对照系统固件验证密钥和子密钥检查应用于系统固件的签名。例如,安全性处理器108可以使用在安全性处理器固件的标头段中维护(或在安全性处理器108内的其他地方维护)的验证密钥来验证固件的标头签名。系统验证密钥的私有一半可以由操作系统开发者或计算系统100的制造商维护,并且被提供给官方编译器,该官方编译器用于对打算在应用处理器102上执行的系统固件进行编译和签名。

响应于验证标头签名,安全性处理器108可以使用来自系统固件的标头段的验证子密钥来验证应用于系统固件的体签名。系统验证子密钥的私有一半可以由操作系统开发者或计算系统100的制造商维护,并且被提供给官方编译器,该官方编译器用于对打算在应用处理器102上执行的系统固件的体进行编译和签名。

如果安全性处理器108确定系统固件不是使用适当的验证密钥和验证子密钥来进行签名的,则安全性处理器108进行系统固件验证检查失败并且转向步骤210。可替代地,响应于验证应用于系统固件的签名,安全性处理器108继续在步骤208B至208D中验证固件。

检查签名作为固件验证过程的部分,可能与在步骤208C至208D中简单地检查散列相比对于安全性处理器108的资源更费力。安全性处理器108可以保存在步骤208中生成的中间值(例如,签名散列),以便安全性处理器108在下次安全性处理器执行操作200时执行更快的签名检查。

安全性处理器108可以提供“回滚保护”。通过保留安全性处理器108已经检查过的经过验证的恢复固件的最高版本号。当检查具有与最高版本号相比较低的版本号的较旧版本时,安全性处理器108可以输出通知以警告计算系统100。例如,如果固件的标头段指示版本A,则尽管由安全性处理器108检查的以前的版本是版本B,安全性处理器也可以在其内部寄存器中设置标志或以其他方式向应用处理器102用信号通知固件被“回滚”到以前的版本的警告(例如,用于通过用户接口输出)。

基于固件管理参数,安全性处理器108在进行完整验证时对系统固件的每个块执行步骤208B至208D,在进行部分验证或概率验证时仅对系统固件的一些块执行步骤208B至208D,并且在固件管理参数指示可以跳过验证时不对系统固件的任何块执行步骤208B至208D。

在208B中,安全性处理器108基于固件管理参数对系统固件进行散列,以确定系统固件的生成的散列。例如,安全性处理器108可以从存储器106加载系统固件的单独块中的一个或多个,并且将散列函数应用于块。安全性处理器可以在寄存器或内部存储器中维护散列函数的结果,以便对照预期散列值进行后续比较。

在208C中,安全性处理器108确定系统固件的预期散列。例如,计算系统100可以要求系统固件包括专用的和可发现的区域(例如体段的部分),用于记录在存储器106中维护的系统固件的块的预期散列值。嵌入系统固件中的预期散列值通常足以验证恢复固件,因为固件和恢复固件通常是在全面的构建过程中构建的,该构建过程涉及将固件和恢复固件一起编译为固件映像的部分。安全性处理器108可以通过从固件的体段的预定区域提取特定的值来确定预期散列。

在208D中,安全性处理器108确定预期散列是否与生成的散列匹配。如果散列匹配,则安全性处理器108验证固件,并且更新由安全性处理器108维护的状况寄存器,以反映固件被验证。同样,如果散列不匹配,则安全性处理器更新状况寄存器,以指示固件不可验证。

在210中,安全性处理器确定固件是否被成功验证。在212中,当固件在步骤208中进行验证检查失败并且未被验证时,安全性处理器108指导计算系统100终止启动并且关闭电源。在214中,当固件在步骤208中通过验证检查并且被验证时,安全性处理器108指导计算系统100通过从重置释放应用处理器102并且启用应用处理器102以执行固件,来继续启动过程。

图3是图示了配置为验证恢复固件的安全性处理器的示例操作的流程图。操作300包括步骤302至308。操作300可以按照不同的顺序执行或具有比图3所示的操作附加或更少的操作。安全性处理器108可以执行操作300,以验证在存储器106中维护的恢复固件。

在图3中,响应于安全性处理器在操作200的步骤206中确定计算系统100进入恢复模式,安全性处理器108可以执行操作300。

计算系统100可以以各种方式进入恢复模式。例如,响应于应用处理器102确定用户手动请求进入恢复模式(例如,通过检测计算系统100的键盘上的特定按键按下,通过检测来自计算系统100的输入组件的不同信号),计算系统100可以进入恢复模式。如果在系统固件的只读部分的执行期间,应用处理器102确定应用于系统固件的可读写部分的签名是不正确的,则计算系统100可以进入恢复模式。系统固件的只读部分可以使用存储在存储器106的写保护部分中的根密钥来检查签名。

在进入恢复模式之前,计算系统100的操作系统可能已经验证了恢复固件,例如,作为后台任务,并且将恢复固件的预期散列存储在存储器106中。在正常启动时,计算系统100不需要验证恢复固件,因为恢复固件不会在初始启动路径上执行。除非被用户命令进入恢复模式,否则应用处理器102可以一直启动操作系统,而无需验证恢复固件。

操作系统可以在正常操作期间在后台验证恢复固件,以阻止攻击者禁用恢复固件,这可能直到正常的启动路径失败才被计算系统100注意。虽然可能不一定阻止攻击者导致计算系统100执行未经验证的代码,但是至少使操作系统在后台检查恢复固件的完整性,可以使计算系统100能够在重新启动之前提前检测潜在攻击者。在某些情况下,开发者可能正在测试新的固件版本,并且可能希望提前被通知或警告计算系统100可能正在执行坏的或未经验证的固件。这可能给用户一个选择以不执行恢复固件或在计算系统100执行不受信任的恢复固件之前修复固件。

由于各种原因,在应用处理器102处执行的操作系统或其他服务或线程可以请求安全性处理器108进入恢复模式,以重新验证恢复固件。操作系统或其他服务或线程经由主机总线112通过与安全性处理器108通信来传递重新验证请求。

应用处理器102通常比安全性处理器108更强大和更快。这样,计算系统100可以利用应用处理器102的更快的处理速度、更大的带宽和能力,来最初与安全性处理器108相比更快地验证恢复固件。

在执行期间,系统固件可以在系统存储器中维护恢复固件的预期散列,如最初从以前的启动所确定的。散列可以提供足够的参考点来确定恢复固件的完整性(例如,自上次使用以来恢复固件是否已经改变),因为恢复固件和系统固件(包括只读部分)是同时构建在一起的。在确定计算系统100进入恢复模式后,系统固件指导应用处理器102将恢复固件的预期散列与应用处理器生成的加载在存储器106中的恢复固件的散列进行比较。

响应于确定预期散列和生成散列匹配,应用处理器102执行恢复固件。响应于确定恢复固件检查失败并且恢复固件的签名是坏的或预期散列和生成散列是不匹配,应用处理器102将请求安全性处理器108验证恢复固件,以使计算系统100能够执行恢复固件并且在恢复模式下操作。

在302中,响应于在206中确定计算系统100进入恢复模式,安全性处理器108可选地根据在系统固件的验证期间所使用的固件管理参数自动验证恢复固件。例如,安全性处理器108可以默认执行恢复固件的完整验证,检查在存储器106中加载的恢复固件的每个块。在其他情况下,恢复固件的一些块如果损坏可能不太可能导致问题,因此,安全性处理器108可以跳过最不可能导致灾难性故障的块,并且执行恢复固件的概率或部分验证。安全性处理器108可以基于固件管理参数中的信息确定是对恢复固件进行完整检查还是部分检查。

对于概率验证,可以为每个块分配权重,然后将该权重与在验证过程期间(例如,在操作300或200期间)动态生成的阈值进行比较。动态生成的阈值可以与来自随机数生成器的输出对应。如果分配的权重超过块的动态阈值,则安全性处理器108将执行步骤302A至302D来自动验证该块,遵循与上面关于步骤208A至208D描述的过程类似的过程。如果分配的权重没有超过动态阈值,则安全性处理器108可以跳过该块,而且不考虑该块的预期散列是否与生成散列匹配。

在302A中,安全性处理器108对照系统固件验证密钥和子密钥检查应用于系统固件的签名。响应于验证标头签名,安全性处理器108可以使用来自系统固件的标头段的验证子密钥来验证应用于系统固件的体签名。如果安全性处理器108确定系统固件不是使用适当的验证密钥和验证子密钥来进行签名的,则安全性处理器108进行系统固件验证检查失败并且转向步骤304。可替代地,响应于验证应用于系统固件的签名,安全性处理器108继续在步骤302B至302D中验证恢复固件。

通常,安全性处理器108对恢复固件的每个块执行步骤302B至302D,因为完整验证可能是必要的,以最大化对恢复固件的任何损坏块的检测。然而,安全性处理器108可以配置为如果固件管理参数指示没有验证或只有部分验证,则执行恢复固件的部分验证或不验证。在这种情况下,安全性处理器108对恢复固件的块选择性地执行步骤302B至302D,这些块被预先分配在应用于随机数时使随机数满足阈值的权重。

在302B中,安全性处理器108对恢复固件的单独块进行散列,并且可以在寄存器或内部存储器中维护散列函数的结果,以便对照预期散列值进行后续比较。在302C中,安全性处理器108确定如应用处理器在对恢复固件的初始检查期间最初确定的恢复固件的单独块的对应预期散列。在302D中,安全性处理器108确定预期散列是否与生成散列匹配。如果散列匹配,则安全性处理器108验证恢复固件,并且更新由安全性处理器108维护的状况寄存器,以反映固件被验证。同样,如果散列不匹配,则安全性处理器更新状况寄存器,以指示恢复固件不可验证。

在304中,安全性处理器确定恢复固件是否被成功验证。在306中,当恢复固件在步骤304中进行验证检查失败并且未被验证时,安全性处理器108指导计算系统100终止启动并且关闭电源。在308中,当恢复固件在步骤304中通过验证检查并且被验证时,安全性处理器108指导计算系统100通过从重置释放应用处理器102并且启用应用处理器102以执行恢复固件,来继续恢复过程。

如前所述,存储器106的写保护可以由安全性处理器108通过控制链路116A控制。有可能是计算系统100的攻击者可以尝试覆盖由安全性处理器108控制的写保护信号,例如,通过对存储器106上的物理写保护特征施加电压、切断电线或断开写保护信号和安全性处理器108之间的链路。安全性处理器108可以监测存储器106的写保护是否已经改变,如果改变,则设置标志或以另外的方式指示存储器106的写保护已经改变并且存储在存储器106中的信息可以正改变。例如,安全性处理器108可以改变由在应用处理器102处执行的操作系统的组件监测的内部寄存器或内部存储器中的值。因此,安全性处理器108可以发起恢复过程,包括在安全性处理器108经历恢复条件时执行操作300。

安全性处理器108可以完全跳过步骤302,包括子步骤302A至302D,例如,当固件管理参数指示块检查被禁用时。这样,用于执行操作300的前提条件可以包括确定块检查是否被禁用、完整的块检查是否被启用或概率块检查是否被启用。因此,安全性处理器108可以执行步骤302,包括子步骤302A至302D,以遵循固件管理参数中所定义的检查方案。

假设块检查没有被禁用,安全性处理器108可以加载并检查恢复固件。安全性处理器可以执行完整检查,例如,通过将每个块与预期散列进行比较来对恢复固件的每个块执行操作204至210。安全性处理器108可以执行概率检查,例如,仅对一些块执行操作204至210。安全性处理器108可以通过仅对满足用于检查或跳过块的阈值的恢复固件的块进行散列和比较来执行概率检查。

在某些情况下,安全性处理器108可以执行固件和固件验证,即使没有接收到这样做的请求。例如,安全性处理器108可以被编程以通过自动执行操作200或300来验证固件或恢复固件(例如,定期地、根据时间表或根据不同的条件或规则),而无需等待来自应用处理器102的信号。

图4是图示了配置为执行固件或恢复固件的概率或部分验证的安全性处理器的示例操作的流程图。操作400包括步骤402至416。操作400可以按照不同的顺序执行或具有比图4所示的操作附加或更少的操作。安全性处理器108可以执行操作400,以概率性地验证在存储器106中维护的固件或恢复固件。

为了提高固件或恢复固件验证的速度和效率,而不牺牲安全性,安全性处理器108可以概率性地验证或仅部分验证固件或恢复固件。虽然安全性处理器108可以对固件或恢复固件的每个块执行完整验证和检查,但是利用概率验证,安全性处理器108通常只检查固件或恢复固件的部分。

例如,安全性处理器108可以依赖于已经预先分配(例如,在固件标头中)给固件或恢复固件的每个块的相应权重。安全性处理器108可以动态生成每个块的阈值并且将阈值与该块的预先分配的权重进行比较,作为用于验证块的条件。例如,安全性处理器108可以对固件或恢复固件的每个块执行随机生成器,该随机生成器输出0到1之间的值。响应于确定从随机数生成器输出的动态阈值超过预先分配的权重(例如,在该示例中,也是0到1之间的值),安全性处理器108将跳过块并且继续检查后续块。响应于确定动态阈值不超过预先分配的权重,安全性处理器108将检查块(例如,通过将块的预期散列与块的生成散列进行比较)。

在402中,安全性处理器108确定块的概率验证阈值。阈值表示最大权重和最小权重之间的值,该值被分配给恢复固件的块。阈值可以是固定的或动态的,例如,基于计算系统100的上下文或其他条件。安全性处理器108可以通过分析固件以从固件的体段中的表中的所有条目当中得出最大权重和最小权重来确定阈值。安全性处理器108可以使用随机数生成器将动态阈值确定为大于或等于最大权重并且小于或等于最小权重的任何值。

在404中,安全性处理器确定块的权重。例如,如上所述,固件的体段可以指定分配给固件或恢复固件的每个块或其他逻辑段的权重的表。每个相应的权重都可以指示与其他块相比的验证的相对重要程度。权重可以是定点值、对数值或具有最大值和最小值的其他类型的参数。

在概率验证期间,较高的权重可能导致块比权重较低的块更频繁地被验证。每个块都可以在固件生成时被分配权重,或可以被调整,例如,在开发者可以通过对应用处理器102的输入访问权重的调试模式下。在一些示例中(例如,通过特殊的编程信道),可以调整权重,以便可以通过改变固件的体段的权重来执行不同的验证方案。

在406中,安全性处理器108确定分配给块的权重是否超过概率验证阈值。在408中,跳过权重不超过阈值的任何块,并且在410中,安全性处理器108检查这是否是被检查的最后一个块。如果不是最后一个块,安全性处理器返回到步骤402,并且如果块是最后一个块,安全性处理器在C处完成概率检查。

如果在406中安全性处理器确定分配给块的权重超过块的概率验证阈值,则在412中,安全性处理器108确定为块生成的散列是否与块的预期散列匹配。安全性处理器响应于在414中确定块的生成的和记录的散列值不匹配而退出操作400,并且设置状况寄存器或以其他方式用信号通知应用处理器102固件或恢复固件不可验证。在416中,响应于确定块的生成的散列与预期散列匹配,安全性处理器108设置状况寄存器,以指示固件或恢复固件是可验证的。在410中,如果在设置状况寄存器以指示固件或恢复固件是可验证的之后,安全性处理器108确定块是要被检查的最后一个块,则安全性处理器108用信号通知应用处理器102以指示固件或恢复固件是可验证的。

在某些情况下,安全性处理器108可以改变概率验证阈值,或使用分配给固件或恢复固件的块的不同权重,这取决于安全性处理器108是否正验证固件、恢复固件,从深度睡眠启动或从重置启动。例如,在某些情况下,安全性处理器108可以在恢复启动期间检查恢复固件的每个块,并且分配给每个块的指定检查该块的机会的权重对于所有其他启动或复原操作可能是相同的。

存在一些被正常启动使用的块,这些块可能不会影响恢复操作,诸如固件或恢复固件的包括根密钥的块。在恢复启动时跳过这些块,可以允许从更广泛的场景中恢复,而不会降低恢复操作的安全性。在固件中维护的验证数据表可以另外指定在恢复启动时检查块的机会,或指示块没有被恢复使用的标志。

一旦应用处理器102执行恢复固件,应用处理器102仍然可以检查安全性处理器108跳过的任何块,并且可选地向用户显示警告。这可能有助于诊断正常模式启动问题,而不阻碍恢复启动。

存在一些被正常启动使用的块,这些块可能不影响从深度睡眠复原,诸如根密钥或验证固件的可读写部分的只读固件的部分。在复原时跳过这些块可以在没有降低安全性的情况下改进复原时间。

图5是图示了配置为执行固件和恢复固件的安全验证的计算设备的概念图。图5图示了示例计算设备500,该计算设备可以是任何类型的计算设备、客户端设备、移动电话、平板计算机、可穿戴设备、车辆、通信、娱乐、游戏、媒体播放和/或其他类型的设备。

计算设备500包括通信设备510,这些通信设备使得能够有线和/或无线传递设备数据506,诸如,在WLAN中的设备之间传递的数据、被接收的数据、被调度用于广播的数据、数据的数据分组、在设备之间同步的数据等。设备数据可以包括任何类型的通信数据以及由在设备上执行的应用生成的音频、视频和/或图像。通信设备510还可以包括用于蜂窝电话通信和/或网络数据通信的收发器。

计算设备500还包括输入/输出(I/O)接口512,诸如,在设备、数据网络(例如网状网络、外部网络等)和其他设备之间提供连接和/或通信链路的数据网络接口。I/O接口可以用于将设备耦合到任何类型的组件、外围设备和/或附属设备。I/O接口还包括数据输入端口,通过该数据输入端口,可以接收任何类型的数据、媒体内容和/或输入,诸如到设备的用户输入以及任何类型的通信数据和从任何内容和/或数据源接收的音频、视频和/或图像数据。

计算设备500还包括音频和/或视频系统518,该系统生成音频设备520的音频和/或生成显示设备522的显示数据。音频设备520和/或显示设备522包括处理、显示和/或以其他方式渲染音频、视频、显示和/或图像数据(诸如数码照片的图像内容)的任何设备。在实施方式中,音频设备和/或显示设备是示例计算设备500的集成组件。可替代地,音频设备和/或显示设备是示例设备的外部外围组件。

计算设备500包括处理系统514,该处理系统514包括作为处理器102的示例的应用处理器502和作为安全性处理器108的示例的安全性处理器508。处理系统514的组件可以至少部分地实施在硬件中,诸如与处理可执行指令的任何类型的微处理器、控制器等一起。处理系统可以包括集成电路、可编程逻辑器件、使用一个或多个半导体形成的逻辑器件以及硅和/或硬件中的其他实施方式的组件,诸如,实施为片上系统(SoC)的处理器和存储器系统。设备可以用软件、硬件、固件或固定逻辑电路系统中的任何一个或组合来实施,该固定逻辑电路系统可以用处理和控制电路来实施。计算设备500可以进一步包括任何类型的系统总线或其他数据和命令传输系统,该系统耦合在设备内的各个组件。系统总线可以包括不同的总线结构和架构以及控制和数据线中的任何一个或组合。

计算设备500还包括计算机可读存储存储器516,诸如数据存储设备,该数据存储设备可以由计算设备访问并且为数据和可执行指令(例如软件应用、模块、程序、功能等)提供持久存储。本文中所描述的计算机可读存储存储器不包括传播信号。计算机可读存储存储器的示例包括易失性存储器和非易失性存储器、固定和可移除的媒体设备以及维护针对计算设备访问的数据的任何合适的存储器设备或电子数据存储。计算机可读存储存储器可以包括RAM、ROM、闪速存储器和在各种存储器设备配置中的其他类型的存储存储器的各种实施方式。

计算机可读存储存储器516包括作为存储104的示例的存储组件504和作为存储器106的示例的存储器组件506。存储组件504可以存储与内核、根文件系统或其他操作系统相关的软件。存储器506可以存储用于启动计算设备500的固件和恢复固件,作为加载和执行与内核、根文件系统和其他操作系统相关的软件的前提条件。

计算设备500配置为执行存储在存储器506中的固件和恢复固件的安全验证。安全性处理器508将与固件和恢复固件相关联的生成的散列值与预期散列值(例如,存储在存储器506中)进行比较。在生成的散列值和预期散列值匹配的情况下,应用处理器502可以指导应用处理器执行经过验证的固件或恢复固件。然而,在生成的散列值和预期散列值不匹配的情况下,应用处理器502可以禁止执行固件或恢复固件,计算设备500可以关闭,或应用处理器502可以命令安全性处理器508重新验证固件或恢复固件,如上所述。

考虑计算设备500的一些用例,为了便于描述,该计算设备500在下面的场景中是膝上型计算机。普通用户可以购买计算设备500,并且首次登录计算设备500。如果用户通过第二设备(例如移动电话)订阅远程(例如双因子)认证服务,则响应于远程要求计算设备500执行固件或恢复固件验证,第二设备可以确认用户即将登录到经过完整验证的膝上型计算机,或不是。用户可以控制服务是否需要验证,例如,通过注册一个选项“只让我登录到具有经过完整验证的固件的设备”。这样,即使启用开发者模式的攻击者可以安装损坏版本的固件或重置在计算设备500上的用户安全性凭证,当在攻击后用户登录到计算设备500时,服务也将计算设备500辨识为新的设备,并且进行双因子认证过程。

在企业注册过程中,计算设备500可以执行以下步骤以使用所描述的验证技术来确保设备完整性。负责企业注册过程的注册服务器可以查询安全性处理器508,以获得由安全性处理器508获得的主板标识符(例如BoardID)和验证结果(例如生成的散列值、验证结果)。

如果生成的散列值或验证结果指示少于所有固件或恢复固件的所有块被验证,则注册服务器可以指导应用处理器502通过执行完整的固件验证来重置和重新启动。这确保只允许经过完整验证的固件参与注册过程。

在主板标识符不是授权生产编号或生成的散列值不是存储在注册服务器中的预期散列值的情况下,注册服务器可以拒绝计算设备500注册到企业网络上(例如,如果预生产设备以某种方式上市给消费者,则这可能发生)。

响应于验证固件,注册服务器获得用户登录凭证,并且执行双因子认证或一些其他认证过程以完成登录。以这种方式,在提供如果计算设备500受到攻击可以被窥探并与攻击者共享的登录凭证之前,用户和注册服务器可以确认计算设备500是经过完整验证的设备。

在一些示例中,注册服务器可以自动配置计算设备500的固件管理参数,以确保未来的系统启动根据企业警察进行验证(或不验证)。在某些情况下,注册服务器可以终止注册,除非安全性处理器508可以准确地证明固件管理参数。另外,注册服务器可以简单地擦除固件管理参数以取消注册计算设备500。虽然在上面的描述中描述并且在图中示出了本公开的各个优选实施例,但是应明确理解,本公开并不限于此,但是可以以不同的方式体现以在以下权利要求的范围内实践。从上面的描述显而易见的是,在不偏离以下权利要求所定义的本公开的精神和范围的情况下,可以做出各种改变。

对于开发者,计算设备500可以配置为允许开发者随意改变操作系统和/或固件。计算设备500可以通过操作系统任务自动进入操作系统开发者模式。操作系统开发者模式可以允许改变操作系统,但不允许改变固件或恢复固件。在固件开发者模式下,计算设备500可以擦除并改变存储器506的内容,包括写保护部分。在任何一种操作系统开发者模式下,安全性处理器508可以擦除存储在安全性处理器508的非易失性存储器中的秘密,包括存储在存储504上的数据的解密密钥。在某些情况下,安全性处理器508的固件管理参数可以阻止更改由安全性处理器508控制的固件或秘密。然而,在其他情况下,一旦操作系统或固件开发者模式启动,计算设备500就可以配置为接收定制固件管理参数,并且将该定制固件管理参数写入安全性处理器508。随着固件管理参数的改变,计算设备500可以配置为禁止执行固件或恢复固件的验证(例如,绕过完整或概率验证检查),然而,安全性处理器508可以报告固件或恢复固件未被检查,以便登录到计算设备500的新用户仍然可以针对未经验证的设备被警告(例如,通过双因子认证)。

计算设备500的任何所有者用户都可以有能力配置计算设备500的固件管理参数,至少在初始登录期间。这样,普通用户可以禁用操作系统或固件开发者模式,并且可选地从不同的启动验证级别中选择(例如,指定更高或更低的启动验证级别)。

在一些示例中,计算设备500提供接口,用户可以从该接口指定改变固件管理参数所需的密码。在其他情况下,计算设备500可以为用户生成密码,并且将密码上传到用户的账户(例如在云计算环境中),以便如果和当用户想要改变固件管理参数时,用户可以检索密码。

当制造计算设备500时,制造商可以将计算设备500配置为将特定于型号的BoardID存储在安全性处理器108的非易失性存储器中。BoardID可以用于将安全性处理器固件版本锁定到具体设备型号、远程访问服务器解锁等。预期BoardID可以被包括在固件的只读部分的标头中。计算设备500可以配置为验证预期BoardID与被预先编程到安全性处理器508中的BoardID匹配。

存储在存储器506中的其他数据可以在每个设备的基础上变化,并且可以以与验证固件或恢复固件的方式相似的方式进行验证。安全性处理器508可以配置为也保护这种数据,例如,以阻止在板之间交换(swap)安全性处理器508,或修改这种数据以使一个设备看起来是错误的配置。

这样的其他数据可以包括具有不同的识别字节序列但没有子密钥的标头段以及包括特定于型号的数据的体段。安全性处理器508可以验证硬件标识符、服务标签、无线接入节点校准或串行数据等。安全性处理器508可以将其他数据的生成的散列与预期散列进行比较,并且当两个值匹配时,验证其他数据。

在制造期间,在工厂终止步骤启用写保护之前,这种特定于设备的验证数据可以存储到存储器506的可写保护的区域中。可能不存在针对标头或体的签名,因为这样的其他数据在每个设备的基础上变化,并且只需要被检查以确保自制造计算设备500以来数据还未变化。在已经将数据写入存储器506之后,在工厂终止步骤期间,这种数据的散列可以存储在安全性处理器508中。

虽然在上面的描述中描述并在图中示出了本公开的各个优选实施例,但是应明确理解,本公开并不限于此,但是可以以不同的方式体现以在以下权利要求的范围内实践。从上面的描述显而易见的是,在不偏离以下权利要求所定义的本公开的精神和范围的情况下,可以做出各种改变。

相关技术
  • 固件的安全验证
  • 一种BMC固件的安全验证方法及系统
技术分类

06120113106505