使用 Intel TXT 的裸机信任

https://bugs.launchpad.net/ironic/+bug/1526280

这使用了 Intel TXT[4],它构建了一个信任链,该链根植于称为可信平台模块 (TPM)[3] 的专用硬件中,并测量 BIOS、引导加载程序、Option ROM 和内核/Ramdisk,以确定由 Ironic 部署的裸机节点是否可信。

问题描述

裸机租户有能力在主机上引入 rootkit 和其他恶意软件。在将主机发布给新租户之前,确保机器处于已知良好状态是明智的。

使用 Intel TXT[4]、TPM[3]、可信启动[1]和远程身份验证[2],可以确认 BIOS、引导加载程序、Option ROM 和内核/Ramdisk 均处于已知良好状态。

提议的变更

添加新的引导模式,可信引导

  • 从 flavor 中读取值“capabilities:trusted_boot”。将布尔值“trusted_boot”传递给 ironic.drivers.modules.deploy_utils.switch_pxe_config()。切换到“trusted_boot”部分。

  • 在 PXE 配置中添加一个新的“trusted_boot”部分。它将使用支持多重加载的 mboot.c32。它首先加载 TBOOT。TBOOT 会在加载它们之前测量内核/Ramdisk。PXE 配置模板

    label trusted_boot
    kernel mboot
    append tboot.gz --- {{pxe_options.aki_path}} root={{ ROOT }} ro text
    {{ pxe_options.pxe_append_params|default("", true) }} intel_iommu=on
    --- {{pxe_options.ari_path}}
    

备选方案

安全启动[5]用于相同的目的。主要区别在于,安全启动将在执行前验证签名,而可信启动使用硬件信任根,可以配置为在执行前验证每个组件,或者执行所有组件并捕获“测量”(也称为扩展哈希计算)以进行后期验证。因此,如果节点发生更改,可信启动仍然会启动它,但会向用户发出警告。安全启动根本不会启动它。

它们是互补的,都能使云环境更安全。建议在 UEFI 下使用安全启动引导节点,在传统 BIOS 下使用可信启动引导节点。下一步是将它们结合起来,但这超出了本规范的范围。

数据模型影响

状态机影响

REST API 影响

客户端 (CLI) 影响

RPC API 影响

驱动程序 API 影响

Nova 驱动程序影响

将额外的规范“capabilities:trusted_boot=True”传递给 Ironic

Ramdisk 影响

N/A

安全影响

对裸机节点没有 rootkit 和其他恶意软件的信心增强。利用了 Intel TXT 和 TPM。

其他最终用户影响

可扩展性影响

我们的实验表明,处理并发证明请求的数量与请求数量成线性关系。证明发生在节点发布路径上,因此对延迟不敏感。

性能影响

在可信启动期间有一个额外的证明步骤,需要花费几秒钟。但对于裸机信任,不接受动态证明请求。因此,这无关紧要。

其他部署者影响

  • 创建一个具有“capabilities:trusted_boot=True”的特殊 flavor

  • trusted_boot:True 设置为 node.properties 中的 capability。

  • 此外,需要提供两个项目与 tftpboot/httpboot 文件夹一起使用
    • “mboot.c32” - 支持从 /usr/lib/syslinux/mboot.c32 多重加载

    • “tboot.gz” - 用于测量的预内核模块。

  • 设置每台机器,启用 Intel TXT、VT-x 和 VT-d,并获取 TPM 的所有权,重启,并捕获平台配置寄存器 (PCR) 值。这是为了创建将在初始化时注册到证明服务中的白名单值。

  • 设置 OAT-Server 并使用来自上一步的所有已知类型硬件创建白名单。

  • 使用 OAT-Client 创建自定义镜像。

  • 运行一个自定义脚本,在创建实例时验证节点的信任状态。

开发人员影响

实现

负责人

主要负责人

tan-lin-good

工作项

  • 将 trusted_boot 部分添加到 pxe_config.template

  • 支持 trusted_boot 标志并切换到 trusted_boot。

  • 一个 dib 元素,用于创建自定义镜像。

依赖项

  • TBOOT[1]

  • OAT[2]

  • 硬件支持:TPM 和 Intel TXT

测试

将添加单元测试。计划添加第三方硬件 CI 测试。

升级和向后兼容性

没有。通过不请求“可信”裸机来实现向后兼容性。通过部署嵌入了 OAT 客户端的初始标准镜像来适应自定义租户镜像。如今,Fedora 发行版捆绑了 OAT 客户端。这种解决方案方法虽然增加了启动次数,但避免了通过将 OAT 客户端注入到相同镜像中,或者要求裸机用户提供包含 OAT 客户端的镜像来修改租户镜像。

文档影响

将记录用法和好处。这是关于裸机信任的技术细节的文档:https://wiki.openstack.org/wiki/Bare-metal-trust

参考资料

  1. http://sourceforge.net/projects/tboot/

  2. https://github.com/OpenAttestation/OpenAttestation

  3. http://en.wikipedia.org/wiki/Trusted_Platform_Module

  4. http://en.wikipedia.org/wiki/Trusted_Execution_Technology

  5. https://review.openstack.org/#/c/135228/

  6. https://docs.openstack.org/admin-guide-cloud/compute-security.html#trusted-compute-pools