Trident / Pegasus kernel chain (CVE-2016-4657, CVE-2016-4655, CVE-2016-4656)¶
NSO Group'un "Trident" iOS zero-day chain'inin (Pegasus) kernel yarısı: bir kernel information leak, KASLR'ı yenmek ve cihazı sessizce jailbreak etmek için bir kernel memory-corruption bug'ını besler.
Mechanism¶
Note
"Trident", BAE'li bir insan hakları savunucusuna ("Million Dollar Dissident") yönelik bir spear-phishing girişiminin ardından 2016'da Citizen Lab ve Lookout tarafından açıklanan üç-bug'lı bir chain'dir. Bir Safari WebKit bug'ı başlangıç code execution'ı verir; ardından iki kernel bug'ı user/kernel sınırını aşar. Kırılan kernel invariant'ı KASLR altında memory safety'dir: bir info leak sırrı (kernel'in randomize edilmiş base'i) ortadan kaldırır ve bir corruption bug'ı sonra user'ın kontrol ettiği girdiyi kernel write yeteneğine dönüştürür.
Kanonik CVE ataması:
- CVE-2016-4657 — Safari'de açılan bir link'ten erişilebilen WebKit / JavaScriptCore'da memory corruption; başlangıç in-sandbox code execution'ını verir.
- CVE-2016-4655 — attacker'ın kernel'in memory'deki konumunu hesaplamasına olanak tanıyan bir kernel information leak (kernel base mapping disclosure); yani bir KASLR bypass (information leak / memory disclosure).
- CVE-2016-4656 — sızdırılan base verildiğinde arbitrary kernel read/write veren ve Pegasus'un cihazı sessizce jailbreak edip gözetim payload'unu kurmasına imkân tanıyan kernel memory corruption (32- ve 64-bit iOS).
Walkthrough¶
Kamuya açık Lookout/Citizen Lab analizlerine dayanan yüksek seviyeli chain. Exploit kodu, offset veya gadget chain'i yeniden üretilmemiştir.
-
Giriş (CVE-2016-4657). Hedef bir spear-phishing link'ine dokunur; Safari, browser sandbox'ı içinde code execution kazanmak üzere WebKit/JavaScriptCore memory-corruption bug'ını tetikleyen attacker JavaScript'ini yükler.
-
KASLR'ı yen (CVE-2016-4655). O dayanak noktasından stage-2 kodu, kernel base adresini geri elde etmek için kernel information leak'i tetikler, sonra sonraki kernel hedeflerinin gerçek adreslere çözülmesi için KASLR slide'ını hesaplar.
-
R/W'ye kernel corruption (CVE-2016-4656). Adresler bilindiğinde, arbitrary kernel read/write elde etmek için kernel memory-corruption bug'ı sürülür.
Conceptual chain
- Jailbreak + persistence. Stage-2 binary'si kernel konumunu belirler, kendi privilege'larını yükseltir, koruyucu önlemleri (code-signing enforcement dahil) devre dışı bırakır ve Pegasus'u çalıştırmak için gereken tooling'i kurar. Lookout, aynı stage-2 mantığının hem tam kernel exploit'ini gerçekleştirmek hem de zaten jailbreak'lenmiş bir cihazı tespit etmek/patch'lemek için yeniden kullanıldığını belirtir.
Detection¶
- Patch durumu / versiyon: etkilenen donanımda 9.3.5'ten eski herhangi bir iOS açıktır; güncel olmayan cihazları envantere al ve işaretle.
- MDM / ağ göstergeleri: tarihsel Pegasus stage-1 fetch'i belirli attacker'ın kontrol ettiği domain'leri ve SMS/iMessage ile teslim edilen kötü amaçlı bir link kullandı; Lookout/Citizen Lab'den gelen threat-intel IOC'leri (domain'ler, URL desenleri) ağ kenarında eşleştirilebilir.
- Cihaz forensics: beklenmedik jailbreak artifact'ları, code-signing/AMFI bypass kanıtı ve bilinmeyen launch daemon'ları/dylib'leri, iOS forensic imajlarında post-exploitation sinyalleridir (örn. MVT-tarzı analiz üzerinden).
- Davranışsal: şüpheli bir link açıldığı sıralarda Safari kaynaklı crash'ler veya anormal WebContent process davranışı.
Mitigation¶
- Patch: Apple 25 Ağustos 2016'da iOS 9.3.5'i yayınladı ve üç CVE'yi de düzeltti; iOS'u güncel tutmak birincil mitigation'dır.
- Platform hardening (sonraki iOS): sonraki sürümler WebKit→kernel attack surface'ini küçültmek ve info-leak + corruption chain'lerini bir araya getirmeyi zorlaştırmak için KTRR/KIP, Pointer Authentication (PAC) ve Lockdown Mode ekledi/güçlendirdi.
- Operasyonel: untrusted link'leri açmaktan kaçın; yüksek riskli kullanıcılar için Lockdown Mode'u etkinleştir ve otomatik güncellemeleri açık tut; güncel Pegasus IOC'leri olan mobile threat-defense/MDM dağıt.