Bölüm 1: Bu Nedir ve Neden Hayati Önem Taşır?
XNU (X is Not Unix), Apple ekosisteminin (iOS, macOS, watchOS, tvOS) temelini oluşturan hibrit bir çekirdek mimarisidir. Bu analiz, XNU’nun iki ana temel taşı olan Mach 3.0 mikroçekirdek türevi ve FreeBSD’den uyarlanmış BSD tek çekirdek (monolithic) katmanı arasındaki etkileşimi, özellikle güvenlik zorunlulukları ve bellek izolasyonu garantileri açısından ontolojik olarak çerçeveler. Temel yaklaşim, Mach’in sağladığı düşük seviyeli mekanizmalar (görev/iş parçacığı yönetimi, sanal bellek, IPC – Inter-Process Communication, port tabanlı yetkilendirme) ile BSD katmanının sunduğu POSIX uyumluluğu, dosya sistemi, ağ yığını ve süreç kimlik modeli arasındaki güvenilirlik sınırlarını (Trust Boundaries) resmi doğrulama (Formal Verification) ve çalışma zamanı denetimi (Runtime Enforcement) perspektifiyle incelemektir. Çalışma, çekirdek modu kod yürütme, sanal bellek haritalama manipülasyonu ve IPC mesaj kuyrukları üzerindeki yetki yükseltme vektörlerini sistematik olarak haritalamayı hedefler.
Bölüm 2: Perde Arkası: Sistem Nasıl Çalışıyor?
XNU’nun çalışma mekanizması, Mach mikroçekirdeğinin “minimalist çekirdek” felsefesi ile BSD’nin “tek adres alanı” verimliliği arasında bir sentekozdur. Mach katmanı, fiziksel belleği soyutlayan vm_map yapıları üzerinden sanal adres alanlarını yönetir; her görev (task), kendi port ad alanına (IPC namespace) sahip izole bir sanal bellek konteyneridir. BSD katmanı ise proc yapısı aracılığıyla POSIX süreç semantiklerini (PID, UID/GID, sinyaller, dosya tanımlayıcıları) Mach görevleri üzerine bindirir. Güvenlik izolasyonu, Mach Port Rights (Send, Receive, Send-Once) mekanizmasıyla sağlanır; bir süreç başka bir sürecin port yetkisine sahip olmadıkça IPC yapamaz. Bellek izolasyonu ise pmap (Physical Map) modülü tarafından donanım sayfa tabloları (ARMv8-A TTBR0/TTBR1, VMSA) yönetilerek, çekirdek ve kullanıcı modu sayfa tablolarının kesin ayrımı (Kernel Page Table Isolation – KPTI benzeri donanım destekli ayrım) ve PAC (Pointer Authentication Codes) / MTE (Memory Tagging Extension) gibi ARMv8.3+ donanım özelliklerinin çekirdek veri yapılarında (ipc_port, vm_map_entry, proc) entegre edilmesiyle gerçekleşir.
Bölüm 3: Bilim Dünyası ve Uzmanlar Nasıl İnceliyor?
Güvenlik ve izolasyon doğrulaması için Common Criteria (ISO/IEC 15408) EAL 4+ seviyesindeki hedeflere referans veren Apple Platform Güvenliği belgeleri, NIST SP 800-53 (SC-3, SI-16) kontrolleri ve ARMv8-A Architecture Reference Manual (VMSA, PAC, MTE, BTI) donanım zorunlulukları temel standartları oluşturur. Metodolojide; statik analiz için Clang Static Analyzer ve CodeQL sorguları (taint tracking, use-after-free, race condition), dinamik analiz için Kernel Address Sanitizer (KASAN), Kernel Memory Sanitizer (KMSAN) ve libFuzzer tabanlı çekirdek fuzzing (syzkaller adaptasyonu) kullanılır. Resmi doğrulama tarafında seL4 stili Isabelle/HOL modelleri Mach IPC hızlı yolu (fast path) ve vm_map işlemleri için prototiplenmiştir. Çalışma zamanı denetim protokolü; AMFI (Apple Mobile File Integrity) imza zorunluluğu, Hardened Runtime bayrakları, Sandbox (Seatbelt) profilleri (SBOP – Sandbox Operations) ve Trust Cache mekanizması üzerinden kod imzalama ve sayfa sahipliği transferi (page ownership transfer) kurallarının atomik doğrulanmasını kapsar.
Bölüm 4: Önemli Parametreler ve Karşılaştırma Rehberi
| Parametre | Olcut / Deger | Metrik | Stratejik Etki |
|---|---|---|---|
| Sanal Bellek İzolasyon Birimi | Mach Task / vm_map | Adres Alanı Sayısı / Süreç | Çoklu süreç izolasyonu; tek bir task içindeki thread’ler paylaşımlı belleğe sahiptir, süreç arası izolasyon vm_map kopyalama (copy-on-write) ile sağlanır. |
| IPC Yetki Modeli | Mach Port Rights (Send/Receive/Dead Name) | Yetki Taşıma Hızı (ns/op) | Kapabilite tabanlı güvenlik; port yetkileri çekirdek tarafından doğrulanır, kullanıcı alanı kopyalayamaz (kernel-enforced capabilities). |
| Çekirdek Bellek Koruması | KTRR (Kernel Text Read-Only Region) + PPL (Protected Pointer Logic) | Yazma Erişimi Engelleme Oranı (%) | Çekirdek kod ve salt okunur veri segmentleri donanım seviyesinde yazılamaz; PPL ile proc/ipc_port kritik yapıları koruma altına alınır. |
| Pointer Authentication (PAC) | ARMv8.3 PACIA/PACIB / A/B Keys | İmza Doğrulama Başarısızlığı (Exception Rate) | ROP/JOP saldırı vektörlerini kırar; geri dönüş adresleri ve fonksiyon işaretçileri bağlamsal imzayla korunur. |
| Memory Tagging (MTE) | ARMv8.5 MTE (Asynchronous/Synchronous) | Bellek Güvenliği İhlali Tespit Gecikmesi | Use-after-free, buffer overflow tespiti; çekirdek heap (kalloc) ve stack etiketleme ile deterministik tespit. |
| Sandbox Kural Motoru | Seatbelt / SBOP (Mach Trap) | Kural Değerlendirme Gecikmesi (µs) | Zorunlu Erişim Kontrolü (MAC); sandbox_check hook’ları BSD ve Mach sistem çağrılarında atomik değerlendirilir. |
| Kod İmzalama Zorunluluğu | AMFI / Trust Cache / CDHash | İmza Doğrulama Süresi (ms) | Çekirdek modülü ve kullanıcı modu yürütülebilir dosyalar için SHA-256/CDHash zorunluluğu; cs_enforcement bayrağı. |
| Sayfa Tablosu İzolasyonu | ARMv8-A VMSA (TTBR0_EL1 / TTBR1_EL1) | Bağlam Değiştirme Maliyeti (siklus) | Kullanıcı/Çekirdek adres alanı donanımla ayrılır; Meltdown/Spectre v1-v4 azaltmaları (KPTI, CSV2/3) entegredir. |
| Bölge Tabanlı Ayırıcı | kalloc_type / kheap_zone (Type-based) | Parçalama Oranı / Ayırma Hızı | Tür bazlı ayırma (struct ipc_port, vm_map_entry) heap feng shui saldırılarını zorlaştırır. |
| Güvenli Önyükleme Zinciri | iBoot -> Kernelcache -> Userland | Doğrulama Zinciri Bütünlüğü (Boolean) | Her aşama bir sonrakinin hash’ini (IMG4) doğrular; çekirdek yüklenmeden önce AMFI trust cache yüklenir. |
Bölüm 5: Günlük Hayatta ve Doğada Nerede Karşımıza Çıkar?
Bu mimari, iOS’un “App Sandbox” modelinin çekirdek düzeyindeki dayanağını oluşturur. Pratik senaryoda; bir üçüncü parti uygulama (App Store süreci), kendi task ve vm_map içinde başlatılır, proc yapısına atanan sandbox profili (container.sb) sandbox_check hook’ları aracılığıyla open, execve, mach_msg sistem çağrılarını kısıtlar. Kritik bir vaka analizi: CVE-2021-30860 (XNU Kernel Use-After-Free in IPC). Saldırgan, mach_port_insert_right ve mach_port_deallocate yarış koşulunu (race condition) tetikleyerek ipc_port yapısını serbest bırakılmış bellek havuzundan (kalloc.1024) yeniden tahsis ettirdi. PAC imzası olmayan bir fonksiyon işaretçisi (ip_kobject) üzerine yazılarak çekirdek kod akışı yönlendirildi. Apple’ın yanıtı; ipc_port yapısına PAC koruması ekmek, kalloc_type ile tip bazlı ayırma zorunluluğu getirmek ve mach_port referans sayacını atomik işlemlerle (OSAtomic) korumaktı. Bu, Mach IPC hızlı yolunun (fast path) güvenlik/performans dengesini yeniden kalibre etme zorunluluğunu kanıtladı.
Bölüm 6: Karşılaşılan Zorluklar ve Pratik Çözümler
Ana operasyonel darboğaz, Mach IPC’nin yüksek performanslı “hızlı yolu” (fast path) ile güvenlik denetimlerinin (SBOP, PAC doğrulama, MTE etiketi) atomikliği arasındaki gerilimdir. Risk Faktörleri: 1) TOCTOU (Time-of-Check-Time-of-Use) zafiyetleri: vm_map kilitleme hiyerarşisi (vm_map_lock -> vm_object_lock) karmaşıklığı kilit sıralama ihlalleri (lock inversion) ve deadlock riski yaratır. 2) Heap Feng Shui: Bölge tabanlı ayırıcılar (zones) trotzünde, boyut sınıfları (kalloc.16, kalloc.512) arasındaki tahmin edilebilir yerleşim, use-after-free exploitabilitesini artırır. 3) Donanım Bağımlılığı: PAC/MTE/KTRR korumaları sadece son nesil SoC’larda (A14/M1+) tam etkilidir; eski donanımda yazılımsal azaltmalar (PAC emülasyonu, KASAN) performans cezası getirir. Proaktif Çözümler: kalloc_type ile tip izolasyonu (type isolation), vm_map işlemleri için Lockless/RCU (Read-Copy-Update) desenlerinin benimsenmesi, Kernel Integrity Protection (KIP) ile çalışma zamanı kod değiştirme engelleme ve XNU Source Code Hardening (bounds checking, integer overflow sanitizers) derleme zamanı enjeksiyonları.
Bölüm 7: Gelecek Perspektifi ve Yeni Gelişmeler
Son beş yılda (iOS 14-18 / macOS 11-15) odaklanma, “Çekirdek Yüzey Alanını Küçültme” (Kernel Attack Surface Reduction) stratejisindedir. Gelişmeler: 1) DriverKit / User-Space Drivers: IOKit sürücülerinin çekirdekten kullanıcı alanına (DriverKit/DEXT) taşınması, çekirdek kod tabanını ve C++ sanal tablo (vtable) saldırı yüzeyini azaltıyor. 2) CoreTrust / AMFIv2: İmza doğrulama mantığının çekirdekten güvenli enclave (SEP) destekli kullanıcı alanı daemonsuna (amfid) taşınması. 3) PAC/PAuth Tüm Entegrasyonu: Tüm çekirdek fonksiyon işaretçileri, geri dönüş adresleri ve kritik veri yapısı işaretçileri (C++ vtable, objc isa) PAC ile imzalanıyor. 5-10 Yıllık Projeksiyon: CHERI (Capability Hardware Enhanced RISC Instructions) mimarisinin ARMv9-MORSEL / RISC-V profilleri üzerinden XNU’ya port edilmesi; bu, pointer tabanlı bellek güvenliğini donanım yetkileri (capabilities) ile değiştirecek, spatial/temporal memory safety’i çekirdek C/C++ kodunda deterministik olarak garanti altına alacak. Ayrıca, Rust dilinin çekirdek modülü (kext/DEXT) ve yeni dosya sistemleri (APFS successor) geliştirmede C/C++ yerini alması bekleniyor.
Bölüm 8: Merak Edilen Sorular ve Cevaplar
Soru 1: XNU neden “Hibrit Çekirdek” olarak sınıflandırılır, bu güvenlik için ne anlama gelir?
XNU, Mach mikroçekirdeğinin (IPC, VM, Zamanlama) modülerliğini, BSD tek çekirdeğinin (VFS, Ağ, POSIX) performansını birleştirir. Güvenlik açısından; Mach’in kapabilite tabanlı (port rights) izolasyonu BSD’nin UID/GID tabanlı DAC (Discretionary Access Control) modeliyle çakışır. Bu çakışma, proc->task dönüşümünde yetki yükseltme riskleri (task_for_pid) yaratır; bu nedenle task_for_pid_allow entitlement ve SIP (System Integrity Protection) ile katı kontrol edilir.
Soru 2: Mach Port’ları nasıl güvenlik sınırı işlevi görür?
Mach Port’ları, çekirdek tarafından yönetilen, kullanıcı alanının kopyalayamadığı/yanıltamadığı kapabilite (capability) nesneleridir. Bir port için “Receive Right” sahibi olmak, o portta mesaj alabilme yetkisi verir; bu right sadece mach_port_insert_right veya mach_msg (send-once) ile çekirdek denetiminde transfer edilebilir. Bu, “Confused Deputy” saldırılarını engeller; bir süreç, yetkisi olmayan bir portta mesaj gönderemez veya alamaz.
Soru 3: PAC (Pointer Authentication Codes) XNU’da hangi veri yapılarını korur?
PAC, ARMv8.3+ ‘te PACIA/PACIB talimatlarıyla uygulanır. XNU’da; Çekirdek Yığın Çerçeveleri (Return Addresses – LR), Fonksiyon İşaretçileri (C++ vtables, ipc_kobject callback’leri, fileops yapısı), Heap Nesneleri (ipc_port, vm_map_entry, proc kritik alanları) ve Kullanıcı Alanı İşaretçileri (dyld cache, objc isa pointer) PAC ile imzalanır. İmza doğrulaması (AUTIA/AUTIB) başarısız olursa EXC_BAD_INSTRUCTION (SIGILL) ile süreç sonlandırılır.
Soru 4: KTRR (Kernel Text Read-Only Region) ve PPL (Protected Pointer Logic) farkı nedir?
KTRR, çekirdek metin (kod) segmentini ve salt okunur verileri (rodata) fiziksel bellek kontrolcüsü (PMC/PPL hardware) seviyesinde yazılamaz hale getirir; bu, çalışma zamanı kod enjeksiyonunu (kernel patching) engeller. PPL (Protected Pointer Logic / PPL) ise KTRR’nin bir uzantısıdır; yazılabilir veri segmentlerinde bile kritik çekirdek yapılarını (proc, ipc_port, vm_map, task) içeren sayfaları “korumalı” olarak işaretler. Bu sayfalar sadece PPL modunda (özel bir makine durumu/istisna seviyesi) yazılabilir; normal çekirdek kodu (EL1h) bu sayfalara yazamaz.
Soru 5: Sandbox (Seatbelt) profilleri çekirdek seviyesinde nasıl zorlanır?
Sandbox kuralları, derlenmiş bir bayt kodu (bytecode) formatında sandbox_compile ile oluşturulur ve çekirdeğe yüklenir. Her sistem çağrısı (BSD: open, connect; Mach: mach_msg, vm_allocate) giriş noktasında sandbox_check hook’u çağrılır. Bu hook, çağıran süreç proc yapısındaki p_sandbox işaretçisi üzerinden profil nesnesine erişir, bayt kodunu yorumlayarak (allow/deny/log) karar verir. Karar atomiktir; reddedilirse EPERM döner.
Soru 6: MTE (Memory Tagging Extension) XNU Heap (kalloc) korumasını nasıl değiştirir?
MTE, her 16 baytlık bellek granülüne 4-bitlik bir “renk/etiket” atar. XNU kalloc ayırıcısı (özellikle kalloc_type ile), ayırma sırasında rastgele bir etiket üretir, bu etiketi hem sayfa tablosu girdisinde (PTE/GPT) hem de işaretçinin üst bitlerinde (TBI – Top Byte Ignore) saklar. Erişimde donanım, işaretçi etiketi ile bellek etiketini karşılaştırır; uyuşmazlıkta Synchronous Exception (Data Abort) veya Asynchronous Interrupt üretilir. Bu, Use-After-Free (dangling pointer etiketi eski bellekle uyuşmaz) ve Heap Overflow (komşu granül etiketi farklı) tespitini donanım hızında sağlar.
Bölüm 9: Bilmeniz Gereken Temel Terimler
Mach Task: Sanal adres alanı (vm_map), IPC port ad alanı ve kaynak limitlerini kapsayan, iş parçacıklarını (thread) barındıran temel izolasyon birimi. POSIX proc yapısının Mach karşılığıdır.
IPC (Inter-Process Communication) Port: Mach’ta mesaj geçişi için kullanılan, çekirdek tarafından yönetilen, kapabilite tabanlı (send/receive rights) tek yönlü iletişim kanalı.
vm_map: Bir görevin sanal adres alanını yöneten, sanal adres aralıklarını (vm_map_entry) fiziksel sayfa çerçevelerine (vm_page) veya bellek nesnelerine (pager) eşleyen soyut veri yapısı.
PAC (Pointer Authentication Codes): ARMv8.3+ mimarisinde, işaretçi değerlerinin üst bitlerine gömülen, bağlam bağımlı (context-dependent) şifresel imzalar. Pointer bütünlüğünü donanımda doğrular.
PPL (Protected Pointer Logic / Kernel Integrity Protection): Apple SoC’larda (A14+), çekirdek yazılabilir belleğindeki kritik veri yapılarını (proc, task, port) normal çekirdek kodundan (EL1) yazılamaz hale getiren donanım tabanlı yazma koruma mekanizması.
Seatbelt (Sandbox): XNU’daki Zorunlu Erişim Kontrolü (MAC) çerçevesi; kural tabanlı (SBOP) profil ile sistem çağrısı seviyesinde kaynak erişimini kısıtlar.
AMFI (Apple Mobile File Integrity): Çekirdek ve kullanıcı modu kod imzalarını (CDHash), Trust Cache ve güvenli önyükleme zinciri (iBoot/SEP) doğrulayarak imzasız/kötü amaçlı kod yürütmeyi engelleyen alt sistem.
Bölüm 10: Özet ve Çıkarılması Gereken Dersler
XNU çekirdeği, Mach mikroçekirdeğinin kapabilite tabanlı izolasyon soyutlaması ile BSD’nin POSIX uyumluluğunu, donanım destekli güvenlik ilkeleri (PAC, MTE, KTRR/PPL, VMSA) üzerinden birleştirerek endüstri standardı bir mobil güvenlik mimarisi sunar. Analiz, güvenliğin tek bir katmanda (sadece sandbox, sadece PAC) değil; Derin Savunma (Defense in Depth) prensibine dayalı olarak; donanım (PAC/MTE/KTRR), çekirdek çekirdeği (vm_map izolasyonu, IPC kapabiliteleri, kalloc_type), çalışma zamanı denetimi (AMFI, Sandbox, KASAN) ve güvenli önyükleme zinciri (iBoot/SEP) katmanlarının atomik birleşimiyle sağlandığını ortaya koyar. Karar vericiler için stratejik yol haritası: 1) Eski Donanım Desteği Riski: PAC/MTE olmayan cihazlarda yazılımsal azaltmalar (PAC emülasyonu, KASAN) performans maliyetiyle sürdürülmeli, ancak yeni exploit mitigations (kalloc_type, PPL) en az donanım gerektiren yazılımlar olarak backport edilmeli. 2) Sürücü İzolasyonu: IOKit/DEXT geçişi hızlandırılmalı; üçüncü parti sürücüler çekirdek adres alanından tamamen çıkarılmalı. 3) CHERI/Rust Geçişi: 5 yıllık vizyonda bellek güvenliği hatalarını (C/C++ sınıfı) kökünden ortadan kaldırmak için CHERI donanım yetkileri ve Rust dili çekirdek geliştirme yaşam döngüsüne entegre edilmeli. Bu mimari, “Güvenilmeyen Kodun Güvenilir Çekirdek Üzerinde Çalıştırılması” paradoksunu, donanım-k yazılım sözleşmesi ile çözmüş durumdadır.