SGX-LEGO controlled-channel attack¶
Enclave içindeki kodu parmak izine bağlayan (bir "Version IDentification" saldırısı), instruction-granularity seviyesinde fine-grained bir SGX controlled-channel attack; yanına da bir execution-polymorphism karşı önlemi ekliyor.
Mechanism¶
Bir controlled-channel attack'te, enclave'in page table'larını yöneten untrusted OS, enclave page'lerine erişimi bilerek geri çekiyor; böylece her enclave bellek erişimi OS'in gözlemlediği bir page fault üretiyor. Klasik controlled channel'lar (Xu et al.) access pattern'leri page granularity seviyesinde sızdırır, çünkü enclave için raporlanan faulting address page base'ine maskelenir.
Note
Kırılan varsayım şu: önceki controlled-channel attack'ler ve savunmalar, adversary'nin enclave erişimlerini yalnızca 4 KiB page çözünürlüğünde öğrenebildiğini varsayıyordu. SGX-LEGO, enclave'in control flow'unu çok daha ince çözünürlükte gözlemleyen bir single-stepping / instruction-granularity page-fault monitoring tekniğinin (Van Bulck et al.'nin stealthy page-table attack'lerinin ruhuna uygun) üzerine kuruluyor. Bu daha keskin trace ile attacker bir Version IDentification (VID) attack çalıştırabiliyor — gözlemlenen fine-grained erişim dizisini bilinen kodla eşleştirerek enclave içinde hangi kodun (ve versiyonun) çalıştığını tespit ediyor, böylece page-masking'in sağladığı varsayılan confidentiality'yi alt ediyor.
Enclave secret'ı tutan taraf; OS adversary; kanal ise page permission'larını sıyırarak ve (APIC-timer single-step yaklaşımıyla) her instruction'dan sonra kesinti yaparak tetiklenen page fault'ların dizisi ve timing'i.
Walkthrough¶
Üst seviyeden, makaleye göre (Cho et al., Computers & Security, Vol. 82, 2019):
- Enclave page permission'larını sıyır. Untrusted OS'ten, hedef enclave page'lerindeki present/execute bit'lerini temizle ki erişimler trap'e düşsün.
- Enclave'i single-step et. APIC-timer interrupt'larını (SGX-Step gibi; bkz.
sgx-step-single-stepping.md) kullanarak enclave'i kabaca instruction başına bir adım ilerlet ve page-fault event'lerini page granularity yerine instruction granularity'de topla. - Fine-grained bir access trace kur. Enclave'in yürütülmesi boyunca faulting page'lerin / control-flow geçişlerinin sıralı dizisini kaydet.
- VID çalıştır. Bu trace'i aday kodların signature'larıyla ilişkilendirerek enclave içinde çalışan spesifik kodu/versiyonu tespit et — page mask'in saklaması gereken bilgiyi sızdır.
Makalenin karşı önlemi olan SGX-LEGO, execution polymorphism ile savunma yapıyor: enclave'in bellek erişim dizisini instruction seviyesinde permute eden otomatik bir sistem, böylece fine-grained fault trace artık deterministik olarak bilinen bir kod signature'ına eşlenmiyor. Belleğin hangi sırayla dokunulduğunu randomize ederek gözlemlenen controlled-channel fault dizisini belirsiz hale getiriyor (fault'ları saklamak yerine "fault bilgisini işe yaramaz kıl" savunma stratejisi).
Controlled-channel monitoring (kavramsal)
clear_permission(enclave_page) # force fault on access
loop:
arm_apic_timer(single_step) # interrupt ~1 instr later
ERESUME enclave # advance one instruction
on fault/exit:
log faulting page + step index # fine-grained access trace
goto loop
# offline: match trace signature -> identify enclave code/version (VID)
Detection¶
- Dışarıdan bakınca: saldırı privileged OS tarafından çalıştırıldığı için host defender'ın kendisi adversary; tespit asıl enclave / attestation tarafı için önemli.
- Controlled-channel/single-stepping etkinliğinin enclave-içi veya runtime sinyalleri:
- Anormal derecede yüksek enclave AEX (Asynchronous Enclave Exit) / page-fault oranları — instruction başına bir exit'e yakın değer single-stepping'e işaret eder.
- Aynı enclave page'lerinde tekrarlanan permission iptali ya da enclave'i hedef alan interrupt storm'ları, controlled-channel davranışının tipik göstergeleridir.
- Intel TSX transaction abort'ları (T-SGX'in kullandığı) ya da AEX-notify gibi donanım desteği, enclave'in şüpheli interrupt pattern'lerini kendi kendine tespit etmesine olanak tanır.
Mitigation¶
- SGX-LEGO'nun execution polymorphism'i: enclave kodunu derle/instrument et ki instruction seviyesindeki bellek erişimleri permute olsun; böylece VID'in dayandığı deterministik fault-trace'ten koda eşleme kırılır.
- Tamamlayıcı savunmalar: T-SGX / Cloak (anormal page fault desenlerini TSX transaction abort'ları ile tespit eder), Déjà Vu / AEX-notify (anormal interrupt/AEX tespit eder) ve paging kontrolünü OS'ten alan self-paging enclave'ler (Autarky).
- Constant-control-flow, data-oblivious enclave kodu, bir controlled channel'ın yakalayabileceği access-pattern sinyalini en aza indirir.