使用 UEFI 保护操作系统加载前的环境

我们很遗憾地发现,在一些评论中,大家对于 Microsoft 实施安全启动的方式存在误解,因此我们特意撰写了这篇博文,进一步对如何利用 UEFI 实现安全启动进行澄清,并介绍了针对 PC 制造商提供的一些选项。首先大家要记住,我们在引入相关功能的同时保证了用户能够继续对 PC 进行全面控制,以毫不迁就的方式实现安全启动,保护用户的安全。我们的生态系统团队的 Tony Mangefeste 撰写了本博文。--Steven

内容提要

  • UEFI 支持固件实施安全策略
  • 安全启动是一种 UEFI 协议而不是 Windows 8 的一项功能
  • UEFI 安全启动是 Windows 8 安全启动体系结构的一个组成部分
  • Windows 8 利用安全启动来确保操作系统加载前的环境是安全的
  • 安全启动不会“锁定”操作系统加载程序,它只是一种支持固件对组件的可靠性进行验证的策略
  • OEM 可以通过在其平台上自定义证书和策略管理级别来对固件进行自定义,以满足客户的需求
  • Microsoft 不会托管或控制 PC 固件中用于控制或支持从 Windows 之外的任何操作系统进行安全启动的设置

指导原则 – 在安全方面毫不迁就

UEFI 安全启动协议是实现跨平台和固件安全的基础,与体系结构无关。在执行固件映像之前,安全启动基于公钥基础结构 (PKI) 流程来验证固件映像,帮助降低遭受启动加载程序攻击的风险。在 Windows 8 中,Microsoft 依赖此协议来改进用户的平台安全性。

Windows 8 平台完整性体系结构图:1.安全启动阻止运行未知的操作系统加载程序。2.内核首先启动“预启动反恶意软件”(Early Launch Anti-Malware, ELAM) 驱动程序,这些驱动程序强制对第三方驱动程序和应用程序执行策略。3.在启动过程中,在 TPM 中记录检测到的系统启动状态。4.为了验证客户端是否运行正常,反恶意软件会将 TPM 检测值发送至远程验证器。
图 1 – 平台完整性体系结构

Microsoft 与我们的合作伙伴紧密合作,确保安全启动为用户提供良好的安全体验。Microsoft 支持 OEM 灵活地决定由谁来管理安全证书,通过何种方式允许用户导入并管理这些证书以及管理安全启动。我们相信,为 OEM 提供这一灵活性以及允许用户自行决定如何管理其系统非常重要。

对于 Windows 客户,Microsoft 利用 Windows 认证计划来确保:随 Windows 8 发运的系统默认已启用安全启动功能;固件不允许以编程方式控制安全启动(防止恶意软件禁用固件中的安全策略);在未经授权的情况下,OEM 禁止更新固件,因为这可能会危及系统的完整性。

大多数策略并非 UEFI 固件的新增功能,当今的大多数 PC 都具有某种形式的固件验证功能。即便是现有的旧式固件验证支持(如 BIOS 密码)也是一种安全启动形式,多年来一直由 OEM 和最终用户来控制是否启用此功能。不过,利用安全启动和 UEFI,整个行业和 Microsoft 正站在更高的高度上创建更完整、更良好的系统,为用户提供更强有力的保护,抵御不断发展壮大的各种威胁。

什么是 UEFI?

UEFI(统一可扩展固件接口)由 UEFI 论坛统一管理,UEFI 论坛是由芯片组供应商、硬件供应商、系统供应商、固件供应商和操作系统供应商联合组建的一个组织。该论坛负责维护可跨多种 UEFI PC 使用的规范、测试工具和参考实现。Microsoft 是该论坛的董事会成员,该论坛对所有个人和公司开放,加入该论坛无需支付任何费用。

UEFI 为个人计算机定义了下一代固件接口。基本输入和输出系统 (BIOS) 固件最初采用汇编语言进行编程,并使用中断来执行输入/输出操作,在出现之初即确定了 PC 生态系统的基本框架,但是随着计算技术的发展,“现代固件”定义应运而生,以满足下一代平板电脑和设备的需求。

UEFI 旨在定义一种标准通信方式,规范启动过程中操作系统与平台固件之间的通信。在 UEFI 出现之前,在启动过程中主要利用软件中断机制与硬件进行通信。现代 PC 可以在硬件和软件之间更快速、更高效地执行块输入/输出操作,在设计中使用 UEFI 可以发挥硬件的全部潜能。

UEFI 支持模块化固件设计,硬件设计师和系统设计师在为要求更高的现代计算环境设计固件时,具有更高的灵活性。由于输入/输出受到软件中断的限制,UEFI 提出了基于事件的概念,并采用不依赖于体系结构的编码标准。

什么是安全启动?

UEFI 具有固件验证过程(称为“安全启动”),该过程在 UEFI 2.3.1 规范第 27 章中定义。安全启动定义平台固件如何管理安全证书,如何进行固件验证以及定义固件与操作系统之间的接口(协议)。

Microsoft 的平台完整性体系结构利用 UEFI 安全启动以及固件中存储的证书与平台固件之间创建一个信任根。随着恶意软件的快速演变,恶意软件正在将启动路径作为首选攻击目标。此类攻击很难防范,因为恶意软件可以禁用反恶意软件产品,彻底阻止加载反恶意软件。借助 Windows 8 的安全启动体系结构及其建立的信任根,通过确保在加载操作系统之前,仅能够执行已签名并获得认证的“已知安全”代码和启动加载程序,可以防止用户在根路径中执行恶意代码。

在当今的大多数 PC 中,操作系统加载前的环境存在漏洞,可以通过将启动加载程序重定向到可能的恶意加载程序来实施攻击。这些加载程序无法通过操作系统安全措施和反恶意软件进行检测。

当前的启动过程:BIOS > 任意操作系统加载程序代码 > 操作系统启动
图 2 - 旧式 BIOS 启动路径

Windows 8 借助 UEFI 安全启动解决了此漏洞,它利用固件中的策略并结合证书来确保仅允许执行已正确签名并通过身份验证的组件。

Windows 8 中的安全启动:本机 UEFI 2.3.1 > 仅通过验证的操作系统加载程序 > 操作系统启动
图 3 - 使用 UEFI 的安全启动路径

安全启动只是 Windows 8 平台完整性保障系统的一个组成部分。结合 UEFI,Microsoft 还对其他可用硬件实施整体的安全策略,以便进一步增强平台的安全性。

背景知识:安全启动的工作原理

PC 开机时将启动代码执行过程,配置处理器、内存、和硬件外围设备,以便为执行操作系统做准备。无论基于哪一种硅体系结构(x86、ARM 等),在所有平台中,此过程都是一样的。

之后将启动系统,在切换到操作系统加载程序之前,固件将检查硬件外围设备(如网卡、存储设备或视频卡)中固件代码的签名。此设备代码称为“可选 ROM”,通过确保该设备已为切换到操作系统准备就绪,继续执行配置过程。

在启动过程的这一部分中,固件将检查固件模块中嵌入的签名(与应用程序很像),如果该签名与固件中的签名数据库匹配,则将允许执行该模块。这些签名存储在固件中的数据库中。这些数据库包含“允许”和“禁止”列表,用于确定是否可继续执行启动过程。

显示有“允许”列表和“禁止”(恶意软件哈希值)列表的示意图,这些列表受密钥和平台密钥证书控制
图 4 - 安全证书数据库

上图显示了安全启动过程中系统中的签名和密钥的层次结构。平台通过 OEM 在制造过程中安装到固件中的平台密钥来进行保护。这是当今发运的大多数系统所采用的过程,不论这些系统是基于 UEFI 还是基于旧式 BIOS。(应用程序(如固件更新实用程序)将使用平台密钥来保护固件映像。)安全启动过程使用其他密钥来保护对相关数据库的访问,这些数据库存储有用于允许或禁止执行固件的密钥。

“允许”数据库包含代表信任固件组件(主要是操作系统加载程序)的密钥。另一个数据库包含恶意软件和固件的哈希值,将阻止执行这些恶意软件组件。这些策略通过使用验证码和公钥基础结构 (PKI) 对固件进行签名来实施。PKI 是一个创建、管理和撤销证书的完整过程,在信息交换过程中,将使用证书来建立信任关系。PKI 是安全启动所采用的安全模型的核心组件。

安全启动的要求

要实现安全启动,固件必须符合 UEFI 2.3.1 或更高版本。UEFI 论坛已批准了这一最新修订版本,其中对第 27 章的策略进行了更新以改进现有的安全启动协议,增加了时间身份验证变量,采用更强的密钥进行加密并澄清了这些证书的存储方式。

对于购买 PC 的消费者来说,该功能不会对其使用 PC 的方式产生任何影响。但具有该功能的系统可以有效地抵御利用操作系统加载前的漏洞进行的 Bootkit 和 Rootkit 攻击,如上所述。

由谁来控制安全启动

迄今为止,用户掌握着其 PC 的控制权。Microsoft 的理念是:为用户提供最佳的体验是我们的第一原则,允许用户自行决定是否使用安全启动。我们与 OEM 生态系统紧密合作,为用户提供了这一灵活性。借助 UEFI 通过安全启动提供的安全性,大多数用户的系统将能够抵御启动加载程序攻击。如果用户希望运行早期的操作系统,则可以使用我们所提供的选项进行设置。

在向 //BUILD/ 大会与会者发放的安装有 Windows 8 开发人员预览版的 Samsung 平板电脑中,可以找到对此项控制功能的演示。在下面的屏幕截图中可以看到,我们在固件设计中允许用户禁用安全启动。不过,您需自行承担禁用安全启动所带来的风险。OEM 可以自行选择如何启用对此项功能的支持,并可以对上述参数进行自定义,仅为用户提供唯一的可选值。Windows 只不过是尽己所能针对相关情形提供良好的操作系统支持,我们相信,对于普通消费者和企业客户来说,大多数人都会认识到安全启动的价值。

显示有 TPM 配置选项的控制台图像:[Enable virtualization [enabled]](支持虚拟化 [启用]),[CSM Support [Disabled]](CSM 支持 [禁用]),[Attempt Secure Boot [Enabled]](尝试安全启动 [启用]),[Display Rev. Info - Intel UEFI...](显示版本信息 - Intel UEFI...)
图 5 - Samsung PC 安全启动设置

Tony Mangefeste
生态系统