安全启动

安全启动是统一可扩展固件接口(UEFI)的一项功能,在加载之前验证所有低级别固件和软件组件。 在启动过程中,UEFI 安全启动会检查每个启动软件的签名,包括 UEFI 固件驱动程序(也称为 ROM 选项)、可扩展固件接口 (EFI) 应用程序以及操作系统驱动程序和二进制文件。 如果签名有效或被原始设备制造商(OEM)信任,机器启动,固件将控制权交给操作系统。

组件和过程

安全启动依赖于以下关键组件:

  • 平台密钥 (PK) - 在平台所有者 (Microsoft) 和固件之间建立信任。 公共部分是 PKpub,而专用部分是 PKpriv。
  • 密钥注册密钥数据库 (KEK) - 在 OS 和平台固件之间建立信任。 公共部分是 KEKpub,而专用部分是 KEKpriv。
  • 签名数据库 (db) - 包含经授权可与平台固件交互的固件和软件代码模块的受信任签名者(公共密钥和证书)的摘要。
  • 撤销签名数据库(dbx)——保存OEM认定为恶意、易受攻击、被攻破或不信任的代码模块摘要。 如果某个哈希值同时存在于签名数据库和已撤销签名数据库中,则已撤销签名数据库优先。

下图和流程解释了OEM如何更新这些组件:

安全启动流程示意图,显示系统启动时签名数据库和密钥交换验证。

OEM 在制造时将安全启动摘要存储在计算机的非易失性 RAM (NV-RAM) 中。

  1. OEM 会将 UEFI 应用程序、操作系统加载器(如 Microsoft 操作系统加载器或启动管理器)以及受信任的 UEFI 驱动程序的签名器或映像哈希填充到签名数据库中。
  2. OEM 会将不再受信任的模块摘要填充到已撤销签名数据库 dbx 中。
  3. OEM会在密钥注册密钥(KEK)数据库中填充签名密钥,这些密钥可以更新签名数据库和撤销签名数据库。 实际在场的授权用户可以通过使用正确密钥签名的更新或使用固件菜单编辑数据库。
  4. 在OEM添加db、dbx和KEK数据库并完成最终固件验证和测试后,OEM会锁定固件编辑权限,并生成平台密钥(PK)。 OEM 可以使用 PK 对 KEK 更新进行签名,或禁用安全启动。

在启动过程的每个阶段,系统计算固件、引导加载程序、操作系统、内核驱动及其他启动链伪造物的摘要,并将其与可接受的数值进行比较。 系统不允许被发现不信任的固件和软件加载。 安全启动可以阻止低级别恶意软件注入或预启动恶意软件攻击。

Azure 机群上的安全启动

如今,所有部署到Azure计算车队以承载客户工作负载的机器,都是从启用安全启动的工厂生产的。 在硬件构建和集成流程的每个阶段都配备了针对性的工具和流程,确保进程不会因意外或恶意而回退安全启动启用。

验证 db 和 dbx 摘要正确无误可确保:

  • 引导加载程序存在于数据库中的一个条目中。
  • 引导加载程序的签名是有效的。
  • 主机启动时使用可信软件。

验证 KEKpub 和 PKpub 的签名确认,只有受信任方有权修改可信软件的定义。 最后,确保安全启动处于激活状态,验证系统是否执行这些定义。

后续步骤

想了解更多关于Microsoft如何推动平台完整性和安全的信息,请参见: