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

Vij*_*Vij 4 security linux-kernel bootloader lockdown linux-security-module

据我到目前为止的谷歌搜索,这两个功能似乎是独立的。

安全启动依赖于内核签名,因此引导加载程序将检查(内核/单映像应用程序)签名,如果有效将调用内核启动函数。

锁定是另一个功能,“锁定代码的目的是允许内核在启动时尽早锁定 - 足够早,以至于我们还没有能力kmalloc()。甚至不允许特权用户访问内核内存中存在的机密数据。”

在内核被验证为有效后,锁定通过引导参数/sysfs 控制来实现。

我的理解正确吗?

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

Mar*_*lli 5

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

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

内核锁定是 Linux 内核的一项安全功能,最近在 5.4 版本中作为可选安全模块引入。正如LWN 这篇有趣的文章中提到的,内核锁定的目的是强制区分以 root 身份运行和在内核模式下运行代码的能力。根据配置,内核锁定可以禁用允许修改正在运行的内核或从用户空间提取机密信息的内核功能。查看将该功能引入 Linux 的相关提交消息。

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

UEFI 安全启动的支持者认为这种分离(即内核锁定)是必要的;否则安全启动的承诺(系统只会在内核模式下运行可信代码)就无法兑现。关闭特权攻击者可以在内核模式下运行任意代码的路径需要禁用内核中的许多功能。

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

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

尽管如此,这两个功能是相互独立的。仍然存在没有内核锁定的安全启动的有效用例,反之亦然没有安全启动的内核锁定。这最终取决于您的威胁模型是什么。