使用 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