Skip to content

SMM callout (calling outside SMRAM)

SMRAM'in dışında bulunan bir fonksiyonu çağıran ya da bir pointer'ı dereference eden bir SMI handler, ring-0 software'in o adrese önceden saldırgan kodu yerleştirmesine imkân verir; bu, ayrıcalıklı SMM çağrısını ele geçirir ve ring -2'ye yükseltir.

Mechanism

SMM'in OS'un yeniden yazabileceği belleğe güvenmesi

SMM kodu ve onun protocol/service'leri SMRAM'de yaşar; OS buraya dokunamaz. Bir callout, en temel SMM bug sınıfıdır: bir SMI handler, işinin bir kısmını yapmak için SMRAM'in dışında bulunan bir pointer ya da service'e uzanır — klasik olarak UEFI runtime/boot services table'ı (gRT/gBS) ya da bir GetVariable/SmmGetVariable çağrısı.

O target OS'un erişebildiği bellekte yaşadığı için, ring 0'a sahip bir saldırgan, SMI'yi tetiklemeden önce çağrılan fonksiyonu destekleyen physical page'leri overwrite eder. SMM (artık saldırgan kontrolündeki) pointer'ı dereference ettiğinde, saldırgan kodunu SMM ayrıcalığıyla çalıştırır. Bozulan invariant: "bir SMI handler'ın kullandığı her fonksiyon/pointer güvenilir SMRAM'de yaşar." Sonuç, OS'un ve Secure Boot'un altında bir ring 0 -> ring -2 yükselmesidir.

Kanonik bir örnek: GetVariable'ı çağırmak için gRT'yi dereference eden bir SWSMI handler; bu çağrı SMRAM'in dışında bulunur (Binarly, Eclypsium ve Cr4sh araştırmalarında belgelenmiştir). Çözüm, runtime-services kopyası yerine SMM-resident EfiSmmVariableProtocol'ü (SmmGetVariable/SmmSetVariable) kullanmaktır.

Walkthrough

Savunma amaçlı gösterim (kavramsal; silah hâline getirmeyin):

1. Reverse the SMM driver; find an SMI handler that calls through gRT/gBS or a
   pointer table located outside SMRAM (e.g. gRT->GetVariable).
2. From ring 0, remap/overwrite the physical page holding that function or
   table entry with a stub.
3. Trigger the SMI (e.g. write the handler's SW SMI value to I/O port 0xB2).
4. SMM dereferences the outside-SMRAM pointer and runs the attacker stub in SMM.

Savunmasız bir handler'da beklenen sonuç: SMM'de kod yürütme; düzeltilmiş bir handler'da tüm çağrılar SMRAM-resident SMM protocol'lerine çözülür.

Detection

  • gRT/gBS'yi ya da SMRAM-dışı adresleri referans alan SMI handler'ları işaretleyen statik analiz (CHIPSEC, efiXplorer).
  • SMRAM integrity measurement / firmware attestation.

Mitigation

References