内核锁定和UEFI Secure Boot

生活百科 2023-07-02 07:58生活小妙招www.zaoxiew.cn
        David Howells最近发布了他的内核锁定补丁集的最新版本。这是为了加强root和内核之间的界限,施加额外的限制,防止root在运行时修改内核。这并不是第一个这样的功能--/dev/mem不再允许你覆盖任意的内核内存,而且你可以配置内核,使其只有签名的模块可以被加载。,目前的状况是,这些安全特性很容易被规避(例如,通过使用kexec来修改内核的安全策略)。
你为什么想要锁定?
如果你有一个设置,你知道你的系统正在启动一个值得信赖的内核(你正在运行一个对其启动链进行加密验证的系统,或者你自己建立并安装了内核,例如),那么你可以相信内核会保护秘密,甚至是root的安全。但如果root能够修改运行中的内核,这种保证就会消失。,将安全策略从启动环境扩展到运行中的内核是有意义的--这实际上只是配置内核要求签名模块的一个扩展。
补丁集本身在概念上并没有很大的争议,尽管对某些限制的精确形式存在分歧。但有一个补丁有争议,因为它将是否启用锁定与是否启用UEFI安全启动联系起来。这里有一些背景故事是很重要的。大多数内核功能的开启或关闭是通过构建时的配置或在启动时向内核传递参数来实现的。这个补丁集允许引导者通过两种方式告诉内核启用锁定模式--它可以在内核命令行中传递锁定参数,或者在传递给内核的bootparams结构中设置secure_boot标志。如果你运行在一个能够在启动前验证内核的环境中(通过对内核的加密验证,或者知道有一个与TPM绑定的秘密,如果内核被篡改,将阻止系统启动),你可以打开锁定。不过,UEFI系统有一个问题--你可以构建内核,使其看起来像EFI的可执行文件,然后直接从固件中运行它。固件不知道Linux,所以不能填充bootparam结构,也没有机制来执行命令行,所以我们也不能依靠这个。这个有争议的补丁只是增加了一个内核配置选项,当UEFI安全启动启用时自动启用锁定,其他情况下则由用户选择是否开启。
为什么我们要在通过UEFI安全启动时启用锁定功能?
UEFI安全启动的目的是防止启动任何系统所有者认为不值得信任的引导程序。
,引导程序只是一个软件--它与火狐浏览器的唯一区别是,火狐浏览器是在用户模式下运行的,没有对硬件的直接访问。内核可以直接访问硬件,所以grub能做的事和内核能做的事之间没有任何有意义的区别。如果你可以在内核中运行任意代码,那么你就可以用内核来启动任何你想要的东西,这就违背了UEFI安全启动的意义。Linux发行版不希望他们的内核被用作针对其他发行版或操作系统的攻击链的一部分,所以他们对以这种方式启动的内核启用锁定(或同等功能)。
那么,为什么不在所有地方启用它呢?
有几个原因。
第一个原因是,一些功能可能会破坏人们需要的东西--例如,一些奇怪的嵌入式应用通过mmap()直接从sysfs[2]获取资源与PCI设备通信。这被锁住了,这将破坏它们。这样一来,发行版就必须提供一个禁用锁定的额外内核(不可能用一个命令行参数来禁用它,因为攻击者可以简单地通过它),而用户必须禁用安全启动才能启动它。把这两者绑在一起比较容易。
第二是,如果你的系统没有验证内核,它提出了一个安全的承诺,而这个承诺其实并不存在。如果一个攻击者可以替换你的引导程序或内核,那么在运行时修改你的内核的能力就不那么有趣了--他们可以等待下一次重启。看起来给用户的安全保证远没有他们看起来的那么强大,这对保证用户的安全没有好处。
那么,工作受到锁定影响的人怎么办?
现在有两种方法可以让被封锁的东西解除封锁
要么禁用安全启动(这将禁用它,直到你启用安全启动),要么按alt-sysrq-x(这将禁用它,直到下次启动)。讨论表明,有一个额外的安全变量可以在不禁用安全启动验证的情况下禁用锁定,这可能会有帮助,而且实现起来并不困难,所以可能会实现。
        这个补丁集没有争议,只是它与UEFI安全启动集成的方式有争议。它与UEFI安全启动集成的原因是这是大多数发行版想要的策略,因为替代方案是到处启用它,即使它没有提供真正的好处,但确实提供了额外的支持开销。即使你不使用UEFI安全启动,你也可以使用它。我们应该直接叫它securelevel。

Copyright@2015-2025 早泄网 版板所有-All right reserved