一、前言
在计算机世界,安全是一个永恒的话题。微软的Windows的安全性一直深受诟病,但随着操作系统层面的漏洞逐渐减少,黑客们盯上了BIOS固件。那如何保证从开机到进入操作系统这个过程中的安全呢?下图是Intel CPU的整个UEFI安全启动链条,涉及到了Boot Guard、Secure Boot等技术。
Microcode验证ACM, ACM验证IBB,IBB验证OBB,而OBB后面就是本文的主题UEFI Secure Boot。
二、Secure Boot简介
UEFI Secure Boot是UEFI规范中所定义的一个功能。它保证了只有合法的第三方固件代码才能运行在OEM固件环境中。UEFI Secure Boot认为系统固件也就是BIOS是安全可信的。而任何第三方固件代码是不可信的,包括操作系统供应商(Operating System Vendor,OSV)安装的bootloader和独立的硬件供应商(Independent Hardware Vendor,IHV)提供的外围设备。终端用户可以选择注册和撤销UEFI安全引导映像安全数据库中的条目,作为管理验证策略的一部分。
UEFI安全引导包括两部分——引导映像的验证和映像安全数据库更新的验证。
下图展示了UEFI Secure Boot验证的流程。
Key Usage in UEFI Secure Boot
安全启动相关密钥如下:
自签名证书:由与证书公钥匹配的私钥签名的证书称为自签名证书。根证书颁发机构(CA)证书属于这种类别的证书。
2.1 Platform Key(PK)
平台密钥PK在平台所有者(OEM)和平台固件之间建立信任关系。平台所有者将密钥的公钥部分PKpub注册到平台固件中。此步骤将平台从设置模式转为用户模式。Microsoft建议平台密钥的类型为EFI_CERT_X509_GUID,公钥算法为RSA,公钥长度为2048位,签名算法为sha256RSA。
2.2 Key Exchange Key(KEK)
密钥交换密钥(KEK)建立了操作系统与平台固件之间的信任关系。每个操作系统(以及可能需要与平台固件通信的每个第三方应用程序)都会在平台固件中注册一个公钥(KEKpub)。
- db
EFI _IMAGE_SECURITY_DATABASE db 的内容控制在验证加载的映像时信任哪些映像。 数据库可以包含多个证书、密钥和哈希,以识别允许的映像。 - dbx
在检查 db 之前验证映像时,必须检查EFI_IMAGE_SIGNATURE_DATABASE1 dbx 的内容,一旦存在任何匹配项,就必须阻止映像的执行。 数据库可以包含多个证书、密钥和哈希,以识别禁止的映像。 Windows 硬件认证要求规定必须存在一个dbx。
下图展示了使用db/dbx的验证流程
下图展示了一个引入dbt的验证流。需要基于dbx签名进行额外的检查。
2.3 Secure Boot Modes
-
Setup Mode
Setup Mode 即设置模式,在尚未安装 PK 时将处于此模式,此模式允许操作 PK、 KEK、DB 和 DBX,系统所有者可以添加、删除或修改这些值,以控制允许在启动时执行的文件。一旦建立 PK,系统会在下次启动时自动退出设置模式并进入用户模式。 -
User Mode
User Mode 即用户模式,是指在注册 PK 后生效的 Secure Boot 操作模式,Secure Boot 策略会被强制执行。用户模式是 Secure Boot 的默认模式,通常用于生产环境中。在用户模式下,通常无法修改 Secure Boot 策略。如果需要更改策略,需要进入设置模式或审核模式。 -
Audit Mode
Audit Mode 即审核模式,其目的是收集有关 Secure Boot 检查结果的调试信息。进入审核模式后,仍然执行签名检查,但不会被禁止未授权的程序启动。管理员可以使用此模式来查看哪些启动过程部分被验证了、验证结果如何、是否存在与启动组件和策略相关的问题。 -
Deployed Mode
部署模式是最安全的模式。用户模式和审计模式支持未经身份验证就转换到部署模式。但是,要从部署模式转换成任何其他模式,需要使用特定于平台的安全方法,或者删除经过身份验证的PK。
参考
Understanding_UEFI_Secure_Boot_Chain
UEFI Spec2.10-32_Secure_Boot_and_Driver_Signing
什么是Boot Guard?电脑启动中的信任链条解析-老狼
UEFI安全启动
安全技术篇 – Secure Boot(上)
安全技术篇 – Secure Boot(下)
Windows 安全启动密钥创建和管理指南
趣话安全启动:迷思与启示