针对Bootkit:LoJax或MosaicRegressor和TrickBot等开始进行固件感染方式的病毒逐渐增多而作笔记整理。
对主板上的SPI闪存芯片中存储的UEFI固件的所有请求都将通过SPI控制器,该控制器是Intel平台上的Platform Controller Hub(PCH)的一部分。可以通过PCI设备驱动访问PCI总线配置空间可以获取PCH的值。
绕过BIOS/UEFI固件写保护写入SPI闪存
用I/O命令访问PCI总线配置空间
系统中的CPU是通过PCI设备的设备号以及配置空间中的寄存器编号来访问配置空间寄存器的。
PCI有三个相互独立的物理地址空间:设备存储器地址空间、I/O地址空间和配置空间。
配置空间是PCI所特有的一个物理空间。由于PCI支持设备即插即用,所以PCI设备不占用固定的内存地址空间或I/O地址空间,而是由操作系统决定其映射的基址。系统加电时,BIOS检测PCI总线,确定所有连接在PCI总线上的设备以及它们的配置要求,并进行系统配置。所以,所有的PCI设备必须实现配置空间,从而能够实现参数的自动配置,实现真正的即插即用。
要访问PCI总线设备的配置空间,必须先查找该设备。查找的基本根据是各PCI设备的配置空间里都存有特定的设备号(Device ID)及销售商号(Vendor ID),它们占用配置空间的00h地址。而查找的目的是获得该设备的总线号和设备号。查找的基本过程如下:用I/O命令写配置空间的地址寄存器(CONFIG_ADDRESS)CF8h,使其最高位为1,总线号及设备为0,功能号及寄存器号为0,即往I/O端口CF8h80000000h;然后用I/O命令读取配置空间的数据寄存器(CONFIG_DATA)CFCh。如果该寄存器值与该PCI设备的Device ID及Vendor ID不相符,则依次递增设备号/总线号,重复上述操作直到找到该设备为止。如果查完所有的设备号/总线号(1~5)仍不能找到该设备,则应当考虑硬件上的问题。对于多功能设备,只要设备配置寄存器相应的功能号值,其余步骤与单功能设备一样。
CONFIG_ADDRESS寄存器格式:
31

本文详细介绍了如何绕过BIOS/UEFI固件的写保护,以写入SPI闪存。讨论了通过I/O命令访问PCI总线配置空间来控制PCH,解释了BIOS控制寄存器BIOS_CNTL的字段,以及攻击者如何感染UEFI固件。此外,还阐述了读写SPI闪存的过程,包括读取和验证SPI闪存内容的方法。
订阅专栏 解锁全文
1万+

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



