维护 /boot 分区的完整性

维护 /boot 分区的完整性

我有兴趣为我的计算机设置全盘加密,据我所知,/boot 分区是该过程中唯一棘手的部分。也就是说,我可以加密 /boot 分区并指示 GRUB 适当地访问它,但由于我的计算机使用 UEFI,我将需要一个额外的、未加密的 /boot/efi 分区。据我了解,那个分区仍然容易受到邪恶女仆的攻击?

有什么方法可以保护该分区,即其完整性?换句话说,有什么方法可以至少在启动计算机时收到警告,告知我的 /boot 分区已被破坏(检查校验和、签名等)?

今天我了解了安全启动,但我感兴趣的一些 Linux 发行版没有这种支持(即 Debian)。那么,至少在登录后我可以做些什么来确定我的 /boot (/boot/efi) 分区完整性已受到损害吗?

谢谢!

答案1

Debian 实际上确实具有安全启动支持(您可以使用实用程序自己对内核进行签名 - 唯一棘手的部分是安装自签名密钥,这取决于 UEFI 实现)。

答案2

我运行 Debian 9,启用了安全启动,并使用自签名密钥。它当然可以防止轻微的 Evil Maid 类型的攻击,例如插入可启动 USB 驱动器以从系统中获取数据或将恶意软件安装到非加密分区。但这并不是 Evil Maid 的极限:如果您认真对待这一点,您还应该考虑系统机箱的物理安全性。

对于“追溯”完整性检查,您需要一个 TPM 芯片和一个将利用其 PCR 寄存器的引导加载程序。这些寄存器不能设置为任何值:当新数据输入到这些寄存器时,TPM 芯片本身将计算寄存器旧值 + 输入数据的哈希值,并将其指定为寄存器的新值。系统固件将使用固件本身的哈希值、当前固件设置以及实际使用的第一段引导代码来填充前几个 PCR 寄存器。之后,控制权将转移到该启动代码。

如果您使用的引导加载程序类似地记录了实际加载到 PCR 寄存器中的内核和 initramfs 文件的哈希值,那么您可以根据存储在磁盘加密部分中的一组“已知良好”值来验证 PCR 值,并显示如果当前值与已知良好状态不匹配,则会发出警告。内核还具有 CONFIG_IMA 选项,激活该选项后,内核将使用 TPM 的一个 PCR 寄存器来维护已加载的所有内容的哈希值的哈希值。 (散列的散列,因为 TPM 不是特别快:将所有加载数据的完整副本发送到 TPM 进行散列会大大减慢启动过程。)

当然,每次更新系统中散列到 PCR 中的任何部分时,您都必须更新已知的良好值,否则您会收到误报。安装系统更新(例如带有安全补丁的内核)时,很难提前预测新的“良好”PCR 值是什么,因此您可能必须安装更新,并接受下次启动将触发报警,然后记录新的“良好”状态。

几年前,当我尝试使用 TPM PCR 时,系统使用的是旧版 BIOS 固件。借助 TrustedGRUB(基本上是 GRUB Legacy 的启用 TPM 的版本),我能够实现我在​​上一段中概述的检查类型。我不确定是否有支持 TPM 的 Linux UEFI 引导加载程序可用,因此您可能无法获得早期系统的完整 PCR 覆盖,除非您仅使用内核的内置 UEFI 存根加载程序进行引导(因此固件将结束记录实际内核的哈希值而不仅仅是引导加载程序)。

相关内容