Skip to content

SPI flash descriptor not protected (chipsec common.spi_desc)

Yazılım SPI Flash Descriptor region'ına yazabiliyorsa, her flash region için per-master okuma/yazma izinlerini yeniden yazabilir ve böylece descriptor tabanlı tüm korumayı bypass edebilir.

Mechanism

Invariant

Flash Descriptor, SPI çipinin ilk region'ıdır. Region haritasını ve per-master access permission'larını — yani hangi bus master'ın (CPU, ME, GbE) hangi region'ı okuyup/yazabileceğini — bildirir. Controller bu izinleri Flash Region Access Permissions (FRAP) register'ı üzerinden zorlar: FRAP.BRRA (okuma erişimi) ve FRAP.BRWA (yazma erişimi). Tüm bu şema yalnızca descriptor'un kendisi OS'a karşı değiştirilemez (immutable) olduğunda sağlamdır. Invariant şudur: OS kodunu çalıştıran master, Descriptor region'ına yazma erişimine sahip OLMAMALIDIR. Eğer descriptor, host CPU'ya region 0'a (descriptor'un kendisine) yazma erişimi verirse — "genellikle debugging için kullanılan" ama "production sistemlerde olmaması gereken" bir ayar — saldırganın ring-0 kodu descriptor'u yeniden yazıp kendisine BIOS/ME region'larına yazma erişimi verir ve tüm access-control modelini çökertir.

Walkthrough

CHIPSEC'in common.spi_desc modülü, host master'ın FRAP izinleri üzerinden descriptor region'ına yazıp yazamadığını kontrol eder.

# chipsec_main -m common.spi_desc
[x][ =======================================================================
[x][ Module: SPI Flash Region Access Permissions in Descriptor
[x][ =======================================================================
[*] FRAP   = 0x...
    BRWA (Region Write Access) = 0x..
[*] Software has no write access to Flash Descriptor
[+] PASSED: SPI Flash Descriptor is read-only to software

FAIL sonucu, FRAP.BRWA'nın host master'a Descriptor region'ına yazma erişimi verdiği anlamına gelir — saldırgan region izinlerini yeniden yazıp ardından BIOS region'ına serbestçe yazabilir.

Warning

Bu hata spi_lock ve bios_wp korumalarını aynı anda işlevsiz bırakır: controller mükemmel şekilde kilitli olsa bile, controller'ın zorladığı izin tablosu saldırgan tarafından yeniden yazılabiliyorsa bu kilit anlamsızdır.

Detection

  • CHIPSEC common.spi_desc FAIL = descriptor yazılım tarafından yazılabilir.
  • FRAP'i okuyup host master'ın region 0 için ilgili bit'ini kontrol ederek doğrulayın.

Mitigation

  • Production descriptor'ları, host-CPU'nun Descriptor region'ına (ve ideal olarak ME/GbE region'larına) yazma erişimini kaldırmalı; controller'ı FLOCKDN ile kilitleyin.

References