Security 如何以编程方式从UEFI读取ThunderBolt固件

Security 如何以编程方式从UEFI读取ThunderBolt固件,security,firmware,pci,uefi,Security,Firmware,Pci,Uefi,ThunderBolt固件存储在自己的SPI闪存中,可从操作系统进行更新。系统的UEFI固件还可以访问闪存中的配置数据-用户可以在预引导期间从固件设置菜单更改ThunderBolt安全级别(SL)。这意味着肯定有办法通过某种UEFI协议访问ThunderBolt固件,但我尝试过的任何方法似乎都不起作用 我试过的 我能够使用EFI\u PCI\u IO\u协议根据供应商ID和设备ID成功识别ThunderBolt设备 我最初认为固件是一个可选ROM,因此应该可以通过EFI\u PCI\u IO\u

ThunderBolt固件存储在自己的SPI闪存中,可从操作系统进行更新。系统的UEFI固件还可以访问闪存中的配置数据-用户可以在预引导期间从固件设置菜单更改ThunderBolt安全级别(SL)。这意味着肯定有办法通过某种UEFI协议访问ThunderBolt固件,但我尝试过的任何方法似乎都不起作用

我试过的 我能够使用
EFI\u PCI\u IO\u协议
根据供应商ID和设备ID成功识别ThunderBolt设备

我最初认为固件是一个可选ROM,因此应该可以通过
EFI\u PCI\u IO\u PROTOCOL.RomImage
访问。但是,该值为0。然后我认为PCI配置空间内的扩展ROM基址寄存器(XROMBAR)可能有它。但是XROMBAR也是0。通过使用硬件程序员读取SPI闪存来提取固件,我发现它没有选项ROM的签名0xAA55和“PCIR”。因此,似乎固件不是一个选项ROM

然后我认为它可以存储在固件卷中,因此应该可以通过
EFI\u firmware\u VOLUME2\u协议
访问。我搜索了所有固件卷,找到了一些可选ROM,但没有一个属于ThunderBolt(从其供应商ID和设备ID可以看出)

背景
我正在查看漏洞,报告指出ThunderBolt固件在引导期间未经验证。我认为这是不寻常的,因为我当时的想法是固件应该是一个选项ROM,并且选项ROM必须在每次引导期间通过安全引导进行签名和验证。从我目前的发现来看,固件似乎不是可选ROM,很可能直接在ThunderBolt控制器芯片上执行,而不是在CPU上执行,因此它不属于安全引导的范围。我正在尝试以编程方式访问固件,以查看是否有方法抵御对固件进行恶意修改的雷霆式攻击。

SPI
标记在这里是错误的。Thunderbolt使用自己与芯片的连接。您需要澄清在Thunderbolt固件下的确切含义(很少)。@0andriy您能详细说明一下Thunderbolt固件的不同类型吗?我参考了Thunderpy,研究人员从Macronix MX25R8035F闪存芯片中提取了Thunderbolt控制器固件。这就是我感兴趣的固件。看见