KTRR (Kernel Text Read-Only Region)¶
Apple'ın A10+ hardware-enforced kernel code integrity'si: memory controller ve CPU core'ları boot'tan sonra kernel text'ini ve read-only data'sını değişmez kilitler ve runtime patching'i yalnızca tespit etmek yerine engeller.
Mechanism¶
Güvenlik invariant'ı
KTRR, sürekli ve hardware'de, kernel __TEXT'ini ve read-only data'sını kapsayan tanımlı bir fiziksel aralığın asla yazılamamasını ve MMU etkinleştirildikten sonra instruction fetch'in o aralıkla sınırlanmasını zorunlu kılar. Kernel integrity'sini periyodik olarak kontrol eden ve race edilebilen yazılım selefi kpp.md'nin aksine, KTRR her erişimde memory controller ve per-core register'lar tarafından enforce edilir. Bu, check-then-use timing penceresini tamamen kapatır: kilitli kernel text'ini hedefleyen bir write, etkili olamadan önce silikon seviyesinde reddedilir. Niteliksel sıçrama budur — detektif bir monitor'den preventif, timing ile bypass edilemez bir garantiye geçiş.
Sonuç, kernel kodu için gerçek bir hardware W^X'tir: kernel-mode write primitive'i olan bir saldırgan bile kernel instruction'larını patch'leyemez ya da korunan read-only data'yı çeviremez; bu, bir memory-corruption bug'ından kernel'de kalıcı code execution'a giden en doğrudan path'i ortadan kaldırır.
Walkthrough¶
KTRR, birbirini güçlendiren iki hardware primitive'inden oluşur:
- Memory-controller read-only region (RoRgn / AMCC). DRAM memory controller'ı (public araştırmada AMCC olarak anılır), bir bölgeyi start, end ve lock field'larıyla tanımlayan MMIO register'ları sunar. Start/end korunacak page aralığını tanımlar; bir kez set'lendikten sonra controller, o aralık içindeki fiziksel adreslere yapılan tüm write'ları reddeder. lock bit'i bir kez assert edildiğinde, start/end/lock field'larının kendisinin bir sonraki reset'e kadar değiştirilmesini engeller. Bu, write'ları hangi translation ya da master tarafından issue edildiğine bakmaksızın yakalar. Bkz.
amcc-rorgn.md. - Per-core KTRR register'ları. Her CPU core'u, MMU açıkken instruction fetch'i korunan aralıkla sınırlayan register'lar taşır, böylece execution yönlendirilse bile kilitli kernel text'inin dışından instruction fetch edemez.
Boot-time lockdown
Koruma, kernel boot'unun geç bir aşamasında — kernel herhangi bir meşru self-modification/initialization'ını bitirdikten sonra, ama herhangi bir untrusted userland kodu çalışmadan önce kurulur. O noktada RoRgn ve KTRR register'ları programlanır ve lock bit'leri set'lenir. Lock reset'e kadar sticky olduğu için sonradan çalışan hiçbir app- ya da kernel-seviyesi exploit bölgeyi genişletemez, taşıyamaz ya da devre dışı bırakamaz.
Halef: CTRR
A12 ve sonrasında Apple, CTRR (Configurable Text Read-only Region) gönderir; bu, aynı hardware-enforced read-only kernel text'ini daha ince kontrolle başaran daha yapılandırılabilir bir evrimdir. Defensive garanti aynıdır: hardware kilitli kernel kodu/RO data'sına write'ları reddeder. Bkz. ctrr.md.
Residual bypass sınıfları (üst düzey, public olarak belgelenmiş)
KTRR kernel text'ini ve belirtilen read-only fiziksel aralığı korur — kendi başına bir exploit'in isteyebileceği her şeyi korumaz: - Bölge dışındaki hedefler. Değişebilir kernel data'sı, kilitli aralığın kapsamadığı page table'ları ve writable function-pointer table'ları corrupt edilebilir kalır; data-only ve control-flow-hijack teknikleri kilitli text'e dokunmaktan kaçınabilir. Tamamlayıcı mekanizmalar (PPL/SPTM gibi page-table monitor'leri ve pointer'lar için PAC) bunları ele alır. - Coprocessor'lar ve alternatif master'lar. Araştırmalar, korunan fiziksel belleğe aynı enforcement'tan geçmeyen path'ler üzerinden (örn. coprocessor DMA) ulaşmayı inceledi ve bu, Apple'ın sonraki, daha geniş page-table monitor'lerini (PPL, sonra SPTM) motive etti. - Lockdown öncesi pencereler. Lock assert edilmeden önce boot chain'i sabote eden her şey KTRR'nin tehdit modelinin dışındadır ve Secure Boot'un alanıdır.
Detection¶
- SoC nesli. KTRR, A10/A11 sınıfı cihazlarda mevcuttur; A12+
ctrr.mdkullanır. Daha eski A7–A9 cihazlar yazılım monitor'ükpp.md'ye dayanır. SoC'yi belirlemek aktif mekanizmayı gösterir. - Register/MMIO incelemesi (araştırma). Araştırma-etkin hardware'de, AMCC RoRgn start/end/lock register'ları ve per-core KTRR register'ları, bölgenin programlandığını ve kilitlendiğini doğrulamak için okunabilir; public kernel-debugger projeleri erişimlerini tam olarak bu register'ları yenmek üzerine kurdu.
- Davranışsal sinyal. Kilitli bölgeye yapılan bir write girişimi sessizce başarılı olmak yerine fault/abort verir — enforcement'ın canlı olduğunun güçlü bir göstergesi.
Mitigation¶
- Etkin tut; araştırma konfigürasyonlarını asla production'a gönderme. KTRR/CTRR desteklenen cihazlarda default'ta açıktır ve kontrollü debugging dışında devre dışı bırakılmamalıdır.
- KTRR'nin kapsamadığı korumaları katmanla. Hardware kernel-text lockdown'ı page-table monitor'leri (PPL/SPTM), pointer authentication (
arm-pointer-authentication.md,arm-pacbti.md) ve read-only-after-init data (read-only-after-init.md) ile eşleştir ki corruption kilitli bölge etrafında data-only ya da control-flow saldırılarına pivot edemesin. - En yeni silikonda, tag tabanlı memory safety (
memory-integrity-enforcement-enhanced-mte.md), bir saldırganın herhangi bir kernel hedefine ulaşmak için kullanacağı memory-corruption primitive'lerini daha da kısıtlar.