安全启动(SecureBoot)使用非对称加密与数字签名技术提供了一种从硬件到操作系统的安全启动信任链。本文介绍了系统固件、OS Loader、证书、密钥及之间的沟通流程。在windows下下可以使用如下命令获取PK,KEKdb、dbx、SetupMode、SecureBoot、PKDefault、KEKDefault、dbDefault、dbt、dbtDefault等全局变量的值。

例如:当前系统的SetupMode的NV值是0,表示工作在user模式。

平台密钥Platform Key (PK):
- PK分为PKpub 和PKpriv,前者保存在系统固件用来验证其他模块,后者用来对其他模块签名。
- 公钥作为机器所有者与系统固件之间信任链。也作为系统所有者身份证明,系统固件里面注入PK就意味着PK的所有者就拥有对机器的控制权。
- PK可以被注入到系统固件,注入之后就从设置模式(SetupMode)变成用户模式(UserMode)
- 微软建议使用2048 bit RSA算法, PK名为EFI_CERT_X509_GUID或EFI_CERT_RSA2048_GUID
- 修改PK之前必须先关闭SecureBoot否则不能操作。
- PK分为平台PK和安全固件更新PK,一个使用来验证KEK一个用来验证固件更新,二者需不同。
- 通过使用SetVariable()服务来注入和修改PK,重启后生效,修改PK时候需要确保KEK, db, and dbx不被修改和删除。
- 若系统处于User模式被当前PKpriv签名的“新PKpub”才允许对当前PKpub进行更新,此时PKpub是可读可写;
- 若处于Setup模式PKpub也是可读可写,则不需要使用当前PKpriv签名。在任何其他状态PKpub是只读。PKpriv还被用来对Key Exchange Key进行签名。
- PK可以选择每UUT/Model/ProductLine/OEM使用同样的值。
交换密钥Key Exchange Key (KEK):
- KEK是操作系统与系统固件信任链,KEK决定机操作系统与系统固件的关系,系统固件里面注入KEK就意味着KEK的所有者就拥有对操作系统的控制权。
- 任何需要与系统固件沟通的操作系统loader或APP需要往系统固件里注入其KEKpub。
- 操作系统能够合法启动的前提是要先在系统固件里面注入对应的KEK及db数据库。
- 使用UEFI的SetVariable()服务写入NVRAM区域,当处于用户模式时,写入的KEKpub必须是被当前系统已存的PKpriv签名。
- KEKpri用来更新db和dbx
- 微软提供的KEK包含Microsoft Corporation KEK CA 2011 in the KEK database,用来禁止某些不合法的OS加载以及添加新版OS的支持。
- 可以在微软官网下载 https://go.microsoft.com/fwlink/?LinkId=321185.
默认交换密钥KEKDefault
- UEFI Spec默认的KEK仅作为测试使用。
第三方交换密钥OEM/3rd party KEK
- 第三方用户添加的KEK,一般不使用。
- 安全固件更新密钥Secure Boot firmware update key(Ksbfu)
- RSA-2048格式的证书,用来对进行系统升级的固件进行签名,确保被固件更新的是可信的。
- NIST规定了BIOS Protection Guidelines
- PKsbfu可以选择每UUT/Model/ProductLine/OEM使用同样的值
- PKsbfu存储在系统固件的安全区域,更新固件时用PKsbfu来验证固件是否可信
- 也可以存储PKsbfu的哈希值,更新固件时需要同时提供固件和PKsbfu,更新过程校验哈希值
- 白名单数据库Allowed Signature database (db)
- 存储在系统固件区域的 EFI_IMAGE_SECURITY_DATABASE类型数据库包含了大量的证书,密钥及哈希值
- Windows系统Microsoft Windows Production PCA 2011须包含在数据库以此运行windows OS Loader被加载
- 非Windows系统需包含Microsoft Corporation UEFI CA 2011以此来验证第三方APP和Loader
- 第三方证书
- OPROM、EFI APP、UEFI Drivers需要使用包含在db里面的密钥进行签名,或其hash值包含在db当中,否则不能被执行。
- 包含在系统固件(BIOS)当中的UEFI driver或app不需要签名,默认就是安全的
- 默认白名单数据库DbDefault:
- UEFI Spec默认的Db仅作为测试使用。
- 黑名单数据库Forbidden Signature Database (dbx)
- 存储在系统固件区域的EFI_IMAGE_SIGNATURE_DATABASE1 类型数据库包含大量的证书,密钥及哈希值
- 系统固件需先校验dbx再校验db,拒绝不合法的固件被加载执行
- Windows HCK不允许dbx为空,默认可以用SHA-256 hash of 0替代,直到正确的dbx被注入
- 默认黑名单数据库DbxDefault
- UEFI Spec默认的Db仅作为测试使用。
| key/db Name | Variable | Owner | Notes |
| PKpub | PK | OEM | PK – 1 only. Must be RSA 2048 or stronger. |
| Microsoft Corporation KEK CA 2011 | KEK | Microsoft | Allows updates to db and dbx: |
| Microsoft Windows Production CA 2011 | db | Microsoft | This CA in the Signature Database (db) allows Windows to boot: https://go.microsoft.com/fwlink/?LinkId=321192. |
| Forbidden Signature Database | dbx | Microsoft | List of known bad Keys, CAs or images from Microsoft |
| Secure firmware update key | OEM | Recommendation is to have this key be different from PK |

SecureBoot工作模式:
- 系统有以下几种模式,当PK被注入就是且AuditMode == 0则系统为User模式。
- 使用SetVariable()修改NV区域的全局变量来改变模式。

数字签名过程
- 原始信息如UEFI driver或OS loader进行哈希算法得到一个唯一的哈希值
- 用RSA-2048算法的私钥对哈希值进行加密
- 合并原始信息和第二步的加密信息,得到经过签名的数据
数据签名校验过程:
- 从带签名数据里面分离出原始数据和数字签名
- 对原始数据进行哈希算法得出哈希值A
- 对数字签名部分用公钥进行解密得到哈希值B
- 若A与B相同,则表示数据是合法,否则是非法
密钥管理及密钥分发
对政企和某些保密性要求较高的应用场景需要开启secureboot,同时需要保证各种密钥的绝对安全,我们需要一种称之为公钥基础设施Public-Key Infrastructure (PKI) 来生成,保持及分发密钥。
对PKI的选择需要用以下几点来评估:
公钥基础设施Public-Key Infrastructure (PKI) 提供的服务和选择标准:
- PKI为目标机器提供认证保证目标机器的安全,如在开机过程POST过程去校验我们的OS或者OS loader,EFI APP是否是可信的
- 提供对目标机器的secureboot数据库的修改,目标机器固件的升级,如PK,DB,KEK生成,签名
- 提供作为证书颁发机构certificate authority (CA),提供数字签名
- 验证从CA请求证书的用户的身份的注册机构
- 提供数据中心用来存储和密钥索引
- 提供证书管理系统
- 是否支持RSA 2048及以上级别的加密算法
- 是否支持密码生成与数字签名
- 最大可存储的密钥数量是多少,密钥是存储在HSM还是存储在其关联的服务器
- 密钥检索的认证方法
- 价格水平
- 生产过程中,密钥生成速度,环境设置,网络可靠性,维护及开发成本
- 标准兼容性,支持哪些标准和APIs
- 可靠性,密钥备份,容灾恢复
密钥管理及密钥分发设备分类:
- 硬件安全模块Hardware Security Module (HSM),FIPS 140-2 level 3 compliance
- 在线硬件安全模块Network HSM
- 离线独立硬件安全模块Standalone HSM,可以使用Microsoft CAPI 、CNG 安全API
- 用户自定义硬件安全模块Custom solutions providers,包括IBV(BIOS vendors),HSM vendors及其他嫩提供类似服务的机构
- 可以使用微软的工具makecert -pe -ss MY -$ individual -n "CN=your name here" -len 2048 -r创建密钥,但不安全,不建议使用。
Secure Boot and 3rd party signing
- 第三方的非微软OS loader可以使用下面的证书进行签名证书名:MicCorUEFCA2011_2011-06-27.crt 下载链接: https://go.microsoft.com/fwlink/p/?LinkID=321194
- 通过Windows HCK Secure Boot tests软软可以对 UEFI driver进行签名
- 密钥生成和注入流程:
- 确保安全的从HSMs获取到PK 以及固件跟新密钥 (Firmware Update Key)及其证书(certificates)
- 建议每个产品型号申请个公钥(PK),和固件跟新密钥(Firmware Update Key)
- 获取微软KEK, Db, Dbx,最新版本是Microsoft Corporation KEK CA 2011、Microsoft Windows Production CA 2011、dbx默认空windows会在系统第一次重启的时候自动更新到dbx
- 其他OEM/3rd party KEK db, dbx 以及其他需要加入OEM Db的密钥
- 安装windows系统到目标产品上,并安装微软db及dbx到OS
- 安装Microsoft Windows Production PCA 2011 微软db.
- 安装微软dbx,如果没有微软dbx就安装一个空的dbx
- 安装微软KEK到UEFI KEK database,使用Windows HCK 工具或BIOS IVB提供的工具(如在BIOS setup添加)
- 如果需要OEM/3rd的KEK, db and dbx的话进行下面2个步骤
- 使用 HSM API用OEM/3rd party KEK对 OEM/3rd party db and dbx 进行签名
- 安装OEM/3rd party KEK, db and dbx.
- 安装”Microsoft Corporation UEFI CA 2011“ 到 UEFI db.
- 安装”Secure Boot firmware update key“ 到 UEFI 或其hash值
- 安装OEM/ODM PKpub到 UEFI PK
- 使用Secure Boot API登记部署PK ,这时Secure Boot就会变成enable
- 最后安装PK的话就不需要先对微软的 MS或第三方 KEK, db, dbx 进行签名,否则如果机器上有PK,就需要用机器上已有的PK对 MS KEK, db, dbx 否则 MS KEK, db, dbx 会安装不成功。
- 使用Windows HCK对secureboot进行测试
- 通过测试就可以贴上对应的认证证书出货,PKpriv不再需要,需要妥善保管
- 固件更新的时候,被更新的固件需要使用Secure Boot firmware update key签名
安全固件更新Secure Firmware Update
- 系统固件创建ACPI ESRT提供给OS,既可以是系统固件也可以是其他固件如:EC,OPROM
- 用户在OS下设备管理器或其他方式下载固件放到特定区域(内存或硬盘ESP分区)并热重启
- OS loader在ExitBootServices()之前传递固件信息并调用UpdateCapsule()通知系统固件更新
- 系统固件自行完成固件更新
一般的固件更新流程Typical firmware update Workflow
- Download and install the firmware driver.
- Reboot.
- OS Loader detects and verifies the firmware.
- OS Loader passes a binary blob to UEFI.
- UEFI performs the firmware update (This process is owned by the silicon vendor).
- OS Loader detection completes successfully.
- OS finishes booting.
微软windows的固件更新流程Windows In-memory update capsule
- A capsule is put in memory by an application in the OS
- Mailbox event is set to inform BIOS of pending update
- PC reboots, verifies the capsule image and update is performed by the BIOS
转载请注明出处,或可关注微信公众号:固件C字营
Cstyle.z.zhou@outlook.com // http://blog.youkuaiyun.com/CStyle_0x007

参考文档:
本文详细介绍了UEFI Secure Boot的工作原理,包括安全启动的信任链、PK、KEK、db和dbx等关键概念。通过非对称加密与数字签名技术,Secure Boot确保了从硬件到操作系统的安全启动。文中还阐述了密钥管理和固件更新流程,强调了安全启动在政企和保密应用中的重要性。
1万+

被折叠的 条评论
为什么被折叠?



