SPI controller security override / FDOPSS (chipsec common.spi_fdopss)¶
Flash Descriptor Security Override pin-strap'i assert edildiğinde (
HSFS.FDOPSS = 0), SPI flash descriptor'ının region access permission'ları yok sayılır ve software sınırsız flash erişimi kazanır.
Mechanism¶
Invariant
SPI flash descriptor'ı çipi bölgelere (Descriptor, BIOS, ME, GbE, …) ayırır ve
per-master read/write permission'ları atar. Production hardware'inde bu
permission'lar controller tarafından uygulanır. Intel chipset'leri, üretim/debug
sırasında kullanılan, read-only status bit'i HSFS.FDOPSS (Flash Descriptor
Override Pin-Strap Status) olarak yüzeye çıkan bir Flash Descriptor Security
Override pin-strap'i sağlar. Override aktif olduğunda, controller
descriptor'ın access-control ayarlarını yok sayar ve software'in herhangi
bir bölgeyi okuyup yazmasına izin verir. Bir savunmacının dayandığı invariant
şudur: sevk edilmiş bir sistemde FDOPSS 1 olarak okunur (override aktif
DEĞİL). Bir board strap jumper'lanmış (ya da başka şekilde assert edilmiş)
olarak FDOPSS = 0 olacak şekilde sevk edilirse, descriptor-tabanlı koruma
sessizce geçersizdir — bir saldırgan (genellikle bir jumper'a kısa fiziksel
erişimle) FLOCKDN/PR'den bağımsız olarak tam flash erişimi elde eder.
Walkthrough¶
CHIPSEC'in common.spi_fdopss'i pin-strap status bit'ini okur.
# chipsec_main -m common.spi_fdopss
[x][ =======================================================================
[x][ Module: SPI Flash Descriptor Security Override Pin-Strap
[x][ =======================================================================
[*] HSFS.FDOPSS = 1
[+] PASSED: SPI Flash Descriptor Security Override is disabled
FDOPSS = 0 bir FAIL'dir: descriptor'ın region permission'ları override
ediliyordur, dolayısıyla diğer lock'lar doğru görünse bile BIOS/ME bölgeleri ardına
kadar açıktır.
Warning
Birçok platformda bu override fiziksel bir anakart jumper'ına bağlıdır. Bu
nedenle bir FDOPSS = 0 sonucu, yerinde bırakılmış bir üretim/debug strap'ini
gösterebilir, ki bu fiziksel-erişim-bitişik bir açıktır.
Detection¶
- CHIPSEC
common.spi_fdopss'i çalıştırın;FDOPSS = 0bir FAIL'dir. - Descriptor'dan flash region permission'larını okuyup controller'ın bunları gerçekten uyguladığını doğrulayarak çapraz kontrol yapın.
Mitigation¶
- Production board'larını descriptor-override strap'i de-assert edilmiş olarak sevk
edin, böylece
FDOPSS1 okunur; herhangi bir debug jumper'ını fiziksel-güvenlik kontrolü olarak değerlendirin.