保护 Windows 启动过程

Windows 具有许多功能来帮助保护你免受恶意软件的侵害,并且它非常出色。 除了企业在内部开发和使用的应用之外,所有 Microsoft Store 应用都必须满足一系列要求,才能获得认证并被纳入到 Microsoft Store 中。 此认证过程将检查包括安全性在内的一些标准,并且是防止恶意软件进入 Microsoft Store 的有效方式。 即使恶意应用确实通过,Windows 也包括一系列可以缓解影响的安全功能。 例如,Microsoft Store 应用是沙盒式应用,并且缺少访问用户数据或更改系统设置所需的权限。

Windows 还对桌面应用和数据采用多个级别的保护。 Windows Defender 防病毒使用云驱动的实时检测来识别和隔离已知为恶意的应用。 在允许用户运行即使被识别为恶意软件的不受信任的应用之前,Windows Defender SmartScreen 会向用户发出警告。 在应用更改系统设置之前,用户必须使用用户帐户控制来授予应用管理权限。

这些组件只是 Windows 保护免受恶意软件攻击的一些方法。 但是,这些安全功能仅在 Windows 启动后才能保护。 新式恶意软件(特别是 bootkit)能够在 Windows 之前启动,完全绕过操作系统安全性,并保持隐藏状态。

在具有统一可扩展固件接口的电脑上运行Windows 10或Windows 11 (UEFI) 支持,可确保受信任的启动从开机的那一刻起就保护你的电脑免受恶意软件的侵害。 这种保护会一直持续到反恶意软件接管。 如果恶意软件设法感染你的电脑,它将无法保持隐藏状态。 受信任的启动能够以恶意软件无法掩码的方式验证系统对基础结构的完整性。 即使对于没有 UEFI 的电脑,与早期 Windows 版本相比,Windows 也提供增强的启动安全性。

首先,让我们仔细看看 rootkit 及其功能。 接下来,我们将说明 Windows 如何确保你的保护。

威胁:rootkit

Rootkit 是一种复杂且危险的恶意软件。 它们使用与操作系统相同的权限在内核模式下运行。 因为 rootkit 与操作系统具有相同的权限并且在操作系统之前启动,所以它们可以完全隐藏自己和其他应用程序。 通常,rootkit 是整套恶意软件的一部分,可以绕过本地登录、记录密码和按键、传输私有文件以及捕获加密数据。

不同类型的 rootkit 在启动过程的不同阶段中进行加载:

  • 固件 rootkit。 这些套件会覆盖电脑的基本输入/输出系统或其他硬件的固件,以便 rootkit 可以在 Windows 之前启动。
  • Bootkit。 这些套件将替换操作系统的启动加载程序(启动操作系统的一小部分软件),以便电脑在操作系统之前加载 bootkit。
  • 内核 rootkit。 这些套件替换了操作系统内核的一部分,以便 rootkit 可以在操作系统加载时自动启动。
  • 驱动程序 rootkit。 这些套件假装成 Windows 与电脑硬件进行通信所使用的其中一款受信任的驱动程序。

对策

Windows 支持以下四项功能,以帮助防止启动过程中加载 rootkit 和 bootkit:

  • 安全启动。 具有 UEFI 固件和受信任的平台模块 (TPM) 的电脑可以配置为仅加载受信任的操作系统启动加载程序。
  • 受信任启动。 Windows 先检查启动过程的每个组件的完整性,然后再加载组件。
  • 开机初期启动的反恶意软件 (ELAM)。 ELAM 先测试所有驱动程序然后再进行加载,并且会阻止加载未经批准的驱动程序。
  • 测量的启动。 电脑的固件记录启动过程,Windows 可以将记录发送到受信任的服务器,此服务器能够客观地评估电脑的运行状况。

图 1 显示了 Windows 的启动过程。

显示 Windows 启动过程的屏幕截图。

图 1. 安全启动、受信任启动和测量的启动功能可在每个阶段阻止恶意软件:

安全启动和测量的启动只能在具有 UEFI 2.3.1 和 TPM 芯片的电脑上进行。 幸运的是,满足 Windows 硬件兼容性计划要求的所有 Windows 10 和 Windows 11 电脑都具有这些组件,并且许多为早期版本的 Windows 设计的电脑也具有这些组件。

以下部分介绍了安全启动、受信任启动、ELAM 和测量的启动。

安全启动

电脑启动时,它会首先找到操作系统启动加载程序。 无安全启动功能的电脑运行电脑硬盘上的任何启动加载程序。 电脑无法判断它是受信任的操作系统还是 rootkit。

配备有 UEFI 的电脑启动时,电脑首先验证固件是否经过了数字签名,从而减少了固件 rootkit 风险。 如果启用了安全启动,则固件会检查启动加载程序的数字签名以验证它是否未被修改。 如果启动加载程序未被改动,则只有满足以下条件之一时,固件才会启动此启动加载程序:

  • 使用受信任证书对启动加载程序进行了签名。 对于通过 Windows 认证的电脑,Microsoft 证书是受信任的。
  • 用户手动批准了启动加载程序的数字签名。 此操作可以让用户加载非 Microsoft 操作系统。

所有基于 x86 的 Windows 认证的计算机都必须满足与安全启动相关的一些要求:

  • 默认情况下,它们必须启用安全启动。
  • 它们必须信任 Microsoft 的证书(因此信任经过 Microsoft 签名的任何启动加载程序)。
  • 它们必须允许用户将安全启动配置为信任其他启动加载程序。
  • 它们必须允许用户彻底禁用安全启动。

这些要求有助于保护你免受 rootkit 的攻击,同时允许你运行所需的任何操作系统。 你可以使用以下三个选项来运行非 Microsoft 操作系统:

  • 将操作系统与认证的启动加载程序配合使用。 因为所有 Windows 认证的电脑都必须信任 Microsoft 的证书,所以 Microsoft 提供了一项服务来分析和签署任何非 Microsoft 启动加载程序,以便所有 Windows 认证的电脑都将信任它。 事实上,已经有了能够加载 Linux 的开源启动加载程序。 若要开始证书获取过程,请转到 https://partner.microsoft.com/dashboard
  • 将 UEFI 配置为信任自定义的启动加载程序。 所有 Windows 认证的电脑都允许你将签名添加到 UEFI 数据库来信任未认证的启动加载程序,并允许你运行任何操作系统,包括自制的操作系统。
  • 关闭安全启动。 所有 Windows 认证的电脑都允许你关闭安全启动,以便你能够运行任何软件。 但是,此操作不会帮助保护你免受 bootkit 的攻击。

为了防止恶意软件滥用这些选项,用户必须将 UEFI 固件手动配置为信任未认证的启动加载程序或关闭安全启动。 软件无法更改安全启动设置。

安全启动的默认状态具有广泛的信任圈,这可能导致客户信任他们不需要的启动组件。 由于 Microsoft 第三方 UEFI CA 证书对所有 Linux 分发版的启动加载程序进行签名,因此信任 UEFI 数据库中的 Microsoft 第三方 UEFI CA 签名会增加系统的攻击面。 打算仅信任和启动单个 Linux 分发版的客户将信任所有分发版 -- 远比所需的配置要多得多。 任何启动加载程序都会有漏洞使系统暴露,并使客户面临从未计划使用的启动加载程序被利用的风险,如最近的漏洞中所示,例如 GRUB 启动加载程序或影响启动组件的固件级 rootkit安全核心电脑要求启用安全启动并将其配置为默认情况下不信任 Microsoft 第三方 UEFI CA 签名,以便为客户提供可能的最安全的电脑配置。

若要信任和启动操作系统(如 Linux)以及由 UEFI 签名的组件,可以在 BIOS 菜单中配置安全核心电脑,以便按照以下步骤在 UEFI 数据库中添加签名:

  1. 打开固件菜单,可以:
    • 启动电脑,然后按制造商的键打开菜单。 常用键:Esc、Delete、F1、F2、F10、F11 或 F12。 在平板电脑上,常用按钮为“调高音量”或“调低音量”。 在启动期间,通常会出现一个提及键的屏幕。 如果没有,或者屏幕运行速度太快,无法查看,请检查制造商的站点。
    • 或者,如果 Windows 已安装,请在“登录”屏幕或“开始”菜单中选择“电源( )”> 选择“重启”时按住 Shift。 选择“疑难解答”>“高级选项”>“UEFI 固件设置”。
  2. 在固件菜单中,导航到“安全启动” > ,然后选择信任“第三方 CA”的选项。
  3. 保存更改并退出。

Microsoft 继续与 Linux 和 IHV 生态系统合作伙伴协作,设计最小特权功能,帮助你仅信任的发布者和组件保持安全且可选择加入信任。

像大多数移动设备一样,基于 ARM 的设备(如 Microsoft Surface RT 设备)只适合运行 Windows 8.1。 因此,无法关闭安全启动,并且无法加载其他操作系统。 幸运的是,适合运行其他操作系统的 ARM 处理器设备有较大的市场。

受信任的引导

受信任启动将接管安全启动结束的工作。 启动加载程序将先验证 Windows 内核的数字签名,然后再加载它。 Windows 内核反过来验证 Windows 启动过程的其他每个组件,包括启动驱动程序、启动文件和 ELAM。 如果文件已被修改,则启动加载程序会检测到问题并拒绝加载损坏的组件。 通常,Windows 可以自动修复损坏的组件,并且能够恢复 Windows 的完整性,并允许电脑正常启动。

开机初期启动的反恶意软件

因为安全启动已经保护了启动加载程序,受信任启动已经保护了 Windows 内核,所以恶意软件启动的下一个机会就是感染非 Microsoft 启动驱动程序。 传统的反恶意软件应用直到加载启动驱动程序之后才会启动,因此使伪装成驱动程序的 rootkit 有机会发挥作用。

开机初期启动的反恶意软件 (ELAM) 可以在所有非 Microsoft 启动驱动程序和应用程序之前加载 Microsoft 或非 Microsoft 反恶意软件驱动程序,因此可以继续形成安全启动和受信任启动所建立的任信链。 因为操作系统尚未启动,并且 Windows 需要尽快启动,所以 ELAM 具有一个简单的任务:检查每个启动驱动程序,并确定它是否在受信任的驱动程序的列表中。 如果它不受信任,Windows 不会加载它。

ELAM 驱动程序不是一个稍后在启动过程中加载的功能齐全的反恶意软件解决方案。 Windows Defender(包含在 Windows 中)支持 ELAM,一些非 Microsoft 反恶意软件应用也支持 ELAM。

测量的启动

如果你组织中的电脑真的被 rootkit 感染,则你需要了解情况。 企业反恶意软件应用可能会向 IT 部门报告恶意软件感染,但这对隐藏存在状态的 rootkit 不起作用。 换言之,你不能相信客户端告诉你的运行状况。

因此,即使正在运行反恶意软件,感染了 rootkit 的电脑看上去仍然正常。 受感染的电脑会继续连接到企业网络,使 rootkit 能够访问大量机密数据,并可能允许 rootkit 在整个内部网络中传播。

测量启动适用于 Windows 中的 TPM 和非 Microsoft 软件。 它允许网络上的受信任服务器验证 Windows 启动过程的完整性。 测量的启动使用以下过程:

  1. 电脑的 UEFI 固件在 TPM 中存储固件、启动加载程序、启动驱动程序以及反恶意软件应用之前加载的所有内容的哈希。
  2. 在启动过程结束时,Windows 将启动非 Microsoft 远程证明客户端。 受信任的证明服务器会向客户端发送一个唯一密钥。
  3. TPM 使用此唯一密钥对 UEFI 记录的日志进行数字签名。
  4. 客户端会向服务器发送日志,其中可能包含其他安全信息。

根据实现和配置,服务器现在可以确定客户端是否正常运行。 它可以向客户端授予对受限隔离网络或完整网络的访问权限。

图 2 说明了测量的启动和远程证明过程。

显示测量启动和远程证明过程的屏幕截图。

图 2. 测量启动会向远程服务器证明电脑的运行状况:

Windows 包括支持测量启动的应用程序编程接口。 但是,若要利用它,需要非 Microsoft 工具来实现远程证明客户端和受信任的证明服务器。 例如,请参阅 Microsoft Research 中的以下工具:

测量启动使用 UEFI、TPM 和 Windows 的强大功能,为你提供了一种方法来自信地评估整个网络中客户端电脑的可信度。

摘要

安全启动、受信任启动和测量的启动可创建一个从根本上抵御 bootkit 和 rootkit 的架构。 在 Windows 中,这些功能可能会从网络中消除内核级别的恶意软件。 借助 Windows,可以信任操作系统的完整性。