SPI flash BIOS write-protection misconfig (BIOS_CNTL BLE / SMM_BWP)¶
BIOS_CNTL, BLE temizlenmiş, SMM_BWP/EISS set edilmemiş ya da PR register'ları BIOS region'ı kapsamayacak şekilde bırakıldığında, ring-0 software SPI flash'ın BIOS region'ına yazabilir ve firmware implant edebilir.
Mechanism¶
Invariant
SPI flash'ın BIOS region'ına yazmalar BIOS Control Register (BIOS_CNTL / BC) tarafından kapılanır:
- BIOSWE (BIOS Write Enable) — 1 olduğunda, BIOS region yazılabilirdir.
- BLE (BIOS Lock Enable) — 1 olduğunda, BIOSWE'yi set etme girişimi bir SMI üretir; SMI handler'ın BIOSWE'yi hemen tekrar temizlemesi beklenir. BLE, platform reset'ine kadar sticky'dir.
- SMM_BWP / EISS (SMM BIOS Write Protect / Enable In-SMM.STS) — 1 olduğunda, BIOS region yalnızca bir logical processor gerçekten SMM'deyken, BIOSWE'den bağımsız olarak yazılabilirdir.
- PR0–PR4 (Protected Range register'ları) — SMM'e bile read-only olan flash aralıklarını tanımlar.
Amaçlanan invariant şudur: SMM dışında, BIOS region asla yazılabilir değildir.
BLE tek başına yetersizdir (Speed Racer race'i, bkz.
speed-racer-intel-flash-protection-race-condition.md, yalnızca-BLE'yi yener) —
SMM_BWP da set edilmelidir. BLE temizse, ya da SMM_BWP set edilmemişse, ya
da PR register'ları BIOS region'ı kuşatmıyorsa, ring-0 malware BIOSWE'yi set
edip yeniden flash'layabilir ve kalıcı bir implant kurabilir
(uefi-firmware-implant-in-spi-flash.md).
Walkthrough¶
CHIPSEC'in common.bios_wp'si BLE, SMM_BWP ve PR kapsamasını kontrol eder.
# chipsec_main -m common.bios_wp
[x][ =======================================================================
[x][ Module: BIOS Region Write Protection
[x][ =======================================================================
[*] BC = 0x... << BIOS Control (b:d.f 00:31.5 + 0xDC)
[00] BIOSWE = 0
[01] BLE = 1
[05] SMM_BWP = 1
[+] PASSED: BIOS region write protection is enabled (writes restricted to SMM)
Bir FAIL BLE = 0, ya da SMM_BWP = 0 ile BLE = 1 (race'e savunmasız), ya da
BIOS region'ı kapsamayan PR register'larıdır. Canlı test için, OS'tan BIOSWE'yi
set edin ve BIOS region'ın yazılabilir hâle gelip gelmediğini gözlemleyin.
Warning
BLE = 1, SMM_BWP = 0 klasik tehlikeli durumdur: korumalı görünür ama Speed
Racer TOCTOU race'iyle yenilir. Her zaman SMM_BWP'yi şart koşun.
Detection¶
- Yukarıdaki CHIPSEC
common.bios_wpFAIL koşulları. - OS'tan BIOS region'ın başarılı bir
flashrom -w'si, korumanın eksik ya da bypass edilebilir olduğunu kanıtlar.
Mitigation¶
BLE = 1veSMM_BWP/EISS = 1'i set edin, BIOSWE'yi temizleyin ve PR0–PR4'ü BIOS region'ı kapsayacak şekilde programlayın, ardından SPI controller'ı kilitleyin (FLOCKDN).- BIOSWE yazmalarını servis eden SMI handler, BIOSWE'yi yeniden temizlemelidir.