- 固件
- 嵌入式
- 操作系统
- 驱动开发
【免费下载链接】coreboot
Read-only mirror of https://review.coreboot.org/coreboot.git. Synced every hour. We don't handle Pull Requests.
HP Sure Start 是 HP 于 2013 年(笔记本)与 2015 年(台式机)引入的、与芯片组和处理器架构无关的固件入侵检测与自动修复系统。本文以 HP Sure Start 技术文档 为主体,结合 coreboot 仓库中对 Haswell/Broadwell 时代 HP 主板的移植记录(如 Folio 9480m、EliteBook 820 G2),系统讲解 SMSC MEC1322 嵌入式控制器如何借助第二颗"私有 Flash"保护 BIOS 固件,并给出在安装 coreboot 时识别、擦除私有 Flash、改造 IFD 布局以绕过校验的完整可执行步骤。
HP Sure Start 的定位:与芯片组、处理器无关的固件防护
根据 HP Sure Start 技术白皮书(Technical Whitepaper)的定义,HP Sure Start 是一套与芯片组(chipset)和处理器(processor)无关的固件入侵检测(intrusion detection)与自动修复(automatic repair)系统:
- 2013 年起部署在 HP 笔记本上;
- 2015 年起部署在 HP 台式机上。
其核心思路是:不依赖 Intel/AMD 芯片组内建的 flash 写保护机制,而是由一颗独立的嵌入式控制器(EC)持续监督 BIOS 固件关键区域的完整性。一旦检测到固件被篡改(例如刷入了带修改 IFD 的第三方固件),EC 会从自己掌握的安全副本中自动恢复原始内容。
需要特别说明的是:本文所述机制与绕过方法基于仓库中针对特定机型的实测记录,可能不适用于更新的主板。HP 在 2019 年发布过白皮书的修订版,后续机型可能存在其他防护机制。
MEC1322 嵌入式控制器架构:双 Flash 与私有 Flash
两颗 Flash 芯片的分工
以 Haswell 时代的 EliteBook、ZBook 与 ProBook 600 系列为例,这些机型使用SMSC MEC1322 嵌入式控制器,EC 固件中实现了 HP Sure Start。根据 EC 固件中可提取的字符串,这类主板上有两颗 SPI flash 芯片:
| 芯片 | 容量 | 名称 | 作用 |
|---|---|---|---|
| 系统 Flash(system flash) | 16 MiB | 存储 BIOS 固件本体 | 存放完整固件,可被 OS/刷写工具访问 |
| 私有 Flash(private flash) | 2 MiB | 存储系统 Flash 部分内容的副本 | 直连 EC,OS 无法访问 |
Haswell ProBook 600 系列同样使用 MEC1322 且 EC 固件相似,但HP Sure Start 功能并未启用,即没有实际实施固件保护。
私有 Flash 中保存的内容
私有 Flash 虽然只有 2 MiB,但内容层次丰富,按 EC 固件中的结构信息可整理如下:
- HP Sure Start 策略头(policy header):以字符串
"POLI"开头,存放策略与校验相关的元数据; - Intel Flash Descriptor(IFD)的副本:用于恢复被篡改的系统 Flash 描述符;
- GbE 固件的副本:网卡固件区域的备份;
- Machine Unique Data(MUD):机器唯一数据;
- IFD、GbE 固件与 MUD 的哈希值:用于完整性校验(哈希算法未公开);
- bootblock、UEFI PEI 阶段与微码(microcode)的副本:用于启动关键路径的自动修复。
EC 的自动恢复行为
从仓库记录可以归纳出 MEC1322 EC 的三种典型恢复行为:
IFD 被篡改 → 恢复 IFD:如果系统 Flash 中的 IFD 与私有 Flash 中的哈希不匹配——例如用
ifdtool -u解锁 IFD,或用me_cleaner -S裁剪 ME 区域——EC 会将 IFD 恢复为原始副本。这导致"刷完即被还原"的现象。私有 Flash 内容丢失 → 重建部分副本,但放弃 IFD 保护:如果私有 Flash 内容全部丢失,EC 固件仍会把 IFD、bootblock 和 PEI 复制回私有 Flash;但此后再也没有哈希可对照,IFD 便不再受保护——这正是安装 coreboot 时"擦除私有 Flash 即可解除 IFD 保护"这一技巧的原理基础。
bootblock / PEI / 微码被篡改 → 独立校验并恢复:HP Sure Start 还不依赖私有 Flash直接验证 bootblock、PEI 与微码。EC 固件中硬编码了系统 Flash 芯片上的绝对地址,直接从这些地址读取并做校验(从实现方式看疑似数字签名校验)。若 PEI 卷被修改,EC 会用私有 Flash 中的副本恢复它;若私有 Flash 中也没有有效副本且 PEI 已被改动,机器将拒绝启动,CapsLock 指示灯闪烁。
绕过 HP Sure Start:总体思路
仓库文档给出的绕过流程分为三步,核心原则是"让 EC 失去保护对象"而不是"对抗 EC 本身":
定位 Flash 芯片:在主板上找到 Flash 芯片。若有两颗,较小的一颗通常就是私有 Flash。
确认并解除 IFD 保护:
- 对于 Intel 主板,先用
ifdtool -u修改 IFD,然后开机、关机,再重新读取 Flash; - 如果读回的内容显示 IFD 未被修改,说明它已被 EC 从私有 Flash 恢复;
- 找到私有 Flash 并将其擦除,此后 IFD 即可被自由修改。
- 对于 Intel 主板,先用
让 BIOS 区域与受保护区域不相交:修改 IFD,使 BIOS 区域不与受保护区域(Platform Data 等)重叠。由于 EC 固件通常位于 Flash 芯片的高地址端(且处于受保护区域内),可以保持其原样不动,无需提取 EC 固件放入 coreboot 镜像——这也是 Folio 9480m 等页面反复强调"不需要在构建流程中处理 EC 固件"的原因。
为什么能绕过:机制本质
从源码结构可以推断,这种绕过的成立依赖于两条前提:
- 私有 Flash 被擦除后,EC 虽然会重建 IFD/bootblock/PEI 副本,但不再拥有"可对照的哈希",因此 IFD 修改不再被还原;
- coreboot 的镜像布局刻意回避了 EC 固件与受保护的 Platform Data 区域,使 EC 的硬编码地址校验对象(bootblock/PEI/微码所在区域)不被触碰,从而避免触发 CapsLock 拒启保护。
实战案例:Folio 9480m 与 EliteBook 820 G2 的完整刷写流程
仓库中两个使用 MEC1322/MEC1324 的机型(Folio 9480m、EliteBook 820 G2)给出了逐条可复现的命令流程,是理解上述思路的最佳实操样例。
前置准备
- 系统 Flash 使用 SOIC-8 夹子 + 外部编程器(仓库实测 STM32 方案的编程器可用),需接上 AC 适配器才能访问系统 Flash;
- 私有 Flash 使用 ch341a 类编程器,需断开 AC 适配器进行访问;
- 刷写前先完整备份两颗 Flash 的内容。
第一步:擦除私有 Flash
将编程器通过 SOIC-8 夹子夹住私有 Flash 后执行:
flashrom -p <programmer> --erase擦除后 IFD 保护即被解除。
第二步:用 ifdtool 改造 IFD
OEM 固件的原始 Flash 布局为(Folio 9480m,16 MiB Flash):
00000000:00000fff fd 00001000:00002fff gbe 00003000:005fffff me 00600000:00ffffff bioscoreboot 默认配置将 Flash 芯片大小设为 12 MiB(对应 elitebook_820_g2 的BOARD_ROMSIZE_KB_12288与 Folio 9480m 的构建配置),因此将 BIOS 区域终点改为0xbfffff。修改后的布局中,pd(Platform Data)区域正是 HP Sure Start 保护的区域:
00000000:00000fff fd 00001000:00002fff gbe 00003000:005fffff me 00600000:00bfffff bios 00eb5000:00ffffff pd将上述内容保存为layout.txt,假设系统 Flash 原始内容在factory-sys.rom中,执行:
ifdtool -n layout.txt factory-sys.rom生成的新镜像为factory-sys.rom.new。-n参数的作用即"按给定 layout 文件重写 IFD 中的区域布局",这是 ifdtool 修改描述符的核心用法(详见 ifdtool 的 IFD Layout 文档)。
提示:ifdtool 修改 IFD 时不会参考 coreboot 的 FMAP(flashmap),可能产生区域错位。可用
ifdtool -t(--validate)同时读取 IFD 与 FMAP 进行一致性校验,发现区域不匹配时会逐条报告(如Region mismatch between bios and SI_BIOS)。
第三步:分别刷写 IFD 与 coreboot
先只刷写 IFD 部分:
flashrom -p <programmer> --ifd -i fd -w factory-sys.rom.new再把 12 MiB 的 coreboot 镜像扩展为 16 MiB 并刷入 BIOS 区域:
# 先将 12M coreboot.rom 扩展为 16M fallocate -l 16M build/coreboot.rom flashrom -p <programmer> --ifd -i bios -w build/coreboot.rom第四步:安装后的内部刷写
coreboot 安装完成后,可脱离外部编程器,用内部刷写方式更新固件:
flashrom -p internal --ifd -i bios --noverify-all -w build/coreboot.romIFD 区域速查表
理解上述布局的关键是 IFD 区域的编号与命名(来自 ifdtool 布局文档):
| IFD 区域索引 | IFD 区域名 | FMAP 名 | 说明 |
|---|---|---|---|
| 0 | Flash Descriptor(fd) | SI_DESC | 始终位于 Flash 顶部 4 KiB |
| 1 | BIOS(bios) | SI_BIOS | 存放 coreboot 的区域 |
| 2 | Intel ME(me) | SI_ME | ME 固件 |
| 3 | Gigabit Ethernet(gbe) | SI_GBE | 网卡固件 |
| 4 | Platform Data(pd) | SI_PDR | HP Sure Start 保护的区域 |
| 8 | EC Firmware | SI_EC | 多数 ChromeOS 设备不使用,EC 固件存于 BIOS 区域 |
仓库中的 HP 主板支持现状
截至当前仓库,src/mainboard/hp/下已支持多个使用 MEC1322/MEC1324 或受 Sure Start 影响的机型,可作为读者后续移植/刷机的参考:
- elitebook_820_g2:Broadwell 平台,EC 为 SMSC MEC1324,Kconfig 中
BOARD_ROMSIZE_KB_12288(12 MiB)、EC_HP_KBC1126、MAINBOARD_USES_IFD_GBE_REGION等配置与本文的 12 MiB BIOS 布局一致; - folio_9480m:Haswell-ULT 平台,EC 为 SMSC MEC1322,16 MiB 系统 Flash + 2 MiB 私有 Flash 双芯片结构;
- haswell_desktops:Haswell 台式机(如 ProDesk 600 G1 SFF),16 MiB Flash,对应"台式机自 2015 年起具备 Sure Start"的背景。
这些机型的实测记录还表明:安装 coreboot 后 EC 固件本身保持原样即可正常工作(如 Folio 9480m 实测 EC ACPI、S3 休眠均正常),这正是"无需提取 EC 固件"设计带来的直接收益。
注意事项与适用边界
- 适用前提:本文的绕过方法基于 Haswell 时代(约 2013–2015 年)采用 MEC1322/MEC1324 EC 的机型,对更新的主板可能已失效;HP 2019 年白皮书修订版暗示存在更新的防护方案。
- 操作风险:擦除私有 Flash、修改 IFD 均属于固件级操作,错误的布局或擦除顺序可能导致机器无法启动(如 PEI 无效时 CapsLock 闪烁拒启)。操作前务必完整备份两颗 Flash 芯片。
- 硬件前提:双 Flash 机型必须分别编程两颗芯片,且访问条件不同(系统 Flash 需接 AC 适配器、私有 Flash 需断开 AC 适配器),切勿混淆。
- 固件
- 嵌入式
- 操作系统
- 驱动开发
【免费下载链接】coreboot
Read-only mirror of https://review.coreboot.org/coreboot.git. Synced every hour. We don't handle Pull Requests.
相关推荐
coreboot 移植实战:HP EliteBook 820 G2 双 Flash 刷写与 HP Sure Start 绕过指南
coreboot 移植实战:HP EliteBook 820 G2 双 Flash 刷写与 HP Sure Start 绕过指南 导读 本文以 coreboot
固件嵌入式操作系统驱动开发coreboot 实战指南:HP EliteBook Folio 9480m 的双 Flash 刷写、IFD 改造与调试
coreboot 实战指南:HP EliteBook Folio 9480m 的双 Flash 刷写、IFD 改造与调试 本篇指南围绕 coreboot 对 2
固件嵌入式操作系统驱动开发CTF 内核利用视角下的 KPTI(Kernel Page Table Isolation)机制解析与绕过实战
CTF 内核利用视角下的 KPTI(Kernel Page Table Isolation)机制解析与绕过实战 导读 本文以 CTF Wiki(zh tw)中
文档网络安全教程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考