绕过BIOS/UEFI固件写保护写入SPI闪存

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

针对Bootkit:LoJax或MosaicRegressor和TrickBot等开始进行固件感染方式的病毒逐渐增多而作笔记整理。
对主板上的SPI闪存芯片中存储的UEFI固件的所有请求都将通过SPI控制器,该控制器是Intel平台上的Platform Controller Hub(PCH)的一部分。可以通过PCI设备驱动访问PCI总线配置空间可以获取PCH的值。

用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 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

摔不死的笨鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值