BOOMERANG: Exploiting the Semantic Gap in Trusted Execution Environments¶
Bir TEE confused-deputy bug sınıfı: bir Trusted Application, caller'ın verdiği
pointer'ları ownership'i doğrulamadan dereference eder; böylece normal-world bir app, secure-world bir deputy üzerinden sahibi olmadığı belleği okur/yazar.
Mechanism¶
Sınır neden çöküyor
Bir TEE (TrustZone), normal world'ü (untrusted OS + app'ler) secure world'den (Trusted OS + Trusted Application'lar) ayırır. Normal-world app'ler, içlerinde pointer da bulunan parametreler geçirerek TA'lara çağrı yapar. Semantic gap şu: bir TA, secure-world privilege'da çalışır ve çağıran app'in erişemediği belleğe erişebilir — ama bir pointer argümanının gerçekten caller'a ait olup olmadığını doğrulamaz. Kötü niyetli bir app, hazırlanmış bir pointer geçirir (örn. untrusted OS kernel'ına ya da başka bir process'e); TA, bir confused deputy gibi davranarak onu secure privilege'da dereference eder ve sonucu döner. İhlal edilen invariant: privileged bir callee, caller'ın verdiği pointer'ların caller'ın erişmesine izin verilen belleği işaret ettiğini doğrulamalıdır — bu da normal-world bellek korumasını tamamen bypass eder.
Walkthrough¶
NDSS 2017 paper'ından kavramsal akış; açıklayıcıdır.
-
Unprivileged bir normal-world app, zafiyetli bir TA'ya bir session açar ve parametresi, API'nin caller'ın kendi
buffer'ını işaret etmesini beklediği bir pointer olan bir komut gönderir. -
App ise bunun yerine, sahibi olmadığı belleğe bir pointer verir — örn. untrusted OS kernel'ı ya da başka bir process.
-
TA, pointer'ı secure-world privilege'da dereference eder (okuma ya da yazma) ve veriyi döner / üzerinde işlem yapar → app'in başka türlü dokunamayacağı belleğin arbitrary read/write'ı. Yazarlar, yüz milyonlarca cihazı kapsayan dört TEE platformunda, untrusted (Android) OS'un tam ele geçirilmesine kadar varan bir escalation gösteriyor.
Detection¶
- Static/dynamic analysis: TA command handler'larını, caller'ın address space'ine karşı ownership/range check yapılmadan dereference edilen pointer parametreleri açısından denetleyin; TA entry point'lerini out-of-bounds ve kernel pointer'larla fuzz'layın.
- Runtime: Caller'ın register ettiği shared buffer'ların dışındaki adreslere erişen bir TA anomaliktir ve trusted OS, session başına buffer registration'ları izliyorsa gözlemlenebilir.
Mitigation¶
- Cooperative Semantic Reconstruction (CSR): Paper'ın savunması — trusted ve untrusted OS işbirliği yapar, böylece secure world, geçirilen bir pointer'ın dereference etmeden önce gerçekten çağıran app'e ait/erişilebilir olduğunu doğrulayabilir.
- General hardening: Veriyi value ile ya da trusted OS'a register edilmiş doğrulanmış shared-memory region'ları üzerinden marshal edin; asla raw caller pointer'larıyla değil.