用于安全代码启动的动态加载测量环境转让专利

申请号 : CN201480026528.4

文献号 : CN105308612B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : P·英格兰A·马罗奇科D·马顿D·R·伍藤

申请人 : 微软技术许可有限责任公司

摘要 :

“安全代码启动器”建立平台可信性(即,可信计算基础(TCB)),并且使用基于硬件或固件的组件来安全地启动一个或多个软件组件。安全代码启动器通过与集成到计算设备中的一个或多个基于硬件或固件的组件的安全扩展功能对接来测量并加载软件组件。例如,安全代码启动器的各种实施例包括基于固件的组件,这些基于固件的组件与集成到计算设备的安全扩展功能对接以测量并加载引导管理器、操作系统(OS)加载器或包括OS内核的其他OS组件。类似地,安全代码启动器能够测量和加载负责安装OS实例的软件组件。另外,安全代码启动器的各种实施例提供测量并加载管理程序的管理程序加载器,该管理程序进而测量并加载包括虚拟机的操作系统组件。

权利要求 :

1.一种用于在计算设备中提供安全程序启动的方法,包括:在所述计算设备的预引导环境中实例化事件处理程序;

在所述计算设备的预引导环境中实例化引导初始化器;

使用所述事件处理程序来截取所述引导初始化器发出的软件加载命令;

对于所截取的每一加载命令,发起相应软件组件的软件测量;以及在每一次测量后,执行所测量的相应软件组件的安全程序启动。

2.如权利要求1所述的方法,其特征在于,所述软件测量通过使所述事件处理程序发起动态测量信任根(DRTM)事件来执行。

3.如权利要求2所述的方法,其特征在于,每一DRTM事件利用所述计算设备的处理器的安全扩展来执行所述软件测量。

4.如权利要求2所述的方法,其特征在于,每一DRTM事件将所述相应软件组件加载到所述计算设备的受保护存储器,并且使得所述计算设备的可信平台模块计算所述软件组件的散列序列。

5.如权利要求1所述的方法,其特征在于,所述事件处理程序和引导初始化器由所述计算设备的固件组件实例化。

6.如权利要求5所述的方法,其特征在于,所述计算设备的固件组件是不可信的。

7.如权利要求1所述的方法,其特征在于,所述引导初始化器被用来测量和执行由所述引导初始化器调用的管理程序的安全程序启动。

8.如权利要求7所述的方法,其特征在于,所述计算设备包含至少两个处理器核,并且其中为这些处理器核中的两个或更多个处理器核测量并安全地启动单独管理程序。

9.一种用于在预引导环境中测量软件的系统,包括:具有用于发起预引导环境的固件的计算设备;

用于截取由所述预引导环境中的引导初始化器发出的软件加载命令的事件处理程序设备;

用于发起对应于所截取的每一软件加载命令的软件组件的测量的测量设备;以及用于执行所测量的每一软件组件的安全程序启动的设备。

10.一种方法,包括:

使计算设备的固件在所述计算设备上发起预引导环境;

将具有事件处理程序的驱动程序模块实例化到所述计算设备的受保护存储器中;

将引导初始化器实例化到所述计算设备的受保护存储器中;

使用所述驱动程序模块的所述事件处理程序来截取所述引导初始化器发出的软件加载命令;

对于所截取的每一加载命令,使用所述驱动程序模块来发起相应软件组件的软件测量;以及在每一次测量后,执行所测量的相应软件组件的安全程序启动。

11.一种系统,包括:

用于使计算设备的固件在所述计算设备上发起预引导环境的装置;

用于将具有事件处理程序的驱动程序模块实例化到所述计算设备的受保护存储器中的装置;

用于将引导初始化器实例化到所述计算设备的受保护存储器中的装置;

用于使用所述驱动程序模块的所述事件处理程序来截取所述引导初始化器发出的软件加载命令的装置;

用于对于所截取的每一加载命令,使用所述驱动程序模块来发起相应软件组件的软件测量的装置;以及用于在每一次测量后,执行所测量的相应软件组件的安全程序启动的装置。

12.一种包括用于执行如权利要求1-8中的任一项所述的方法的装置的计算机系统。

13.一种具有指令的计算机可读存储介质,所述指令在被执行时使机器执行如权利要求1-8,10中的任一项所述的方法。

说明书 :

用于安全代码启动的动态加载测量环境

[0001] 背景
[0002] 可信计算基础(TCB)通常被定义为系统中依靠其来实施计算平台的安全策略的那部分。随着时间的流逝,现代TCB已变得复杂,由此使得越来越难以证明或以其他方式验证TCB是针对特定计算平台适当且安全地建立的。当无法建立平台固件或BIOS的可信性时,对平台状态的安全性和完整性的评估也是困难的。
[0003] 用于解决TCB验证问题的现有技术一般依靠对二进制代码和系统配置元素的静态测量。不幸的是,此类解决方案往往是脆弱的,这意味着对系统状态的任何改变(不论重要性)都需要重新评估和测量。现有技术还限于平台启动以及引导路径中的软件组件。
[0004] 如对于本领域技术人员是公知的,术语“测量”在相对于可信计算使用时指的是评估或测量软件二进制代码或其他代码以使得测量结果既独特又指示可执行文件中的变更。用于执行软件测量的一种常见方法是对软件应用密码散列算法。此类算法将产生不同结果,其中甚至出现对所测软件的一位改变。密码散列算法通常还产生足够大以使得冲突(其中两个散列值相同)的可能性极其小的输出。由此,将已知散列值与所测软件的散列值进行比较可被用来确定该软件是否已从已知或期望状态改变。结果,这些类型的测量对于许多TCB场景而言是非常有用的。
[0005] 概述
[0006] 提供本概述以便以简化形式介绍概念的选集,所述概念在以下详细描述中被进一步描述。该概述不旨在标识所要求保护的主题的关键特征或基本特征,也不旨在被用来帮助确定所要求保护的主题的范围。进而,尽管本文中可能指出并讨论了现有技术的某些缺点,然而所要求保护的主题不旨在限于可解决或针对那些现有技术中的任何或全部缺点的实现。
[0007] 一般而言,如本文描述的“安全代码启动器”提供了用于降低为任意计算平台提供可信计算基础(TCB)的复杂性的各种技术,该TCB进一步提供用以毫无疑义地将平台置于可信状态的机制。更具体而言,安全代码启动器通过使用基于硬件或固件的组件来测量并加载一个或多个软件组件来建立任意计算平台的可信性。有利的是,使用集成到计算设备中的一个或多个基于硬件或固件的组件的安全扩展功能来测量此类代码允许安全代码启动器从不可信固件、不可信BIOS或其他不可信存储中加载此类代码,同时在代码执行、启动或安装之前建立该代码和计算平台的可信性。
[0008] 例如,在各种实施例中,安全代码启动器的固件或软件组件与集成到计算设备中的一个或多个处理器的安全扩展功能对接以测量并加载操作系统(OS)的软件组件。在这些实施例中,用于发起计算设备的引导过程的代码(例如,出于讨论的目的而在此被统称为“引导初始化器”的引导管理器、引导加载器、管理程序加载器等)从不可信固件、不可信BIOS或其他不可信存储中加载。引导初始化器然后执行用以加载OS加载器的动作,该OS加载器用于调用将被加载的OS内核组件。然而,安全代码启动器截取来自OS加载器的调用并且然后使用集成到计算设备中的一个或多个基于硬件或固件的组件的安全扩展功能来执行OS内核组件的安全程序启动,而不是允许OS加载器直接发起OS内核组件的加载。
[0009] 更具体而言,安全代码启动器执行对OS内核组件的测量并且然后将控制权传递给测量启动环境(MLE)和动态加载测量环境(DLME),MLE和DMLE确定系统状态可信,之后将控制权传递给操作系统内核以完成内核启动。在各种实施例中使用类似过程来在任意计算平台上安装OS的安全或可信实例。
[0010] 在相关实施例中,安全代码启动器提供管理程序在任意计算平台上的安全或可信加载。换言之,安全代码启动器通过与集成到计算设备中的一个或多个处理器的安全扩展功能对接来提供用以测量和加载管理程序的管理程序加载器,该管理程序进而测量和加载包括虚拟机的操作系统组件。注意,也被称为虚拟机管理器(VMM)的管理程序是在计算设备上创建并运行一个或多个虚拟机实例的计算机软件、固件或硬件片段。
[0011] 更具体而言,在此类实施例中,OS加载器加载并执行管理程序加载器。进而,管理程序加载器执行初始化步骤并准备管理程序执行环境和状态,并且测量和加载管理程序映像。控制权然后返回到OS加载器,OS加载器然后加载其他内核组件。操作系统加载器然后执行安全程序启动,并且控制权传递给管理程序的DLME。管理程序的DLME然后确保计算平台处于可信状态并将系统控制权转移至管理程序。管理程序然后启用虚拟化(即,初始化虚拟机)并且将控制权返回给OS加载器并最终返回给OS内核。
[0012] 鉴于以上概述,本文描述的安全代码启动器提供了用于通过使用基于硬件或固件的组件来安全地启动一个或多个软件组件来建立任意计算平台的可信性的各种技术是清楚的。除了刚才所描述的好处之外,当结合附图所考虑时,根据以下详细描述,安全代码启动器的其它优点将是显而易见的。
[0013] 附图简述
[0014] 参考以下描述、所附权利要求书以及附图,将更好地理解所要求保护的主题的具体特征、方面和优点,附图中:
[0015] 图1提供示出此处描述的用于实现安全代码启动器的各实施例的程序模块的示例性体系结构流程图。
[0016] 图2示出了如本文描述的用于执行操作系统内核从不可信BIOS或其他固件中的安全加载和启动的示例性过程。
[0017] 图3示出了如本文描述的用于执行操作系统从不可信BIOS或其他固件中的安全加载和启动的示例性过程。
[0018] 图4示出了如本文描述的用于执行管理程序加载器从不可信BIOS或其他固件中的安全加载和启动的示例性过程。
[0019] 图5示出了一总系统流程图,该总系统流程图示出如本文所述的用于实现安全代码启动器的各实施例的示例性方法。
[0020] 图6是描绘本文中描述的具有用于实现安全代码启动器的各实施例的简化计算和I/O能力的简化通用计算设备的概括系统图。
[0021] 详细描述
[0022] 在对所要求保护的主题的各实施例的以下描述中,对附图进行了参考,附图构成了实施例的一部分且在其中作为说明示出了可在其中实践所要求保护的主题的各具体实施例。应当理解,可以利用其他实施例,并且可以作出结构上的改变而不背离所要求保护的主题的范围。
[0023] 1.0引言:
[0024] 一般而言,如本文描述的“安全代码启动器”建立平台可信性(即,可信计算基础(TCB)),并且使用基于硬件或固件的组件来安全地启动一个或多个软件组件。安全代码启动器通过与集成到计算设备中的一个或多个基于硬件或固件的组件的安全扩展功能对接来测量并加载软件组件。更具体而言,在各种实施例中,安全代码启动器使用集成到计算机处理器的安全扩展(诸如例如Dynamic Root of Trust for Measurement(动态测量信任根,DRTM)和 Trusted Execution Technology(可信执行技术,TXT))来建立用于安全程序启动的平台可信性。
[0025] 例如,安全代码启动器的各种实施例包括基于固件的组件,这些基于固件的组件与集成到计算设备的安全扩展功能对接以测量并加载引导管理器、操作系统(OS)加载器或包括OS内核的其他OS组件。类似地,安全代码启动器能够测量和加载负责安装OS实例的软件组件。另外,安全代码启动器的各种实施例提供测量并加载管理程序的管理程序加载器,该管理程序进而测量并加载包括虚拟机的操作系统组件。
[0026] 用于使用集成到处理器的安全扩展硬件的常规技术(例如,常规的基于DRTM的技术)的限制之一是虽然它们能够提供用于启动代码的安全计算平台,但它们无法提供用于在预引导环境中启用安全代码启动的机制。此外,用于计算系统的休眠和恢复的现有机制假定计算系统的物理安全性或者全盘加密。由此,用于使用集成到处理器的安全扩展硬件的常规技术的另一限制是它们无法确保其中计算系统的物理安全性或全盘加密不可用的客管理程序场景的情况下的计算系统的安全休眠和恢复。
[0027] 有利的是,可信平台状态由安全代码启动器通过与集成到处理器的安全扩展和功能对接来建立或验证以确保安全程序启动,而不管不可信固件或BIOS的存在。安全代码启动器提供的能力一般包括但不限于以下各项:
[0028] ●测量和加载引导管理器、操作系统加载器和包括操作系统内核的其他操作系统组件;
[0029] ●测量和加载负责安装计算平台的操作系统实例的软件组件;
[0030] ●提供测量和加载管理程序的管理程序加载器,该管理程序进而测量和加载包括虚拟机的操作系统组件;以及
[0031] ●提供用于客管理程序场景的安全休眠和恢复;
[0032] 注意,虽然安全代码启动器能与提供不同安全扩展的各种处理器协作,但出于解释目的,安全代码启动器以下将在使用DRTM功能和相关安全扩展的上下文中描述。对其他处理器架构和安全扩展的推断于是应鉴于以下讨论而对本领域技术人员显而易见。
[0033] 1.1系统概览:
[0034] 如上所述,“安全代码启动器”提供了通过与集成到计算设备中的一个或多个处理器或其他硬件的安全扩展功能相协作地使用基于硬件或固件的组件来安全地启动一个或多个软件组件来建立或验证任意计算平台的可信性的各种技术。该功能通过以下操作来启用:提供动态加载测量环境(DLME)以用于在预引导环境中的各种软件组件可被执行之前测量这些软件组件。
[0035] 一般而言,安全代码启动器的各种实施例与集成到计算设备中的一个或多个处理器的安全扩展功能对接以测量和加载各种软件组件。在预引导或预OS安装环境中,引导过程一般开始于固件或硬件(例如,BIOS、UEFI等)取决于计算平台正在执行OS引导、OS安装、还是VMM安装或初始化等来加载引导管理器、引导加载器、管理程序加载器等(出于讨论目的而在此统称为“引导初始化器”)。引导初始化器从不可信固件、不可信BIOS或其他不可信存储中加载。引导初始化器然后执行各项动作以调用将被加载的各种OS组件、OS内核组件、管理程序等。然而,安全代码启动器截取来自引导初始化器的调用并且然后使用集成到计算设备中的一个或多个基于硬件或固件的组件的安全扩展功能来执行软件组件的安全程序启动,而不是允许引导初始化器直接发起各种软件组件的加载。
[0036] 以上概述的过程由图1的总系统图示出。具体而言,图1的系统图示出了用于实现如本文中所述的安全代码启动器的各实施例的程序模块之间的相互关系。此外,尽管图1的系统图示出安全代码启动器的各实施例的高层视图,但图1不旨在提供贯穿本文全文描述的安全代码启动器的每一可能实施例的穷尽或全面图示。
[0037] 另外,应当注意,图1中由断开的线或虚线所表示的任何框和各框之间的互连表示本文中所描述的安全代码启动器的替换实施例,并且如下文所述,这些替换实施例中的任一个或全部可以结合在本文通篇描述的其它替换实施例来使用。
[0038] 更具体而言,如图1所示,由安全代码启动器启用的进程使用任意计算平台的系统固件模块100来开始操作,以通过首先加载测量驱动程序模块110来发起预引导环境中的代码执行。注意,典型的计算平台固件或硬件的示例包括但不限于UEFI、BIOS等。此外,该计算平台固件或硬件可以是不可信的,而不影响安全代码启动器的执行或能力。
[0039] 在常规预引导环境中,系统固件模块100将直接调用加载器模块120。典型加载器模块包括但不限于引导管理器、引导加载器、管理程序加载器等。加载模块120然后将引导管理器、引导加载器、管理程序加载器等加载到计算平台的受保护存储器140,以便通过将各种软件130(例如,OS组件、OS映像、管理程序等)加载到受保护存储器以供计算平台的一个或多个CPU或处理单元150执行来执行OS引导、OS初始化、VMM安装等。
[0040] 然而,由于安全代码启动器导致系统固件模块100首先加载测量驱动程序模块110,因此该测量驱动程序模块能够透明地截取由系统固件模块对加载器模块120做出的用以加载软件的各种调用,并且还能够截取由加载器模块120做出的用以将其他软件120组件加载到受保护存储器140的调用。
[0041] 因此,测量驱动程序模块110用于截取来自系统固件模块100和加载器模块120的用以加载各种软件120组件的调用。测量驱动程序模块110然后用于触发DRTM事件以测量由系统固件模块100调用的任何引导初始化器以及由加载器模块110的引导初始化器调用的任何软件130。更具体而言,测量驱动程序模块110与CPU或处理单元150对接以发起DRTM事件以测量所调用的任何引导初始化器和其他软件130组件。在通过DRTM事件经由测量进行信任验证后,测量驱动程序模块110然后将控制权传递回加载器模块120的引导初始化器以继续或完成OS引导、OS安装、管理程序初始化等。
[0042] 2.0安全代码启动器的操作细节:
[0043] 上述程序模块用于实现安全代码启动器的各实施例。如以上所概述的,安全代码启动器提供了用于通过使用基于硬件或固件的组件来在预引导环境中安全地启动一个或多个软件组件来建立任意计算平台的可信性的各种技术。以下各节提供了对该安全代码启动器的各实施例的操作以及用于实现在第1节中参考图1描述的程序模块的示例性方法的更详细讨论。具体而言,以下各章节提供安全代码启动器的各实施例的示例和操作细节,包括:
[0044] ●用于描述安全代码启动器的各种实施例的通用定义和缩略词;
[0045] ●安全代码启动器的操作概览;
[0046] ●预引导期间的安全程序启动;
[0047] ●安全休眠和恢复;以及
[0048] ●安全程序启动和安全置备。
[0049] 2.1通用定义:
[0050] 测量:常规地,相对于可信计算的术语“测量”指的是评估或测量软件二进制代码或其他代码以使得测量结果既独特又指示可执行文件中的变更。由此,所得测量可以与已知信息(例如,密码散列值)进行比较以确定该软件是否已从已知或可信状态改变。
[0051] 测量启动环境(MLE):常规地,控制环境由诸如OS内核或VMM等系统软件来提供。使用集成到各种硬件的安全功能(例如,集成到各种 处理器的“Safer  Mode Extensions(更安全模式扩展,SMX)”指令)来启动的软件被称为测量启动环境(MLE)。换言之,MLE建立系统状态(转变处理器模式、建立页表以及启用分页等),然后加载和测量DLME。
[0052] 动态加载测量环境(DLME):安全代码启动器的DLME组件与MLE对接并截取在预引导环境中做出的调用以便在将控制权传递给操作系统内核之前确定系统状态是可信的。
[0053] 可信计算基础(TCB):常规地,TCB通常被定义为系统中依靠其来实施平台的安全策略的那部分。为了证明TCB已经在平台上适当地建立并且为了确保对密封数据的访问只在适当地建立TCB的情况下被允许,定义测量信任根(Root of Trust for Measurement,RTM)。
[0054] 测量信任根(RTM):公知的可信计算组(TCG)定义在每一次平台重置时执行的常规RTM;它创建从重置到OS加载的信任链。当这些测量在每一次平台重置执行时,TCG将这种类型的RTM定义为静态RTM(SRTM)。诸如例如 等各种操作系统在引导过程期间利用SRTM机制。
[0055] 静态测量信任根(SRTM):常规SRTM测量在引导过程期间进行,旨在能够通过平台配置寄存器(PCR)来展示什么软件曾在引导期间运行。PCR是将软件测量值保存在安全位置(例如,受保护存储器、ACPI表等)的寄存器。这反映了以下事实:引导路径中的每一软件组件都有可能修改已加载的OS的TCB。常规SRTM序列的不幸之处在于对OS的TCB的评估依赖于在平台操作中没有正在进行的角色的软件/固件。因此,在引导过程期间加载、运行和丢弃的软件被评估以确定它是否能够或已经损害TCB。为了确定系统状态是否可信,呈现TCB事件日志。此外,如果SRTM测量中所包括的任何软件组件或配置状态曾经改变,则执行对SRTM测量的新评估。
[0056] 动态测量信任根(DRTM):常规地,DRTM提供了用以只使用CPU功能来毫无疑义地将平台置于可信状态的机制。DRTM还可以与SRTM相结合地使用。例如,执行SRTM引导的平台仍然能够利用DRTM。DRTM与SRTM之间的主要差别在于DRTM信任链可以在任何时间开始,甚至在平台硬件已经被配置且存储器用OS来预填充的情况下。DRTM操作使用导致处理器被置于已知状态的特定硬件指令来发起。引导处理器开始运行被测代码并且已被测量的代码从直接存储器存取(DMA)中进行保护且在其被测量之后和被执行之前无法被修改。
[0057] 统一可扩展固件接口(UEFI):UEFI是定义操作系统和平台固件之间的软件接口的规范。UEFI意在替代许多计算设备计算机中存在的基本输入/输出系统(BIOS)固件接口。实际上,大多数UEFI映像在平台固件或受保护存储器中提供并且提供对BIOS服务的传统支持。
[0058] 2.2操作概览:
[0059] 常规地,可信计算平台的基础是安全测量的硬件寻根(即,硬件可信平台模块(TPM))以及操作系统内核或管理程序以及作为扩展的其上的分区的证实。静态测量信任根(SRTM)的现有标准方法已被证明是由于选项ROM扩展、可扩展固件(例如,UEFI)以及使得难以确定静态信任测量的其他动态平台特征的动态特质而有问题且脆弱的。
[0060] 安全代码启动器提供了基于动态测量信任根(DRTM)的方法,该方法使用允许独立于单独平台的细节(即,不可信固件、不可信BIOS等)来测量操作系统内核或管理程序的动态加载测量环境(DLME)。换言之,安全代码启动器在可能具有不可信硬件的平台上提供安全代码启动,而不是使用DRTM来确保可信平台。然而注意,安全代码启动器还可对已使用任何所需技术来被验证为可信的平台执行本文描述的安全代码启动。
[0061] 例如,在计算平台的预引导环境中,在加载内核组件或管理程序并且已经释放平台固件(例如,BIOS/UEFI)后,安全代码启动器使用DLME来触发导致系统的当前状态被测量且可信性被证实的DRTM事件。
[0062] 此外,在预引导环境中,在将OS组件(或管理程序映像)加载到主存储器中后,引导管理器将退出引导服务(不再调用固件/BIOS)并且调用DRTM条目,该条目的地址在ACPI表、操作系统加载器块或其他存储器或存储中提供。该代码执行一些初始设置,包括聚合系统处理器并将CPU置于所需执行状态以及初始化IOMMU。DRTM代码然后调用CPU架构无关的安全启动指令(例如,SKINIT/SENTER)。这将发起DRTM序列。从该观点来看的DRTM序列的细节因处理器类型而异(并且无论什么安全扩展都在处理器中可用),但基本操作是类似的且在下文中解释。
[0063] 由安全代码启动器发起的DRTM序列的第一步是处理器将代码块加载到处理器的高速缓存存储器中并就地锁定该代码块。CPU向TPM发送使该TPM准备好启动散列序列的初始化命令。注意,该初始化命令由执行安全启动指令的同一CPU发送以防止序列诱骗。在高速缓存中锁定的代码的字节被发送到TPM以供散列化。当在高速缓存中锁定的代码的所有字节都被散列化时,CPU命令TPM完成散列操作。CPU然后开始执行加载在高速缓存中的命令。
[0064] DRTM代码的第一位将对第一附加代码片段进行完整性校验和加载(即,该平台的SINIT认证代码模块(ACM)),该代码片段确认硬件的各方面,包括系统芯片,并且然后测量并执行测量启动环境(MLE)。MLE然后将建立系统状态(转变处理器模式、建立页表以及启用分页等),并且加载和测量DLME。DLME将确认UEFI、BIOS或其他固件中的系统软件管理器(SSM),并校验在DRTM条目调用中传递的OS集束的启动策略。如果该OS集束在启动策略内,则DRTM完成并且继续执行OS提供的软件。换言之,控制权取决于正被测量的特定引导过程而从ACM转移到MLE到DLME到可信环境(例如,OS、管理程序、引导加载器等)。
[0065] 在上述DRTM代码的每一校验期间,校验代码的完整性和真实性。为了真实,做出校验以确定代码是否已经由有效实体签名并且可任选地确定对于该代码在其上运行的平台该代码是否已被批准。这意味着DRTM将不会成功地完成,除非硬件和固件处于合适状态并且对于该平台校验硬件和固件的代码是有效的。
[0066] 同样,如上所述,虽然安全代码启动器能与提供不同安全扩展的各种处理器协作,但出于解释目的,安全代码启动器在使用DRTM功能和相关安全扩展的上下文中描述。对其他处理器架构和安全扩展的推断应鉴于本文提供的讨论而对本领域技术人员显而易见。
[0067] 此外,还应注意,出于解释目的,以下对安全代码启动器的讨论一般指的是使用基于UEFI的引导场景的 OS。然而,本领域技术人员应当清楚的是,安全代码启动器能与各种不同的操作系统协作并且不旨在被限于与 OS或基于UEFI的固件联用。
[0068] 2.3预引导期间的安全程序启动:
[0069] 有利的是,与需要修改或重构现有操作系统或管理程序加载器来启用基于DRTM的安全引导的技术形成对比,安全代码启动器提供了在不修改现有操作系统或管理程序加载器的情况下启用安全代码启动的各种技术。
[0070] 一般而言,安全代码启动器提供基于存储器的映像或盘高速缓存以及在引导过程期间使用的其他服务。此外,通过提供准确的预OS高速缓存,在OS加载其自己的驱动程序之前不需要附加固件服务。这些能力通过提供用于在预引导期间通过使用“测量驱动程序”来在UEFI、BIOS或其他固件中触发DRTM事件的各种机制来启用。
[0071] 更具体而言,在各种实施例中,安全代码启动器使用测量驱动程序来在预引导环境中提供DRTM功能,而无需对现有OS引导路径进行任何修改。另外,该测量驱动程序具有对预引导UEFI环境施加大量控制的能力。不像现有基于DRTM的技术,这允许安全代码启动器消除操作系统对UEFI中的引导服务环境的信任依赖。
[0072] 2.3.1预引导中的DRTM:
[0073] 在UEFI场景中,DRTM事件由在引导时加载的测量驱动程序来触发。在其初始化期间,该测量驱动程序将控制其他引导组件所依赖的特定UEFI协议功能。允许安全代码启动器在引导期间减少或消除对UEFI的信任依赖。换言之,这允许安全代码启动器与未知或不可信固件协作。另外,测量驱动程序提供以对用于引导OS的代码(例如,在 OS的情况下是“bootmgr”和“winload”)透明的方式触发其MLE(测量启动环境)的DRTM启动的能力。注意,以下讨论将使用术语“引导代码”来通指bootmgr和winload两者。
[0074] 注意,在各种实施例中,测量驱动程序与任何所需UEFI协议(例如,UEFI的EFI块I/O协议、EFI控制台功能、EFI引导服务表等)对接。
[0075] 2.3.2引导序列:
[0076] 在预引导期间,UEFI将加载测量驱动程序。驱动程序初始化例程负责承担对UEFI协议元素的控制以及创建盘块高速缓存,该盘块高速缓存将被用来服务来自引导代码的I/O读请求,如在下文中更详细地讨论的。EFI引导服务表也可被修改以防止引导代码在测量驱动程序初始化后直接访问UEFI功能。
[0077] 在测量驱动程序被初始化后,从其他引导组件的观点来看,引导过程正常继续。最终,引导服务环境由winload用对ExitBootServices()的调用来终止。当测量驱动程序然后接收到退出引导服务事件时,它将准备并发起DRTM事件(对DRTM事件的进一步讨论参见章节2.3.5)。
[0078] 2.3.3测量驱动程序初始化:
[0079] 在其初始化期间,测量驱动程序将取得对特定UEFI协议元素的控制。例如,在各实施例中,测量驱动程序枚举并修改UEFI的“EFI_BLOCK_IO_PROTOCOL”结构以及UEFI的“System(系统)”和“Boot Services(引导服务)”表。
[0080] 作为示例,以下章节描述了用于使用测量驱动程序来操纵EFI_BLOCK_IO_PROTOCOL的各种示例性技术。注意,测量驱动程序并非旨在被限于以下描述的示例性技术。其他UEFI协议也可被测量驱动程序使用类似于以下描述的那些技术的技术来枚举和修改,这取决于所需要的特定DRTM事件。
[0081] 2.3.4测量驱动程序和EFI块I/O协议:
[0082] UEFI块I/O协议(即,“EFI_BLOCK_IO_PROTOCOL”)被用来对大容量存储设备进行抽象以允许在UEFI引导服务环境中运行的代码在不具有设备或管理设备的控制器的类型的具体知识的情况下访问这些设备。定义用以在块级读取和写入数据的功能。最终,引导代码依赖于这些例程来进行盘存取。
[0083] 测量驱动程序枚举正在运行的系统上的EFI_BLOCK_IO_PROTOCOL结构并替换每一协议结构中的EFI_BLOCK_IO_PROTOCOL ReadBlocks(读取块)例程。这给予测量驱动程序截取并观察在引导服务环境中进行的所有读盘存取的能力。这包括由诸如bootmgr和winload组件等预OS组件发起的盘存取,因为测量驱动程序在bootmgr或winload已被加载之前获得对系统的控制。
[0084] 测量驱动程序维护在引导期间做出的块I/O读请求的日志。该日志包含逻辑块地址(LBA)的列表以及对应于每一读请求的大小。当测量驱动程序被初始化时,它从所存储的系统分区中读取该日志。使用该日志,测量驱动程序然后创建包含每一盘块的存储器中块高速缓存,每一盘块最终将在引导服务环境中被引导代码读取。
[0085] 在引导期间,来自bootmgr和winload的盘读取请求在块高速缓存之外被服务。在OS中,高速缓存数据包括如“ntoskrnl”映像、驱动程序、BCD数据、注册表、文件系统元数据等事物的数据。此外,在各种实施例中,测量驱动程序具有在引导代码经由对EFI块I/O子系统的ReadBlocks请求PE/COFF格式化二进制代码(例如,内核映像、驱动程序、dll等)时标识并测量这些二进制代码的能力。这些测量可用于进一步支持对平台状态的可信性的证实。
[0086] 注意,除了处理盘读取之外,在各种实施例中,安全代码启动器还使用测量驱动程序来干涉盘写入以便以类似于如上所讨论的读请求的方式来利用高速缓存行为。
[0087] 注意,通用对象文件格式(COFF)是用于最初在Unix系统上使用的可执行文件、对象代码和共享库计算机文件的格式的规范。当今对COFF格式的最广泛的使用是可移植可执行文件(PE)格式。最初针对 NT开发的PE格式(有时被写为PE/COFF)使用对象文件的COFF首部,并且用作可执行文件的PE首部的分量。然而,应理解,安全代码启动器不限于与PE/COFF格式化二进制代码协作,并且此类二进制代码是作为关于使用 OS环境的示例来提供的。
[0088] 2.3.5DRTM事件:
[0089] 在 OS引导期间,winload调用ExitBootServices()来终止UEFI引导服务环境。当ExitBootServices()已完成其清理时,它信令通知退出引导服务事件。这导致对测量驱动程序中的退出引导服务事件句柄的调用。当接收到该事件时,测量驱动程序可发起DRTM操作(经由处理器安全扩展所提供的GETSEC[SENTER]指令)并将控制权转移至平台的认证代码模块(ACM)。一旦平台已由ACM置于已知状态,控制权就被转移至测量启动环境(MLE)。MLE由测量驱动程序提供并负责验证平台的可信性。控制权然后返回到OS加载器。因此,由于测量驱动程序担当用以截取并处理各种调用的中介,因此由测量驱动程序发起的DRTM事件对于winload是透明的。换言之,从winload的观点来看,它看似刚刚从ExitBootServices()返回并且将继续其正常处理并最终引导OS。
[0090] 2.4安全休眠和恢复:
[0091] 一般而言,现有休眠机制通常假定物理系统安全性或全盘卷加密。然而,在客管理程序场景中,系统的物理安全性和基于卷的加密的存在都无法被假定为存在。另外,用于早先启动管理程序的休眠的体系结构使得非安全根分区负责管理保存安全管理程序的私有隔离状态的数据缓冲。
[0092] 有利的是,安全代码启动器提供将在休眠期间保护管理程序的安全状态免于暴露给根分区并且保护系统的所有休眠的存储器免遭离线攻击或迁移到其他物理系统的各种技术。用于该过程的密钥对于系统TPM是密封的,并且只在测量驱动程序发起的DRTM事件后被揭示,从而保证恢复操作的可信性。
[0093] 2.5安全程序启动和安全置备:
[0094] 在各种实施例中,安全代码启动器还启用防止不可信硬件访问域凭证和资源的“安全置备”过程。
[0095] 例如,如对于本领域技术人员是已知的, PE映像可用于在计算平台(或者在计算平台上运行的虚拟机)上安装 OS的实例。一般而言,可引导Windows PE映像被部署在通过“预引导执行环境(PXE)”引导访问映像的PXE服务器上。
[0096] 具体而言,在 OS环境的情况下,计算平台上的典型的PXE引导请求由UEFI做出以安装新OS实例。然而,与典型的引导请求形成对比,安全代码启动器改为使PXE服务器通过提供测量驱动程序而不是用于安装新OS的新OS(例如, 映像格式(WIM)映像)和WinPE映像来响应引导请求。在这种情况下,测量驱动程序处理用于安装新OS的WIM映像和WinPE映像的转移的发起。首先,安全代码启动器使用测量驱动程序来经由DRTM建立可信系统状态。安全代码启动器然后使用测量驱动程序来测量WIM和WinPE映像。如果该测量指示这些映像的可信性,则测量驱动程序然后将控制权转移至安装环境以继续使用WIM和WinPE映像的典型OS安装。
[0097] 此外,在各种实施例中,当测量驱动程序做出对用于新OS的WIM和WinPE映像的请求时,它还向部署服务器提供TPM中所包含的密钥对的公共部分。如果该公钥被部署服务器识别和确认,则计算平台被识别为经认证机器,并且部署服务器将通过提供用于新OS的WIM和WinPE映像以及两者都对经认证机器“密封”的相应域凭证和映像散列来进行响应。然后,当控制权被转移至安装环境时,安装过程照常继续。
[0098] 2.6用于使用安全代码启动器的示例性场景:
[0099] 图2示出了用于使用安全代码启动器来在预引导环境中执行安全程序启动的示例性场景。具体而言,图2示出了用于执行操作系统内核从不可信BIOS或其他系统固件200中的安全加载和启动的示例性过程。首先,BIOS或固件200加载引导管理器210。引导管理器210然后加载OS加载器220。先前加载的测量驱动程序230包括事件处理程序,该事件处理程序监听并截取OS加载器220发出的软件加载命令,以通过发起DRTM事件240来加载并测量操作系统内核组件。安全程序启动然后被执行(例如,在最低级经由SKINIT/SENTER)并且控制权传递给测量启动环境(MLE)250和动态加载测量环境(DLME)260,MLE和DLME在将控制权传递给操作系统内核以继续引导过程之前确定系统状态是可信的。
[0100] 图3示出了如本文描述的使用安全代码启动器来执行操作系统内核从不可信BIOS或其他系统固件300中的安全加载和启动的示例性场景。具体而言,图3示出了预引导环境中的安全代码启动器的操作,其中测量驱动程序310(测量以验证信任或从可信源加载)由不可信系统固件300加载并通过使用事件处理程序来监听并截取由OS加载器330做出的调用来取得对引导服务环境的各方面的控制。在各种实施例中,这些调用还包括盘存取(包括盘读取和写入)。测量驱动程序310发起DRTM事件340来验证引导管理器320、OS加载器330以及由此加载的各种内核组件的完整性。当OS加载器330已经完成引导服务环境时,测量驱动程序截取来自OS加载器的相应ExitBootServices(s)调用,并且执行安全程序启动(例如,经由SKINIT/SENTER)。控制权然后传递给MLE350,MLE 350确定系统处于可信状态并且随后将控制权传递给OS内核360。
[0101] 图4示出了使用安全代码启动器来与先前加载的测量驱动程序相结合地使用OS加载器400来执行管理程序加载器410的安全加载和启动的示例性场景。具体而言,OS加载器400最初加载并执行管理程序加载器410(使用测量驱动程序来测量管理程序加载器)。管理程序加载器410然后执行初始化步骤并准备管理程序执行环境和状态,并且测量和加载管理程序映像。控制权返回给OS加载器400,OS加载器然后加载(并经由测量驱动程序来测量)其他内核组件。OS加载器400然后执行安全程序启动(经由测量驱动程序)并且控制权传递给管理程序的动态加载测量环境(DLME)430。管理程序的DLME 430然后确定平台处于可信状态并将系统控制权转移至管理程序440。管理程序440启用虚拟化并将控制权返回给OS加载器400,OS加载器进而将控制权传递给OS内核450。
[0102] 3.0安全代码启动器的操作概述:
[0103] 以上参考图1至图4描述以及进一步鉴于以上在节1和2中提供的详细描述的各过程通过图5的概括操作流程图来示出。具体而言,图5提供了概述安全代码启动器的各实施例中的某些的操作的示例性操作流程图。注意,图5不旨在成为此处描述的安全代码启动器的各实施例的所有的穷尽表示,并且仅出于解释目的而提供图5中表示的各实施例。此外,应当注意,图5中的断开的线或虚线可表示的任何框和框之间的互连表示此处所述的安全代码启动器的可任选的或可另选的实施例,并且如下所述的这些可任选或可另选的实施例中的任何或全部可以结合贯穿本文所描述的其它可另选实施例来使用。
[0104] 一般而言,如图5所示,安全代码启动器通过使用平台固件(可信或不可信)来发起500测量驱动程序的加载来开始操作。平台固件然后发起510引导初始化器(例如,引导管理器、引导加载器、管理程序加载器等)的加载。测量驱动程序然后截取520由引导初始化器做出的加载调用并触发DRTM事件以测量所调用的软件。接着,如元素530所示,测量驱动程序然后在被测软件的信任验证后将控制权返回给引导初始化器。最后,引导初始化器继续540已验证的可信软件组件的引导过程。
[0105] 4.0示例性操作环境:
[0106] 本文所描述的安全代码启动器可在多种类型的通用或专用计算系统环境或配置内操作。图6示出其上可实现此处描述的安全代码启动器的各实施方式和元素的通用计算机系统的简化示例。应当注意,图6中由折线或虚线所表示的任何框表示简化计算设备的替换实施方式,并且以下描述的这些替换实施方式中的任一个或全部可以结合贯穿本文所描述的其他替换实施方式来使用。
[0107] 例如,图6示出了概括系统图,其示出计算设备600的简化图示。这样的计算设备通常可以在具有至少一些最小计算能力的设备中找到,这些设备包括但不限于个人计算机、服务器计算机、手持式计算设备、膝上型或移动计算机、诸如蜂窝电话和PDA等通信设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络PC、小型计算机、大型计算机、音频或视频媒体播放器等。
[0108] 为允许计算设备600实现安全代码启动器,该设备应当具有足够的计算能力和系统存储器以启用基本计算操作。此外,计算设备600还可包括用于实现安全代码启动器的各种实施例的可任选的系统固件625(或其他固件或处理器可访问存储器或存储)。具体而言,如图6所示,计算能力一般由一个或多个处理单元610示出,并且还可包括一个或多个GPU 615,处理单元与GPU中的任一者或两者均与系统存储器620通信。注意,通用计算设备的处理单元610可以是专用微处理器,如DSP、VLIW、或其他微控制器,或可以是具有一个或多个处理核的常规CPU,包括多核CPU中的基于GPU的专用核。
[0109] 另外,图6的简化计算设备还可包括其他组件,诸如例如通信接口630。图6的简化计算设备还可包括一个或多个常规计算机输入设备640或此类设备的组合(例如,定点设备、键盘、音频输入设备、基于语音或话音的输入和控制设备、视频输入设备、触觉输入设备、触摸输入设备、用于接收有线或无线数据传输的设备等)。图6的简化计算设备还可包括其他可任选组件,诸如例如一个或多个常规计算机输出设备650(例如,显示设备655、音频输出设备、视频输出设备、用于传送有线或无线数据传输的设备等)。注意,用于通用计算机的典型通信接口630、输入设备640、输出设备650和存储设备660是本领域技术人员所公知的,且将不在此详细描述。
[0110] 图6的简化计算设备还可包括各种计算机可读介质。计算机可读介质可以是可由计算设备600经由存储设备660访问的任何可用介质,并且包括是可移动670和/或不可移动680的易失性和非易失性介质,该介质用于存储诸如计算机可读或计算机可执行指令、数据结构、程序模块或其他数据等信息。作为示例而非限制,计算机可读介质可包括计算机存储介质和通信介质。计算机存储介质指计算机或机器可读介质或存储设备,诸如DVD、CD、软盘、磁带驱动器、硬盘驱动器、光盘驱动器、固态存储器设备、RAM、ROM、EEPROM、闪存或其他存储器技术、磁带盒、磁带、磁盘存储或其他磁存储设备、或可用于存储所需信息并且可由一个或多个计算设备访问的任何其他设备。
[0111] 诸如计算机可读或计算机可执行指令、数据结构、程序模块等信息的存储还可通过使用各种上述通信介质中的任一种来编码一个或多个已调制数据信号或载波或其他传输机制或通信协议来实现,并且包括任何有线或无线信息传递机制。注意,术语“已调制数据信号”或“载波”一般指以对信号中的信息进行编码的方式设置或改变其一个或多个特征的信号。例如,通信介质包括诸如有线网络或直接线连接等携带一个或多个已调制数据信号的有线介质,以及诸如声学、RF、红外线、激光和其他无线介质等用于传送和/或接收一个或多个已调制数据信号或载波的无线介质。上述中任一组合也应包括在通信介质的范围之内。
[0112] 诸如计算机可读或计算机可执行指令、数据结构、程序模块等信息的保留还可通过使用各种上述通信介质中的任一种来编码一个或多个已调制数据信号或载波或其他传输机制或通信协议来实现,并且包括任何有线或无线信息传递机制。注意,术语“已调制数据信号”或“载波”一般指以对信号中的信息进行编码的方式设置或改变其一个或多个特征的信号。例如,通信介质包括诸如有线网络或直接线连接等携带一个或多个已调制数据信号的有线介质,以及诸如声学、RF、红外线、激光和其他无线介质等用于传送和/或接收一个或多个已调制数据信号或载波的无线介质。上述中任一组合也应包括在通信介质的范围之内。
[0113] 此外,可以按计算机可执行指令或其他数据结构的形式存储、接收、传送或者从计算机或机器可读介质或存储设备和通信介质的任何所需组合中读取具体化本文所描述的安全代码启动器的各种实施方式中的部分或全部的软件、程序和/或计算机程序产品。
[0114] 最后,本文所描述的安全代码启动器还可在由计算设备执行的诸如程序模块等计算机可执行指令的一般上下文中描述。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。本文描述的各实施例还可以在其中任务由通过一个或多个通信网络链接的一个或多个远程处理设备执行或者在该一个或多个设备的云中执行的分布式计算环境中实现。在分布式计算环境中,程序模块可位于包括媒体存储设备的本地和远程计算机存储介质两者中。另外,上述指令可以部分地或整体地作为可以包括或不包括处理器的硬件逻辑电路来实现。
[0115] 以上对安全代码启动器的描述是出于说明和描述的目的而提供的。这并不旨在穷举所要求保护的主题或将其限于所公开的精确形式。鉴于上述教导,许多修改和变型都是可能的。此外,应当注意,可以按所需的任何组合使用上述替换实施例的任一个或全部以形成安全代码启动器的另外的混合实施例。本发明的范围并不旨在由该“具体实施方式”来限定,而是由所附权利要求书来限定。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。更确切而言,上述具体特征和动作是作为实现权利要求的示例形式公开的。