为什么内核锁定会阻止休眠?

为什么内核锁定会阻止休眠?

在我的 systemd 日志(journalctl)中,我经常看到这样的消息:

冬眠受到限制;参见 man kernel_lockdown.7

这似乎源于内核锁定特征当您在启用了安全启动的 UEFI 模式下启动时,该选项(仅?)处于活动状态。
目前据我了解此功能旨在防止在用户空间运行的程序修改内核。

虽然到目前为止我确实明白这一点,但我只是不明白一件事: 为什么内核锁定会禁用该功能?为什么它完全禁用休眠功能?

休眠功能被禁用到底是什么“不安全”?

似乎锁定的内核不希望我休眠我的设备。

Linux 内核 v5.6.15
Fedora 32 Silverblue


交叉发布在 Fedora 询问

答案1

正如中提到的联机帮助页,

不允许未加密的休眠/挂起交换,因为内核映像被保存到随后可以访问的介质上。

未加密的休眠将休眠系统内存的内容按原样存储在磁盘上。这允许攻击者在系统休眠时修改这些内容,从而导致正在运行的系统在恢复时发生更改,从而破坏锁定。

该联机帮助页给出了锁定中支持加密休眠的错误希望,但事实是这样目前情况并非如此,真正的要求似乎是休眠图像而不是(或者可能除了,取决于锁定模式)加密图像。

马修·加勒特(Matthew Garrett)一直致力于解决这个问题;他描述了他关于让冬眠与锁定一起工作的建议2021 年 2 月,以及更新了并在 2021 年 12 月提供针对几个剩余问题的实用解决方案。总体思路是将休眠映像与 TPM 状态联系起来,这样锁定的系统将仅恢复在该系统上生成的休眠映像,并且此后不会进行修改;要实现这一目标,需要知道什么 TPM 状态对映像有效,并且 TPM 状态是由内核自行到达的。

答案2

在休眠状态下,修改未签名的交换空间,或者从未加密的交换空间中提取秘密,从而绕过锁定将是“容易”的。

然而,与互联网上的大量信息相反,一种解决方案是至少对交换空间进行 LUKS 加密。从第一手经验来看,这在 OpenSuSE Leap 15.4 等系统上是可能的,尽管它没有得到很好的记录。完整的 HD LUKS 加密也可能允许在锁定状态下休眠。

推荐阅读:

背景:

多个内核消息

“锁定:swapper/0:休眠受到限制;请参阅 man kernel_lockdown.7”

可能表明,UEFI 安全启动的休眠状态已被破坏 - 在互联网上搜索解决方案时可能会支持这种印象。这个印象是错误的, 尽管。该措辞使用“受限”(而不是“禁用”)。这是一个暗示,有一些方法可以执行合规的休眠。

事实证明,SuSE 从大约 2017 年开始就开发了支持 kernel_lockdown 的签名内核/内存映像补丁。 2011 年。锁定下的休眠至少从 Leap 15.4 开始起作用。我不知道其他发行版是否有关于安全启动下休眠的状态。

我希望这些信息可以帮助其他人进一步调查其特定发行版的事态。

相关内容