1. 课程导入与安全启动全景
在工业质检、智慧交通、能源巡检等边缘场景中,Intel 平台往往部署在无人值守的机柜、产线旁或户外机箱内。设备一旦上电,固件、引导程序、操作系统与容器镜像会依次接管控制权。如果这条链路上任意一环被替换,攻击者就能在操作系统启动前植入持久化后门,而传统杀毒软件此时尚未运行。本课程要解决的核心问题,就是如何让这条启动链路"每一步都可验证、每一步都可度量、每一步都可追溯"。
一、边缘平台面临的安全威胁模型
理解安全启动,先要理解攻击者从哪里下手。Intel 边缘平台的启动过程大致经过:CPU 复位取指 → 固件(UEFI/BIOS)初始化 → 引导加载程序(如 GRUB、UEFI Boot Manager)→ 操作系统内核 → 用户态服务与容器。威胁模型可以按"攻击面位置"和"攻击能力"两个维度来梳理。
按位置划分,主要威胁包括:
- 固件层篡改:攻击者通过 SPI Flash 编程器或利用固件更新漏洞,替换 UEFI 固件中的引导代码,实现"上电即感染"。
- 引导加载程序劫持:修改 GRUB 配置或替换内核镜像,使系统加载未签名的恶意内核模块。
- 内核与驱动层植入:利用未签名的第三方驱动加载 rootkit,绕过内核模块签名检查。
- 容器与镜像污染:在边缘节点上运行被篡改的容器镜像,横向扩散到同一主机上的其他业务。
- 物理与供应链攻击:设备在运输、维护环节被接触,JTAG、调试接口未关闭,导致固件被直接读取或改写。
按攻击能力划分,可分为远程软件攻击(利用网络服务漏洞)、本地提权攻击(已获得部分权限后提升)、物理接触攻击(直接访问硬件接口)。安全启动主要防御的是"启动链完整性"被破坏,它不能替代运行时防护,但它是运行时防护能够成立的前提——如果内核本身已被替换,任何上层安全机制都失去意义。
二、安全启动与可信计算的关系
这两个概念经常被混用,但职责不同。安全启动(Secure Boot)解决的是"能不能启动":在启动的每个阶段,用密码学签名验证下一阶段组件的合法性,验证不通过就拒绝执行。它是一道"准入闸门",结果是二元的——通过或阻断。
可信计算(Trusted Computing)解决的是"启动了什么、现在是否仍然可信":通过 TPM(可信平台模块)对启动各阶段进行度量(Measure),把哈希值扩展到 PCR 寄存器中,形成一条不可篡改的度量日志。它不阻断启动,而是记录事实,并支持远程证明(Remote Attestation)——让远端服务器验证这台边缘设备当前运行的软件栈是否与预期一致。
两者的关系可以概括为:安全启动是"门禁",可信计算是"监控与档案"。安全启动保证只有合法组件能进入启动链,可信计算则把"谁进来了、进来的是什么版本"记录在 TPM 中,供本地密封存储(Seal/Unseal)和远程证明使用。在 Intel 平台上,二者通常协同工作:UEFI Secure Boot 验证引导程序签名,同时 TPM 的 CRTM(Core Root of Trust for Measurement)从固件开始逐级度量,最终把控制权交给操作系统时,PCR 中已经积累了完整的启动链哈希。
三、课程目标与实验环境搭建
本课程的目标不是停留在概念层面,而是让学员能够在真实的 Intel 边缘平台上完成安全启动配置、TPM 度量验证和远程证明的完整操作。具体能力目标包括:
- 能够识别 Intel 平台启动链各阶段对应的固件、引导程序与内核组件;
- 能够配置 UEFI Secure Boot 的密钥体系(PK、KEK、db、dbx),并完成自定义密钥的签名与部署;
- 能够使用 TPM 2.0 工具读取 PCR 值,理解度量日志与 PCR 扩展的对应关系;
- 能够搭建远程证明的基本验证流程,判断设备启动状态是否可信。
实验环境建议采用一台支持 Intel VT-d 与 TPM 2.0 的边缘计算设备(如 Intel NUC、工业网关或服务器主板),安装 Ubuntu 22.04 LTS 或 Yocto 构建的定制镜像。需要准备的工具包括:efitools(UEFI 密钥管理)、sbsigntool(签名与验证)、tpm2-tools(TPM 2.0 操作)、tpm2-tss(TSS 栈)。在 BIOS 中需确认以下选项:Secure Boot 可设为 Setup Mode 以便导入自定义密钥;TPM 2.0 已启用且未被清除;Intel Boot Guard 若支持则建议开启,用于验证固件初始块的签名。
一个典型的验证起点是:在 Setup Mode 下导入自签名 PK/KEK/db 后,重启进入系统,执行以下命令查看安全启动状态与 PCR 值:
# 查看 Secure Boot 状态
mokutil --sb-state
# 预期输出:SecureBoot enabled
# 读取 PCR[0] 与 PCR[7] 的哈希值
tpm2_pcrread sha256:0,7
# 输出示例(示例值,非实测):
# sha256:
# 0 : 0x9A1B2C3D...(固件度量值)
# 7 : 0x4E5F6A7B...(Secure Boot 策略度量值)
# 查看度量日志
cat /sys/kernel/security/tpm0/binary_bios_measurements | tpm2_eventlog /dev/stdin
判断标准:若 mokutil --sb-state 显示 SecureBoot enabled,说明安全启动已生效;若 PCR[7] 的值与已知良好基线一致,说明 Secure Boot 策略未被篡改。如果 PCR[0] 与基线不符,则需检查固件版本或 SPI Flash 是否被改写。这些判断依据将在后续章节中反复使用。