安全启动过程中使用的数据存储在哪里?

安全启动过程中使用的数据存储在哪里?

我花了很多时间研究和阅读这个主题,但现在我感到非常困惑。

我读到过计算机制造商包含一些 Microsoft 密钥。例如,Microsoft Corporation UEFI CA 似乎是一个密钥,它以某种方式允许系统启动到 Microsoft 签名的 Linux 发行版。我想了解这些密钥存储在哪里。例如,它在你的硬盘上吗?安全启动过程中的其他数据从哪里读取?安全启动经历了哪些步骤?

如果我使用了一些错误的术语,请见谅。我已经尽力了。

答案1

您的主板有少量内置存储空间,主要保存“BIOS 设置”(如启动顺序)——过去被称为“CMOS 内存”,现在通常称为“NVRAM”,容量稍大一些。

从物理上讲,它只是某种“闪存”存储器或者可能是 EEPROM(我不知道是哪种),固件可以读取/写入,但操作系统不能 - 至少不能直接读取/写入。

在 UEFI 类型的固件中,存储在 NVRAM 中的数据按“EFI 变量”和固件结构进行组织允许操作系统访问它们 - 但仍然只能通过固件提供的功能,而不是直接在块级别访问。(这很像操作系统允许您的常规应用程序使用 HDD/SSD,但只能通过文件管理功能 - 它会进行权限检查等。)

UEFI 中的操作系统列表作为“EFI 变量”存储在主板的 NVRAM 中 - 安装操作系统时,它会调用固件功能来创建一个名为Boot0002或类似的变量,并带有指定的数据。

安全启动设置大致相同。有一个名为的变量db列出了允许签署操作系统的证书(MS UEFI CA 证书存储在数据库中),唯一特别的是固件要求新值本身经过数字签名。

在启动时,会根据“db”中列出的证书验证初始操作系统文件;对“db”的更新必须使用“KEK”中的证书进行签名,并且根据“PK”验证对该证书的更新。(固件设置屏幕可以绕过这些检查,并让导入任何证书 – 但操作系统不能。)

如果您运行的是 Linux,请查看/sys/firmware/efi,您将找到当前存储在 NVRAM 中的 EFI 变量列表,包括安全启动使用的变量。您还可以使用诸如efi-readvar转储安全启动证书的格式化列表或efibootmgr -v列出启动选项之类的工具 - 它们都通过 Linux 提供的 /sys 接口从 EFI 获取数据。(Windows 中有类似的 PowerShell 工具。)


关于 TPM 的注意事项 – 虽然一些制造商可能将一些 SB 相关参数放入 TPM 自己的 NVRAM 中,这不是必需的;这只是制造商遵守防篡改要求的一种可能方式,但大多数安全启动实现根本不以这种方式使用 TPM。(事实上,许多甚至没有 TPM。)

安全启动仅涉及 TPM,因为当前状态被附加到其事件日志并散列到“PCR”寄存器中 - 它们都保存在易失性RAM中,其目的是测量每次单独的启动,而不是持久存储。

答案2

UEFI 安全启动是 UEFI 规范中定义的一项功能。它保证只有有效的第三方固件代码才能在原始设备制造商 (OEM) 固件环境中运行。UEFI 安全启动假定系统固件是受信任的实体。任何第三方固件代码都不可信,包括操作系统供应商 (OSV) 安装的引导加载程序和独立硬件供应商 (IHV) 提供的外围设备。

相关内容