首先:没有系统是 100% 安全的,但是使用 TPM 总比没有 TPM 好。TPM 芯片只是某种加密存储,它驻留在支持可信平台环境的计算机主板上,并准备好处理它的 BIOS。
TPM_Extend
PCR 是具有通过操作处理的特定功能的寄存器。它们不能被“设置”,只能扩展(new_hash = [old_hash||new_measurement])。
TPM 具有静态测量信任根 (SRTM) 和动态测量信任根 (DRTM),两者的结合创建了安全环境。这家伙很好地解释了这是如何完成的。它是固定项和动态项之间的信任链。
回到 PCR,它们是独立于平台的寄存器,最常见的是:
PCR 0 to 3 for the BIOS, ROMS...
PCR 4 - MBR information and stage1
PCR 8 - bootloader information stage2 part1
PCR 9 - bootloader information stage2 part2
PCR 12 - all commandline arguments from menu.lst and those entered in the shell
PCR 13 - all files checked via the checkfile-routine
PCR 14 - all files which are actually loaded (e.g., Linux kernel, initramfs, modules...)
PCR 15 to 23 are not used
基于 Intel 的笔记本电脑通常使用前 16 个寄存器,但它可以扩展到其他软件/用途。
在将信息(密封)写入 TPM 时,您可以添加存储根密钥 (SRK),它在某种程度上是“管理密钥”,用于将其他密钥添加到此存储。根据手册页,使用-z
将设置TSS_WELL_KNOWN_SECRET (20 zero bytes)
。
-z, --well-known
Use TSS_WELL_KNOWN_SECRET (20 zero bytes) as the SRK password.
You will not be prompted for the SRK password with this option.
因此,将此 SRK 设置为默认密钥 ( TSS_WELL_KNOWN_SECRET
) 不足以攻击某人,因为只有当当前 PCR 与用于密封数据的 PCR 匹配时,TPM 才能被解封。此外,一些 PCR 处理发生在启动时 (BIOS),并且很难操纵这些处理并因此创建“假”PCR。BIOS 是唯一一个在其余过程发生之前将 PCR 视为零的地方。
唯一可行的攻击是旨在将 BIOS 和 PCR 之间的 MITM 通信归零 PCR 而不重新启动机器以将系统置于“受信任”状态的攻击。这种攻击称为TPM 重置攻击。
攻击
因此,鉴于我们在上面看到的一切,只要 BIOS 进行最初的几次测量,就应该很难伪造一个受信任的引导过程。这里的关键假设是,如果不重新启动 TPM 所在的整个平台,就无法轻松重置 PCR。如果攻击者能够监控由 BIOS 发送到 PCR 的测量值(例如使用逻辑分析仪,请参阅本文),并且能够在不重新启动机器的情况下将 PCR 归零,那么她可以在任何配置并将其置于“受信任”状态。因此,困难的部分是在不关闭整台机器的情况下重置 TPM。值得一提的是,我们还研究了在测量后插入内存和其他类似的东西来改变正在运行的系统,但是由于内存和硬盘驱动器所在的总线的速度,这是一项棘手的工作。攻击较慢的总线要容易得多。
TPM 通常驻留在低引脚数 (LPC) 总线上。LPC 总线支持接地驱动复位线。这意味着当总线上的这条特定线路被驱动接地时,该总线上的每个设备都应该复位。连接到此总线的其他设备包括 BIOS 以及传统的键盘和鼠标控制器。下面的视频展示了驾驶这条线确实是可能的,而且相当容易做到。请注意,在视频中,我们正在通过远程 ssh 会话访问相关计算机。这是因为当我们驱动复位引脚时,键盘和鼠标控制器会复位,但网卡没有。这种攻击(和其他!)的更多细节可以在我的高级荣誉论文中看到:可信平台模块的安全评估,达特茅斯学院计算机科学技术报告 TR2007-597。
请注意,这是涉及可信计算的所有事物的过度简化版本。请查看TPMv2 的体系结构文档,以获取有关在设置可信环境期间在 bios、硬件和软件之间发生的所有操作的更多信息。
tl;dr:使用默认存储根密钥(20 个零字节)不足以创建不安全的系统。
相关资料: