CTRR (Configurable Text Read-Only Region)¶
CTRR, KTRR'nin Apple A12+ hardware ile dayatılan halefidir: memory controller, kernel text/RO region'ını kilitler, böylece kernel kodu ring-0 saldırganları tarafından bile asla değiştirilemez.
Mechanism¶
Bug class / invariant
Bir saldırgan kernel read/write elde ettiğinde, doğal bir sonraki adım kernel kodunu patch'lemektir (check'leri devre dışı bırakmak, hook'lar kurmak). CTRR şu invariant'ı dayatır: kernel text ve read-only region, lock'tan sonra — kernel'in kendisi dahil hiç kimse tarafından — yazılamaz. Selefi KTRR (Kernel Text Read-Only Region / "RoRgn") gibi CTRR de, tüm bellek erişimlerinin geçtiği memory controller (AMCC)'da dayatılır: boot'un erken aşamasında bir start/end/lock MMIO range'i programlanır ve kilitlenir. Lock'tan sonra, korunan physical range'e yapılan herhangi bir write, page-table permission'larından bağımsız olarak hardware tarafından reddedilir. "Configurable", A12+'nın KTRR'ye kıyasla daha esnek region kurulumunu yansıtır. Bu, basit "kazanmak için kerneli patch'le" primitive'ini ortadan kaldırır ve saldırganları data-only ya da PPL aracılı tekniklere yönlendirir.
Walkthrough¶
Yüksek seviye, kavramsal (public reverse-engineering yazılarından):
- Boot'un erken aşamasında kernel, kernel text ve constant data'yı kapsayacak şekilde CTRR/RoRgn start/end register'larını programlar, sonra lock bit'ini set eder.
- Lock'tan sonra memory controller, o physical range'e yapılan write'ları reddeder.
- Kernel R/W primitive'ine sahip bir saldırgan, kernel kodunu ezmeye ya da korunan page'leri yazılabilir olarak remap etmek için bir page table'ı değiştirmeye çalışır.
- Korunan physical belleğe yapılan write AMCC tarafından reddedilir (ve PPL, region'ı yazılabilir olarak remap etmeyi önlemek için page table'ları sanitize eder).
- Kod patch'leme başarısız olur; saldırgan data-only manipülasyona geri dönmek ya da lock penceresinin kendisine saldırmak zorundadır (örneğin, sonraki araştırmalarda olduğu gibi bir coprocessor aracılığıyla).
Warning
CTRR, tüm kernel state'ini değil, at-rest hâldeki code integrity'sini korur. Araştırmalar (örneğin coprocessor / DMA yollarını suistimal eden exploit'ler ve PPL bypass'ları), protected-region modelinin bazen kilitli range'e doğrudan yazmadan atlanabildiğini gösterdi. CTRR, Apple'ın defense-in-depth'inin bir katmanıdır.
Detection¶
- Yönetilen Apple platformlarında detection büyük ölçüde preventive/hardware'dir; savunucular host telemetrisinden ziyade Apple'ın secure-boot zincirine ve integrity attestation'ına güvenir.
- Korunan region'a atıfta bulunan beklenmedik kernel-integrity hataları / panic'leri, tampering denemelerine işaret edebilir.
Mitigation¶
- Mitigation'ın kendisi CTRR'dir: cihazları desteklenen A12+ hardware'de ve güncel iOS/macOS'ta tut.
- PPL (Page Protection Layer bypass via debug registers ilgili katmanı belgeliyor), ARM Pointer Authentication ve signed/verified boot ile birleştir.
- lock-window ve coprocessor bypass'larını kapatmak için Apple güvenlik güncellemelerini hemen uygula.