![如何使用安全引导保护 initrd 和 grub.cfg 的安全?](https://linux22.com/image/82967/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E5%AE%89%E5%85%A8%E5%BC%95%E5%AF%BC%E4%BF%9D%E6%8A%A4%20initrd%20%E5%92%8C%20grub.cfg%20%E7%9A%84%E5%AE%89%E5%85%A8%EF%BC%9F.png)
shim
我使用和的默认 ubuntu 方法grub2
,结合我自己的平台密钥(使用 进行自签名shim
)sbsign
和加密的根分区,以安全启动我的 ubuntu 安装。但这仅验证grubx64.efi
内核,而不能保护未加密启动分区上的文件免受恶意修改initrd.img
。grub.cfg
那么,在使用 initrd 和 grub 启动之前,如何验证它们(可能使用 sha256 哈希)?该验证可能发生在我可能使用的其他工具shim
中,grub
或者代替shim
和/或grub
。
该问题的目的是防止使用修改后的环境(内核命令行和initrd)执行内核,以防止将根分区加密密码泄露到任何地方。
没有找到任何验证启动的方法配置尽管花了几天时间阅读有关安全启动的网络教程/博客,包括 Ubuntu 和 Linux 基金会的PreLoader.efi
,所有这些都解释了如何验证可执行文件包括内核模块有效,但没有一个提到grub.cfg
initrd 中的和(shell 脚本和配置文件),所以看起来我是第一个要求验证的人非二元在启动过程中。我发现的最好的来源是罗德·史密斯。
我还没有尝试的是修改shim
or的源代码grub
,创建一个分支,或者直接为它们做出贡献。这是唯一的出路吗?
答案1
我发现很棒的文章描述了这种设置: https://ruderich.org/simon/notes/secure-boot-with-grub-and-signed-linux-and-initrd
tl;dr:使用 GPG 签署 grub 配置和 initrd,生成 grub 二进制文件,该二进制文件将强制检查并使用 secureboot 密钥对其进行签名。
ubuntu 的包实现了类似的想法:https://github.com/JohnstonJ/ubuntu-secure-boot
答案2
Grub 似乎支持使用分离签名进行签名验证。我想这就是您的答案。