Skip to content

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.

  1. 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.

  2. App ise bunun yerine, sahibi olmadığı belleğe bir pointer verir — örn. untrusted OS kernel'ı ya da başka bir process.

  3. 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.

References