4

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

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

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

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

我的理解正确吗?

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

4

1 回答 1

4

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

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

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

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

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

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

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

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

于 2020-02-06T21:57:45.870 回答