Skip to content

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

  1. 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.
  2. Lock'tan sonra memory controller, o physical range'e yapılan write'ları reddeder.
  3. 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.
  4. 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).
  5. 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

References