RHEL / Ubuntu 的 Secure Boot 支持真的是... 难以理解

2019-10-24 16:47:17 +08:00
 Osk

先划重点: 不校验 initrd/initramfs. shim, grub, kernel, kernel module 都有验证, 就 initramfs 没验证.

反正 RHEL 的 initramfs 被修改后启动还是显示 secure boot enabled. /滑稽 /

ubuntu 安装时有一个 "配置 secure boot" 的选项, 但不知道啥用.


还是继续 archlinux 算了, bootloader + kernel + initrd + cmdline 打包成一个 efi 文件并签名. 骗自己完全够了.

1857 次点击
所在节点    问与答
4 条回复
flynaj
2019-10-24 21:34:09 +08:00
kernel 后面已经没有办法验证了,Windows 也一样。
Osk
2019-10-24 23:29:30 +08:00
@flynaj 感谢提醒, 被这两家文档里轻飘飘的一句: 不验证 initramfs 给震惊到了, 没说明白.
windows 确实也是一样, 网上一大把 PE 不需要关闭 secure boot 来启动. Linux 的 secure boot 也不验证 user space 的程序.


我一直觉得 secure boot 只是整个安全加固中的一环, 而不是全部. 在启动过程中需要输入 OS 分区密钥的情况下 SB 比较有用:

对于 Windows 来说, secure boot 验证了 bootmgr, bootmgr 会让用户输入密码解密加密的 C 盘(或者使用 TPM 测量启动环境以自动解密), 由于 ms 公开的细节比较少, 就目前看来这个流程是可信的. 当然, 可能有我不知道的漏洞能发起攻击, 欢迎各位告知.


对于 Linux 来说, 就坑爹了, 由于 OS 架构不一样, Linux 的 LUKS 解密是 User Space 的程序询问密码并解密的(TPM: 我是谁, 我在哪?🤣), 这个操作在 initramfs 中完成, 而 rhel/ubuntu 的 secure boot 实现并不验证 initramfs, 那么攻击者可以修改 initramfs, 在合适的时机(比如询问密码是做记录或 switch_root 前向目标 rootfs 中植入恶意程序), 那么 SB 除了让插入自己的 ko 变得更麻烦外, 意义何在?


ArchLinux 这边有一个趣的方案: 把 Kernel、initramfs、ucode、cmdline 等嵌入到 systemd 的 boot manager 中, 然后对这个打包的 efi 签名, 这样就避免了 initramfs/cmdline 被篡改的可能, 不过这个方案目前操作略复杂...
msg7086
2019-10-25 02:52:06 +08:00
只知道以前 Linux 的“支持”SB 是指之前 UEFI 被强推 SB 会导致没有签名的 Linux 无法引导的问题。“支持”SB 就是最开始的 Boot loader 拿到签名通过 UEFI 验证使之可以正常引导。如果缺少 SB 支持的话,在强制打开 SB 的机器上就无法启动了。
szopen
2019-10-25 08:40:38 +08:00
@msg7086 同意,Linux 支持 Secure Boot 其实就是支持能在开启了 Secure Boot 的机器上启动,避免用户要到主板中去关闭。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/612607

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX