17. Intel(R) TXT 概述¶
Intel 用于更安全计算的技术 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 在过去几年中曾在各种活动中展示过,其中一些是
- TRUST2008
http://www.trust-conference.eu/downloads/Keynote-Speakers/ 3_David-Grawrock_The-Front-Door-of-Trusted-Computing.pdf
- IDFs 2006, 2007
(我不确定它们是否在线)
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(开源 VMM/hypervisor,自 v3.2 起支持 TXT)和现在的 Linux 内核。
17.2. Linux 的价值主张或“您应该关心什么?”¶
虽然有许多产品和技术试图测量或保护运行内核的完整性,但它们都假设内核一开始就是“好的”。完整性测量架构 (IMA) 和 Linux 完整性模块接口就是此类解决方案的示例。
要在不使用 Intel TXT 的情况下获得对初始内核的信任,必须使用静态信任根。这会将信任基于从系统重置开始的 BIOS,并需要测量从系统重置到内核启动完成之间执行的所有代码,以及该代码使用的数据对象。对于 Linux 内核,这意味着所有 BIOS、任何选项 ROM、引导加载程序和引导配置。实际上,这是大量的代码/数据,其中大部分代码/数据可能会在引导之间发生更改(例如,更改 NIC 可能会更改选项 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 表没有无效条目等)。
它会将 AP 从 GETSEC[SENTER] 指令使其进入的特殊睡眠状态中唤醒,并将它们置于等待 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”启动内核,以便删除此 Blanket 保护并使用 VT-d 的页面级保护。
Tboot 将使用一些关于自身的数据填充共享页面,并在传递控制权时将其传递给 Linux 内核。
共享页面的位置通过 boot_params 结构作为物理地址传递。
内核将查找 tboot 共享页面地址,如果存在,则映射它。
作为 TXT 提供的检查/保护之一,它会在 DMA 保护的内存区域中复制 VT-d DMAR,并验证它们的正确性。如果内核是用 tboot 启动的,VT-d 代码将检测到这一点,并使用此副本而不是 ACPI 表中的副本。
此时,在关闭 (S<n>) 之前,tboot 和 TXT 都不会参与。
为了在 TXT 启动后将系统置于任何睡眠状态,必须首先退出 TXT。这是为了防止试图使系统崩溃以在重新启动时获得控制权并窃取留在内存中的数据的攻击。
内核将执行其所有睡眠准备,并使用将平台置于所需睡眠状态所需的 ACPI 数据填充共享页面。
然后,内核通过共享页面中指定的向量跳转到 tboot。
Tboot 将清理环境并禁用 TXT,然后使用内核提供的 ACPI 信息将平台实际置于所需的睡眠状态。
在 S3 的情况下,tboot 也会将自身注册为恢复向量。这是必要的,因为它必须在恢复时重新建立测量环境。一旦 TXT 环境恢复,它将恢复 TPM PCR,然后将控制权返回给内核的 S3 恢复向量。为了在 S3 中保持系统完整性,内核会为 tboot 提供一组内存范围(e820 表中的 RAM 和 RESERVED_KERN,但不包括 BIOS 可能会在 S3 转换期间更改的任何内存),tboot 将计算 MAC(消息认证码)并在 TPM 中密封。在恢复时,一旦重新建立测量环境,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 支持的内核选项位于“安全”顶级菜单下,称为“启用 Intel(R) 可信执行技术 (TXT)”。它被认为是实验性的,并且依赖于通用的 x86 支持(以允许在内核构建选项中实现最大的灵活性),因为 tboot 代码将检测平台是否实际支持 Intel TXT,从而检测是否执行任何内核代码。
Q35_SINIT_17.BIN 文件是 Intel TXT 称为经过身份验证的代码模块的文件。它特定于系统中的芯片组,也可以在可信启动站点上找到。它是由 Intel 签名的(未加密)模块,用作 DRTM 过程的一部分,以验证和配置系统。它已签名,因为它在系统中以比任何其他宏代码更高的特权级别运行,并且其正确操作对于 DRTM 的建立至关重要。用于确定系统的正确 SINIT ACM 的过程记录在 tboot SourceForge 站点上的 SINIT ACM 下载下的 SINIT-guide.txt 文件中。