安全启动和内核锁定之间有什么关系吗?

Is there any relationship between Secure Boot and Kernel Lockdown?

据我搜索到现在,这两个功能似乎是独立的。

安全启动依赖于内核签名,因此引导加载程序将检查(Kernel/Single 图像应用程序)签名是否有效将调用内核启动函数。

锁定是另一个功能 "The lockdown code is intended to allow for kernels to be locked down early in boot - sufficiently early that we don't have the ability to kmalloc() yet. Disallowing even privileged User from accessing Confidential Data present in kernel memory."

锁定通过启动parameters/sysfs控制在内核被验证后进入 有效。

我的理解正确吗?

因此,在禁用安全启动的情况下,锁定功能应该仍然有效。

是的,我想说你的理解是正确的。

安全启动 是在硬件中实现的安全功能(即直接在您的 CPU 中实现,尽管它也可以在 UEFI 固件中实现)。这是一种验证机制,在打开计算机电源时首先完成。一些已知的 public 密钥存储在硬件中,用于在 运行 启动之前验证引导加载程序的签名。然后可以通过引导过程的多个阶段重复该过程,其中每个阶段都会验证下一个阶段,直到 OS 启动。要了解更多信息,请查看有关安全启动的 Debian 文档的 this page

内核锁定 是 Linux 内核的一项安全功能,最近作为可选安全模块在 5.4 版中引入。如 this interesting article from LWN, the purpose of kernel lockdown is to enforce a distinction between running as root and the ability to run code in kernel mode. Depending on the configuration, kernel lockdown can disable features of the kernel that allow modifications of the running kernel or the extraction of confidential information from userspace. Take a look at the relevant commit message 中所述,将此功能引入 Linux。

安全启动和内核锁定之间的关系 可以用这个非常重要的考虑来解释(来自上面链接的同一篇 LWN 文章):

Proponents of UEFI secure boot maintain that this separation [i.e. kernel lockdown] is necessary; otherwise the promise of secure boot (that the system will only run trusted code in kernel mode) cannot be kept. Closing off the paths by which a privileged attacker could run arbitrary code in kernel mode requires disabling a number of features in the kernel.

换句话说,如果经过验证的内核和 运行 可以被用户态进程修改,那么安全启动就毫无用处。事实上,如果没有适当的内核强化,潜在的攻击者可以利用特权用户进程来改变 运行ning 内核,从而破坏系统的整个安全模型。

另一方面,人们可以很容易地争辩说,如果没有安全启动,内核锁定是无用的,因为潜在的攻击者可能会破坏启动链(例如修改磁盘上的启动加载程序或内核映像)并使机器 运行 下次启动时修改内核。

尽管如此,这两个特征是相互独立的。仍然存在没有内核锁定的安全启动的有效用例,反之亦然没有安全启动的内核锁定。这最终取决于你的 threat model.