KPP (Kernel Patch Protection / WatchTower)¶
Apple'ın birinci nesil kernel integrity monitor'ü (A7–A9): kernel text'ini ve read-only data'sını periyodik olarak hash'leyerek runtime patching'i tespit — ama engellemeyen — privileged bir TrustZone/EL3 gözcüsü.
Mechanism¶
Güvenlik invariant'ı (ve sınırı)
Dahili olarak WatchTower denen KPP, kernel'in executable text'inin ve constant/read-only section'larının boot'ta yüklenenle byte-byte aynı kalması invariant'ını zorunlu kılmaya çalışır. Kritik sınırlama — KPP'nin haleflerinden neden daha zayıf olduğunun kalbi — bu invariant'ı preventif ve sürekli değil, detektif ve periyodik olarak enforce etmesidir. KPP daha yüksek bir privilege level'da (EL3 / TrustZone monitor) çalışır ve kernel'in durumunu belirli anlarda örnekler; kernel kodunu kalıcı olarak patch'leme yeteneğini ortadan kaldırarak çıtayı yükseltir, ama iki kontrol arasındaki pencereyi kapatamaz.
EL1 (kernel) bir EL3 monitor'ünü yeniden programlayamadığı ya da duraklatamadığı için KPP, naif "kernel'i patch'le ve patch'li bırak" jailbreak tekniklerini güvenilmez kıldı: kernel text'ine kalıcı bir modifikasyon eninde sonunda gözlemlenir ve cihaz panic verirdi. Yükselttiği çıta mütevazı ama gerçekti — exploit'lerin ya korunan bölgelere dokunmaktan kaçınması ya da onları kontroller arasında geri yüklemesi gerekiyordu.
Walkthrough¶
Üst düzeyde WatchTower şöyle çalışır:
- Monitor'e giriş. Kontrol, belirli privileged event'lerde (örneğin bazı exception/trap path'lerinde) EL3 monitor'üne ulaşır. Bu anlarda monitor hassas EL1 system register'larını ve kernel'in durumunu saklar.
- Integrity hashing. Monitor, kernel image'ı ve yüklü kext'leri dolaşır, her
__TEXTsegment'ini ve constant/read-only (__const) section'ını walk eder ve bunların üzerinde kriptografik checksum'lar hesaplar — public reverse-engineering çalışmaları (Levin, CB16) bunun bir BLAKE ailesi hash'i (blake2b) olduğunu belgeler. Referans hash'ler, EL1'e erişilemez EL3 belleğinde tutulur. - Verification. Hesaplanan hash'ler, saklanan referans değerlerle karşılaştırılır. Bir uyuşmazlık — yani kernel kodunun ya da read-only data'sının değiştirildiğine dair kanıt — sessiz devam yerine bir panic tetikler.
KPP ilkesel olarak neden bypass edilebilir
KPP, doğasında bir timing gap'i olan bir check-then-use tasarımıdır. Kernel'de execute edebilen bir saldırgan şunları yapabilir: (a) kernel kodunu patch'le, (b) patch'in gerektirdiği privileged işlemi gerçekleştir ve (c) orijinal byte'ları geri yükle — hepsini bir sonraki monitor pass'i değişikliği gözlemlemeden önce. Monitor durumu yalnızca ayrık anlarda örneklediği için yeterince hızlı ya da dikkatlice sıralanmış bir manipülasyon asla yakalanmaz. Public olarak belgelenmiş çalışmalar, monitor'ün çalıştığı koşulları manipüle ederek ve onun kontrollerine karşı race ederek pratik KPP yenilgilerini gösterdi.
Belgelenmiş boşluklar ve hardware yanıtı
- Kontrol edilmeyen section'lar. Erken KPP her hassas bölgeyi kapsamadı. Dikkat çekici bir örnek:
__got(global offset table) başlangıçta KPP'nin kapsamı dışındaydı ve public bir jailbreak tarafından suistimal edildi; Apple onu sonradan koruma altına aldı. - Kapsam vs. enforcement. Tam kapsamla bile temel periyodik-örnekleme zayıflığı kaldı. Apple'ın yazılım monitor'ünü A10 ve sonrasında hardware enforcement (
ktrr.md) ile değiştirmesinin nedeni budur: bir modifikasyonu olay sonrası tespit etmek yerine, memory controller write'ı tümden reddeder ve timing penceresini tamamen ortadan kaldırır.
Karşılaştırma: Windows PatchGuard
Kernel integrity'sini periyodik olarak doğrulayan privileged bir yazılım gözcüsünün genel kavramı Windows'ta da Kernel Patch Protection (PatchGuard) olarak görünür; bu, SSDT ve kernel kodu gibi yapıları periyodik olarak kontrol eder. KPP gibi PatchGuard da detektif, periyodik bir mekanizmadır ve aynı yapısal sınırlamayı paylaşır; modern Windows, daha güçlü, sürekli garantiler için onu hypervisor-enforced code integrity ile eşleştirir. Apple'ın soyağacı ise bunun yerine memory-controller enforcement'a yöneldi.
Detection¶
- Nesil / SoC kontrolü. KPP/WatchTower A7–A9 sınıfı cihazlarla ilişkilidir; A10 ve sonrası bunun yerine hardware
ktrr.md(ve A12+ctrr.md) mekanizmalarını kullanır. SoC neslini belirlemek hangi şemanın yürürlükte olduğunu gösterir. - Davranışsal sinyal. KPP-korumalı bir cihazda, kernel text'ine ya da
__const'a kalıcı bir yetkisiz modifikasyon, monitor tarafından flag'lenen bir kernel panic olarak görünür — integrity verification'ın tetiklendiğine dair bir telemetri göstergesi. - Araştırma build'leri ve public writeup'lar EL3 monitor'ünün hash tabanlı verification'ını belgeler; production cihazlarda monitor'ün kendisi tasarım gereği EL1'den doğrudan gözlemlenebilir değildir.
Mitigation¶
- Hardware enforcement'ı tercih et. KPP eski bir mekanizmadır; kalıcı defensive posture, modifikasyonun yalnızca tespit edilmek yerine engellendiği hardware-locked kernel text'tir (
ktrr.md/ctrr.md). - Kapsamlı kapsam. Herhangi bir integrity monitor tüm hassas bölgeleri kapsamalıdır (text, const, GOT/relocation table'ları, page table'ları); boşluklar exploit hedefi olur.
- Defense-in-depth. Kernel-text integrity'sini read-only-after-init data (
read-only-after-init.md), strict kernel W^X (strict-kernel-rwx.md) ve pointer authentication (arm-pointer-authentication.md) ile birleştir ki anlık bir patch penceresi bile kalıcı, yeniden kullanılabilir bir primitive vermesin.