UEFIAL2023 上安全启动 - Amazon Linux 2023

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

UEFIAL2023 上安全启动

AL2从 2023.1 版本开始,023 支持UEFI安全启动。您必须将 AL2 023 用于同时支持两者UEFI以及UEFI安全启动的 Amazon EC2 实例。有关更多信息,请参阅 Amazon EC2 用户指南中的启动实例

AL2023 个启用了UEFI安全启动的实例仅接受由签名的内核级代码,包括 Linux 内核和模块,Amazon因此您可以确保您的实例仅运行由 AWS签名的内核级别代码。

有关 Amazon EC2 实例和UEFI安全启动的更多信息,请参阅《亚马逊EC2用户指南》中的UEFI安全启动

先决条件
  • 您必须使用版本为 AL2 023 AMI 的 2023.1 或更高版本。

  • 实例类型必须支持UEFI安全启动。有关更多信息,请参阅 Amazon EC2 用户指南中的启动实例

在 AL2 023 上启用UEFI安全启动

标准 AL2 023 AMIs 包含引导加载程序和由我们的密钥签名的内核。您可以通过注册现有实例来启用UEFI安全启动,也可以通过注册快AMIs照中的映像在预先启用UEFI安全启动的情况下进行创建。UEFI在标准 AL2 023 AMIs 上,默认情况下不启用安全启动。

如果实例类型支持UEFI,AMIs则启动模式uefi-preferred为 AL2 023,可确保使用这些启动的实例AMIs将使用UEFI固件。如果实例类型不支持UEFI,则使用旧版BIOS固件启动实例。当实例在旧BIOS模式下启动时,不会强制执行UEFI安全启动。

有关亚马逊EC2实例AMI启动模式的更多信息,请参阅亚马逊EC2用户指南中的启动模式

注册现有实例

要注册现有实例,请在特定的UEFI固件变量中填充一组密钥,使固件能够验证引导加载程序,使引导加载程序能够在下次启动时验证内核。

  1. Amazon Linux 提供一个简化注册流程的工具。请运行以下命令以使用一组必要的密钥和证书预置实例。

    sudo amazon-linux-sb enroll
  2. 运行以下命令来重新启动实例。实例重启后,将启用UEFI安全启动。

    sudo reboot
注意

亚马逊 Linux AMIs 目前不支持 Nitro 可信平台模块 (NitroTPM)。如果TPM除了UEFI安全启动之外还需要 Nitro,请使用下一节中的信息。

注册快照映像

使用 Amazon AMI 从 Amazon EBS 根卷的快照注册时 EC2 register-imageAPI,您可以使用包含UEFI变量存储状态的二进制 blob 进行配置。AMI通过提供 AL2 023UefiData,即可启用UEFI安全启动,无需执行上一节中的步骤。

有关创建和使用二进制 blob 的更多信息,请参阅 A ma EC2 zon 用户指南中的选项 B:创建包含预先填充的变量存储的二进制 blob

AL2023 提供了一个预先构建的二进制 blob,可以直接在 Amazon 实例上使用。EC2该二进制 blob 位于正在运行的实例上的 /usr/share/amazon-linux-sb-keys/uefi.vars 中。此 blob 由软件包提供,该amazon-linux-sb-keysRPM软件包默认安装在 AL2 023 上,从 2023.1 版本AMIs开始。

注意

为确保您使用的是最新版本的密钥和撤销,请使用与创建密钥和撤销相同的版本 AL2 023 中的 blob。AMI

注册图像时,我们建议使用RegisterImageAPI设置为的BootMode参数uefi。这允许您通过将TpmSupport参数设置为TPM来启用 Nitro。v2.0此外,设置BootModeuefi可确保启用UEFI安全启动,并且在切换到不支持的实例类型时不会意外禁用UEFI。

有关 Nitro 的更多信息TPM,请参阅亚马逊EC2用户指南TPM中的 Nitro

撤消更新

Amazon Linux 可能需要发布使用更新的密钥签名的新版引导加载程序 grub2 或 Linux 内核。在这种情况下,可能需要撤销旧密钥,以防止允许以前版本的引导加载程序中的可利用漏洞绕过UEFI安全启动验证过程。

Package 更新grub2kernel包总是自动将撤销列表更新到正在运行的实例的UEFI变量存储中。这意味着,启用UEFI安全启动后,安装软件包的安全更新后,您将无法再运行该软件包的旧版本。

在 AL2 023 上UEFI安全启动的工作原理

与其他 Linux 发行版不同,Amazon Linux 不提供一个名为 shim 的额外组件来充当第一阶段引导加载程序。shim 通常使用 Microsoft 密钥签名。例如,在提供 shim 的 Linux 发行版上,shim 会加载 grub2 引导加载程序,该引导加载程序使用 shim 自己的代码来验证 Linux 内核。此外,垫片在位于UEFI变量存储区中的机器所有者密钥 (MOK) 数据库中维护自己的一组密钥和撤销操作,该数据库由该工具控制。mokutil

Amazon Linux 不提供 shim。由于AMI所有者控制UEFI变量,因此不需要此中间步骤,这会对启动和启动时间产生不利影响。此外,我们默认选择不包括对任何供应商密钥的信任,这减少了执行不想要的二进制文件的机会。当然,如果客户选择信任,则可以包括想要的二进制文件。

使用 Amazon Linux,UEFI可以直接加载和验证我们的grub2引导加载程序。引grub2导加载程序已修改,用于UEFI在加载 Linux 内核后对其进行验证。因此,Linux 内核使用存储在普通UEFIdb变量(授权密钥数据库)中的相同证书进行验证,并使用与引导加载程序和其他二进制文件相同的dbx变量(撤销数据库)进行测试。UEFI由于我们提供自己的 PK 和KEK密钥来控制对数据库和 dbx 数据库的访问,因此我们可以根据需要分发签名的更新和撤销,而无需诸如 shim 之类的中介。

有关UEFI安全启动的更多信息,请参阅 Amazon EC2 用户指南中的UEFI安全启动工作原理

注册您自己的密钥

如上一节所述,Amazon Linux 不需要在亚马逊上shim进行UEFI安全启动EC2。当你阅读其他 Linux 发行版的文档时,你可能会找到使用管理机器所有者密钥 (MOK) 数据库的文档mokutil,AL2023 上不存在该文档。shim和MOK环境解决了UEFI固件中密钥注册的一些限制,这些限制不适用于 Amazon EC2 实现UEFI安全启动的方式。借助 Amazon,EC2有一些机制可以轻松地直接操作UEFI变量存储中的密钥。

如果您想要注册自己的密钥,有两种办法:一是在现有实例内操作变量存储(请参阅从实例内向变量存储中添加密钥),二是构造预填充的二进制 blob(请参阅创建包含预填充变量存储的二进制 blob)。