UEFI Secure Boot开发实战工程 - 第1节

1. Secure Boot 概述

Secure Boot(安全启动)是 UEFI 规范中定义的一项安全机制,旨在确保平台在启动过程中只执行经过数字签名的可信代码。它从固件层面构建了一条从硬件复位到操作系统加载的信任链,防止恶意软件、Rootkit 或未经授权的引导程序在系统启动阶段注入。

核心思想: 在启动的每个阶段,只有持有有效数字签名的代码才能被执行,签名验证失败则拒绝启动。

信任链模型

Secure Boot 的信任链从平台固件内置的初始公钥(PK)开始,逐级验证后续组件的签名:

  1. 平台密钥(PK): 由平台所有者持有,用于建立对密钥交换密钥(KEK)的信任。
  2. 密钥交换密钥(KEK): 用于签署签名数据库(db)和禁止签名数据库(dbx)的更新。
  3. 签名数据库(db): 存储被允许执行的签名或证书。
  4. 禁止签名数据库(dbx): 存储被明确禁止执行的签名或证书。
Secure Boot 信任链验证流程 平台密钥 (PK) 密钥交换密钥 (KEK) 签名数据库 (db) 禁止数据库 (dbx) BootLoader OS Loader OS Kernel 安全启动 每个启动组件必须通过 db/dbx 签名验证,否则启动被阻止

1.2 UEFI 安全启动的起源与目的

起源背景

在传统 BIOS 时代,启动过程没有任何签名验证机制。恶意软件可以在操作系统加载之前注入引导扇区或修改 Option ROM,从而完全控制系统。2011 年,微软为 Windows 8 的硬件认证引入了 Secure Boot 要求,推动了 UEFI 安全启动的广泛采用。

设计目的

目的 说明
防止 Bootkit 攻击 阻止恶意软件在操作系统启动前获得控制权
确保系统完整性 保证只有经过签名的可信固件和引导程序可以运行
支持多操作系统 通过 db 数据库允许合法操作系统和引导程序加入信任链
提供平台所有权 平台所有者可以通过 PK 控制哪些代码可以执行
关键里程碑: UEFI 2.3.1 规范正式引入 Secure Boot,Windows 8 认证要求所有 x86 设备默认启用 Secure Boot。

1.3 与传统 BIOS 启动的区别

传统 BIOS 启动和 UEFI Secure Boot 启动在架构、安全性和扩展性上存在本质差异:

对比维度 传统 BIOS 启动 UEFI Secure Boot 启动
启动方式 读取 MBR 引导扇区,执行引导代码 读取 ESP 分区中的 EFI 应用程序,通过签名验证
安全性 无签名验证,易受 Bootkit 攻击 基于 PKI 的数字签名验证,构建信任链
磁盘分区 MBR 分区表,最大支持 2TB GPT 分区表,支持 2TB 以上磁盘
引导代码 16 位实模式代码,512 字节限制 32/64 位保护模式代码,无大小限制
驱动加载 Option ROM 无签名验证 UEFI 驱动需签名验证
网络启动 PXE 无安全机制 UEFI HTTP Boot 支持签名验证
传统 BIOS vs UEFI Secure Boot 启动流程对比 传统 BIOS 启动 读取 MBR → 执行引导扇区代码 无签名验证 → 易受 Bootkit 攻击 UEFI Secure Boot 启动 读取 ESP → 验证 EFI 签名 → 执行 PKI 签名验证 → 构建信任链 安全鸿沟

1.4 Secure Boot 的三种模式

UEFI 规范定义了 Secure Boot 的三种运行模式,以适应不同的部署场景:

模式 描述 典型场景
用户模式 Secure Boot 完全启用,PK 已设置,所有启动组件必须通过签名验证 生产环境、企业部署
设置模式 Secure Boot 处于可配置状态,PK 未设置,允许更新密钥数据库 OEM 制造、系统初始化
自定义模式 允许用户手动管理 PK、KEK、db、dbx 数据库 开发调试、自定义操作系统
注意: 在用户模式下,如果 PK 丢失或损坏,系统将无法更新 Secure Boot 配置,可能导致无法启动非签名操作系统。建议在修改 PK 前备份原始密钥。

1.5 本章小结

  • Secure Boot 是 UEFI 规范中的安全启动机制,通过数字签名验证构建信任链
  • 起源于应对传统 BIOS 无安全验证的 Bootkit 攻击威胁
  • 核心组件包括 PK、KEK、db、dbx 四个密钥数据库
  • 与传统 BIOS 相比,UEFI Secure Boot 在安全性、分区支持、驱动验证等方面有本质提升
  • 支持用户模式、设置模式、自定义模式三种运行状态