SmashEx (CVE-2021-0186)¶
Untrusted bir OS, bir SGX enclave'i güvensiz bir anda keser ve onu exception path üzerinden yeniden girer; enclave state'ini bozarak secret'ları ifşa eder ya da control flow'u ele geçirir.
Mechanism¶
Bug sınıfı: asynchronous/synchronous exception sınırı boyunca non-atomic yeniden giriş
Bir SGX enclave, address space'ini, enclave'in ne zaman kesileceğini kontrol eden untrusted bir OS ile paylaşır. Asynchronous bir interrupt'ta donanım bir Asynchronous Enclave Exit (AEX) yapar; OS daha sonra enclave'i ERESUME ile sürdürür. Enclave runtime'ları ayrıca enclave'in fault'lara tepki verebilmesi için synchronous bir enclave-içi exception handler sunar.
SmashEx'in kırdığı invariant, enclave'in kendi critical section'larının atomicity'sidir. Normal bir OS ya da uygulama, bir handler stack/context'ini kurarken interrupt'ları mask'leyebilir. Bir enclave bunu yapamaz, çünkü böyle bir isteği yerine getirecek varlık (OS) adversary'nin ta kendisidir. Donanım, bir handler'ın prologue'unu — ya da EENTER'dan hemen sonraki, trusted stack pointer kurulmadan önceki pencereyi — kesintiye uğramaz kılacak bir primitive sağlamaz. Bu yüzden attacker, enclave zaten kendi exception makinesinin içindeyken bir exception teslim edebilir ve hiçbir zaman re-entrant olacak şekilde yazılmamış bir rutini yeniden girer. İkinci giriş, kısmen başlatılmış ya da attacker-etkili state ile çalışır (özellikle hâlâ host belleğine işaret edebilecek bir RSP), bir confidentiality sınır ihlalini bir integrity/control-flow ihlaline dönüştürür.
Walkthrough¶
Üst seviye kavramsal yeniden üretim (CCS 2021, Cui et al.)
Kamuya açık makale, saldırıyı malicious host'un hassas interrupt timing'iyle kazandığı bir race olarak özetler:
- Host bir ecall çağırmak için
EENTERyapar. Runtime trusted stack pointer'ı kurmayı bitirmeden önce kısa bir pencere vardır. - Host bu pencere içinde bir exception (örn. asynchronous bir interrupt) yükselterek bir AEX'e zorlar.
- Host, host-kontrollü bir
RSPsağlarken runtime'ın exception-handling girişini sürer (örn. second-chance exception path gibi host tarafından sağlanan bir komut). ERESUME'de enclave'in handler'ı host belleğinde bulunan bir stack pointer ile çalışır ya da kendi kaydedilmiş context'inin güncellenmesi ortasında bir rutini yeniden girer.- Bozulmuş context, enclave belleğinin ifşasını ya da bir return-oriented control-flow ele geçirmesini mümkün kılar.
Kamuya açık PoC'ler bir RSA private key'in sızdırılmasını ve enclave belleğinin dump edilmesini gösterdi. Burada hiçbir kesin gadget zinciri ya da offset yeniden üretilmiyor.
Detection¶
Sinyaller belirsizdir — OS saldırgandır, bu yüzden host log'ları otoriter değildir
- Tek bir enclave thread'ini hedefleyen anormal derecede yüksek AEX / interrupt oranı. SmashEx hassas, tekrarlanan kesinti gerektirir; workload'unun haklı çıkardığından çok daha fazla asynchronous exit alan bir enclave anormaldir (host'layan thread'de SGX SDK exit sayaçları ya da perf interrupt sayımlarıyla gözlemlenebilir).
- Bir TCS üzerinde tekrarlanan faulting
ERESUME/EENTERdöngüleri ya da second-chance exception path'inin tekrar tekrar çağrılması. - Dışarıdan tetiklenen interrupt'larla ilişkili, enclave handler prologue'ları içinde crash'ler ya da
#GP/#PF. - Attestation tabanlı dağıtımlarda, yama-öncesi bir SDK versiyonuna karşı linklenmiş bir enclave tek başına tespit edilebilir bir risk göstergesidir.
Mitigation¶
Runtime'ı yamala; platform izin verdiği yerde atomicity'yi tercih et
- SGX runtime'ını güncelle. Linux için Intel SGX SDK 2.14+ (Windows 2.13+), untrusted
RSP'nin doğrulamasını ekler ve exception-context inşasını sertleştirir. Microsoft Open Enclave bunu CVE-2021-33767 olarak düzeltti (v0.17.1). Teaclave (Apache) v0.3.0'da düzeltti. Google Asylo, EdgelessRT, Rust SGX SDK, SGX-LKL ve diğerleri de etkilendi ve yamalandı. - Her giriş/yeniden girişte untrusted register state'ini doğrula — host tarafından sağlanan bir stack pointer'a asla güvenme; stateful herhangi bir şey yapmadan önce bilinen-iyi bir trusted stack'e geç.
- Handler kurulumunu re-entrancy-safe yap ki prologue sırasındaki bir interrupt yarı-başlatılmış bir critical section'a resume edemesin.
- Makale, enclave'ler için donanım atomicity primitive'lerinin daha temiz, uzun vadeli düzeltme olacağını belirtir; software yamaları bir miktar işlevsellikten güvenlik adına ödün verir.