RingHopper-style SMI handler exploitation (NCC Group Insyde SMM)¶
Insyde sınıfı firmware'lerde SMI-handler bug'larını bulup exploit etmeye yönelik bir metodoloji: untrusted Save State register'ları ve communication buffer pointer'ları validation olmadan dereference edilir, bu da SMRAM'e confused-deputy write'lar verir.
Mechanism¶
Her SMI-handler input'u attacker-controlled'dır
OS bir software SMI raise ettiğinde, CPU SMM'e girer ve bir dispatcher bir handler'a route eder. O handler argümanlarını iki untrusted kaynaktan okur:
- Save State register'ları (RDI, RSI, RCX, ...): OS'in SMI'yı tetiklediğinde GPR'larında bulunan değerler. OS bunları serbestçe seçer.
- O register'lar tarafından referans verilen, SMRAM dışında bulunması gereken paylaşılan communication / command buffer'ları.
NCC Group'un "Stepping Insyde System Management Mode" çalışması, bu input'ların
validation öncesinde dereference edildiği beş tekrarlayan Insyde bug
pattern'ini sıraladı: unvalidated pointer dereference
(FbtsGetWholeBiosRomMap), nested pointer'larda flash-op TOCTOU
(SecureFlashFunction), output'u check edilmemiş bir RCX'e yazan dispatcher
(KernelT51EcIdel* ile IhisiProtExecuteCommandByPriority), bir RCX adresine
doğrudan write-what-where (ReadDefaultSettingsToFactoryCopy) ve bir BIOS
Guard update handler'ında attacker-controlled header size'lar üzerinden OOB
read. Beşinde de kırılan invariant: "buffer ve her nested pointer için,
dereference etmeden önce validate et."
Bunlar CVE-2023-22612/22613/22614/22615/22616 (Insyde) ile eşleşir.
Walkthrough¶
Public NCC Group writeup'ından damıtılmış defensive metodoloji:
Hunting workflow (per the public research):
1. Extract SMM drivers from firmware (e.g. with UEFITool / efiXplorer).
2. Locate SMI handler registration and the Save State / CommBuffer reads
(RDI/RSI/RCX dereferences).
3. Check whether each pointer is validated with SmmIsBufferOutsideSmmValid()
*before* use, and whether nested pointers are re-validated after copy.
4. A handler that writes to an RCX-controlled address, or copies using an
attacker-controlled size, is a candidate write-what-where into SMRAM.
Beklenen sonuç: admin seviyesindeki bir attacker'ın SMRAM'e yazacak şekilde sürebileceği confused-deputy handler'ların tespiti. Somut offset'ler firmware-specific'tir; burada bunları conceptual olarak ele alın.
Detection¶
- Save State / comm buffer pointer'larını validation olmadan dereference eden handler'ları işaretleyen static firmware audit (efiXplorer/CHIPSEC).
- SMRAM integrity measurement / firmware attestation.
Mitigation¶
- Vendor firmware update'leri; handler'lar comm buffer'ı ve tüm nested
pointer'ları
SmmIsBufferOutsideSmmValid()ile validate etmeli ve input'ları kullanmadan önce SMRAM'e kopyalamalı. - Bkz. SMM callout, RingHopper SMM arbitrary code execution, TOCTOU race against SMM CommBuffer.