微软规定的 UEFI 安全启动到底有多安全?

信息安全 可信计算 uefi
2021-09-01 19:03:17

我最近阅读了几篇关于 UEFI 安全启动功能的文章,以及 Microsoft 如何要求在所有 Windows 8 认证的 x86 系统上默认启用它。从理论上讲,这听起来是个好主意——系统会在每次启动前检查启动加载程序的完整性。然而,它也带来了一些复杂性。

当有人想在 Windows 8 认证的 x86 硬件上运行非 Microsoft 操作系统时,就会出现主要问题。由于硬件将启用安全启动,并且默认情况下可能只安装 Microsoft 的密钥,因此用户必须通过以下几种方式之一解决该问题:

  1. 禁用安全启动- 这当然是最不理想的解决方案。但是,对于某些人来说,它可能是唯一可用的选项。
  2. 安装自定义证书- 技术倾向的一个选项,但普通最终用户不太可能轻易考虑。
  3. 选择带有 Microsoft 签名的引导加载程序的操作系统- 这可能是对最终用户最友好的,尽管它可能会限制您的选择。 Fedora 已宣布它们将成为这些选项之一。这不需要修改 UEFI 或使用自定义证书 - 您只需安装 Microsoft 签名的操作系统即可。
  4. 让您的引导加载程序由 Microsoft 签名——这可能是最不受欢迎的选择,因为它有实际成本(一次性费用 99 美元)。但是,如果您正在制作自己的发行版并想与朋友分享,它会很有用。

不过,最后两个选项确实是我关心的问题。如果一次只需花费 99 美元就可以让微软签署你所有的引导加载程序,那么对于那些能够从微软签署的 rootkit 中赚取数百万美元的恶意软件编写者来说,这真的是一个很大的障碍吗?

我在这里遗漏了什么,或者这个安全启动要求(以及为支持它而建立的所有内容)是否真的会导致安全增强的错误感觉?如果系统实际上以这种方式被滥用,会出现什么样的并发症?每次发布新的 CRL 时,我们是否都必须更新 UEFI?

3个回答

Matthew Garrett有一些关于 UEFI 安全启动的不错的博文。关于你的问题,他写道

任何人都可以支付 99 美元并签署他们的二进制文件。那么为什么恶意软件作者不这样做呢?首先,您需要为威瑞信提供某种形式的可信 ID 来验证您的身份并移交访问权限。所以,当然,你提供了某种假身份证。这种事情往往会激怒地方当局——你不仅是在谈论闯入一堆计算机,而且是在谈论犯罪,如果你被抓到,就会发生真正的坏事。其次,您访问系统的唯一方法是使用威瑞信发送给您的一些物理智能卡。因此,您还必须交出实际的物理地址,即使您使用了某种重定向服务,仍然可以更轻松地找到您。你'

将密钥的访问凭据存储在智能卡上是一些新信息,让我确信 UEFI 安全启动不仅仅是安全剧院。正如马修所说,它让你更容易追踪。它还显着降低了被盗的可能性,在我看来,这将是获取流氓签名密钥的明智方法。

签名的恶意软件仍然很可能会弹出。但大规模攻击更容易缓解,首先是撤销签名密钥,其次是通过签名者的物理地址追踪签名者。

该系统并不完美(与可实现的系统相比还很短),但它会使编写 bootkits 变得更加困难。就像 ASLR 和 NX 位让我们更安全地抵御恶意软件一样,即使缓冲区溢出攻击仍然可行,安全启动也不是完全浪费时间。

关于 CRL,我听说会有一个标准的 UEFI 接口供操作系统将新的撤销列表推送到 bios 中。这将使自动更新非常方便。

如果您是为商业或政府企业购买,但成本与可支持性相关,则会创建真正的安全增强功能。对于大多数只想要 Microsoft 桌面并且从不修改他们购买的系统的家庭用户来说,它还将提供额外的安全性。对于想要双启动(一个非常小的市场力量)的家庭用户来说,它将使生活变得复杂并且提供很少或根本没有安全增强,因为这些功能将根据定义被禁用。

考虑将使用这种受信任的引导范式及其在引导过程中验证基本组件的上下文。如果您负责保护大型企业的安全,那么这些功能将非常有吸引力,并且会大大增加您工作所需的工具集。您将有强烈的动机购买操作系统和启用的硬件来锁定您的企业。

如果您是想要双引导进入 Linux 的家庭用户,那将是一个很大的痛苦。当然,您可以物理控制您的家庭系统,并且可以禁用该功能。它使您的 Linux 体验进一步复杂化。

为那些对其系统进行物理控制并希望限制修改操作系统基本组件的虚拟攻击的有效性的人增加了安全性。

此解决方案附带许多超出安全性的功能。一方面,管理复杂性将增加,因为这些系统将更难升级和修改。当操作系统与围墙花园操作系统竞争时,它还为以广泛支持着称的操作系统创造了围墙花园效应。此外,用户匿名性将减少。今天的市场力量倾向于围墙花园和匿名性的丧失。

Linux 社区担心的是,这种变化使用户更难随意迁移到 Linux。这是一个合理的担忧。然而,这不是安全问题。在安全性方面,对于绝大多数用户而言,它将增强安全性。

用于 PC 的安全启动不灵活,如果您的系统以某种方式损坏,您几乎没有选择余地。它也不是为了在具有多个利益相关者的环境中进行扩展而设计的——例如,您的公司希望使用安全启动来确保不仅正确安装 Windows,而且还确保一组特定的策略执行工具。不可能开箱即用。

由于这些限制,精确地发明了可信启动,其中组件被测量但只能在以后选择性地验证。因此,尽管微软自己是定义受信任启动的标准委员会的成员,但微软需要不同的机制这一事实从技术角度来看是愚蠢的(尽管知道得更好,但做出了错误的决定)。显然,他们的目标与安全性不同。

使用安全启动的最佳方式是加载一个中立的策略执行引擎,如开源虚拟机管理程序,然后以受信任的启动方式测量和加载更多组件。这样你就拥有了所有的灵活性,但实际上并不需要硬件 TPM,只希望这个管理程序能够保持安全并正确报告正在发生的事情。该设计已为人所知多年,但 MS 当然对提供这种中性解决方案的兴趣为零。

谈到您的问题,通过正确检查谁在请求对代码进行签名,最容易保护代码的签名。这对于 99 美元的成本来说似乎是合理的。恶意软件编写者可能不会那么热衷于提供他们的 ID,而且开源引导加载程序足够稳定和安全,可以保持良好的声誉。这也意味着它对政府级别的间谍活动和即将到来的网络战争毫无帮助。客户将是唯一没有钥匙的人:-)