【问题标题】:Bios loading procedureBios 加载程序
【发布时间】:2015-11-07 21:14:26
【问题描述】:

我需要一些关于 bios 加载/执行过程的解释。我需要验证 CPU 执行的 bios。我的想法是执行 MISO 数据流的 HMAC-SHA1(从 SPI BIOS 闪存到 CPU 的数据)。

问题是我不确定 MISO 数据流是否始终相同。我做了一些尝试,我总是得到与前一个不同的数据流。流的第一部分总是相同的,过了一段时间(我没有设备来转储整个通信并获得它发生的时刻)流是不同的。我不确定,但我怀疑它是不同的,因为当计数器达到指定值并且我得到不同的嗅探值时,我可以嗅探流的几个字节。我认为嗅探过程是正确的,但我不能确定(嗅探是由 CPU 和 SPI BIOS FLASH 之间的 FPGA 执行的,我编写了 VHDL)。

我还注意到,在执行 bios 期间,CPU 至少读取了 2 次重置向量 (0hFFFFF0)。

CPU 是否有可能在每次开机时执行不同的步骤?您认为是否可以对数据流进行身份验证?我需要确保执行的 bios 是有效的 bios ( my bios )。

如果问题一团糟,我很抱歉,但我对 BIOS 和启动过程的了解很差。

感谢您的帮助。

【问题讨论】:

    标签: authentication boot bios spi uefi


    【解决方案1】:

    是的,系统通常在上电后会重置几次,并且 BIOS 采用不同的执行路径。此外,SPI 控制器可能会分块读取闪存部分并将其缓存,因此您看到的从闪存读取的内容不一定是 CPU 执行的内容。不幸的是,您的方法并不可靠,并且有一种行业标准方法可以做到这一点,它被称为测量启动,它涉及 TPM。请谷歌它以获得一个想法,看看它是否适合你的需要。

    【讨论】:

    • 我读过一些关于 TPM 的文章,但问题是它是一个我不能使用的选项。我已经阅读了一些关于 UEFI 处理启动的文档,我得到了一些有趣的东西。 UEFI bios 执行的第一件事是 SEC 阶段。 SEC 阶段初始化 CPU 并执行 bios 的完整性检查。在您看来,如果我找到一种方法来验证该部分,那么认为我的系统的信任根是否安全?
    • 我认为 SEC 代码不会检查整个 BIOS 的完整性,因为它需要了解固件卷 (FV) 布局和访问加密功能 - 这些可能在 PEI 阶段可用,但不是 SEC。如果您想将 SEC 视为您的信任根,那么它需要建立一个信任链 - 例如。至少验证引导块,通常是PEI代码,然后确保验证的PEI代码验证DXE阶段代码等,以确保所有可执行组件都是真实的。
    • 您还需要确保您认证的 FV 没有任何合法更改的数据,只有可执行代码。也可能有 BIOS FV 之外的组件,例如选项 ROM,通常应签名。如果您可以对 BIOS POST 期间执行的所有代码(作为链或整体进行身份验证)进行身份验证,则可以将其称为受信任的。
    猜你喜欢
    • 2021-05-21
    • 2012-01-30
    • 2015-11-17
    • 2016-06-22
    • 2018-01-26
    • 2021-06-28
    • 2014-11-11
    • 1970-01-01
    • 2010-11-06
    相关资源
    最近更新 更多