Skip to content

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:

  1. 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.
  2. 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.md kullanı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.

References