4. 固件安全
固件是平台加电后执行的第一段可信代码,它负责初始化内存、芯片组、外设,并最终把控制权交给操作系统引导程序。在多阶段安全启动体系中,固件层是信任链的起点:如果固件被篡改,后续所有签名验证都可能被绕过。因此,理解 UEFI、传统 BIOS、Coreboot 的差异,以及固件签名与验证机制,是构建可信启动链路的基础。
一、核心原理:固件是信任链的根
固件安全的核心目标不是“让固件不可修改”,而是“让固件修改可被检测、可被授权、可被恢复”。平台加电后,CPU 从固定地址取指,执行固件中的第一条指令。此时还没有操作系统、没有杀毒软件、没有内核完整性度量,因此固件必须自己建立第一层信任。
现代平台通常采用“信任根 + 逐级验证”的方式:
- 信任根(Root of Trust):通常由固化在芯片内的 Boot ROM 或硬件熔丝中的公钥哈希构成,不可被软件改写。
- 逐级验证:Boot ROM 验证第一阶段固件,第一阶段固件验证第二阶段固件,依此类推,直到引导加载程序和操作系统内核。
- 度量与记录:每一级在验证通过后,把自身或下一级的哈希值写入 TPM/PCR 或安全寄存器,供后续远程证明或本地策略判断。
- 恢复路径:当验证失败时,平台应进入恢复模式,而不是直接放行或永久变砖。
二、UEFI、BIOS 与 Coreboot 的差异
传统 BIOS 是 16 位实模式固件,接口封闭、扩展性差,安全机制主要依赖写保护、BIOS 密码和可选的 Boot Block 校验。UEFI 是模块化、32/64 位、带驱动模型和协议接口的固件规范,支持 Secure Boot、Measured Boot、 capsule update 等安全能力。Coreboot 则是开源固件框架,强调“最小化硬件初始化 + 快速跳转到 payload”,常与 SeaBIOS、Tianocore、LinuxBoot 等 payload 组合使用。
| 维度 | 传统 BIOS | UEFI | Coreboot |
|---|---|---|---|
| 执行模式 | 16 位实模式为主 | 32/64 位保护模式 | 32/64 位,阶段化 |
| 模块化 | 低,整体镜像 | 高,DXE 驱动模型 | 高,romstage/ramstage |
| 安全启动 | 有限,Boot Block 校验 | Secure Boot、Measured Boot | 依赖 payload 与验证策略 |
| 更新机制 | 厂商工具,风险高 | Capsule Update、ESRT | Flash 分区更新 |
| 典型场景 | 旧设备、嵌入式 | PC、服务器、云主机 | Chromebook、服务器、开源平台 |
三、固件签名与验证机制
固件签名通常采用非对称密码:厂商用私钥对固件镜像或镜像哈希签名,平台用预置公钥或公钥哈希验证。验证流程一般包括:读取固件分区、计算哈希、用公钥验签、检查版本防回滚、写入度量值、决定是否放行。
# 典型固件验证伪代码
firmware_hash = SHA256(firmware_image)
if not RSA_Verify(pubkey, signature, firmware_hash):
enter_recovery_mode("signature_invalid")
if firmware_version < min_allowed_version:
enter_recovery_mode("rollback_detected")
tpm_extend(pcr[0], firmware_hash)
jump_to_next_stage()
在 UEFI Secure Boot 中,验证对象是 PE/COFF 格式的引导加载程序和驱动;密钥存储在 KEK、db、dbx 等 UEFI 变量中。db 表示允许的签名证书或哈希,dbx 表示吊销列表。平台固件自身通常由 OEM 签名,并通过 Boot Guard、Verified Boot 等硬件机制在 Boot ROM 阶段验证。
四、场景与误区复盘
场景一:服务器批量部署时,运维人员关闭 Secure Boot 以兼容旧驱动,结果攻击者替换了引导加载程序,植入内核级 rootkit。复盘:应优先更新驱动签名,而不是关闭验证;若必须关闭,应通过 TPM 度量与远程证明补偿检测。
场景二:Coreboot 平台使用 LinuxBoot 作为 payload,但未对 payload 做签名验证。攻击者修改 flash 中的 payload,即可在早期阶段执行任意代码。复盘:Coreboot 本身不自动提供完整信任链,需要结合 vboot、TPM 或硬件写保护构建验证策略。
常见误区包括:
- 把“固件写保护”等同于“固件安全”:写保护只防运行时改写,不防供应链篡改或物理刷写。
- 只验证第一阶段,忽略后续阶段:信任链必须逐级传递,任何一级跳过验证都会形成断点。
- 忽略防回滚:攻击者可用旧版有漏洞固件替换新版,版本计数器与最小版本策略必须配合使用。
- 把 Secure Boot 当成万能药:它主要保护引导链,不覆盖固件自身更新、管理引擎和部分外设固件。
综上,固件安全不是单一开关,而是一条从 Boot ROM 到操作系统的逐级验证链。UEFI 提供了标准化的 Secure Boot 与度量接口,Coreboot 提供了可审计的开源实现路径,传统 BIOS 则更多依赖硬件写保护和有限校验。真正落地时,需要把签名验证、防回滚、TPM 度量、恢复模式和更新机制组合起来,才能让固件层成为可信启动的坚实起点。