Bypassing Isolated Execution on RISC-V with Fault Injection¶
TEE isolation'ını aşıp bir enclave'ın korumalı memory'sini okumak için RISC-V PMP enforcement'ını glitch'leyen bir black-box fault-injection saldırısı.
Mechanism¶
Note
Bir RISC-V TEE, secret'ları Physical Memory Protection (PMP) tarafından enforce edilen izole bir physical bölge içinde tutar: M-mode firmware, daha az privilege'lı code'un enclave'ın memory'sine dokunamayacağı şekilde PMP programlar. Güvenlik invariant'ı, PMP access check'inin her erişimde onurlandırılmasıdır. Bu çalışma (Nashimoto, Suzuki, Ueno, Homma — IACR ePrint 2020/1193), tek, iyi zamanlanmış bir fault'un processor'a PMP check'ini yapan veya kuran instruction'ı yanlış execute ettirebileceğini gösterir; böylece reddedilmesi gereken bir erişim başarılı olur — isolation sınırını çökertir.
Ayırt edici varsayım bir black-box threat model'idir: saldırganın target'ın detaylı içsel bilgisine ihtiyacı yoktur ve başarılı glitch parametrelerini ampirik olarak çıkarır. Parametreler PMP enforcement path'ine bir fault düşürdüğünde, daha düşük privilege'lı code korumalı bölgeyi okur. Bu 2020 ePrint, side-channel-destekli, cross-device parametre çıkarımını ekleyen sonraki TCHES 2022 makalesinin öncülüdür.
Sibling'den farkı: Bu not saf black-box, cihaza özel parametre aramasını tanımlar; side-channel-destekli cross-device parametre çıkarımı ve formalize edilmiş countermeasure ardıl Bypassing Isolated Execution on RISC-V using Side-Channel-Assisted Fault-Injection (TCHES 2022) notuna aittir.
Walkthrough¶
Fiziksel bir RISC-V target'ına karşı bir hardware fault-injection saldırısı; adımlar silahlandırılmış bir zincir sağlamaktan çok açıklanan yaklaşımı özetler.
- Victim isolation'ı kur. M-mode firmware, enclave'ın physical memory'si U/S-mode'dan erişilemez olacak şekilde PMP'yi yapılandırır; normal bir erişimin trap ettiğini doğrula.
# Expected, unfaulted behavior: U-mode load from enclave region -> access fault
load x5, (enclave_addr) # traps: PMP denies the access
- Glitch parametrelerini ara (black box). Korumalı erişimi tekrar tekrar tetiklerken fault timing'ini ve strength'ini tara; erişimin trap etmediği nadir run'ı gözle.
for delay in window:
for strength in range:
arm_glitch(delay, strength)
trigger_protected_access()
if not faulted_to_trap(): record(delay, strength) # candidate params
- Inject et ve oku. PMP check'i fault'lanacak şekilde kaydedilmiş bir parametre setini yeniden uygula, sonra U-mode'dan enclave byte'larını oku.
# Faulted behavior: the same load returns data instead of trapping
load x5, (enclave_addr) # PMP check skipped -> leaks protected data
Warning
Çıkarım şu ki PMP-based isolation, onu enforce eden instruction stream'i kadar güçlüdür. Tek bir fault'lanmış check — black-box koşullarda bile bulunan — korumalı memory'yi okumak için yeterlidir. Access kararını redundant şekilde re-verify etmeyen yazılımın buna karşı hiçbir savunması yoktur.
Detection¶
- Cihaz üzerinde hardware voltage/clock glitch detector'ları ve brown-out monitor'leri.
- M-mode enforcement path'i üzerindeki anomaly counter'ları; trap etmesi gereken ama etmeyen bir erişim yüksek sinyalli bir göstergedir.
Mitigation¶
- PMP-enforced access kararını redundant şekilde verify et ki bir fault'lanmış check memory'yi ifşa etmesin (takip eden TCHES 2022 makalesinde countermeasure olarak formalize edildi).
- Saldırganın power/clock erişimini fiziksel olarak kısıtla ve glitch sensing ekle.