使用全盘加密时,/boot
通常需要一个未加密的分区来存储引导加载程序和预引导环境。
这些initcpio
或initramfs
图像需要在解密之前加载,因此它们可以被(邪恶女仆)攻击者访问,攻击者可以用自己的替换它们,或偷偷修改它们以替换包含的ssh
服务器或tty
控制台,从而将解密密码/密钥泄露给外界。
防止(或检测)篡改内容的理想方法是什么/boot
?滚动我们自己的签名密钥,对/boot
图像进行签名,并希望主板实现的 BIOS、安全启动和安全密码中没有允许(邪恶女仆)攻击者注册他们自己的密钥的错误?
initcpio
当我们检测到系统已解锁并由不正确的签名加载/使用不正确的签名时,是否使用 PGP 对图像进行签名、清空内存并停止系统initramfs
?
即使是 TPM 工具(如 Clevis)也只能在系统设置并运行后提供保护。清除 TPM 后(例如固件升级后),如何确保信任?
/boot
或者每次我们想要在断电后启动系统时,唯一可靠的保护是否是从外部提供我们自己的保护?
使用安全启动,只有使用您明确信任的密钥签名的引导加载程序(并且可以在TPM中不可恢复地隐藏在无法读取的内存中以检索该密钥)才能启动。
因此,在某个时候,您设置了一个签名密钥,将其安装到 TPM 中,说“我信任这个引导加载程序。它不能在启动 Linux 之前执行诸如安装键盘记录器之类的操作!”,从而对引导加载程序进行签名。
然后可以将引导加载程序配置为仅接受统一的 Linux 内核和您签名的 initrd 映像。
顺便说一句,这是一个非常标准的事情 - Windows 就是这样,许多“企业”Linux 发行版默认也这样做或可以这样做 - 包括 Ubuntu、Fedora 和 Redhat。
你不需要。固件升级永远不会清除 TPM。从定义上讲,TPM 是固件更新不会触及的东西;事实上,它应该是固件不可改变的(这就是重点!)。它是信任的根源——你无法修改它。一旦你修改了,你就失去了信任,需要从零开始。
除了我上面描述的内容之外,测量启动是指您的操作系统实际上能够验证第一阶段引导加载程序是否通过了针对此特定密钥的签名验证,以及第二阶段引导加载程序或操作系统映像是否通过了针对该密钥的签名验证等等。
这需要与 TPM 进行更多交互。Matthew Garrett 有一些关于此主题的教学视频。