17. Intel(R) TXT 概述

英特尔的安全计算技术 Intel(R) 可信执行技术 (Intel(R) TXT) 定义了平台级增强功能,这些功能为创建可信平台提供了基础模块。

Intel TXT 以前的代号是 LaGrande Technology (LT)。

Intel TXT 简述

  • 提供动态信任根用于度量 (DRTM)

  • 在不正确关机的情况下进行数据保护

  • 对启动环境进行度量和验证

Intel TXT 是 vPro(TM) 品牌的一部分,也可用于一些非 vPro 系统。目前,它可在基于 Q35、X38、Q45 和 Q43 Express 芯片组(例如 Dell Optiplex 755、HP dc7800 等)的桌面系统以及基于 GM45、PM45 和 GS45 Express 芯片组的移动系统中使用。

有关详细信息,请参阅 http://www.intel.com/technology/security/。此站点还提供 Intel TXT MLE 开发人员手册的链接,该手册已针对新发布的平台进行了更新。

Intel TXT 在过去几年中在各种活动中都曾出现过,其中一些活动包括:

17.1. 可信引导项目概述

可信引导 (tboot) 是一个开源的预内核/VMM 模块,它使用 Intel TXT 对 OS 内核/VMM 执行度量和验证的启动。

它托管在 SourceForge 上,网址为 http://sourceforge.net/projects/tboot。mercurial 源代码存储库可在 http://www.bughost.org/ repos.hg/tboot.hg 上找到。

Tboot 目前支持启动 Xen(自 v3.2 起支持 TXT 的开源 VMM/虚拟机监控程序)以及现在的 Linux 内核。

17.2. Linux 的价值主张或“您为什么要关心?”

虽然有许多产品和技术试图度量或保护正在运行的内核的完整性,但它们都假定内核一开始是“良好”的。完整性度量架构 (IMA) 和 Linux 完整性模块接口就是此类解决方案的示例。

要在不使用 Intel TXT 的情况下获得对初始内核的信任,必须使用静态信任根。这会将信任建立在从系统重置开始的 BIOS 中,并要求度量从系统重置到内核启动完成之间执行的所有代码以及该代码使用的数据对象。对于 Linux 内核,这意味着所有 BIOS、任何选项 ROM、引导加载程序和引导配置。实际上,这是大量代码/数据,其中许多代码/数据可能会在每次引导时发生变化(例如,更改网卡可能会更改选项 ROM)。如果没有参考哈希,则这些度量更改很难评估或确认为良性。此过程也不提供 DMA 保护、内存配置/别名检查和锁定、崩溃保护或策略支持。

通过使用 Intel TXT 提供的基于硬件的信任根,可以缓解许多这些问题。具体而言:可以将许多启动前组件从信任链中删除,可以为所有启动组件提供 DMA 保护,可以执行大量平台配置检查并锁定值,可以为不正确关机事件中的任何数据提供保护,并且支持基于策略的执行/验证。这提供了比其他情况下可能更高的系统配置和初始状态保证以及更稳定的度量。由于 tboot 项目是开源的,因此几乎所有信任链部分的源代码都可用(SMM 和 Intel 提供的固件除外)。

17.3. 它是如何工作的?

  • Tboot 是一个可执行文件,它由引导加载程序作为“内核”(引导加载程序执行的二进制文件)启动。

  • 它执行所有必要的工作来确定平台是否支持 Intel TXT,如果支持,则执行启动动态信任根的 GETSEC[SENTER] 处理器指令。

    • 如果 tboot 确定系统不支持 Intel TXT 或配置不正确(例如 SINIT AC 模块不正确),它将直接启动内核,而不会对任何状态进行任何更改。

    • Tboot 会将其进度中的各种信息输出到终端、串行端口和/或内存日志;可以使用命令行开关配置输出位置。

  • GETSEC[SENTER] 指令会将控制权返回给 tboot,然后 tboot 验证环境的某些方面(例如,TPM NV 锁定、e820 表没有无效条目等)。

  • 它将从 GETSEC[SENTER] 指令将它们置于的特殊休眠状态唤醒 AP,并将它们置于等待 SIPI 状态。

    • 由于处理器在 TXT 环境中不会响应 INIT 或 SIPI,因此有必要为 AP 创建一个小的 VT-x 访客。当它们在此访客中运行时,它们将仅等待 INIT-SIPI-SIPI 序列,这将导致 VMEXIT,然后禁用 VT 并跳转到 SIPI 向量。与必须在内核的 MP 唤醒序列中插入特殊代码相比,这种方法似乎是更好的选择。

  • 然后,Tboot 应用(可选)用户定义的启动策略来验证内核和 initrd。

    • 此策略以 TPM NV 为根,并在 tboot 项目中进行描述。tboot 项目还包含用于创建和配置策略的工具的代码。

    • 策略完全由用户控制,如果不存在策略,则将启动任何内核。

    • 策略操作是灵活的,可以包括在失败时停止或仅记录它们并继续。

  • Tboot 调整引导加载程序提供的 e820 表,以保留其在内存中的位置以及保留其他某些与 TXT 相关的区域。

  • 作为其启动的一部分,tboot DMA 保护所有 RAM(使用 VT-d PMR)。因此,必须使用 ‘intel_iommu=on’ 启动内核,才能删除此全面保护并使用 VT-d 的页级保护。

  • Tboot 将使用一些关于自身的数据填充共享页,并在传输控制权时将其传递给 Linux 内核。

    • 共享页的位置通过 boot_params 结构作为物理地址传递。

  • 内核将查找 tboot 共享页地址,如果存在,则会映射它。

  • 作为 TXT 提供的一种检查/保护,它会在 DMA 保护的内存区域中复制 VT-d DMAR,并验证它们的正确性。VT-d 代码将检测内核是否使用 tboot 启动,并使用此副本而不是 ACPI 表中的副本。

  • 此时,tboot 和 TXT 将退出,直到关机 (S<n>)

  • 为了在 TXT 启动后将系统置于任何休眠状态,必须先退出 TXT。这是为了防止攻击者尝试通过使系统崩溃来在重新启动时获得控制权并窃取内存中遗留的数据。

    • 内核将执行其所有休眠准备工作,并使用将平台置于所需休眠状态所需的 ACPI 数据填充共享页。

    • 然后,内核通过共享页中指定的向量跳转到 tboot。

    • Tboot 将清理环境并禁用 TXT,然后使用内核提供的 ACPI 信息将平台实际置于所需的休眠状态。

    • 对于 S3,tboot 还将自己注册为恢复向量。这是必要的,因为它必须在恢复时重新建立度量环境。恢复 TXT 环境后,它将恢复 TPM PCR,然后将控制权传输回内核的 S3 恢复向量。为了在 S3 期间保持系统完整性,内核会向 tboot 提供一组内存范围(e820 表中的 RAM 和 RESERVED_KERN,但不包括 BIOS 可能在 S3 转换中更改的任何内存),tboot 将对该范围计算 MAC(消息身份验证码),然后使用 TPM 密封该 MAC。在恢复时以及重新建立度量环境后,tboot 将重新计算 MAC 并根据密封值验证它。如果验证失败,tboot 的策略将确定会发生什么情况。请注意,具有新 MAC 代码的 tboot 的 c/s 194 支持这一点。

这就是 TXT 支持的全部内容。

17.4. 配置系统

此代码适用于 32 位、32 位 PAE 和 64 位 (x86_64) 内核。

在 BIOS 中,用户必须启用:TPM、TXT、VT-x、VT-d。并非所有 BIOS 都允许单独启用/禁用这些,并且在其中找到它们的屏幕是特定于 BIOS 的。

需要按如下方式修改 grub.conf

title Linux 2.6.29-tip w/ tboot
  root (hd0,0)
        kernel /tboot.gz logging=serial,vga,memory
        module /vmlinuz-2.6.29-tip intel_iommu=on ro
               root=LABEL=/ rhgb console=ttyS0,115200 3
        module /initrd-2.6.29-tip.img
        module /Q35_SINIT_17.BIN

用于启用 Intel TXT 支持的内核选项位于 Security 顶层菜单下,名为“Enable Intel(R) Trusted Execution Technology (TXT)”。它被认为是 EXPERIMENTAL 的,并且依赖于通用的 x86 支持(以允许内核构建选项的最大灵活性),因为 tboot 代码将检测平台是否实际支持 Intel TXT,从而检测是否执行了任何内核代码。

Q35_SINIT_17.BIN 文件是 Intel TXT 所称的“认证代码模块”(Authenticated Code Module)。它特定于系统中的芯片组,也可以在受信任启动站点找到。它是由 Intel 签名的(未加密)模块,用作 DRTM 过程的一部分,以验证和配置系统。它之所以被签名,是因为它在系统中的特权级别高于任何其他微代码,并且其正确运行对于建立 DRTM 至关重要。确定系统正确 SINIT ACM 的过程在 SINIT-guide.txt 文件中进行了说明,该文件位于 tboot SourceForge 站点 SINIT ACM 下载部分。