Skip to content

Trust Issues: Exploiting TrustZone TEEs (QSEE / Kinibi exploitation)

Arm TrustZone TEE'lerinin (Qualcomm QSEE ve Trustonic Kinibi) "patch'lenmiş" trustlet bug'larını nasıl exploit edilebilir tuttuğunun bir systematization'ı; çünkü normal world, eski, vulnerable secure-world uygulamalarını load edebilir.

Mechanism

Bug class / invariant

TrustZone, SoC'yi hardware (NS bit) ile desteklenen bir normal world (Android, Linux) ve bir secure world (TEE OS artı trustlet'ler) olarak böler. Temel security invariant'ı şudur: normal world, vendor'ın revoke ettiği bir secure-world binary'sini asla çalıştıramamalı ve compromise olmuş bir trustlet, secure world'ün geri kalanına erişememeli.

Gal Beniamini'nin araştırması (Project Zero, 2017), bu invariant'ın iki sistemik başarısızlığını gösteriyor. Birincisi, anti-rollback / version revocation büyük ölçüde uygulanmıyor: trustlet image'ları fiilen version 0 taşır, yani bir normal-world attacker eski, known-vulnerable bir trustlet'i stage edip load edebilir ve upstream'de "düzeltilmiş" bir bug'ı yeniden exploit edebilir. İkincisi, in-TEE mitigation'lar zayıf (Kinibi tarihsel olarak ASLR, stack cookie ve guard page'lerden yoksundu; QSEE'nin yalnızca ~9 bit ASLR entropy'si vardı), bu yüzden bir trustlet içindeki memory bug'ı güvenilir biçimde weaponize edilebilir.

Kavramsal root cause şudur: TEE bir image'ın authenticity'sine (signature) güvenir ama freshness'ine güvenmez. Bir attacker QSEE içinde çalışmaya başladığında, başka tasarım zayıflıkları (ör. keyfi physical memory map edebilme yeteneği) compromise'in secure kernel'e doğru yayılmasına izin verir — bkz. TrustZone Kernel Privilege Escalation.

Walkthrough

Yalnızca kavramsal

Public Project Zero gönderisinden çıkarılan high-level model. Çalışan bir trustlet exploit'i, offset ya da gadget chain sağlanmıyor.

  1. Eski, vulnerable bir trustlet edin. Attacker, known bir memory-corruption bug'ı içeren, daha önce shipped (artık upstream'de patch'lenmiş) signed bir trustlet image'ı toplar.
  2. Revocation'ı yen. TEE OS, load anında monotonic bir version counter zorlamadığından, stale signed image kabul edilir (ör. loader daemon'ın okuduğu yere yerleştirilir). Signature hâlâ valid; yalnızca freshness eksik.
  3. Known bug'ı tetikle. Bir normal-world app, standart command interface üzerinden load edilmiş trustlet'e ulaşır ve eski güvenlik açığını tetikleyerek secure world'de code execution kazanır.
  4. TEE içinde yay. Zayıf in-TEE mitigation'lar ve (QSEE'de) physical memory map edebilme yeteneği, attacker'ın key'lere, DRM material'ına ve secure kernel'e doğru ilerlemesine izin verir.

Detection

Host / telemetry sinyalleri

  • Loaded-trustlet inventory: managed fleet'lerde, load edilen trustlet'lerin yalnızca signature'ını değil version/hash'ini de attest et; version'ı mevcut OS security patch level'ından eski olan herhangi bir trustlet'i flag'le.
  • Anormal QSEECOM / TEE driver kullanımı: secure world command interface'lerini tekrar tekrar çağıran ya da non-system trustlet'ler load eden unprivileged app'ler şüphelidir.
  • Secure-world fault'ları / reset'leri: belirli bir app ile korele olan beklenmedik TEE crash'leri ya da tz/qseecom kernel log anomalileri.

Mitigation

Patch & hardening

  • Anti-rollback'i zorla. Revoke edilmiş trustlet version'larını reddetmek için hardware-backed monotonic counter'lar (eFuse / RPMB) kullan — kalıcı fix. Kinibi 400 (Galaxy S8), RPMB-backed rollback prevention'ı getirdi.
  • Cihazları güncel tut. Vendor security patch'lerini uygula; revocation hardware'inden yoksun eski cihazlar tamamen retrofit edilemez.
  • TEE runtime'ını sertleştir. TEE OS içinde ASLR, stack cookie ve guard page'ler, kalan trustlet bug'larını exploit etmeyi çok daha zorlaştırır.
  • Secure-world attack surface'ini minimize et. Load edilebilir trustlet'lerin sayısını azalt ve hangi normal-world process'lerinin TEE command interface'ine erişebileceğini kısıtla.

References