Lennart Pottering 提出了一种新的 Linux 验证引导架构

Lennart Poettering 发布了一项现代化 Linux 发行版启动过程的提案,旨在解决现有问题并简化完整验证启动的组织,以确认内核和底层系统环境的可靠性。 实现新架构所需的更改已包含在 systemd 代码库中,并影响 systemd-stub、systemd-measure、systemd-cryptenroll、systemd-cryptsetup、systemd-pcrphase 和 systemd-creds 等组件。

建议的更改归结为创建单个通用映像 UKI(统一内核映像),结合 Linux 内核映像、从 UEFI(UEFI 启动存根)加载内核的处理程序以及加载到内存中的 initrd 系统环境,用于在挂载根 FS 之前的阶段进行初始初始化。 整个系统可以打包在 UKI 中,而不是 initrd RAM 磁盘映像,这允许您创建加载到 RAM 中的经过完全验证的系统环境。 UKI镜像被设计为PE格式的可执行文件,不仅可以使用传统的引导加载程序加载,还可以直接从UEFI固件中调用。

从 UEFI 调用的功能允许您使用数字签名完整性检查,该检查不仅涵盖内核,还涵盖 initrd 的内容。 同时,对传统引导加载程序调用的支持使您可以保留诸如交付多个版本的内核以及在安装更新后检测到新内核存在问题时自动回滚到工作内核等功能。

目前,在大多数 Linux 发行版中,初始化过程使用链“固件 → 数字签名的 Microsoft shim 层 → 发行版数字签名的 GRUB 引导加载程序 → 数字签名的 Linux 内核 → 未签名的 initrd 环境 → 根 FS”。 传统发行版中缺乏 initrd 验证会产生安全问题,因为在这种环境中,会检索用于解密根文件系统的密钥。

不支持验证 initrd 映像,因为该文件是在用户本地系统上生成的,无法使用分发包的数字签名进行认证,这使得使用 SecureBoot 模式时的验证组织变得非常复杂(验证 initrd、用户需要生成自己的密钥并将其加载到 UEFI 固件中)。 此外,当前的引导组织不允许使用来自 TPM PCR(平台配置寄存器)寄存器的信息来控制除 shim、grub 和内核之外的用户空间组件的完整性。 在现有的问题中,还提到了更新引导加载程序的复杂性以及无法限制对旧版本操作系统的 TPM 中的密钥的访问,这些密钥在安装更新后变得无关紧要。

引入新加载架构的主要目标是:

  • 提供从固件到用户空间的完全验证的引导过程,确认正在引导的组件的有效性和完整性。
  • 将受控资源链接到 TPM PCR 寄存器,按所有者分隔。
  • 能够根据启动期间使用的内核、initrd、配置和本地系统 ID 预先计算 PCR 值。
  • 防止与回滚到先前易受攻击的系统版本相关的回滚攻击。
  • 简化并提高更新的可靠性。
  • 支持操作系统更新,无需重新应用或本地配置受 TPM 保护的资源。
  • 系统已准备好进行远程认证,以确认加载的操作系统和设置的正确性。
  • 将敏感数据附加到某些启动阶段的能力,例如,从 TPM 提取根文件系统的加密密钥。
  • 提供安全、自动且无需用户参与的解锁密钥的过程,以解密根分区驱动器。
  • 使用支持TPM 2.0规范的芯片,能够回滚到没有TPM的系统。

来源: opennet.ru

添加评论