4. 安全启动模式与状态:Setup Mode、User Mode、Audit Mode、Deployed Mode 的区别与切换
UEFI 安全启动(Secure Boot)并非一个单一的“开/关”状态,而是由一组精细的模式(Mode)和状态(State)构成。这些模式决定了谁可以修改安全启动的数据库(DB、DBX、KEK)、平台密钥(PK)以及固件策略。理解这四种模式——Setup Mode、User Mode、Audit Mode、Deployed Mode——是进行内核参数签名与传递配置的前提。
核心概念: 安全启动模式的核心在于控制对 PK(平台密钥) 的拥有权。拥有 PK 即拥有对 KEK(密钥交换密钥)和数据库的最高管理权限。
4.1 四种模式概述
下表总结了四种模式的核心特征、访问权限和典型应用场景:
| 模式 | PK 状态 | DB/DBX 修改 | KEK 修改 | 固件策略 | 典型场景 |
|---|---|---|---|---|---|
| Setup Mode | 未设置(Clear) | 允许(无签名要求) | 允许 | 可配置 | 出厂初始状态、OEM 配置、恢复操作 |
| User Mode | 已设置(Set) | 需要 KEK 签名 | 需要 PK 签名 | 强制执行 | 最终用户日常使用、企业标准部署 |
| Audit Mode | 已设置(Set) | 允许(但记录日志) | 需要 PK 签名 | 记录但不阻止 | 调试、兼容性测试、策略验证 |
| Deployed Mode | 已设置(Set) | 禁止(除签名更新外) | 禁止(除签名更新外) | 强制执行且不可逆 | 高安全环境、军工、金融、嵌入式设备 |
关键区别: Setup Mode 是唯一允许“无签名”修改数据库的模式。User Mode 和 Deployed Mode 都强制执行签名验证,区别在于 Deployed Mode 进一步锁定了 PK 和 KEK 的更新能力,使其成为最严格的模式。
4.2 模式切换流程与状态机
模式之间的切换并非随意进行,必须遵循 UEFI 规范定义的状态机。下图展示了四种模式之间的转换路径和触发条件:
4.3 各模式详细说明
4.3.1 Setup Mode(设置模式)
- 特征: PK 变量不存在或为空。这是平台出厂时的默认状态。
- 权限: 任何实体都可以修改 DB、DBX、KEK,无需数字签名。固件策略(如是否强制验证)可配置。
- 用途: OEM 在工厂中安装初始密钥、企业 IT 进行初始部署、或作为“恢复模式”在 PK 丢失时使用。
- 风险: 在此模式下,系统无法防御恶意引导加载程序,因为任何未签名的 EFI 应用都可以被执行。
4.3.2 User Mode(用户模式)
- 特征: PK 已设置,安全启动策略强制执行。
- 权限:
- 更新 DB/DBX:必须由 KEK 签名的认证变量写入。
- 更新 KEK:必须由 PK 签名的认证变量写入。
- 更新 PK:必须由当前 PK 签名的认证变量写入(或通过物理存在清除)。
- 用途: 这是大多数 Windows 和 Linux 发行版运行的标准模式。内核参数签名在此模式下生效。
4.3.3 Audit Mode(审计模式)
- 特征: PK 已设置,但固件不阻止未签名的引导加载程序执行。
- 权限: 与 User Mode 类似,但固件会记录所有签名验证失败的事件到日志中,但不会阻止启动。
- 用途: 调试和兼容性测试。例如,在部署新内核或签名证书前,先在 Audit Mode 下验证其行为是否符合预期。
- 注意: Audit Mode 通常通过固件设置(如 BIOS Setup)进入,需要物理访问或管理员权限。
4.3.4 Deployed Mode(部署模式)
- 特征: 最严格的模式。PK 已设置,且固件设置了
Deployed标志。 - 权限:
- DB/DBX 更新:仅允许通过已签名的认证变量进行追加操作(Append),不允许删除或替换。
- KEK 更新:仅允许追加。
- PK 更新:完全禁止,除非通过物理存在清除(通常需要清除 CMOS 或进入特殊恢复流程)。
- 用途: 用于高安全性环境,如 ATM、医疗设备、政府终端。一旦部署,几乎无法通过软件手段修改安全策略。
⚠ 重要警告: 在 Deployed Mode 下,如果 PK 或 KEK 丢失或损坏,恢复过程极其复杂,通常需要物理接触硬件并清除 NVRAM。在生产环境中进入 Deployed Mode 前,务必做好密钥备份和恢复预案。
4.4 模式切换的实践操作
以下是通过 efibootmgr 和 sbctl 工具查看当前安全启动模式的命令示例:
# 查看当前安全启动状态(包括模式)
sbctl status
# 输出示例:
# Secure Boot: enabled
# Setup Mode: disabled
# Audit Mode: disabled
# Deployed Mode: disabled
# Vendor Keys: microsoft
# 使用 efibootmgr 查看 PK 状态
efibootmgr -v | grep -i "SecureBoot\|SetupMode\|AuditMode\|DeployedMode"
# 通过 efivar 直接读取 UEFI 变量
efivar -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-SetupMode
efivar -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-AuditMode
efivar -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-DeployedMode
下表总结了从 User Mode 切换到其他模式的常用方法:
| 目标模式 | 切换方法 | 是否需要物理存在 | 风险等级 |
|---|---|---|---|
| Setup Mode | 清除 PK(通过固件设置或 sbctl reset-pk) |
是(通常需要 BIOS 确认) | 高(禁用安全启动) |
| Audit Mode | 在固件设置中启用“Audit Mode”选项 | 是 | 中(允许未签名代码运行) |
| Deployed Mode | 在固件设置中启用“Deployed Mode”或通过 sbctl 设置标志 |
是 | 极高(不可逆) |
实践建议: 在进行内核参数签名配置时,建议保持在 User Mode。如果需要在生产环境部署,先在 Audit Mode 下验证所有签名和启动流程,确认无误后再切换到 User Mode。除非有明确的高安全需求,否则不建议轻易进入 Deployed Mode。