休眠是否与 UEFI 安全启动兼容?
为此,您需要查看 UEFI 规范的第 27 节。在本规范中,您将看到正在使用的协议的完整说明。我将简要总结一下 - 这是一个粗略的解释,可能有松散的边缘(如果你想要一个明确的解释,找一个 UEFI 人:)):
涵盖这些 EFI 规范细节的原因是指出 UEFI 安全启动规范涵盖了 UEFI 安全启动的扩展程度——也就是说,它旨在实现两件事:
- 如果启用 UEFI 安全启动并注册了平台密钥(由平台所有者完成),UEFI 加载程序将仅加载签名数据库中存在签名的 EFI 映像。
- UEFI 规范提供了一种在操作系统和 UEFI 固件之间传递信息以询问签名数据库和 EFI 变量的方法。
这里重要的一点是,不需要 EFI 映像(一旦加载)或 OS 内核(一旦加载)就可以强制对随后加载的任何内容进行签名。
例如;
- Fedora 将强制对内核和相应的模块进行签名 - 请参阅此状态更新 和此
- 阅读这篇关于 Fedora EFI 引导过程中的 UEFI shim 的文章。此 shim 可以选择设置 UEFI 变量,以禁用对引导过程后期部分(如内核)的签名检查。更详细
Ubuntu 本身不会签署它的内核:
因此,我们只需要对引导加载程序二进制文件进行身份验证。Ubuntu 不需要签名的内核映像或内核模块。
所以,好的,让我们回到 UEFI:
同样,恶意恶意软件可能会创建一个精心设计的休眠文件(包含真实休眠文件的修改版本,经过修改以将恶意软件插入运行的内核),然后强制重启。重新启动后,我认为这会将休眠的映像加载到内存中——这似乎违反了 UEFI 安全启动的安全目标。
是的。对于当前的操作系统来说,这是一个非常好的攻击媒介,它起源于页面文件攻击。
这两种攻击都是有效的,因为内核(在 Windows 内核的情况下过去常常如此)盲目地将数据从磁盘加载回 RAM。正确的修改使您可以更改驱动程序,安装自己的驱动程序等,然后离开,环 0 和一个受损系统。
在 UEFI 安全启动环境中,EFI 固件保证您的引导加载程序在关闭 EFI 固件并继续运行操作系统之前不会被篡改。就是这样。UEFI 安全启动不保证加载的操作系统未修改,或者加载的操作系统已从引导加载更改的映像。这取决于操作系统来检查和执行。
现在一些个人想法:
是否会对 UEFI 安全启动的目标造成任何安全风险
我想确实如此,因为您对 UEFI 安全启动的期望是一个健全的状态内核。这不是你保证会得到的,但它是你所期望的。
在 UEFI 安全启动的部署使用中如何解决这些风险?
我认为更准确地说,这些风险正在通过 AuthentiCode 等代码签名计划得到全面缓解。例如,64 位 Windows 不会加载未签名的驱动程序代码,除非您执行涉及 F8 和启动菜单的特殊舞蹈。大多数 Microsoft 映像都已签名,并且 - 我不知道但会猜测 -ntkrnlmp.exe由 Microsoft EFI 引导加载程序签名和验证。
如您所见,Fedora 等发行版肯定采用了这种方法,因为如果您只是获得了经过验证的引导加载程序,那么整个系统的安全性就没有多大意义。
我怀疑这个过程的下一个阶段是关闭攻击媒介,例如休眠。例如,页面文件攻击被微软修复。如果您认为您只需要一个签名校验和,那么修复它是微不足道的,例如,您可以使用存储在 EFI 固件中的一个密钥生成该校验和,并在引导加载程序或内核中进行验证。