PPL (Page Protection Layer)¶
PPL is a "kernel inside the kernel" in XNU that uses APRR to keep page tables and page-table-editing code unreachable to ordinary kernel execution, so an attacker with kernel read/write/execute still cannot rewrite page tables or process code.
Mechanism¶
Sınır neden tutuyor
Bir saldırgan kernel read/write/execute elde ettikten sonra yüksek değerli bir sonraki adım page table'ları düzenlemek olur — korumalı belleği writable olarak remap'lemek ya da saldırgan kodunu executable olarak map'lemek. PPL bu yeteneği sıradan kernel'den söküp alır. APRR üzerine inşa edilir (ve CTRR/KTRR'ye bağımlıdır); EL1 içinde daha ayrıcalıklı bir alt-domain oluşturur.
Normal kernel yürütmesi sırasında APRR, page table'ları ve metadata'larını read-only, page table'ları düzenleyen kodu da non-executable yapmaya zorlar. Bir page table'ı değiştirmenin tek yolu bir PPL routine çağırarak PPL'e girmektir — XNU'dan daha-ayrıcalıklı PPL'e bir syscall'a benzeyen bir entry point; bu, APRR izinlerini flip'ler, denetlenmiş düzenlemeyi yapar ve çıkar. Sınır tutar çünkü page table'lara dokunabilen kod kümesi küçük, denetlenmiş bir PPL routine setine indirgenmiştir; ham kernel R/W page table'ları okuyabilir ama yazamaz, ham kernel yürütmesi de page table düzenleyen instruction'lara ulaşamaz. Bu, tam kernel compromise'dan sonra bile process kod bütünlüğünü ve page-table invariant'ını korur.
Walkthrough¶
Yüksek seviyeli, kavramsal (Project Zero'nun PPL araştırmasından):
- PPL dışını kilitle. APRR, normal EL1 için page table'ları read-only, PPL kodunu non-executable işaretler.
- Aracılı giriş. Tüm page-table değişiklikleri dar PPL routine'lerinden geçer
(
pmap_enter,pmap_remove_options, …); bunlar PPL'e geçer, argümanları doğrular, düzenler ve döner. - Kernel R/W'ye sahip saldırgan bir page'i executable map'lemeye ya da korumalı belleği writable yapmaya çalışır — ama doğrudan yazma reddedilir (read-only) ve düzenleyen kod ulaşılamaz durumdadır.
- Bypass sınıfları (kamuya açık). Araştırmacılar physical-mapping primitive'lerini,
DART (coprocessor) yönlendirmesini ve clock-gating'i deneyledi — ve PPL-routine
argüman karışıklığı buldular: bir translation-table sınırını aşan bir virtual
range'i yanlış işleyen bir routine (örn.
pmap_remove_options_internal); bu, invalidate edilen TLB entry'leri ile kaldırılan TTE'ler arasında bir uyuşmazlık üretiyordu — sonradan page table olarak yeniden kullanılan page'ler için stale TLB entry'leri bırakıyordu, yani APRR duvarının kırılması değil, güvenilen routine'lerin içindeki bir logic bug.
Yalnızca kavramsal giriş şekli
Yalnızca açıklayıcı — offset, dispatch index ya da exploit primitive yok.Warning
PPL page-table ve kod bütünlüğünü korur, tüm kernel state'ini değil. Bypass'lar PPL routine'lerindeki bug'lardan (argüman/range karışıklığı, TLB/TTE desync) ve CPU'nun APRR görünümü dışındaki belleğe ulaşan peripheral'lardan (DMA/coprocessor) gelmiştir. Apple o zamandan beri page-table korumasını daha yeni SoC'lerde hardware-enforced SPTM/TXM'e doğru taşıdı.
Detection¶
- Yönetilen Apple platformlarında koruma preventive/hardware-assisted'tır; savunucular host telemetry yerine Apple'ın secure-boot ve integrity attestation'ına güvenir.
- PPL routine'lerinde kernel panic'leri, page-table-integrity fault'ları ya da beklenmedik PPL-violation abort'ları güçlü kurcalama (tamper) sinyalleridir.
- Exploit denemeleri çoğu zaman alışılmadık page-table allocation zamanlaması ve multi-threaded TLB-stale race'leri gerektirir — gözlemlenebildiği yerde işaretlenmeye değer pattern'ler.
Mitigation¶
- PPL'in kendisi mitigation'dır: cihazları desteklenen hardware'de ve güncel iOS/macOS'ta tutun; orada page-table düzenlemeleri denetlenmiş PPL routine'lerine hapsedilmiştir.
- PPL-routine logic bug'larını (argüman/range karışıklığı, TLB desync) kapatmak için Apple güvenlik güncellemelerini hemen uygulayın.
- Defense-in-depth olarak CTRR (kilitli kernel text), APRR ve Pointer Authentication ile birleştirin.
- Bilinen bypass uyarısı: PPL'in duvarı sağlamdır, ama bir PPL routine'indeki bir bug ya da bağımsız bir bellek görünümüne sahip bir peripheral hâlâ page-table invariant'ını altüst edebilir — Apple'ın sonraki SoC'lerde bir hardware monitor'a (SPTM/TXM) geçmesinin nedeni budur.