Skip to content

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 = 0 bir 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 FDOPSS 1 okunur; herhangi bir debug jumper'ını fiziksel-güvenlik kontrolü olarak değerlendirin.

References