Skip to content

Downgrade Attack on TrustZone

Loader'da anti-rollback olmadığı için, geçerli imzalı ama eski ve vulnerable bir Trusted Application, yamalı (patched) bir TrustZone cihazına yeniden yüklenebilir.

Mechanism

Bug sınıfı: imzalı trustlet'lerde eksik version control / anti-rollback

ARM TrustZone, SoC'yi bir normal world (zengin OS, örn. Android) ile bir secure world (küçük bir secure OS artı Trusted Application'lar, "TA"lar / "trustlet"ler) olarak ayırır. Secure OS bir TA'yı çalıştırmadan önce, normal world'ün rastgele secure kod inject edememesi için TA'nın cryptographic signature'ını doğrular. Bu signature kontrolü authenticity'yi zorunlu kılar, ama Chen, Zhang, Wang ve Wei (RAID 2017) bunun freshness'i zorunlu kılmadığını gözlemledi.

Doğrulama prosedürü "aynı verification key'i kullanabilir ve sürümler arası uygun rollback engellemesinden yoksun olabilir." Signing key sürümler boyunca sabit olduğu için, vendor'ın bir zamanlar imzaladığı her tarihsel trustlet sürümü sonsuza dek geçerli, yüklenebilir bir binary olarak kalır. Kırılan invariant, monotonic version enforcement'tır: yamalı bir cihaz, bir attacker güncel TA yerine eski, bilinen-vulnerable-ama-geçerli-imzalı bir TA koyduğunda onu seve seve yükler.

Threat model: zaten normal-world root/EL1 kontrolüne sahip (yani loader'a hangi TA image'inin verileceğini seçebilen) ama TrustZone tarafından secure-world kodu çalıştırmaktan bloklanmış bir attacker. Downgrade, vendor'ın zaten düzelttiği bir secure-world bug'ını yeniden devreye sokarak attacker'a yamalanıp kaldırılmış exploit primitive'i geri verir. Paper'da etkilenen/test edilen cihazlar Google, Samsung ve Huawei dahil vendor'ları kapsar; somut exploit Qualcomm'un QSEE'sine karşıdır.

Walkthrough

Public RAID 2017 paper'ından yüksek seviyeli bir reproduction. Burada çalışan bir secure-world exploit'i yeniden üretilmiyor.

Kavramsal rollback akışı
  1. Envanter: hedef bir trustlet'in eski, geçerli imzalı sürümlerini önceki firmware image'lerinden / OTA arşivlerinden topla. İyi bilinen bir vaka, eski sürümü CVE-2015-6639'u (sonraki build'lerde düzeltilmiş bir QSEE TrustZone privilege-escalation bug'ı) taşıyan Widevine DRM trustlet'idir.
  2. Eski image'i, TA loader'ın güncel sürüm yerine onu seçeceği şekilde normal-world storage'a yerleştir.
  3. Yüklemeyi tetikle: TA'yı normal-world client API üzerinden çağır. Secure OS signature'ı doğrular — eski binary meşru olarak imzalandığı için yine de geçer — ve bir version/anti-rollback kontrolü olmadan vulnerable kodu yükler.

    normal world (root)  --load(TA_old, sig_old)-->  secure OS
    secure OS: verify(sig_old) == OK   # authentic, but stale
    secure OS: no minimum-version check --> runs vulnerable TA
    
  4. Secure-world execution kazanmak / secure asset'leri sızdırmak için, artık yüklenmiş vulnerable TA içindeki dirilen bug'ı exploit et — tam olarak orijinal CVE'nin yamadan önce izin verdiği gibi.

Warning

Paper, vendor'ların farklı TA "pattern matching" / yükleme şemaları kullandığını (örn. Qualcomm QSEE vs. Trustonic Kinibi) belirtir; dolayısıyla tam staging adımı platforma göre değişir, ama altta yatan eksik-anti-rollback kusuru ortak kök nedendir.

Detection

  • Firmware/version attestation: secure world'e gerçekten yüklenen her TA'nın sürümünü kaydet; sürümü o cihazda gözlenmiş en yeni sürümden daha eski olan her TA'yı işaretle — bir rollback'in belirleyici sinyali budur.
  • Integrity baseline'ları: beklenen (güncel) trustlet hash'lerinden oluşan bir manifest tut; güvenlik açısından önemli bir TA için bilinen-eski bir hash bulan bir MDM/EDR kontrolü bir downgrade girişimine işaret eder.
  • Anormal TA yüklemeleri: aksi halde güncel bir cihazda deprecated bir DRM/keystore trustlet'i (örn. eskimiş bir Widevine build'i) yüklenmesi şüphelidir.
  • OTA/AVB log'ları: verified-boot metadata'sındaki rollback index ile gerçekten çalışan sürüm arasındaki uyumsuzluklar.

Mitigation

  • Anti-rollback / monotonic version counter'ları: çekirdek düzeltme, her imzalı TA'yı bir minimum sürüme bağlamak ve görülen en yüksek sürümü tamper-resistant secure storage veya hardware fuse'larda (eFuse'lar / replay-protected memory) saklayıp altındaki her image'i reddetmektir.
  • Per-version signing / key rotation: eski binary'lerin güncel firmware tarafından doğrulanamaması için signing key'leri döndürmek veya sürüme bağlamak.
  • Verified Boot rollback index: Android Verified Boot (AVB) ve benzeri şemalar, downgrade edilmiş image'leri brick etmek için rollback index'lerini blow eder; vendor'lar bu saldırı sınıfından sonra bu korumayı secure-world bileşenlerine genişletti.
  • Geri dönülecek daha az tarihsel vulnerable sürüm olsun diye secure-world TA yüzeyini küçültün ve deprecated trustlet'leri hızla emekliye ayırın.

References