Insyde H2O 是广泛用于笔记本和服务器的 UEFI 固件实现,其 SecureBoot 机制依赖 PK/KEK/db/dbX 等认证 NVRAM 变量验证引导链。然而,Hydroph0bia (CVE-2025-4275) 漏洞暴露了固件更新机制中的设计缺陷:SecurityStubDxe 驱动在验证外部应用和固件胶囊时,未区分 NVRAM 变量的波动性(volatile vs non-volatile),允许攻击者通过 “影子” 非波动变量注入任意证书,实现持久绕过。
核心问题是 UEFI NVRAM 接口的固有弱点。规范允许同名 / GUID 的非波动变量覆盖波动变量,而 Insyde H2O 的固件更新流依赖两个特定变量:SecureFlashSetupMode(触发器,值为 1)和 SecureFlashCertData(EFI_SIGNATURE_LIST 格式的证书数据)。正常流程中,BdsDxe 在 BDS 阶段从 DXE 卷加载 Insyde 证书到波动变量中,SecurityStubDxe 读取并用于验证 isflash.bin 更新器或外部驱动。但逆向分析显示,SecurityStubDxe 使用库函数读取变量,未调用 GetVariable 检查属性,直接信任内容。
逆向工程路径如下:使用 efiXplorer 和 IDA Pro 分析固件体(如 HUAWEI Matebook 14 的 BIOS dump)。首先,提取 DXE 卷,定位 BdsDxe.efi 和 SecurityStubDxe.efi。反汇编 LoadCertificateToVariable 函数,发现其调用 gRT->SetVariable 设置波动变量(属性 EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS)。但 VerifyBySecureFlashSignature 函数忽略此,直接从变量加载证书验证 PE/TE 镜像签名。关键 GUID 为 {382AF2BB-FFFF-ABCD-AAEE-CCE099338877},攻击者只需管理员权限通过 SetFirmwareEnvironmentVariable 设置非波动版本(移除 BOOTSERVICE_ACCESS 标志)。
此机制允许加载任意签名驱动,如 CrScreenshotDxe,在 SecureBoot 启用下捕获 BIOS 截图。持久性源于非波动存储,重启后存活 OS 重装。更危险的是,可扩展到 DXE 劫持:注入证书后,运行签名更新器绕过 SPI 写保护,实现固件植入。
Insyde 的修复(INSYDE-SA-2025002)引入 LibSetSecureVariable(SMM 通信移除 AW 属性变量)、ExitBootServices 事件处理器清理影子变量,以及 VariablePolicy 阻止 OS 设置。但逆向补丁镜像(如 Dell G15 5535 0.13.0 vs 0.14.0)显示,SecureFlashDxe 入口点新增删除调用,SecurityStubDxe 微调事件关闭。此修复条件有效:依赖无物理访问。若 SPI 编程或 BootGuard 绕过,攻击仍存。作者建议最佳修复:SecurityStubDxe 直接从内存加载证书,避免 NVRAM。
防御落地参数与清单:
-
固件完整性验证:
- 使用 chipsec 或 fwupd 检查 DBX 更新状态,阈值:SecureBoot 状态 “on” 且 dbX 包含 CVE-2025-4275 黑名单模块。
- 监控 NVRAM:查询 SecureFlash* 变量属性,若非波动或意外 GUID,警报。脚本参数:
efivar -p -n 382AF2BB-FFFF-ABCD-AAEE-CCE099338877-SecureFlashCertData。
-
权限最小化:
- 禁用 OS SetFirmwareEnvironmentVariable,除非签名更新。Windows:组策略 SeSystemEnvironmentPrivilege 仅管理员。
- ESP 挂载只读:fstab
noexec,nodev,nosuid。
-
硬件防护阈值:
- 启用 BootGuard(Intel TXT MBE=1)、PSF 写保护(BIOS 设置 SPI WP=enabled)。
- 监控 SPI 闪存哈希:基线 MD5 (SHA256),变更 >0.1% 触发回滚。
-
检测监控点:
- EDR 规则:进程调用 SetFirmwareEnvironmentVariable + GUID 匹配 → 高危。
- 周期扫描(每日):
efibootmgr -v检查 BootOrder,无未知签名项。 - 厂商补丁清单:Lenovo >2025-07-30、Dell 已释出,查询 OEM KB 如 DSA-2025-149。
-
回滚策略:
- 隔离测试:虚拟机模拟 NVRAM(QEMU -variable),验证补丁。
- 应急:物理清空 NVRAM(CMOS 复位 + SPI 擦除)。
此漏洞凸显 UEFI 设计需演进:弃用 NVRAM 安全语义,转向内存传递或硬件根信任。管理员应优先 OEM 更新,结合运行时固件监控(如 Eclypsium),阈值警报率 <1% 假阳。
引用仅限于:[1] Nikolaj Schlej 在 coderush.me/hydroph0bia-part1 中指出,“SecurityStubDxe does not check either variables to be volatile or non-volatile”。[2] Insyde 补丁分析显示 SecureFlashDxe 大小增 704 字节。
资料来源:
- coderush.me/hydroph0bia-part1/、part3/
- news.ycombinator.com/item?id=47172730
- eclypsium.com/blog/hydrophobia-secure-boot-bypass-vulnerabilities/
- GitHub: NikolajSchlej/Hydroph0bia
(正文字数:1028)