Trust Dies in Darkness: Shedding Light on Samsung's TrustZone Keymaster Design (CVE-2021-25444)¶
Samsung'un TrustZone Keymaster Trusted Application'ındaki bir AES-GCM IV-reuse açığı, IV'yi kontrol eden privileged bir attacker'ın hardware-protected key blob'larını decrypt etmesine izin verir; eşlik eden bir downgrade attack ise patch'lenmiş cihazlarda bug'ı yeniden etkinleştirir.
Mechanism¶
Bug class: cryptographic misuse — attacker'ın kontrol ettiği IV, AES-GCM confidentiality'sini yener
Android'in Hardware-Backed Keystore'u, application key'lerini opak key blob'larına sarmak için bir TrustZone Trusted Application'dan (Keymaster TA) ister. Samsung'un tasarımında sarma, cihaz başına bir hardware key altında AES-GCM'dir ve blob, ciphertext'i, GCM authentication tag'ini ve onu encrypt etmek için kullanılan IV (initialization vector)'i taşır.
AES-GCM'in pazarlık edilemez tek bir invariant'ı vardır: bir (key, IV) çifti asla yeniden kullanılmamalıdır. GCM'in keystream'i ve authentication'ı, key ve IV'den deterministik olarak türetilir. Aynı key altında aynı IV iki kez kullanılırsa, iki ciphertext'in XOR'u onların plaintext'lerinin XOR'una eşittir — confidentiality çöker ve GMAC authentication key'i geri elde edilebilir, böylece bir attacker tag forge edebilir.
Açıklanan açık (CVE-2021-25444), Keymaster TA'nın bir blob oluştururken/encrypt ederken caller'ın, dokümante edilmemiş bir tag (keybuster araştırmasında kamuya KM_TAG_EKEY_BLOB_IV olarak adlandırılan) üzerinden IV'yi belirtmesine izin vermesidir. IV'yi bir target blob için zaten kullanılmış bir değere sabitleyerek, bir attacker cihazın hardware key'i altında bir (key, IV) çakışması zorlar. Kırılan sınır, keystore'un temel vaadidir — sarılmış key'lerin privileged bir OS attacker'ına karşı bile confidential olması — çünkü IV reuse, hardware-backed encryption'ı decrypt edilebilir bir oracle'a çevirir ve korunan key material'ini açığa çıkarır.
Downgrade attack (CVE-2021-25490)
Daha yeni Galaxy nesilleri, caller'ın IV'yi seçmesine izin vermeyen blob formatlarına geçti. Eşlik eden güvenlik açığı bir downgrade'tir: bir version/encoding tag'i (KM_EKEY_BLOB_ENC_VER) set ederek, aksi halde patch'li bir S10/S20/S21 üzerindeki bir attacker, TA'yı legacy v15 blob path'ine geri düşmeye zorlar — attacker'ın kontrol ettiği IV'yi ve reuse attack'ini yeniden devreye sokarak. Sağlam fix, ondan sadece default olarak uzaklaşmak değil, legacy implementasyonu kaldırmak zorundaydı.
Walkthrough¶
Shakevsky, Ronen ve Wool'un USENIX Security 2022 makalesine ve kamuya açık keybuster tooling'ine dayanan kavramsal yeniden inşa. Key, offset veya exploit kodu yok.
- TA'ya ulaş. Privileged bir Android context'inden, bir araştırma client'ı (keybuster), normal HAL'ın gizlediği parametreleri — kritik olarak dokümante edilmemiş IV tag'ini — geçirerek ham Keymaster komutları yayınlar.
- IV'yi sabitle. Aynı cihaz-başına key altında, bir target hardware-backed blob'u koruyan aynı IV'yi belirterek bir key blob oluştur veya import et.
- GCM çakışmasını exploit et. Bir (key, IV) çiftini paylaşan iki ciphertext ile, standart AES-GCM IV-reuse kriptanalizi plaintext'i (sarılmış key) ve authentication subkey'ini geri elde eder.
- Blob-versiyon bağımlılığı. Doğrudan açıklı, IV-kontrol edilebilir format, legacy
v15blob'udur (Galaxy S8/S9 nesli); sonraki cihazlarv20ailesi formatları kullanır. Downgrade adımı (CVE-2021-25490), daha yeni cihazları açıklı legacy path'ine geri zorlar. - Downstream etki. Geri elde edilen key'ler, Android Keystore'un, hardware key attestation'ın ve ona dayanan üst seviye protokollerin garantilerini kırar — FIDO2/WebAuthn StrongBox-destekli credential'lar ve Google'ın Secure Key Import'u dahil — çünkü "hardware-protected" key artık software'de çıkarılabilir.
GCM'de IV reuse neden felaket (sezgi)
GCM, CTR-mode encryption artı bir polynomial MAC'tir. CTR'nin keystream'i (key, IV, counter)'ın bir fonksiyonudur. IV'yi yeniden kullan ve aynı keystream iki mesajı encrypt eder, dolayısıyla C1 ⊕ C2 = P1 ⊕ P2; bir plaintext biliniyorsa, diğeri ortaya çıkar. Daha kötüsü, IV/nonce reuse ayrıca GHASH subkey'i H'yi sızdırır ve tag forgery'yi mümkün kılar. Bunların hiçbiri AES'in kendisini kırmayı gerektirmez.
Detection¶
- TA / firmware versiyon envanteri. Belirleyici sinyal patch level'ıdır: Samsung'un Ağustos 2021 güncellemesi CVE-2021-25444'ü düzeltti ve sonraki bir güncelleme CVE-2021-25490 için legacy blob path'ini kaldırdı. Güncel olmayan Samsung security patch level'larının filo/MDM raporlaması açık cihazları işaretler.
- Anormal Keymaster kullanımı. Meşru app'ler Android Keystore HAL üzerinden gider ve ham IV/version tag'lerini asla set etmez. Açık bir IV tag'i veya açık bir legacy-blob version isteği taşıyan doğrudan Keymaster TA çağrılarını gözlemleyen telemetri veya instrumentation oldukça şüphelidir.
- Privilege context'i. Exploitation, TA ile konuşan privileged bir process gerektirir; beklenmedik privilege escalation veya Keymaster device node'una erişen bilinmeyen process'lerin EDR/MDM sinyalleri upstream göstergelerdir.
- Attestation integrity check'leri. Hardware key attestation'a dayanan sunucular, sağlıklı, patch'li bir cihazla tutarsız attestation yanıtlarını bir geri durak olarak izleyebilir.
Mitigation¶
- Samsung'un patch'lerini uygula. CVE-2021-25444 (IV reuse) Ağustos 2021'de patch'lendi; CVE-2021-25490 (downgrade), legacy
v15blob implementasyonunu S10/S20/S21'den kaldırarak ele alındı. Tam koruma için her iki güncelleme de gereklidir. - Bir AEAD'nin caller'larına IV/nonce kontrolünü asla expose etme; IV'ler dahili olarak üretilmeli ve benzersizlik zorlanmalıdır (yeterli genişlikte random veya monotonik bir counter). Makalenin mimari dersi budur.
- Exploit edilebilir legacy code path'lerini erişilebilir tutma. Bir tag onu yeniden seçebildiğinde, açıklı bir formattan default olarak uzaklaşmak yetersizdir; onu kaldır.
- Sunucu tarafı defense in depth. Hardware attestation'ı tavsiye niteliğinde kabul et, hassas operasyonları taze challenge'lara bağla ve yüksek-güvence akışları (StrongBox/FIDO2) için güncel patch level'ları gerektir.