当安全研究员面对一块未经披露的 CPU 固件镜像时,如何在可信计算基(Trusted Computing Base,TCB)框架下完成完整性验证?固件二进制审计与代码签名验证是两条互补的路径 —— 前者从静态分析角度还原代码结构,后者从密码学角度确保证明未篡改。本文从逆向工程视角切入,梳理工程化的审计参数与可落地的验证清单。
审计对象与边界定义
固件审计的首要任务是明确审计对象的边界。CPU 固件通常包含两类组件:微码(Microcode)与 BIOS/UEFI 固件。微码是 CPU 内部的微指令集,由处理器厂商以加密形式分发给主板厂商;BIOS/UEFI 固件则承载于主板 Flash 芯片,负责平台初始化与启动链验证。常见的审计目标包括:微码更新包(.bin、.hex)、BIOS 镜像(.rom、.fw)、以及配合 Intel Boot Guard 或 AMD Secure Boot 的启动度量日志。
在实际操作中,审计对象可能以原始二进制、压缩文件系统或加密容器形式存在。以常见的 UEFI 固件为例,其结构通常为 Flash Descriptor → BIOS Region → ME Region → GbE Region 的多层布局。审计人员需要使用 flashrom 或主板厂商提供的刷写工具将固件 dump 至本地,随后进入静态分析阶段。
静态分析:从二进制到结构还原
固件提取完成后,逆向工程师通常按照以下顺序展开分析。首先是架构识别,确定目标固件对应的 CPU 指令集架构(x86、ARM、MIPS、RISC-V 等)。这一步可以使用 binwalk 的熵值分析功能 —— 高熵区域通常对应加密或压缩数据,低熵区域可能是明文代码。对于 x86 架构的 BIOS 固件,还可以借助 UEFITool 解析固件中的文件系统结构,定位到 PE/COFF 格式的 DXE 驱动或 SMM 模块。
其次是字符串与符号提取。使用 strings 工具配合 grep 过滤可快速定位可信平台模块(TPM)相关函数名、加密算法标识(如 AES、ECDSA、RSA)、以及硬编码的公钥指纹。值得注意的是,如果固件中直接暴露了公钥的 DER 或 PEM 格式,这通常是一个安全红旗 —— 理想情况下公钥应嵌入只读区域的 Boot ROM 中,而非明文存放于可更新固件内。
第三步是控制流分析与漏洞挖掘。借助 Ghidra 或 IDA Pro 对关键模块进行反汇编,重点关注固件更新入口函数 —— 通常命名为 FirmwareUpdate、FlashWrite 或类似语义。审计人员需要验证以下安全属性:更新路径是否强制要求签名验证、是否允许回滚至历史版本(可能存在已修复漏洞的旧固件)、是否存在缓冲区溢出或格式化字符串漏洞。实际的审计参数建议为:单次固件写入操作的最大缓冲区长度不超过 4KB、签名算法优先使用 ECDSA P-256 或 RSA-2048 以上、固件版本号必须单调递增。
代码签名验证:密码学完整性的工程实现
代码签名的核心目标是确保固件由合法厂商签发且未被篡改。验证流程可拆解为三个步骤:哈希计算、签名解密、证书链校验。
哈希计算阶段,审计工具对固件负载(payload)计算 SHA-256 或 SHA-3 摘要。关键参数在于哈希计算的范围 —— 某些固件格式会在文件头部附加版本号或时间戳,这些字段在签名后不应参与哈希计算,否则会导致验证失败。建议审计人员使用厂商公开的固件格式规范(Security Technical Implementation Guide,STIG)来精确定义哈希边界。
签名解密阶段使用厂商嵌入的公钥对签名数据块进行解密运算,得到的哈希值需与前述计算结果逐字节匹配。此处的工程参数包括:公钥存储位置(建议为 Boot ROM 的只读区域)、密钥长度(RSA 不低于 2048 位,ECDSA 不低于 P-256)、以及椭圆曲线参数是否遵循 NIST P-256 或 brainpoolP256r1 标准。
证书链校验是常被忽视但至关重要的环节。正规厂商的固件签名通常包含多层证书:根 CA 证书(嵌入设备)→ 中间签发证书 → 终端固件签名证书。审计人员需要使用 OpenSSL 或专用固件分析工具(如 fwanalyzer)验证证书链的完整性与有效期。特别需要注意的是证书吊销列表(CRL)或在线证书状态协议(OCSP)的检查是否被固件更新器正确执行 —— 某些攻击正是通过伪造 CRL 分发点实现的。
可信计算基完整性的监控与回滚
在完成上述审计后,安全运营团队应建立持续的监控机制。首要指标为固件版本基准线 —— 建议使用配置管理数据库(CMDB)记录每台主机的当前固件版本号、签发时间与哈希值。当厂商发布安全更新时,应在 72 小时内完成灰度推送,并通过 TPM 2.0 的事件日志记录固件哈希的度量值。
回滚策略方面,生产环境应禁用固件回滚功能,或将回滚权限限制在物理安全访问的维护模式下。参数建议为:回滚操作须经双人审批、记录审计日志、并在回滚后触发强化扫描。
从工具链角度,推荐的开源审计工具组合为:binwalk(固件提取)、Ghidra(静态反汇编)、fwanalyzer(安全策略验证)、以及 chipsec(平台安全度量)。这些工具可集成至 CI/CD 流水线,在固件版本迭代时自动执行签名验证与基线比对。
小结
固件二进制审计与代码签名验证并非独立的两个环节,而是构成可信计算基完整性的纵深防御体系。逆向工程提供代码层面的可见性,密码学验证提供不可篡改的信任锚点。工程落地的关键在于:明确审计边界、规范签名算法参数、建立版本基线与监控告警机制,并将固件安全纳入整体风险管理框架。
资料来源:AMD 官方安全公告 AMD-SB-7033 披露的微码签名验证漏洞;Interrupt 博客关于安全固件更新的代码签名实践。