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 inceleme, XNU’nun ontolojik yapı taşlarını; Carnegie Mellon Üniversitesi’nden (CMU) köken alan Mach 3.0 mikroçekirdeği ve Berkeley’den (BSD) gelen UNIX personelitesini (FreeBSD 5.x tabanlı) birleştiren “hibrit” doğasını, güvenlik ve bellek izolasyonu perspektifiyle deşifre etmeyi hedefler. Metodolojik çerçeve; çekirdek modu (kernel mode) ve kullanıcı modu (user mode) sınırlarındaki sanal bellek yönetimi, IPC (Inter-Process Communication) port mekanizmaları, capability-based security modeli ve BSD katmanının POSIX uyumluluk katmanı üzerinden sunduğu sistem çağrısı (syscall) vektörlerinin güvenlik denetim noktalarını (entitlements, sandbox, code signing) kapsar. Temel yaklaşim, mikroçekirdeğin minimaliği ile monolitik BSD katmanının işlevselliği arasındaki gerilimi, modern donanım yalıtım teknolojileri (PAC, MTE, PPL) ile nasıl çözdüğünü analiz etmektir.
Bölüm 2: Perde Arkası: Sistem Nasıl Çalışıyor?
XNU’nun çalışma mekanizması, Mach’in “her şey bir nesnedir” felsefesi ve BSD’nin “her şey bir dosyadır” paradigmasının çakışması üzerine kuruludur. Mikroçekirdek (Mach), görev (task), iş parçacığı (thread), port (port) ve sanal bellek (vm_map) gibi ilkel nesneleri yönetir. Bellek izolasyonu, pmap katmanı aracılığıyla donanım MMU’su (Memory Management Unit) ile soyutlanır; her görev (task), kendi sanal adres alanına (vm_map) sahip olup, sayfa tabloları (page tables) seviyesinde yazma-kopyalama (Copy-on-Write) ve sayfa sıfırlama (zero-fill) optimizasyonlarıyla izole edilir. BSD katmanı (bsd/kern), Mach görevleri üzerine proc yapısını bindirerek POSIX süreç semantikleri (PID, uid/gid, sinyaller, dosya tanımlayıcıları) sağlar. Güvenlik denetimi, Mach port hakları (send/receive/send-once) ve BSD kredileri (kauth_cred_t) ikilisinin kesişiminde gerçekleşir; mac_policy kancaları (TrustCache, AMFI, Sandbox) her iki katmanın da sistem çağrısı giriş noktalarına enjekte ederek zorunlu erişim kontrolü (MAC) uygular.
Bölüm 3: Bilim Dünyası ve Uzmanlar Nasıl İnceliyor?
XNU güvenlik analizi; Common Criteria (ISO/IEC 15408) EAL seviyeleri, NIST SP 800-53 (SC-3, SI-7, AC-6) sistem bütünlüğü ve erişim kontrolü kontrolleri, serta ARMv8-A/ARMv9 mimari güvenlik mimarisi (ARMv8.3-PAC, ARMv8.5-MTE, ARMv8.6-EC) standartları referans alınır. Kod imzalama (Code Signing) altyapısı, X.509 PKI standartları ve Apple kök CA hiyerarşisi üzerine kuruludur; codesign ve csblob formatları, CDHash (Code Directory Hash) kullanarak sayfa seviyesinde bütünlük doğrulaması (page-level hashing) zorunlu kılar. Sandbox profilleri (Seatbelt), Scheme tabanlı bir DSL (Domain Specific Language) ile tanımlanır ve sandbox_check kancaları üzerinden Mach port trafiği ve BSD dosya sistemi operasyonları denetlenir. Geliştirme metodolojisi; Kernel Debug Kit (KDK), dtrace/ktrace dinamik izleme, vmmap/heap statik analiz ve panic log forensikleri (IPSW/ipsw.me kaynaklı sembol çözümleme) ile desteklenir.
Bölüm 4: Önemli Parametreler ve Karşılaştırma Rehberi
| Parametre | Ölçüt / Değer | Metrik | Stratejik Etki |
|---|---|---|---|
| Çekirdek Mimarisi | Hibrit (Mach 3.0 Mikroçekirdek + FreeBSD Monolitik Katman) | Modülerlik Skoru: 8/10 | Hata izolasyonu sınırlı; BSD hatası çekirdeği çökertir. |
| Sanal Bellek Yönetimi | vm_map / pmap (Çoklu ASLR, CoW, Compressed Memory) |
ASLR Entropisi: 36-40 bit (ARM64) | Sızma yüzeyini daraltır; JOP/ROP zincirlerini zorlaştırır. |
| IPC Mekanizması | Mach Ports (Capability-based, Kernel-enforced Rights) | İletim Gecikmesi: ~0.5-1.5 µs | Yüksek performanslı ama karmaşık port hakları yönetimi riski. |
| Kod İmzalama (AMFI) | Zorunlu (Kernel Enforcement), TrustCache, Library Validation | Doğrulama: Sayfa Bazlı (4KB/16KB) | Çalışma anında kod enjeksiyonunu (JIT dışı) engeller. |
| Donanım Yalıtımı (PAC) | ARMv8.3 Pointer Authentication (IA/DA Keys) | PAC Bypass CVE Sayısı: Düşük (v1.0+) | Kontrol akışı bütünlüğü (CFI) donanımda garanti altına alınır. |
| Bellek Etiketleme (MTE) | ARMv8.5 Memory Tagging Extension (Async/Sync Modes) | Etiket Çakışma Olasılığı: 1/16 | Use-after-free / Buffer overflow tespiti probabilistik. |
| Sandbox (Seatbelt) | MACF Kancaları, Profil Tabanlı (Container/Process) | Kural Sayısı: ~200+ sistem çağrısı filtresi | En az ayrıcalık prensibini zorlar; kaçış yüzeyini minimize eder. |
| PPL (Protected Process Light) | İmza Seviyesi Tabanlı Hiyerarşi (EKU/OID) | PPL Seviyeleri: 0 (Normal) – 3 (Kernel) | Kritik sistem süreçlerini (launchd, amfid) korur. |
| Kernel Read/Write Koruması | KTRR (Kernel Text Read-Only Region), KPP (Kernel Page Protection) | Yazma Erişimi: Sıfır (Donanım Kilidi) | Kernel kod segmenti çalışma anında değiştirilemez. |
| Güvenli Önyükleme | iBoot -> Kernelcache -> TrustCache Zinciri | Doğrulama Zinciri: Root of Trust (SoC ROM) | Kök güven zinciri donanımda başlar, yazılım katmanına taşınır. |
Bölüm 5: Günlük Hayatta ve Doğada Nerede Karşımıza Çıkar?
XNU güvenlik mimarisi, mobil cihaz yönetimi (MDM), kurumsal veri önleme (DLP) ve yüksek güvenlikli mobil iş istasyonları için referans mimari oluşturur. Pratik senaryoda; bir bankacılık uygulaması, com.apple.developer.default-data-protection entitlement’ı ile NSFileProtectionComplete sınıfını kullanarak cihaz kilitliyken dosya şifreleme anahtarlarını (Class Key) Secure Enclave içinde tutar; çekirdek vn_read/vn_write yollarında mac_vnode_check_open kancası ile erişim reddeder. IoT ekosisteminde (HomeKit), XPC servisleri Mach portları üzerinden launchd tarafından broker edilir; audit_token doğrulaması ile yetkisiz süreçlerin homekitd ile konuşması engellenir. Kritik vaka analizi: “Checkm8” (Bootrom exploit) donanım kök güvenini aşsa bile, KTRR ve AMFI sayesinde kernel patch protection (KPP) bypassı olmadan kalıcı rootkit kurulamaz; bu da “Defense in Depth” stratejisinin somut kanıtıdır.
Bölüm 6: Karşılaşılan Zorluklar ve Pratik Çözümler
Ana operasyonel darboğaz, Mach IPC’nin karmaşıklığından kaynaklı “Port UAF” (Use-After-Free) ve “Port Replacement” saldırı vektörleridir (örn. CVE-2019-8605, CVE-2021-30807). Mach port referans sayımı (ip_reference/ip_release) kilitsiz (lockless) algoritmalarla optimize edildiği için yarış koşulları (race conditions) yüksek risklidir. Çözüm: ipc_kobject ayrımı ve ipc_port yapısının kalloc_type ile yalıtılmış heap’lerde (kalloc.16, kalloc.32) tutulması, PAC ile port işaretçilerinin imzalanması. BSD katmanında proc yapısının p_ucred ve p_fd alanlarında TOCTOU (Time-of-Check-Time-of-Use) riskleri mac_policy kancalarının atomik kilitleme (lck_mtx) ile entegre edilmesiyle azaltılır. JIT derleyicileri (JavaScriptCore) için MAP_JIT entitlement’ı ve pmap_cs_tainted bayrağı, W^X (Write XOR Execute) politikasının gevşetilmesi riskini yönetir; Hardened Runtime bu yüzeyi com.apple.security.cs.allow-jit ile kapsüller.
Bölüm 7: Gelecek Perspektifi ve Yeni Gelişmeler
Son 2 yılda (iOS 16/17/18, macOS Sonoma/Sequoia) odaklanma alanı “Kernel Integrity” ve “Memory Safety” olmuştur. Kalloc Type Isolation: kalloc_type mekanizması ile heap nesneleri türlerine göre (örn. KALLOC_TYPE_IPC_PORT, KALLOC_TYPE_VM_MAP_ENTRY) fiziksel olarak ayrı bölgelere (zone) ayrıldı; bu, cross-type overflow’u imkansız hale getirdi. PACv2 / FPAC (Forward Edge PAC): Dönüş adresleri (LR) için PAC (IA keys) ile birlikte, işlev işaretçileri (function pointers) ve C++ vtable’ları için B-key kullanılarak ileri kenar CFI sağlandı. MTE (Memory Tagging Extension) Entegrasyonu: A17 Pro (M3) ve üzeri SoC’lerde MTE asenkron modda etkin; malloc/vm_allocate etiketli bellek döndürüyor, SIGSEGV (sync mode) ile deterministik tespit geliyor. Pointer Authentication for Kernel Data (PAC-KD): Kernel veri yapılarında (task, proc, vm_map) PAC kullanımı genişletildi. 5-10 Yıllık Projeksiyon: CHERI (Capability Hardware Enhanced RISC Instructions) mimarisinin ARMv9-R/ARMv9-A profillerine entegrasyonu ile “Capability-based Addressing” XNU’nun pointer aritmetiğini tamamen ortadan kaldıracak; vm_map girdileri capability tokenları haline gelecek. Rust dili çekirdek modülü (driver) geliştirmede C/C++’u yer almaya başlayacak (Apple driverkit Rust desteği).
Bölüm 8: Merak Edilen Sorular ve Cevaplar
Soru 1: XNU neden “Mikroçekirdek” değil “Hibrit” olarak sınıflandırılır?
Mach mikroçekirdeği (IPC, VM, Scheduling) minimal çekirdek işlevlerini sağlar ancak BSD katmanı (Dosya Sistemi, Ağ Yığını, POSIX Syscall, Güvenlik Politikaları) performans nedeniyle çekirdek adres alanında (kernel address space) monolitik bir yapı olarak derlenir. Bu, mikroçekirdek avantajlarını (modülerlik, hata izolasyonu) kısmen kaybeder ancak sistem çağrısı geçiş maliyetini (context switch) minimize eder.
Soru 2: Mach Port’ları BSD Dosya Tanımlayıcılarından (fd) nasıl farklıdır?
Mach Port’lar, çekirdek tarafından yönetilen, hak tabanlı (capability-based), çift yönlü (veya tek yönlü send-once) komunikasyon kanallarıdır ve task bazlı isim uzayında (port name space) mach_port_t (32-bit integer) ile referans alınır. BSD fd ise süreç bazlı, tamsayı indeksli, dosya/ soket/ cihaz abstraksiyonudur. XNU fileport mekanizması ile bu ikisini birbirine çevirebilir (örn. fileport_makeport / fileport_makefd).
Soru 3: ASLR (Address Space Layout Randomization) XNU’da nasıl uygulanır?
XNU, vm_map_find_space ve vm_map_enter sırasında vm_map_random_addr() kullanarak rastgele başlangıç adresleri üretir. ARM64’de Kernel ASLR (KASLR) boot-args="kasan=0 kptr_restrict=1" ile aktif edilir; çekirdek baz adresi (kernel_slide), önyükleme sırasında ml_static_ptovirt çevirimi ile rastgeleleştirilir. Kullanıcı alanı ASLR’ı dyld ve mmap rastgele ofsetleri ile sağlanır; entropi 36-40 bit arasındadır.
Soru 4: Pointer Authentication (PAC) hangi saldırıları engeller ve engellemez?
PAC, Return-Oriented Programming (ROP) ve Jump-Oriented Programming (JOP) gibi kontrol akışı hırsızlığını (Control Flow Hijacking) engeller; çünkü saldırgan geçerli bir PAC imzası (PACIA/PIA) üretemez. Ancak, veri odaklı saldırılar (Data-Only Attacks), yan kanal saldırıları (Side-channel) veya PAC anahtarlarının sızması (Key Extraction) durumunda bypass edilebilir. PAC, bellek güvenliği (Memory Safety) sorunlarını (UAF, Overflow) çözmez, sadece sömürülmeyi zorlaştırır.
Soru 5: “TrustCache” ve “AMFI” (Apple Mobile File Integrity) ilişkisi nedir?
AMFI, çekirdek içindeki (AppleMobileFileIntegrity.kext) zorlayıcı modüldür; her execve/mmap(PROT_EXEC) çağrısında kod imzasını doğrular. TrustCache ise, önyükleme sırasında iBoot tarafından yüklenen, güvenilir kod dizinlerinin (CDHash) bir önbelleğidir (kernelcache içinde). AMFI, imza doğrulaması yaparken önce TrustCache’e bakar; bulunursa (valid hash) Apple CA zinciri doğrulaması atlanır (hız ve offline çalışma için). Bu, “Allowlist” tabanlı bir modeldir.
Soru 6: PPL (Protected Process Light) mekanizması nasıl işler ve neyi korur?
PPL, süreç imza bilgisindeki CodeDirectory içindeki Platform / EKU (Extended Key Usage) OID’lerine dayalı bir hiyerarşidir (PPL 0-3). Yüksek PPL seviyesine sahip bir süreç (örn. amfid PPL 2), düşük PPL’li bir süreç tarafından task_for_pid (Mach port alma), ptrace (debug), vm_read/write (bellek manipülasyonu) ile hedeflenemez. Çekirdek proc_ppl alanını kontrol ederek proc_check_privilege kancasında erişimi reddeder.
Bölüm 9: Bilmeniz Gereken Temel Terimler
Mach Task (Görev): Sanal adres alanı (vm_map), port isim uzayı ve kaynak haklarını (CPU, bellek) kapsayan, iş parçacıklarının (thread) konteyneri olan temel yürütme birimi. POSIX pid kavramından farklıdır; bir task birden fazla thread içerir.
Port Right (Port Hakkı): Bir Mach portu üzerindeki yetki türleri: SEND (mesaj gönderme), RECEIVE (mesaj alma – tek sahibi olabilir), SEND-ONCE (tek seferlik gönderim), PORT SET (port kümesi). Haklar mach_msg ile transfer edilebilir.
vm_map (Sanal Bellek Haritası): Bir görevin sanal adres alanını yöneten, vm_map_entry (bölge) bağlı listesinden oluşan veri yapısı. Her giriş; başlangıç/bitiş adresi, koruma (r/w/x), miras (inheritance), kablo (wiring) ve pager (backing store) bilgisi taşır.
AMFI (Apple Mobile File Integrity): Çekirdek seviyesinde kod imzalama zorunluluğunu sağlayan güvenlik alt sistemi. trustcache, codesign, entitlements doğrulaması yapar; imzasız/kötü imzalı kodun çalışmasını engeller.
Entitlement (Hak/Talep): Uygulama paketi (Info.plist / embedded.mobileprovision) içinde kod imzasıyla birlikte imzalanan, anahtar-değer çiftleri. Çekirdek ve sistem servisleri (XPC, Sandbox, Keychain) bu hakları okuyup yetki verir (örn. com.apple.security.network.client).
KTRR (Kernel Text Read-Only Region): ARM donanımı (Stage-2 Translation / PXN) kullanılarak çekirdek kod segmenti (TEXT) ve salt verilerin (CONST) yazma koruması altına alındığı, çalışma anında değiştirilemez hale getirilen bölge.
MTE (Memory Tagging Extension): ARMv8.5+ ile gelen, bellek ayırma işaretçilerine (pointer) 4-bit etiket (tag) ekleyen, bellek erişiminde etiket eşleşmesi kontrol eden donanım tabanlı bellek güvenliği teknolojisi.
XPC (Cross-Process Communication): Mach portları üzerine kurulmuş, yapılandırılmış veri (Dictionary/Array/FD) serileştirmesi sağlayan, launchd brokered servis keşfi ve yaşam döngüsü yönetimi yapan Apple’ın IPC framework’ü.
Bölüm 10: Özet ve Çıkarılması Gereken Dersler
XNU, Mach mikroçekirdeğinin esnek IPC ve VM alt yapısı ile BSD’nin zengin POSIX ekosistemini, Apple Silicon (ARM64/ARM64e) donanım güvenlik temel dayanakları (PAC, MTE, KTRR, PAN) üzerine oturtarak mobil dünyanın en dayanıklı çekirdek mimarisini inşa etmiştir. Güvenlik, “ekstra bir katman” değil, çekirdeğin DNA’sına (Code Signing Enforcement, MACF, Sandbox, PPL) işlenmiştir. Ancak hibrit yapı, BSD monolitik hatalarının (use-after-free, race condition) çekirdek çökmesine (panic) veya ayrıcalık yükselmesine (LPE) yol açtığı “tek hata noktası” riskini hâlâ barındırır. Gelecek stratejisi; Kalloc Type Isolation ve PAC/FPAC ile bellek güvenliğini donanımda zorlamak, Rust ile yeni sürücü/kod yazımında bellek güvenliğini dille garanti altına almak ve CHERI क्षमतaları ile pointer aritmetiğini ortadan kaldırmak üzerinedir. Karar vericiler için yol haritası: 1) Minimum dağıtım hedeflerini iOS 16+/macOS 13+ (PAC/MTE donanımı) olarak belirlemek, 2) Uygulama sandbox profillerini com.apple.security.hardened-runtime ile zorunlu kılmak, 3) Kernel Extension (Kext) yerine DriverKit (User-space drivers) geçişini tamamlayarak çekirdek yüzeyini minimize etmek, 4) Threat Modeling süreçlerinde MITRE ATT&CK Mobile Matrix (T1587, T1600) ile XNU özel vektörleri (Mach Port Manipulation, TrustCache Poisoning) eşleştirmek.