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 规范定义的状态机。下图展示了四种模式之间的转换路径和触发条件:

UEFI 安全启动模式状态机 Setup Mode PK = Clear User Mode PK = Set Audit Mode PK = Set Deployed Mode PK = Set 设置 PK 清除 PK(需物理存在) 固件配置切换 固件配置切换 设置 Deployed 标志 直接设置 Deployed 标志 ⚠ 切换注意事项 • Setup → User:必须设置有效的 PK,且 KEK 和 DB 必须包含至少一个有效条目。 • 进入 Deployed Mode 是单向操作,无法直接退回 User 或 Setup Mode(需清除 PK)。

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。