美国商务部国家标准技术研究所 特别出版 800-147
BIOS 保护指南——来自美国国家标准技术研究所的建议
David Cooper,William Polk,Andrew Regenscheid 和 Murugiah Souppaya 著
计算机安全分部,信息科技实验室,美国国家标准技术研究所,盖瑟斯堡,马里兰州 20899-8930
2011 年四月
美国商务部 秘书 Gary Locke
美国国家标准技术研究所 主任 Patrick D. Gallagher 博士
计算机系统技术报告
位于美国国家标准技术研究所(NIST)的信息科技实验室(ITL)通过为美国国家的测量和标准基础设施提供技术领导以提升美国的经济和公众福利。ITL 通过开发测试、测试方法、参考数据、概念实现的证明以及技术分析来推进信息技术的发展和生产性的应用。ITL 的责任包括为美国联邦计算机系统的敏感未分类信息的经济高效的安全性和隐私性开发技术、物理、行政和管理方面的标准和指导意见。此特别出版 800 系列报导了 ITL 的研究、指导意见以及在计算机安全及其与工业、政府和学术组织的合作活动的领域中的延伸努力。
美国国家标准技术研究所特别出版 800-147
Natl. Inst. Stand. Technol. Spec. Publ. 800-147, 27 页(2011 年四月)
此文档中可能会提到某些商业实体、设备或器材,以便完整地描述一种实验过程或概念。这样的提名的本意并非暗示美国国家标准技术研究所对其的推荐或认可,也不是为了暗示该实体、器材或设备一定是可用于其目的之最佳选择。
致谢
来自美国国家标准技术研究所(NIST)的作者 David Cooper,William Polk,Andrew Regenscheid 和 Murugiah Souppaya 想要感谢曾经审阅此文档草案并且为之贡献技术内容的同事。作者感激地致谢并且赞赏来自那些向此出版物的公开草案提交评论的个人或组织的贡献。这些评论和贡献帮助了提升此文档的整体质量。
此外,作者还想感谢 Gustavo Duarte,此人创作了早期的启动过程示意图,它被用作此文档中的图 1 和图 2 的基础。
执行摘要
现代计算机依赖基础系统固件,通常称为系统的基本输入/输出系统(BIOS),以协助硬件初始化过程并且将控制权移交给操作系统。BIOS 通常由原始设备制造商(OEM)和独立 BIOS 厂商开发,并且由主板或者计算机制造商分发给最终用户。制造商频繁地更新系统固件以修复 bug、为漏洞打补丁,以及支持新硬件。此文档提供了关于在 PC 客户端系统上阻止对 BIOS 固件进行非授权修改的安全指导意见。
恶意软件对 BIOS 的非授权更改构成了一种重大威胁,由于 BIOS 在 PC 架构中的独特、特权的地位。恶意 BIOS 修改可能是针对某个组织的高级攻击的一部分——要么是永久的拒绝服务(如果 BIOS 损坏),或者是持久的恶意软件存在(如果 BIOS 被植入了恶意软件)。从传统 BIOS 到基于统一可扩展固件接口(UEFI)的实现的迁移可能使得恶意软件以广泛的方式针对 BIOS 发动攻击变得更加容易了,由于这些 BIOS 实现基于通用的规范。
此文档专注于当前和未来的 x86 和 x64 台式机和笔记本系统,尽管其控制和程序也可能潜在地适用于任何系统设计。类似地,尽管此指南面向企业级平台,可以期望必要的技术随着时间迁移到消费者级别的系统上。此安全指导意见并不试图阻止通过供应链、通过物理替换 BIOS,或是通过安全本地更新程序来安装非授权 BIOS。
安全指导意见具体针对四种系统 BIOS 特性:
- 认证 BIOS 更新机制,在此,由数字签名阻止非授权的 BIOS 镜像安装
- 可选的安全本地更新机制,在此,由物理存在认证 BIOS 更新镜像的安装
- 完整性保护特性,以便在认证 BIOS 更新过程外防止无意或者恶意的 BIOS 修改
- 不可绕过性特性,以保证没有任何机制可以允许系统处理器或者任何其他系统组件绕过认证更新机制
此外,此文档还呈现了与安全指导意见互补的最佳管理实践,应对五个不同阶段:
- 供货阶段,在此阶段建立起能够识别出许可的 BIOS 版本和配置设置的配置基线
- 平台部署阶段,在此阶段利用安全本地更新机制建立或者验证配置基线
- 操作和维护阶段,在此阶段,系统被监视其所发生的意外更改,并且利用认证 BIOS 更新机制以执行计划的 BIOS 更新
- 恢复阶段,此阶段支持经过认证的回滚到早期 BIOS 版本的操作,以及从损坏的 BIOS 进行恢复
- 废弃处理阶段,在此阶段,BIOS 和配置数据被恢复到其初始设定以防止意外泄露信息
此出版物的未来版本同时也会应对与 BIOS 进行交互的关键系统固件的安全性问题。
第 1 章 简介
1.1 权力范围
美国国家标准技术研究所(NIST)开发此文档以履行其在 2002 年美国联邦信息安全管理法案,公法 107-347 下的法定责任。
NIST 负有开发标准和指导意见,包括最低要求的责任,以便为所有政府机构的运作和财产提供足够的信息安全;但是,这些标准和指导意见不会适用于国家安全系统。此指导意见与美国行政管理和预算局(OMB)的公告 A-130 第 8b(3) 节“防护政府机构信息系统”相一致,如同在 A-130 的附录 IV“关键章节分析”中所分析的那样。补充信息在 A-130 附录 III 中提供。
此指导意见为联邦政府机构而准备。它可以在自愿基础上被非政府组织使用,并且不受限于版权,尽管我们要求署名权。
此文档中的任何部分都不应该被带到由美国商务部秘书在法定权力之下规定为对于联邦政府机构具有强制性和法定约束力的与之相矛盾的标准中来,这些指导意见也不应该被解读为更改或是取代商务部秘书、OMB 主任或是任何联邦官员的现有职权。
1.2 目的和范围
此文档为防止 PC 客户端系统上的针对基本输入/输出系统(BIOS)的非授权修改提供了指导意见。由恶意软件进行的非授权 BIOS 修改构成了显著的威胁,由于 BIOS 在 PC 架构中的独特和特权的地位。对 BIOS 的恶意修改可能是针对某个组织的高级攻击的一部分——可以是永久的拒绝服务(如果 BIOS 损坏),也可以是持久的恶意软件存在(如果 BIOS 被植入恶意软件)。
如同在本出版物中所使用的那样,BIOS 这一词语可以指代传统 BIOS、可扩展固件接口(EFI)BIOS 以及统一可扩展固件接口(UEFI)BIOS。此文档适用于存储于计算机系统中的系统闪存中的系统 BIOS 固件(例如,传统 BIOS 或者 UEFI BIOS),包括可能被格式化为 Option ROM 的部分。然而,它并不适用于存储于计算机系统中的其他位置的 Option ROM、UEFI 驱动程序和固件。
此指南的 3.1 节为平台厂商提供了用于安全 BIOS 更新过程的建议和指导意见。此外,3.2 节提供了针对操作环境中的 BIOS 管理的建议。此出版物的未来修订版本还将应对与 BIOS 进行交互的关键系统固件的安全性。
尽管此文档的关注焦点是当前和未来的 x86 和 x64 客户端平台,其控制和过程独立于任何特别的系统设计。类似地,尽管此指南面向企业级平台,其必要的技术可以期望随着时间迁移到消费者级别的系统上。未来的努力可能会着眼于企业服务器平台的启动固件安全性。
1.3 受众
此文档本意中的受众包括 BIOS 和平台厂商,以及负责管理终端平台的安全性、安全启动过程和硬件安全性模块的信息系统安全专业人士。这些素材在开发企业范围的采购策略并且部署的时候可能也会有用。
此文档中的素材是面向技术的,并且它假设读者至少拥有对于系统和网络安全的基本理解。此文档提供了背景信息,以帮助这些读者理解所讨论的话题。我们鼓励读者利用其他资源(包括列出于此文档中的)以获取更多细节信息。
1.4 文档结构
此文档的剩余部分被组织为以下章节:
- 第 2 章呈现了对于 BIOS 及其在启动中的作用的总览,并且指认了在操作环境中针对 BIOS 的潜在攻击
- 第 3 章检验了针对 BIOS 的选定威胁可以如何被化解。3.1 节描述了为了化解这些威胁所要求或者推荐的用于 BIOS 实现的安全控制。3.2 节定义了在企业内部作为平台管理生命周期的一部分撬动这些控制以实施一种安全 BIOS 更新过程的过程
此文档还包含带有支持材料的附录:
- 附录 A 包含了关于系统 BIOS 实现的安全指导意见的总结
- 附录 B 定义了此文档中所使用的词语
- 附录 C 包含了此文档中使用的首字母缩略词和缩略语列表
- 附录 D 包含了开发此文档过程中所使用的参考文献列表
第 2 章 背景
诸如台式机和笔记本等现代计算机包含辅助硬件初始化过程的程序代码。该代码存储于非易失性存储器中,并且通常被称为启动固件。用于初始化系统的主要固件称为基本输入/输出系统(BIOS)或者 系统 BIOS。本章提供了关于系统 BIOS 及其在启动过程中的作用的背景信息并且使用传统 BIOS 和统一可扩展固件接口(UEFI)BIOS 作为范例。它识别了用于更新系统 BIOS 的主要方法,以及关于系统 BIOS 的安全问题和威胁。
2.1 系统 BIOS
当计算机加电时,系统 BIOS 是主要中央处理器(CPU)所执行的第一个软件。尽管系统 BIOS 最初负责为操作系统提供硬件访问,它在现代设备上的主要职责是初始化并测试硬件组件以及加载操作系统。此外,系统 BIOS 加载并且初始化重要的系统管理功能,诸如电源和散热管理。系统 BIOS 可能还会在启动过程中加载 CPU 微码补丁。
有若干种不同类型的 BIOS 固件。某些计算机使用 16 位的传统 BIOS,而众多较新的系统使用基于 UEFI 规范 [UEFI] 的启动固件。在此文档中,我们将所有类型的启动固件称为 BIOS 固件、系统 BIOS 或者简称为 BIOS。如有必要,我们将会通过将其分别称为传统 BIOS 和 UEFI BIOS 来区分传统 BIOS 固件和 UEFI 固件。
系统 BIOS 通常由原始设备制造商(OEM)和独立 BIOS 厂商开发,并且随计算机硬件分发到最终用户。制造商频繁更新系统固件以修复 bug、为漏洞打补丁以及支持新硬件。系统 BIOS 通常存储于电可擦除可编程只读存储器(EEPROM)或者其他形式的闪存中,并且可由最终用户修改。一般来说,系统 BIOS 固件通过使用某种对于 BIOS 所存储于其中的非易失性存储器组件拥有特别知识的工具来更新。
一台给定的计算机系统可能在若干不同的位置拥有 BIOS。除了主板以外,BIOS 可以在硬盘控制器、显卡、网卡和其他扩展卡中找到。这种额外的固件通常采用 Option ROM 的形式(包含传统 BIOS 和/或 UEFI 驱动程序)。它们在启动过程中由系统固件加载并执行。其他系统设备,诸如硬盘和光驱,可能拥有它们自身的微控制器和其他类型的固件。
如同 1.2 节所注释的那样,此文档中的指导意见适用于存储于系统闪存中的 BIOS 固件,这包括随系统 BIOS 固件一起保存并且由相同机制更新的 Option ROM 和 UEFI 驱动程序。它并不适用于存储于计算机系统的其他位置的 Option ROM、UEFI 驱动程序和固件。
2.2 系统 BIOS 在启动过程中的作用
系统 BIOS 的主要功能是初始化重要硬件组件以及加载操作系统,此过程称为启动。系统 BIOS 的启动过程通常在以下步骤中执行:
- 执行核心可信根:系统 BIOS 可能包括一小块核心固件,它首先被执行并且能够验证其他固件组件的完整性。它在传统上曾经被称作 BIOS 启动块。对于可信计算应用程序,它还可以包含用于测定的核心可信根(CRTM)
- 初始化并测试低级硬件:在启动过程的极早期,系统 BIOS 初始化并测试计算机系统中的关键硬件,包括主板、芯片组、内存和 CPU
- 加载并执行额外组件模块:系统 BIOS 执行额外的固件,这些固件扩展了系统 BIOS 的能力或者初始化系统启动所必需的其他硬件组件。这些额外的模块可能存储于和系统 BIOS 相同的闪存中,或者可能存储于它们所初始化的硬件设备中(例如显卡、局域网卡等)
- 选择启动设备:当系统硬件被配置后,系统 BIOS 查找一个启动设备(例如硬盘、光驱、USB 驱动器等)并且执行存储于该设备上的引导程序
- 加载操作系统:在系统 BIOS 仍然控制计算机时,引导程序开始加载并且初始化操作系统内核。一旦内核开始发挥功能,计算机系统的主要控制权就从系统 BIOS 移交给操作系统。
此外,系统 BIOS 加载系统管理中断(SMI)处理程序(又称为系统管理模式(SMM)代码),并且初始化高级配置与电源接口(ACPI)表和代码。它们为运行着的计算机系统提供重要的系统管理功能,诸如电源和散热管理。
本章描述基于传统 BIOS 的系统以及基于 UEFI 的系统中的启动过程。尽管传统 BIOS 被应用于当今所部署的众多台式机和笔记本,业界已经开始过渡到 UEFI BIOS。
2.2.1 传统 BIOS 启动过程
图 1 展示了运行传统 BIOS 的 x86 兼容系统的一种典型启动过程。传统 BIOS 通常在 16 位实模式中执行,尽管某些后期的实现在保护模式中执行。某些基于传统 BIOS 的固件拥有一小块这样的 BIOS 固件——称为 BIOS 启动块——它在逻辑上同 BIOS 的其余部分相分离。在这些计算机系统上,该启动块是启动过程中最先被执行的固件。启动块负责检查其余 BIOS 代码的完整性,并且可能提供恢复机制,如果主板 BIOS 固件损坏。在大多数可信计算架构中,BIOS 启动块作为该计算机系统的 CRTM,由于此固件被隐含地信任,以便自举在本机上执行的其余固件和软件的后续验证的测定链的构建过程 [TCG05]。
启动块执行传统 BIOS 中用于初始化大部分硬件组件的那部分代码——加电自检(POST)代码。在 POST 过程中,计算机系统中的关键低级硬件被初始化,包括芯片组、CPU 和内存。系统 BIOS 初始化显卡,它可能加载并执行其自身的 BIOS 以初始化图形处理器及其内存。
脚注 1 此图及图 2 基于可在 [Duarte08] 中找到的信息和示意图
接下来,系统 BIOS 查找其他外设和微控制器,并且执行这些组件上的任何必需的 Option ROM 以初始化它们。Option ROM 在启动过程的非常早期被执行,并且可以为启动过程添加一系列特性。例如,网络适配器的 Option ROM 可以加载预启动执行环境(PXE),它允许一台计算机通过网络启动。
接下来,系统 BIOS 搜索计算机系统以查找已被标识为启动设备的存储设备。在通常情况下,BIOS 试图从它所找到的第一个拥有有效的主引导记录(MBR)的启动设备启动。该 MBR 指向存储于硬盘上的引导程序,它随之开始加载操作系统的进程。
在启动过程中,系统 BIOS 加载 SMI 处理程序并且初始化 ACPI 表和代码。SMI 处理程序在 CPU 上以一种特别的高权限模式运行,称为系统管理模式,这是一种 32 位模式,它可以绕过保护模式的众多硬件安全机制,诸如内存分段和页保护。
2.2.2 UEFI 启动过程
在较高层级上,如图 2 所示的 UEFI 启动过程遵循一种同传统 BIOS 启动过程相似的流程。区别之一是 UEFI 代码在 CPU 上以 32 位或 64 位保护模式运行,而非以传统 BIOS 中经常出现的 16 位实模式。大多数基于 UEFI 的平台始于一小块核心代码,它主要负责认证计算机系统上随后执行的代码。这与传统 BIOS 中的启动块的作用非常相似。这部分启动过程称为安全(SEC)阶段,并且作为计算机系统的核心可信根。
UEFI 启动过程的下一个阶段是前 EFI 初始化(PEI)阶段。PEI 阶段的本意是要初始化关键系统组件,诸如处理器、芯片组和主板。在某些情况下,安全阶段和 PEI 阶段的代码构成了 UEFI 系统中的核心可信根。
PEI 阶段的目的是为驱动程序执行环境(DXE)阶段准备系统。DXE 阶段是大部分系统初始化被执行的阶段。在此阶段执行的固件负责查找并执行那些在启动过程中提供设备支持或是额外特性的驱动程序。在此阶段中,UEFI BIOS 可能执行传统的 Option ROM,它们拥有相似的目的。
UEFI 启动过程的 PEI 和 DXE 阶段为加载操作系统奠定基础。加载操作系统的最后必要任务在启动设备选择(BDS)阶段中完成。此阶段为系统上的简单输入/输出操作初始化控制台设备。这些控制台设备包括本地文字或图形接口,以及远程接口,诸如 Telnet 或者基于 HTTP 的远程显示。BDS 阶段还会加载任何必要的额外驱动程序以管理控制台或者启动设备。最后,固件从首个 MBR 或者全局唯一标识分区表(GPT)格式的启动设备中加载引导程序,并且加载操作系统。
在启动过程中,UEFI BIOS 加载 SMI 处理程序并且初始化 ACPI 表和代码。
UEFI 启动过程的运行时(RT)阶段始于操作系统准备就绪以从 UEFI BIOS 接管控制权时。在此阶段中,UEFI 运行时服务对操作系统可用。
2.3 更新系统 BIOS
系统及其支持管理软件和固件可能提供若干种认证的机制以合理地更新系统 BIOS。这些机制包括:
- 由用户触发的更新:系统和主板制造商通常会为最终用户提供能够更新系统 BIOS 的工具。在历史上,最终用户从外部介质启动以执行这些更新,但是今天大多数制造商提供了能够从用户的正常操作系统中更新系统 BIOS 的工具。取决于系统所实施的安全机制,这些工具可能是直接更新 BIOS,或是它们能够为下一次系统重启时安排一次更新
- 受管理的更新:一台给定的计算机系统可能拥有基于硬件和软件的机制以允许系统管理员远程更新系统 BIOS 而无需同用户之间的直接交涉
- 回滚:在应用更新之前对其进行认证的系统 BIOS 实现可能也会在更新过程中检查版本号。在这些情况下,系统 BIOS 对于将已安装的固件回滚到某个早期版本可能拥有一种特别的更新过程。例如,回滚过程可能要求用户的物理存在。这种机制防止了攻击者刷入带有已知漏洞的旧固件
- 手动恢复:为了从损坏或者工作异常的系统 BIOS 中恢复,众多计算机系统提供机制以允许在启动过程中具有物理存在的用户以某种已知正常的版本和配置来替换当前系统 BIOS
- 自动恢复:有些计算机系统能够检测系统 BIOS 于何时被损坏,并且从备份固件镜像中恢复,它存储于不同于主要系统 BIOS 的独立存储位置(例如,第二块闪存芯片、硬盘上的隐藏分区)。
2.4 BIOS 完整性的重要性
作为主 CPU 所执行的第一批代码,系统 BIOS 是计算机系统的重要安全组件。尽管系统 BIOS,有可能会用到可信平台模块(TPM),可以验证启动过程中随后执行的固件和软件的完整性,系统 BIOS 的全部或者部分通常是被隐含地信任的。
系统 BIOS 是一个潜在地对攻击者具有吸引力的目标。运行在 BIOS 层级的恶意代码可以拥有对于计算机系统的极大的控制权。它可以被用于攻击在启动过程中随后被加载的任何组件,包括 SMM 代码、引导程序、虚拟机监视器和操作系统。BIOS 存储于其内容在供电周期之间持续存在的非易失性存储器上。写入 BIOS 中的恶意软件可以被用于重新感染设备,即使是在安装了新的操作系统或者更换了硬盘之后。由于系统 BIOS 在设备上以极高的权限在启动过程的早期运行,运行在 BIOS 层级的恶意软件可能很难检测。由于 BIOS 首先被加载,反恶意软件的产品没有机会来具有权威性地扫描 BIOS。
可利用的 BIOS 漏洞像是高度系统具体化的——指向某个特定版本的系统 BIOS 或者特定硬件组件(例如,某种特别的主板芯片组)。与之相反,大多数以软件为目标的恶意软件在操作系统内核之中或其上运行,它在此处容易开发,并且可以攻击更大范围类别的设备。BIOS 层级的恶意软件更有可能被用于对高价值计算机系统的针对性攻击。迁移到基于 UEFI 的 BIOS 可能使得恶意软件以一种大范围的方式针对 BIOS 变得更容易了,由于这些 BIOS 实现基于通用的规范。
基于以上列举的原因,只有极少已知的 BIOS 层级恶意软件的实例。此时,唯一公开已知的曾经感染了数量可观的计算机的针对系统 BIOS 的恶意软件是 CIH 病毒,也称为切尔诺贝利病毒 [Sym02],它最初被发现于 1998 年。此病毒的负载的元素之一试图覆盖那些使用当时被广泛部署的一种特定芯片组的系统的 BIOS。此恶意软件依赖的若干种漏洞在现代设备上已经不复存在。
安全研究人员已经展示了针对传统 BIOS 和 EFI/UEFI 固件的其他潜在攻击。概念验证已经被展示为允许向允许未签名更新的传统 BIOS 实现中插入恶意代码 [SaOr09]。其他研究人员已经在一种现代平台的 EFI BIOS 中发现缓冲溢出漏洞。尽管这种 EFI BIOS 在启动过程早期写保护固件,并且仅可向固件刷入签名更新,缓冲溢出允许研究人员通过在写保护应用之前执行固件更新包中的某个未签名部分以绕过安全更新过程 [WoTe09]。
诸如此类的漏洞可能会允许攻击者创建运行在系统的极高权限下的隐形恶意软件。系统 BIOS 在将计算机的控制权移交给操作系统之前加载 SMI 处理程序。写入 BIOS 的恶意代码可以修改 SMI 处理程序以创建能够以 SMM 运行的恶意软件 [EmSp08]。这将会赋予恶意软件针对物理内存和连接到宿主机的外设的不受限制的访问权,并且它将很难被运行在操作系统上的软件检测到。
2.5 针对系统 BIOS 的威胁
上述章节证实了维持系统 BIOS 完整性的重要性。本节描述系统 BIOS 完整性可能遭受攻击的一些不同方式,并且识别那些将会在第 3 章中所具体说明的安全控制和过程的范围中所考虑的那些攻击。
对系统 BIOS 的完整性的第一个威胁来自系统在供应链中运动时。供应链安全技术不在此文档所具体说明的安全控制范围之内。然而,3.2 节所具体叙述的某些程序可以被用于识别并且拯救那些拥有非授权的系统 BIOS 的系统。
假设系统自带的是制造商本意想要安装的系统 BIOS,在此系统的生命周期内,系统 BIOS 的完整性面临着各种威胁:
- 最难防止的威胁是由用户触发的恶意系统 BIOS 安装。由用户触发的 BIOS 更新工具通常是更新系统 BIOS 的首要方法。此文档所包含的指导意见并不能够防止用户安装未经许可的 BIOS 镜像,如果他们拥有对于计算机系统的物理访问。如同供应链威胁那样,安全过程可能能够检测并且清除未经许可的系统 BIOS,诸如引发恢复过程以恢复到一个经过许可的 BIOS
- 恶意软件可以撬动弱的 BIOS 安全控制或者利用系统 BIOS 本身的漏洞以重刷或者修改系统 BIOS。通用目的的恶意软件不太可能包含此功能,但是针对某一组织的攻击可以指向该组织的标准系统 BIOS。恶意 BIOS 可以通过网络或者利用介质而带到系统中。此文档中的指导意见被设计为防止此类攻击
- 基于网络的系统管理工具也可能被用于在组织范围内发动针对系统 BIOS 的攻击。例如,考虑一台由组织维护的用于该组织的已部署系统的 BIOS 更新服务器;一台被攻击的服务器可以向组织内的计算机系统推送恶意系统 BIOS。这是一种具有重大影响的攻击,但是需要一位局中人或者攻击该组织的更新过程。此文档所呈现的指导意见被设计为防止此类攻击
- 上述任何机制都可能被用于回滚到一种经过认证但是包含漏洞的系统 BIOS。这是一种特别隐秘的攻击,由于“坏的”BIOS 是经过认证的(即由制造商提供)。后续章节所具体说明的安全控制主要专注于验证系统 BIOS 的来源和完整性。此文档包含对于回滚保护的建议控制。
后续章节描述的控制主要专注于防止由运行在计算机系统上的潜在地具有恶意的软件进行的未经认证的系统 BIOS 修改。在供应链中、由拥有物理访问的个人,或是通过回滚到一个经过认证但是具有漏洞的系统 BIOS 等方式而进行的未经许可的系统 BIOS 安装并未被 3.1 节中的控制所解决,但是可以通过使用 3.2 节所具体说明的过程来解决。
第 3 章 化解威胁
BIOS 是安全系统中的重要组成部分。作为在启动过程中首先被执行的代码,系统 BIOS 被系统中的软硬件组件隐含地信任。上述章节描述了系统 BIOS 在启动过程中的作用、它对攻击者的吸引力,以及可能导致对 BIOS 的未经授权的修改的潜在威胁。本章呈现了 BIOS 实现的安全指导意见以及在企业环境中推荐的 BIOS 管理实践。3.1 节提供了安全 BIOS 更新过程的指导意见,它本意是用于平台厂商设计、实施或者选择一种 BIOS 实现。尽管产品可能不会立即可获得,组织机构可以在它们投入采购过程时采用这些指导意见,并且开始开发计划,以便在产品可获得时利用这些安全特性。组织机构可以在开发这些计划时使用 3.2 节所建议的 BIOS 管理实践。这些建议本意是防止对 BIOS 的未经授权的修改。
3.1 对于系统 BIOS 实现的安全指导意见
本节提供的指导意见的本意是在供货之后通过防护用于更新 BIOS 的机制来维持 BIOS 的完整性。特别地,本节定义了用于安全 BIOS 更新机制的系统 BIOS 实现的指导意见。安全的 BIOS 更新机制包括:
- 一种过程,用于验证 BIOS 更新的合法性和完整性
- 一种机制,用于确保 BIOS 受到保护,不受安全更新过程以外的修改。
认证过程确认 BIOS 更新镜像是由合法的来源生成的,并且未被替换。所有系统 BIOS 更新应该要么执行 3.1.1 节所描述的认证 BIOS 更新机制,要么使用一种符合 3.1.2 节中的指导意见的最优安全本地更新机制。
这些安全 BIOS 更新机制指导意见并不能化解与系统 BIOS 相关联的全部风险。某些对于系统 BIOS 的未经授权的修改的威胁仍然存在。例如,这些指导意见不能防止对系统拥有物理访问的个人修改系统 BIOS,它们也不能保证系统 BIOS 实现没有漏洞。关于系统 BIOS 的指导意见应当与组织已有的安全策略和过程联用。
3.1.1 BIOS 更新认证
认证 BIOS 更新机制使用数字签名以保证 BIOS 更新镜像的合法性。如需使用认证 BIOS 更新机制来更新 BIOS,应该有一个更新可信根(RTU),它包含一种签名验证算法以及一个包含了验证 BIOS 更新镜像的签名所需的公钥的密钥存储器。此密钥存储器和签名验证算法应该以一种受保护的方式存储于计算机系统上,并且应该仅可使用认证更新机制或者 3.1.2 节所列举的一种安全本地更新机制来修改。
存储于 RTU 中的密钥应该包括用于验证 BIOS 更新镜像的签名的公钥,或者在公钥的一份副本由 BIOS 更新镜像提供的情况下包含此公钥的散列值 [FIPS180-3]。在后一种情况下,更新机制应该计算由 BIOS 更新镜像所提供的公钥的散列值,以确保它与出现在密钥存储器中的散列值相匹配,然后再用所提供的公钥来验证 BIOS 更新镜像的签名。
BIOS 镜像应该以符合 NIST SP 800-89,Recommendation for Obtaining Assurances for Digital Signature Applications(关于获得数字签名应用程序的担保的建议)[SP800-89] 的方式签名,使用一种在 NIST FIPS 186-3,Digital Signature Standard(数字签名标准)[FIPS186-3] 中具体说明的一种许可的数字签名算法,它提供至少 112 位的安全强度,以符合 NIST SP 800-131A,Transitions: Recommendation for Transitioning the Use of Cryptographic Algorithms and Key Lengths(过渡:关于密码学算法和密钥长度的使用的过渡的建议)[SP800-131A] 的要求。
更新机制应该保证 BIOS 更新镜像经过数字签名,并且在更新 BIOS 之前,该数字签名可以使用 RTU 中的密钥进行验证。恢复机制也应该使用认证更新机制,除非恢复过程符合安全本地更新指导意见的要求。认证更新机制应该能够防止未经授权地将 BIOS 回滚到一个带有已知的安全弱点的早期认证版本。这种回滚限制机制可以通过例如验证 BIOS 镜像的版本号大于当前所安装的 BIOS 镜像的版本号等方式来实现。
某些组织可能想要在高度安全环境下主张对于 BIOS 更新的更大控制权。认证更新机制可以被设计为允许组织对于更新过程的控制,在此,更新 BIOS 或者回滚至早期版本的操作仅当此更新或者回滚过程得到组织授权时才被允许。例如,特定的 BIOS 镜像可以被组织许可,通过使用由组织控制的密钥对其附署签名,这可以在更新过程中被验证。
3.1.2 安全本地更新
BIOS 实现可以可选地包括一种安全本地更新机制,以便在不使用认证更新机制的情况下更新系统 BIOS。安全本地更新机制如果被实施,应该仅被用于加载首个 BIOS 镜像,或者从一个不能由 3.1.1 节描述的认证更新机制修复的系统 BIOS 损坏中恢复。安全本地更新机制应该通过要求物理存在来保证 BIOS 更新镜像的合法性和完整性。安全本地更新机制中的未来的保护可以通过在允许更新系统 BIOS 之前要求输入管理员口令或者解锁某个物理锁(例如某个主板跳线)来实现。
3.1.3 完整性保护
为了防止认证 BIOS 更新过程以外的针对系统 BIOS 的无意或者恶意的修改,RTU 和系统 BIOS(不包括那些存储于非易失性存储器中的被系统 BIOS 所使用的配置数据)应该通过某种在认证 BIOS 更新以外不能被超越的机制保护起来,使其不会受到无意或者恶意的修改。此保护机制本身也应该被保护起来,使其不会受到非授权的修改。
认证 BIOS 更新机制应该被某种机制保护起来,使其不会受到无意或者恶意的修改。此机制至少和保护 RTU 和系统 BIOS 的机制一样强。
此保护机制应该在执行任何无需使用认证更新机制或者安全本地更新机制就能被修改的固件或者软件前保护包含系统 BIOS 的系统闪存的相关区域。这种保护应该由除了通过认证更新机制以外不可更改的硬件机制来强制执行。
3.1.4 不可绕过性
认证 BIOS 更新机制应该是在没有贯穿于安全本地更新机制的物理介入的情况下更新系统 BIOS 的唯一机制。系统及其附带的系统组件和固件的设计应该保证没有任何机制可以允许系统处理器或者任何其他系统组件绕过认证更新机制,除了安全本地更新机制以外。任何诸如此类能够绕过认证更新机制的机制可能会创建一种漏洞以允许恶意软件利用来自非法来源的 BIOS 镜像修改系统 BIOS 或者重写系统闪存。
现代平台拥有这样的设计特性,它赋予系统组件对于系统 BIOS 的直接访问以提升性能,例如将 BIOS 复制到内存或者将其用于系统管理模式操作。系统组件可能拥有对于 BIOS 闪存的读取访问权限,但是它们不应该能够直接修改系统 BIOS,除非是经过认证更新机制,或者通过某种要求物理介入的认证机制。例如,能够绕过主处理器的总线控制(例如,对于系统闪存的直接内存访问)不应该能够直接修改固件。同样,系统中的微控制器不应该能够直接修改固件,除非该微控制器的硬件和固件组件在 RTU 处是以相同的机制保护的。这些不可绕过性的指导意见并不适用于存储于非易失性存储器中的由系统 BIOS 所使用的配置数据。
3.2 关于 BIOS 管理的实践建议
本节介绍在企业操作环境中管理系统 BIOS 以撬动现存策略、过程和操作实践的考虑。它专注于围绕作为其整体平台生命周期的一部分的系统 BIOS 的供货、部署、管理和废弃处理等阶段的关键活动。在恢复阶段所执行的活动也被具体说明以处理例外情况。
供货阶段:组织机构在企业范围内为不同的计算机系统制定一套用于标识、列入清单和跟踪的机制以贯穿其生命周期是至关重要的。识别并监视 BIOS 镜像的特征,诸如制造商名称、版本号或者时间戳允许该组织进行更新、回滚和恢复。该组织应该在安全的离线存储中为每种许可的系统 BIOS,包括其废弃的版本维护一套“黄金主镜像”。
如果平台拥有可配置的更新可信根(RTU),该组织需要维护一套密钥存储器和签名验证算法。如果 RTU 被集成到系统 BIOS 中,那么只需维护 BIOS 黄金镜像就能满足此指导意见。如果 RTU 并未集成到系统 BIOS 中,为 RTU 提供的安全性应该至少和用于 BIOS 黄金镜像的一样强。
大多数组织机构将会依赖制造商作为经过认证的 BIOS 的来源。在这种情况下,该组织并未维持任何私钥,并且 RTU 仅包含由制造商提供的公钥。如果组织机构想要通过附署签名某些或者全部经过许可的系统 BIOS 更新来积极地参与 BIOS 认证过程,RTU 可能包含一个或者多个与该组织相关联的公钥。在这种情况下,该组织必须安全地维持对应地私钥,以使得下一次 BIOS 更新可以被签名。私钥应该采用多方控制来维护,以防止局中人攻击。对于组织的密钥,对应的公钥也必须安全地维持(以保证来源的合法性)。
此外,对于每种平台的通用配置基线必须被创建以符合组织的策略,该基线应该保证完整性保护和不可绕过性的特性被启用(如果它们可配置),并且组织的口令策略和启动设备顺序策略被强制执行。最后,每种平台的 BIOS 镜像信息和与之相关的设置基线应该被记录在配置管理计划中(脚注 2)。
脚注 2:参见 NIST SP 800-128 草案,Guide for Security Configuration Management of Information Systems(信息系统的安全配置管理指南)[SP800-128] 以获得关于开发配置管理计划的指导意见。
平台部署阶段:安全本地更新过程应该被用于从黄金主镜像为该平台提供经过许可的 BIOS。对应的 RTU 应该被安装,并且在计算机系统部署之前,与 BIOS 相关的配置参数应该被建立。这会帮助组织维护一种一致的、已知的初始状态。组织应该周期性地进行评估以确保组织的 BIOS 策略、过程和程序被恰当地遵循。
具体地,程序必须保证恰当的系统 BIOS 被安装,RTU 包含所有必需的密钥并且没有非授权的密钥,以及完整性保护和不可绕过性的特性被启用,如果它们可配置。
操作维护阶段:本阶段包含那些对于在操作环境中维持 BIOS 的安全性和可靠性至关重要的操作和维护活动。系统 BIOS 更新应该使用更改管理过程来实施,并且新的经过许可的版本应该被记录在配置计划中,并且注释之前的 BIOS 镜像已被其取代。
BIOS 镜像和配置基线还应该被连续监视。如果一个由此基线衍生的未经许可的版本被检测到,此事件应该被调查、记录并且作为事故响应活动的一部分而被修复。事故响应计划应该记录此过程以及可用于捕获证据以帮助确定其根本原因的经过认证的配套工具(脚注 3)。安全本地更新机制应该被用于从 BIOS 镜像攻击中恢复。
脚注 3:关于如何建立事故响应能力以及高效地应对事故的额外信息,参见 NIST SP 800-61 修订版本 1,Computer Security Incident Handling Guide(计算机安全事故处理指南)[SP800-61]。
如果需要新的 BIOS 镜像以扩展系统能力、改进系统可靠性或是修复软件漏洞,BIOS 更新应该使用认证更新过程来执行。如果组织积极参与更新过程,多方控制过程必须被执行以便从安全存储中获取私钥并且生成数字签名。BIOS 安装包也应该被签名,并且此数字签名应该在执行前被验证。一旦更新成功执行,配置基线应该被验证以确认该计算机系统仍然符合组织的既定策略。
恢复阶段:在某些情况下,所需的 BIOS 更新不能使用认证更新过程来完成。例如,损坏的系统 BIOS 或者 RTU 可能无法执行或者调用认证程序。在这种情况下,BIOS 更新可能会有意料之外的结果,迫使组织回滚到某个早期版本。对于认证更新,可能需要额外的步骤以认证回滚(如果在标准认证过程中比较了版本号或者时间戳),或者可能需要安全本地更新过程以重建安全基线。如同在操作维护阶段那样,在 BIOS 回滚或者重新安装之后验证 BIOS 配置是否满足组织的既定策略是至关重要的。
废弃处理阶段:在计算机系统被废弃处理并且离开组织之前,组织应该从系统 BIOS 中移除或者销毁任何敏感数据。配置基线应该被重置为制造商的默认设置;特别地,诸如口令等敏感设置应该从系统中删除,密钥也应该从密钥存储器中移除。如果系统 BIOS 包含任何组织特定的自定义,那么由厂商提供的 BIOS 镜像应该被安装。平台生命周期的这一阶段减少了意外数据泄露的机会。
附录 A 系统 BIOS 实现指导意见总结
此附录包含了可在 3.1 节找到的用于系统 BIOS 实现的安全 BIOS 更新指导意见的总结。这些指导意见本意是用于平台厂商设计、实现或者选择一种系统 BIOS 实现。读者应该查询此文档正文中的相关章节以获取那些深入描述此指导意见的目的和上下文的更多信息性的文字。
1. 许可的 BIOS 更新机制
- 1-A 所有系统 BIOS 更新应该使用 3.1.1 节描述的认证更新机制,或者符合 3.1.2 节所述指导意见的可选安全本地更新机制。
2. BIOS 更新认证
- 2-A 应该有一个更新可信根(RTU),它包含一种签名验证算法以及一个包含用于验证 BIOS 更新镜像的签名的公钥的密钥存储器。
- 2-B 密钥存储器和签名验证算法应该以一种受保护的方式存储于计算机系统上,并且仅可使用认证更新机制或者 3.1.2 节所述的安全本地更新机制来修改。
- 2-C RTU 中的密钥存储器应该包含用于验证 BIOS 更新镜像的签名的公钥或者用于验证包含公钥的 BIOS 更新镜像的公钥的散列值 [FIPS180-3]。在后一种情况下,更新机制应该保证由 BIOS 更新镜像提供的公钥的散列值出现在密钥存储器中,然后才能使用提供的公钥来验证 BIOS 更新镜像的签名。
- 2-D BIOS 更新镜像应该以符合 NIST SP 800-89,Recommendation for Obtaining Assurances for Digital Signature Applications(关于获得数字签名应用程序的担保的建议)[SP800-89] 的方式来签名,使用一种在 NIST FIPS 186-3,Digital Signature Standard(数字签名标准)[FIPS186-3] 中具体说明的经过许可的数字签名算法,它提供至少 112 位的安全强度,以符合 NIST SP 800-131A,Transitions: Recommendation for Transitioning the Use of Cryptographic Algorithms and Key Lengths(过渡:关于密码学算法和密钥长度的使用的过渡的建议)[SP800-131A] 的要求。
- 2-E 认证更新机制应该保证 BIOS 更新镜像经过数字签名,并且该数字签名可以在更新 BIOS 之前利用 RTU 中的密钥存储器中的密钥之一来验证。
3. 安全本地更新(可选)
BIOS 实现可以可选地包括一种安全本地更新机制,在此,由物理存在来认证 BIOS 更新镜像的安装,而无需使用认证更新机制。
- 3-A 安全本地更新机制应该通过要求物理存在来保证 BIOS 更新镜像的合法性和完整性。
4. 完整性保护
- 4-A RTU 和 BIOS(除了存储于非易失性存储器中的被 BIOS 使用的配置数据)应该被保护以防止无意或者恶意的修改,使用一种在认证 BIOS 更新机制以外不能被超越的机制。
- 4-B 保护机制应该被保护以防止非授权的修改。
- 4-C 认证 BIOS 更新机制应该被保护以防止无意或者恶意的修改,利用一种至少和保护 RTU 和系统 BIOS 的机制一样强的机制。
- 4-D 保护机制应该在执行那些无需使用认证更新机制或者安全本地更新机制就能修改的固件和软件前保护包含系统 BIOS 的系统闪存的相关区域。
- 4-E 保护应该由除了通过认证机制以外不可更改的硬件机制来强制执行。
5. 不可绕过性
这些不可绕过性的指导意见不适用于存储于非易失性存储器中的由系统 BIOS 所使用的配置数据。
- 5-A 认证 BIOS 更新机制应该是在没有贯穿于安全本地更新机制的物理介入的情况下更新系统 BIOS 的唯一机制。
- 5-B 系统及其附带的系统组件和固件的设计应该保证没有任何机制可以允许系统处理器或者任何其他系统组件绕过认证更新机制,除了安全本地更新机制以外。
- 5-C 尽管系统组件可能拥有对 BIOS 闪存的读取访问权限,它们不应该能够直接修改系统 BIOS,除了通过认证更新机制或者利用某种要求物理介入的认证机制以外。
- 5-C.i 能够绕过主处理器的总线控制(例如,对于系统闪存的直接内存访问)不应该能够直接修改固件。
系统中的微控制器不应该能够直接修改固件,除非微控制器的硬件和固件组件使用和 RTU 相同的机制被保护。
附录 B 术语
此出版物中使用的部分选定的术语定义见下文。
- 基本输入/输出系统(BIOS):在此出版物中,总体地用于指代基于传统 BIOS、可扩展固件接口(EFI)和统一可扩展固件接口(UEFI)的启动固件。
- 传统 BIOS:用于众多 x86 兼容计算机系统的老旧启动固件,也称为遗产 BIOS。
- 用于测定的核心可信根(CRTM):在启动过程中,主处理器上所执行的第一段 BIOS 代码。在一台具有可信平台模块的系统上,CRTM 被隐含地信任,以自举该计算机系统上所执行的其他固件和软件的后续认证的测定链的构建过程。
- 可扩展固件接口(EFI):关于操作系统和平台固件之间的接口规范。1.10 版本是 EFI 规范的最终版本,由统一可扩展固件接口论坛制定的后续修订版本属于 UEFI 规范的一部分。
- 固件:包含在只读存储器(ROM)中的软件。
- Option ROM:由系统 BIOS 调用的固件。Option ROM 包含扩展卡(例如显卡、硬盘控制器、网卡等)上的 BIOS 固件以及用于扩展系统 BIOS 功能的模块。
- 保护模式:见于 x86 兼容处理器的一种操作模式,具有内存保护、虚拟内存和多任务的硬件支持。
- 实模式:见于 x86 兼容处理器的一种老旧的高权限操作模式。
- 系统管理模式(SMM):见于 x86 兼容处理器的一种高权限操作模式,用于低级系统管理功能。系统管理模式仅可在系统生成系统管理中断时进入,并且仅可执行来自隔离的内存块中的代码。
- 系统闪存存储器:系统 BIOS 所在的非易失性闪存,通常是主板上的电可擦除可编程只读控制器(EEPROM)闪存存储器。尽管系统闪存存储器是一个技术具体的词语,此文档中的指导意见本意是将系统闪存存储器应用于指代包含系统 BIOS 的任意非易失性存储介质。
- 可信平台模块(TPM):构建于某些计算机主板中的防破坏集成电路,它可以执行密码学操作(包括密钥生成)以及保护少量敏感信息,诸如口令和密码学密钥。
- 统一可扩展固件接口(UEFI):正在广泛部署到新的基于 x86 的计算机系统上的针对传统 BIOS 的可能的替代品。UEFI 规范继承自 EFI 规范。
附录 C 首字母缩略词和缩略语
此附录包含此指南中用到的一组选定的首字母缩略词和缩略语。
- ACPI:高级配置与电源接口
- BDS:启动设备选择
- BIOS:基本输入/输出系统
- CPU:中央处理器
- CRTM:用于测定的核心可信根
- DXE:驱动程序执行环境
- EEPROM:电可擦除可编程只读存储器
- EFI:可扩展固件接口
- FIPS:美国联邦信息处理标准
- FISMA:美国联邦信息安全管理法案
- GPT:全局唯一标识分区表
- GUID:全局唯一标识
- HTTP:超文本传输协议
- IT:信息科技
- ITL:信息科技实验室
- MBR:主引导记录
- NIST:美国国家标准技术研究所
- OEM:原始设备制造商
- OMB:美国行政管理和预算局
- OS:操作系统
- PEI:前 EFI 初始化
- POST:加电自检
- PXE:预启动执行环境
- ROM:只读存储器
- RT:运行时
- RTU:更新可信根
- SMI:系统管理中断
- SMM:系统管理模式
- SP:特别出版
- TPM:可信平台模块
- UEFI:统一可扩展固件接口
附录 D 参考文献
以下列表提供了此出版物的参考文献。
- [Duarte08] G. Duarte. “How Computers Boot Up.” 5 June 2008. http://www.duartes.org/gustavo/blog/post/how-computers-boot-up
- [EFI] EFI 1.10 Specification. Intel. 1 November 2003. http://www.intel.com/technology/efi/
- [EmSp08] Shawn Embleton, Sherri Sparks, and Cliff C. Zou. “SMM Rootkits: A New Breed of OS Independent Malware,” Proceedings of 4th International Conference on Security and Privacy in Communication Networks (SecureComm), Istanbul, Turkey, September 22-25, 2008.
- [FIPS180-3] FIPS 180-3, Secure Hash Standard. October 2008.
- [FIPS186-3] FIPS 186-3, Digital Signature Standard. June 2009.
- [DuGr09] Loïc Duflot, Olivier Grumelard, Olivier Levillain and Benjamin Morin. “ACPI and SMI handlers: some limits to trusted computing.” Journal in Computer Virology. Volume 6, Number 4, 353-374.
- [Graw09] D. Grawrock. Dynamics of a Trusted Platform: A Building Block Approach. Hillsboro, OR: Intel Press, 2009.
- [Heas07a] J. Heasman. “Firmware Rootkits: A Threat to the Enterprise.” Black Hat DC. Washington, DC. 28 February 2007. http://www.nccgroup.com/Libraries/Document_Downloads/02_07_Firmware_Rootkits_The_Threat_to_the_Enterprise_Black_Hat_Washington_2007_sflb.sflb.ashx
- [Heas07b] J. Heasman. “Hacking the Extensible Firmware Interface.” Black Hat USA. Las Vegas, NV. 2 August 2007. https://www.blackhat.com/presentations/bh-usa-07/Heasman/Presentation/bh-usa-07-heasman.pdf
- [Intel03] Intel Platform Innovation Framework for EFI- Architecture Specification v0.9. Intel. September 2003. http://www.intel.com/technology/framework/
- [KGH09] A. Kumar, G. Purushottam, and Y. Saint-Hilaire. Active Platform Management Demystified. Hillsboro, OR: Intel Press, 2009.
- [Sal07] Salihun, Darmawan. BIOS Disassembly Ninjutsu Uncovered. Wayne, PA: A-LIST, 2007.
- [SaOr09] A. Sacco, A. Ortéga. “Persistant BIOS Infection.” Phrack. Issue 66. 6 November 2009. http://www.phrack.com/issues.html?issue=66&id=7
- [SP800-57] NIST SP 800-57, Recommendation for Key Management – Part 1: General. March 2007.
- [SP800-61] NIST SP 800-61rev1, Computer Security Incident Handling Guide. March 2008.
- [SP800-89] NIST SP 800-89, Recommendation for Obtaining Assurances for Digital Signature Applications. November 2006.
- [SP800-128] Draft NIST SP 800-128, Guide for Security Configuration Management of Information Systems. March 2010.
- [SP800-131A] NIST SP 800-131A, Transitions: Recommendation for Transitioning the Use of Cryptographic Algorithms and Key Lengths. January 2011.
- [Sym02] W95.CIH Technical Details. Symantec. 25 April 2002. http://www.symantec.com/security_response/writeup.jsp?docid=2000-122010-2655-99
- [TCG05] PC Client Work Group Specific Implementation Specification for Conventional Bios Specification, Version 1.2. Trusted Computing Group. July 2005. http://www.trustedcomputinggroup.org/resources/pc_client_work_group_specific_implementation_specification_for_conventional_bios_specification_version_12
- [UEFI] UEFI Specification Version 2.3. Unified EFI Forum. May 2009. http://www.uefi.org/specs/
- [Wech09] F. Wecherowski. “A Real SMM Rootkit: Reversing and Hooking BIOS SMI Handlers.” Phrack. Issue 66. 6 November 2009. http://www.phrack.com/issues.html?issue=66&id=11
- [WoTe09] R. Wojtczuk and A. Tereshkin. “Attacking Intel BIOS.” Black Hat USA. Las Vegas, NV. 30 July 2009. http://www.blackhat.com/presentations/bh-usa-09/WOJTCZUK/BHUSA09-Wojtczuk-AtkIntelBios-SLIDES.pdf