@
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 被篡改的可能, 不过这个方案目前操作略复杂...