Skip to content

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):

  1. PPL dışını kilitle. APRR, normal EL1 için page table'ları read-only, PPL kodunu non-executable işaretler.
  2. 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.
  3. 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.
  4. 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

/* XNU wants to edit a PTE */
ppl_dispatch(PMAP_ENTER, args)   /* trap into PPL */
   -> validate(args); APRR_unlock(); write_pte(); APRR_lock(); return
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.

References