1、可信启动概述:什么是可信启动、可信启动的信任链、TPM与TCM简介
各位同学好,我是老张。今天咱们开始《可信启动配置日志校验》的第一章。说实话,这个主题在安全领域里属于「基础但极其重要」的那一类。我见过太多系统被攻破,就是因为启动阶段没人管——你想想看,如果连系统是怎么起来的都不清楚,后面做再多安全加固也是白搭。
1.1 什么是可信启动
可信启动,英文叫 Trusted Boot,说白了就是「从硬件到操作系统,每一步都验明正身」。它不像传统启动那样只管把系统跑起来,而是要求:每一级代码在加载下一级之前,都要先验证它的数字签名或哈希值是否合法。
我在项目中遇到过一件事:某客户的内网服务器被植入了一个 bootkit,每次启动时恶意代码先于操作系统加载,把杀毒软件和EDR全部干掉。后来我们查了半年才发现,问题出在引导扇区——因为没有做可信启动,攻击者改了个引导程序就绕过了所有安全机制。嗯,从那以后,我给自己定了个规矩:凡是生产环境,必须上可信启动。
核心要点:可信启动不是「能不能启动」,而是「启动的是不是你想要的那个系统」。它解决的是启动阶段的完整性校验问题。
1.2 可信启动的信任链
信任链这个概念,我建议你把它想象成「接力赛」。每一棒选手都要确认上一棒的身份,然后才能接过棒子继续跑。在可信启动里,这个链条是这样的:
- 硬件根信任(Root of Trust)——通常是固化在芯片里的不可修改代码,比如 Intel 的 Boot Guard 或 TPM 中的初始固件。
- BIOS/UEFI 固件——由硬件根验证其完整性,通过后才执行。
- 引导加载程序(如 GRUB、shim)——由 UEFI 固件验证签名。
- 操作系统内核——由引导加载程序验证。
- 内核模块与关键服务——由内核在加载时验证。
为什么会这样设计?因为信任必须有一个「起点」。这个起点不能是软件,软件可以被改;必须是硬件,而且是不可篡改的硬件。我习惯把这个起点叫做「信任锚点」——它一旦被攻破,整个链条就全完了。
个人经验:我曾经在调试一台服务器时发现,它的 TPM 芯片固件版本太旧,导致信任链在第一步就断了。后来升级了 TPM 固件才解决问题。所以,别以为硬件根信任就永远可靠,它也需要更新。
下面这张图展示了完整的信任链流程:
注意:信任链一旦在任意一环断裂,系统就不应该继续启动。但现实中很多系统配置了「失败后继续启动」的策略——这等于把安全机制变成了摆设。我建议你在生产环境中严格配置为「验证失败即停止」。
1.3 TPM 与 TCM 简介
聊完信任链,咱们得说说实现它的硬件基础——TPM 和 TCM。这两个东西是可信启动的「物理根基」。
1.3.1 TPM(可信平台模块)
TPM 是国际标准(ISO/IEC 11889),由 TCG(Trusted Computing Group)制定。它本质上是一个独立的密码协处理器,焊在主板上,有自己的存储、随机数生成器、RSA/SHA 引擎。它的核心能力包括:
- 平台配置寄存器(PCR)——存储启动过程中各阶段的哈希值,只能扩展(extend),不能重置(除非重启)。
- 密钥存储——私钥永远不出芯片,只用于签名或解密。
- 远程证明——向远程服务器证明当前系统的启动状态是可信的。
我记得有一次帮客户做等保测评,对方问「TPM 里的 PCR 值怎么读?」我现场敲了个命令:
# 读取所有 PCR 值(Linux 下)
cat /sys/class/tpm/tpm0/pcr-sha256
# 或者用 tpm2_tools
tpm2_pcrread sha256:0-23
结果发现 PCR[0] 的值跟预期不符——说明 UEFI 固件被改过。后来一查,是 BIOS 升级时刷错了版本。你看,TPM 不仅能防攻击,还能帮你发现运维事故。
1.3.2 TCM(可信密码模块)
TCM 是中国国家标准(GM/T 0012-2012),由国密局主导制定。它跟 TPM 功能类似,但有几个关键区别:
| 对比项 | TPM | TCM |
|---|---|---|
| 标准来源 | TCG 国际标准 | 中国国家标准 |
| 密码算法 | RSA、SHA-256、ECC | SM2、SM3、SM4 |
| 密钥管理 | RSA 密钥对为主 | SM2 密钥对为主 |
| 应用场景 | 全球通用,Windows/Linux 原生支持 | 国内合规场景,需专用驱动 |
| PCR 数量 | 通常 24 个(TPM 2.0) | 通常 16 个 |
我的建议:如果你做的是国内政企项目,优先考虑 TCM,因为合规要求摆在那里。如果是海外业务或通用服务器,TPM 2.0 更成熟、生态更好。但不管用哪个,核心逻辑是一样的——用硬件保护信任根。
1.3.3 两者在可信启动中的角色
无论是 TPM 还是 TCM,在可信启动里都扮演同一个角色:存储和报告启动度量值。具体来说:
- 启动过程中,每一级代码(UEFI、GRUB、内核)都会计算下一级代码的哈希值。
- 这个哈希值通过
TPM2_PCR_Extend(或 TCM 的对应接口)写入 PCR。 - 系统启动完成后,可以通过
TPM2_PCR_Read读取 PCR 值,与预期值比对。 - 如果比对一致,说明启动过程没有被篡改。
你可能会问:「那攻击者能不能伪造 PCR 值?」答案是:不能。因为 PCR 的扩展操作是单向的——你只能追加哈希值,不能覆盖或删除。而且 PCR 值在芯片内部维护,操作系统无法直接写入。这就是硬件信任根的威力。
避坑指南:我曾经遇到一个案例,某厂商的 TCM 芯片在 PCR 扩展时没有做原子操作,导致并发写入时 PCR 值错乱。后来我们要求厂商打补丁才解决。所以,采购 TPM/TCM 芯片时,一定要确认它通过了 TCG 或国密局的认证测试,别买杂牌货。
1.4 本章小结
这一章咱们把可信启动的骨架搭起来了:
- 可信启动就是「启动时逐级验证完整性」。
- 信任链从硬件根信任出发,经过 UEFI、引导程序、内核,每一级都验明正身。
- TPM 和 TCM是信任链的物理载体,用 PCR 记录启动度量值,不可篡改。
嗯,这些概念听起来可能有点抽象。别急,后面几章我们会一步步动手配置、验证、排错。到时候你会发现,理解了信任链,整个系统的安全边界就清晰了。