Skip to content

Boot Guard TOCTOU vulnerability (IBB measurement race)

Intel Boot Guard'da IBB'nin CPU cache'inde hash'lendiği ama execute etmek için sonradan SPI flash'tan re-fetch edildiği bir time-of-check-to-time-of-use race; böylece SPI erişimi olan bir saldırgan, pencerede flash içeriğini değiştirip hâlâ geçerli bir measurement altında doğrulanmamış code çalıştırabilir.

Mechanism

Note

Intel Boot Guard, boot chain'i erken çalışan ve platform kontrolü ona devretmeden önce Initial Boot Block (IBB)'yi measure/verify eden bir Authenticated Code Module (ACM)'de köklendirir. Örtük invariant time-of-check, time-of-use'a eşittir: hash'lenen byte'lar execute eden byte'larla aynı olmalıdır. Zafiyet (CVE-2019-11098, başlangıçta EDK II / EDK II referans firmware'inde bulundu) bu invariant'ı kırar. ACM, IBB'yi CPU'nun last-level cache'ine bir non-eviction mode (NEM / CAR, cache-as-RAM) ile yükler ve hash'ini orada hesaplar, ama sonraki code IBB'yi execute etmek için onu tekrar SPI flash'tan fetch eder. Check (cache'te hash) ile use (flash'tan fetch) arasında, fiziksel SPI erişimi olan bir saldırgan IBB'yi flash üzerinde modifiye eden hedefli SPI transaction'ları gönderebilir. Measurement — örn. PCR0 — hâlâ orijinal, temiz IBB'yi yansıtır, dolayısıyla modifiye edilmiş code aslında çalışırken müdahale edilmemiş gibi görünür. Trust anchor böylece herhangi bir signature forge etmeden bypass edilir: measure edilen kopyayı execute edilen kopyaya karşı yarıştırırsın.

Bu, software TOCTOU bug'larının bir hardware/firmware kardeşidir (bkz. ../arch/toctou-race-against-smm-commbuffer.md): bir değer bir storage domain'inde doğrulanır ve başka birinden tüketilir, ve ikisi trust geçişi boyunca coherent tutulmaz.

Walkthrough

Bu yayınlanmış, patch'lenmiş bir sorundur; walkthrough, alıntılanan firmware advisory'sinden gelen kavramsal attack/fix path'idir, silahlandırılmış bir exploit değil.

Saldırı taslağı (fiziksel SPI erişimi gerektirir — örn. bir flash programmer veya SPI bus üzerinde zararlı bir device):

1. Platform powers on; Boot Guard ACM loads IBB into LLC (NEM/CAR) and
   computes/validates its hash  ->  measurement (PCR0) is taken over CLEAN IBB.
2. Execution later re-fetches IBB bytes from SPI flash to run them.
3. In the window between (1) and (2), drive targeted SPI transactions to
   overwrite IBB code on the flash with attacker code.
4. The CPU fetches the MODIFIED IBB from SPI and executes it; the recorded
   measurement still matches the original, so attestation/Boot Guard policy
   does not trip.

Önerilen firmware düzeltmesi storage uyuşmazlığını ortadan kaldırmaktır — verify edilmiş IBB'yi geçici cache'ten korumalı bir konuma taşı ve asla untrusted flash'tan re-fetch etme:

- After the ACM verifies the IBB, copy/cache the verified IBB into permanent
  DRAM (or otherwise pin it) BEFORE disabling Non-Eviction Mode.
- Disable NEM only once execution no longer depends on flash-resident IBB.
- "Global pointers into CAR addresses must not exist (and certainly not be
  dereferenced) after NEM is disabled" — i.e. do not silently fall back to
  re-reading SPI for code that was already measured.

Başka bir deyişle: use'un, check'in doğruladığı aynı byte'ları okumasını sağla ki race penceresinin değiştirecek bir şeyi olmasın.

Warning

Bu, SPI bus üzerinde / fiziksel flash erişimine sahip bir saldırgan gerektirir; remote bir bug değildir. Ancak measured-boot attestation'ı (TPM PCR0) ve Boot Guard'ın verified-boot garantisini doğrudan baltalar, dolayısıyla başarılı bir race, yeniden kurulumlardan sağ çıkan kalıcı, pre-OS code execution verir.

Detection

Saf attestation (PCR0'ı bir golden değerle karşılaştırmak) bunu yakalamaz — bütün mesele measurement'ın doğru kalmasıdır. Detection out-of-band integrity'ye dayanır: SPI bus/flash üzerinde hardware tamper kanıtı, signed flash-write izleme ve erken measurement'a güvenmek yerine IBB'yi execute edilen kopyadan re-read/re-hash eden firmware. CVE-2019-11098 düzeltmesini içeren patch'li firmware'e karşı yapılan vendor BIOS/ME versiyon kontrolleri, bir platformun artık zafiyetli olmadığının pratik göstergesidir.

Mitigation

NEM disable edilmeden önce verify edilmiş IBB'yi DRAM'e cache'leyen ve post-verification SPI'dan re-fetch'i ortadan kaldıran patch'li firmware'i uygula. Defense in depth: SPI flash write-protection / protected range'ler (PRx) ve flash descriptor lock, hardware-backed SPI access control'leri ve fiziksel SPI tampering'in maliyetini yükseltmek için chassis-intrusion control'leri. İlgili firmware trust-anchor zayıflıkları arasında intel-boot-guard-bypass-key-leak.md ve ../arch/s3-boot-script-tampering.md yer alır.

References