我正在使用 grub 启动 x86 vanilla(4.9.20,64 位)。根文件系统位于 ext3 格式的磁盘上。它运行正常。
是否可以对根文件系统进行签名,以便如果它被攻击者更改它将无法启动?
谢谢你,Zvika
答案1
证明通用操作系统发行版没有改变比看起来要困难得多。在正常操作过程中,相当多的文件都会被修改。
如果整个文件系统没有改变,那么阻止写入就不是问题。尝试使用只读的根文件系统启动您的发行版,无论是挂载选项还是将块设备设为只读。在您知道如何启动救援磁盘或紧急 initrd 之后,因为这不太可能起作用。在正常操作期间会修改相当多的文件:日志、锁、用户数据。
基于映像的软件更新系统必须处理如何处理写入。通常通过单独的挂载点来存储易失性数据,可能使用覆盖。然而,这本身并不能解决维护完整性的问题。而且您可能还没有准备好通过复制文件系统映像来更新软件。
此外,信任引导加载程序还存在一个更深层次的挑战。你怎么知道你的内核没有被篡改?或者你没有启动预期的根文件系统?如果这可以通过加密方式锚定在信任根中,那就太好了。
RHEL 安全强化指南建议Keylime 验证启动完整性.这将是一个植根于 TPM 的工具,尽早证明系统完整性,采用UEFI启动结合Linux完整性子系统。
好处是,即使面临高级威胁,也能检测到系统状态的许多低级变化,从引导加载程序到内核再到软件。为了最终实现隔离故障节点的目标,安全有效载荷可以使某些文件的解密取决于证明。或者运行撤销脚本。未知的启动签名,删除 TLS 和 SSH 证书,它就无法通信。当然,记录这样的事件非常有趣,并可能触发安全响应。
缺点是,这样的项目会很复杂,维护成本很高。根据神秘的 UEFI 寄存器确定已知的良好启动状态。排除文件以进行完整性子系统检查。TPM 的密钥管理。首先需要 TPM,这会影响您使用的硬件、虚拟机管理程序和云。集成安全有效载荷和撤销脚本。部署和维护服务器组件。通过更改硬件和软件以及启动配置来保持这项工作的正常进行。
不是一回事,但有一种不同的方法来允许列出可以执行的软件。也许不是基于安全硬件的信任,但阻止任意程序的执行可以阻止很多威胁。再次查看软件发行版以获取实现示例,RHEL 正在推广 fapolicyd。