到目前为止,据我谷歌搜索,这两个功能似乎是独立的。
安全启动依赖于内核签名,因此引导加载程序将检查(内核/单映像应用程序(签名是否有效,将调用内核启动函数。
锁定是另一个功能,其中"锁定代码旨在允许内核在启动早期被锁定 - 足够早,以至于我们还无法kmalloc()
。甚至禁止特权用户访问内核内存中存在的机密数据。
在内核被认证为 有效。
我的理解正确吗?
因此,在禁用安全启动的情况下,锁定功能应该仍然有效。
是的,我会说你的理解是正确的。
安全启动是在硬件中实现的安全功能(即直接在 CPU 中实现,尽管也可以在 UEFI 固件中实现(。这是一种验证机制,在打开计算机电源时首先要完成。一些已知的公钥存储在硬件中,用于在运行引导加载程序之前验证其签名。然后,可以在启动过程的多个阶段中重复该过程,其中每个阶段验证以下阶段,直到操作系统启动。要了解更多信息,请查看有关安全启动的 Debian 文档的这一页。
内核锁定是 Linux 内核的一项安全功能,最近在 5.4 版中作为可选安全模块引入。正如 LWN 的这篇有趣的文章所提到的,内核锁定的目的是强制区分以 root 身份运行和在内核模式下运行代码的能力。根据配置,内核锁定可以禁用内核的功能,这些功能允许修改正在运行的内核或从用户空间中提取机密信息。查看将该功能引入 Linux 的相关提交消息。
安全启动和内核锁定之间的关系可以通过这个非常重要的考虑因素来解释(来自上面链接的同一篇 LWN 文章(:
UEFI 安全启动的支持者坚持认为这种分离 [即内核锁定] 是必要的;否则无法保留安全启动的承诺(系统仅在内核模式下运行受信任的代码(。要关闭特权攻击者可在内核模式下运行任意代码的路径,需要禁用内核中的许多功能。
换句话说,有人可能会争辩说,如果经过验证和运行的内核可以被用户空间进程修改,那么安全启动是无用的。事实上,如果没有适当的内核强化,潜在的攻击者可以利用特权用户空间进程来改变正在运行的内核,从而破坏系统的整个安全模型。
另一方面,人们可以很容易地争辩说,如果没有安全引导,内核锁定是无用的,因为潜在的攻击者可能会破坏引导链(例如,修改引导加载程序或磁盘上的内核映像(,并使机器在下次引导时运行修改后的内核。
尽管如此,这两个功能是相互独立的。仍然存在没有内核锁定的安全启动的有效用例,反之亦然,没有安全启动的内核锁定。这最终取决于您的威胁模型。