GÜNCEL YAYIN Mobil İşletim Sistemleri, Çekirdek ve Ağ Mimarisi
📅 13 Kasım 2026 · Bağımsız Editoryal Ağ
Araştırma & İnceleme

iOS Sandboxing ve IPC (Inter-Process Communication): Uygulama Yalıtımı ve XPC Güvenliği

✍️ Editör Masası • 📅 12 Kasım 2026 • ⏱️ 10 dk okuma
iOS Sandboxing ve IPC (Inter-Process Communication): Uygulama Yalıtımı ve XPC Güvenliği

Bölüm 1: Bu Nedir ve Neden Hayati Önem Taşır?

iOS Sandboxing (Kumhavuzu), Apple’ın mobil işletim sisteminin güvenlik mimarisinin temel taşı olan, süreç (process) düzeyinde zorunlu erişim kontrolü (MAC – Mandatory Access Control) mekanizmasıdır. Bu mimari, her uygulamayı (bundle) kendi dosya sistemi hiyerarşisi, bellek adres alanı ve sistem kaynakları (donanım, ağ, sensörler) içeren izole bir “konteyner” içinde hapseder. Konu başlığındaki “Tekrarlamayı ve arızayı önleme koruyucu tedbirleri” ifadesi, sandbox ihlallerini (escape), veri sızıntılarını (leakage) ve IPC kanallarında ortaya çıkan yarış koşullarını (race conditions) veya yetkisiz mesaj enjeksiyonlarını engellemek için tasarlanmış proaktif savunma katmanlarını (hardened runtime, code signing enforcement, XPC audit token validation) kapsar. Temel yaklaşım, “en az ayrıcalık” (least privilege) ilkesini çekirdek seviyesinde (XNU Kernel – TrustedBSD MAC Framework) zorlayarak, bir bileşenin tehlikeye atılması durumunda etkinin yanal hareket (lateral movement) yeteneğini sıfıra indirmektir. Bu çerçeve, ontolojik olarak “güvenilmeyen kodun güvenilir sistem kaynaklarına kontrollü erişimi” sorunsalını çözmeyi hedefler.

Bölüm 2: Perde Arkası: Sistem Nasıl Çalışıyor?

Mekanizma, XNU çekirdeğinin MACF (Mandatory Access Control Framework) kancaları (hooks) üzerinden sandboxd daemon süreciyle işbirliği içinde çalışır. Her süreç başlatıldığında (execve), kod imzası (Code Signature) içindeki entitlements (haklar) ve Seatbelt profili (.sb dosyaları) çekirdek tarafından yorumlanır ve süreç kimliğine (PID) bağlanarak bir “Sandbox Label” atanır. IPC için de facto standart olan XPC (Cross-Process Communication), launchd yönetiminde Mach port tabanlı bir mesaj geçirme altyapısıdır. XPC, xpc_connection_t nesneleri üzerinden seri hale getirilmiş (serialized) sözlük (dictionary) veri yapılarını taşır. Güvenlik mekanizması şu üçlü doğrulama zincirine dayanır: 1) Audit Token: Gönderen sürecin PID, UID, GID ve kritik olarak Code Directory Hash (CDHash)‘ini içeren çekirdek doğrulamalı kimlik bileti. 2) Entitlement Eşleşmesi: Alıcı hizmetin (service) Info.plist/entitlements dosyasında tanımlı com.apple.security.application-groups veya özel XPC entitlements ile gönderenin yetkisinin karşılaştırılması. 3) Hardened Runtime: Çalışma zamanında JIT derleme engelleme, kütüphane doğrulama (Library Validation) ve bellek koruma (W^X) politikalarının IPC uç noktalarına genişletilmesi. Bu mekanizma, “Tekrarlama” (Replay) saldırılarını önlemek için mesajlarda nonce/ephemeral token kullanımını ve “Arıza” (Fault/DoS) önlemek için bağlantı kotaları (connection quotas) ve zaman aşımı (timeout) mantığını zorunlu kılar.

iOS Sandboxing ve IPC (Inter-Process Communication): Uygulama Yalıtımı ve XPC Güvenliği İnceleme Görseli
Sistemin temel işleyişi ve saha yapısı: iOS Sandboxing ve IPC (Inter-Process Communication): Uygulama Yalıtımı ve XPC Güvenliği sürecinde dikkat çeken operasyonel detaylar.

Bölüm 3: Bilim Dünyası ve Uzmanlar Nasıl İnceliyor?

iOS güvenlik mimarisi, uluslararası ortak değerlendirme standartları olan Common Criteria (ISO/IEC 15408) EAL (Evaluation Assurance Level) sertifikasyon süreçlerine (genellikle EAL 4+ seviyeleri için Protection Profiles – Mobile Device Fundamentals) uygunluk gösterir. Şifreleme modülleri (CoreCrypto) FIPS 140-2/3 doğrulaması geçmiştir. IPC protokolü olan XPC, Apple özel bir protokol olsa da, tasarım felsefesi Capability-Based Security (Yetenek Tabanlı Güvenlik) modeline (POSIX 1003.1e taslaklarına referans) dayanır. Metodolojik olarak; statik analizde Clang Static Analyzer ve CodeQL sorguları (taint tracking), dinamik analizde XPC Tracing (xpcspy, dtrace scriptleri) ve Frida/Objection hooking ile çalışma zamanı davranış analizi yapılır. Ağ ve veri bütünlüğü için Network Extension ve App Sandbox entitlements (com.apple.developer.networking.networkextension) zorunludur. Geliştirici taraflı “Secure Coding” metodolojisi; OWASP MASVS (Mobile Application Security Verification Standard) L1/L2 seviyeleri (MSTG-ARCH-2, MSTG-NETWORK-2, MSTG-PLATFORM-3) ile eşlenir. Apple Platform Güvenliği Kılavuzu (Apple Platform Security Guide) referans belge olarak kabul edilir.

Bölüm 4: Önemli Parametreler ve Karşılaştırma Rehberi

Parametre Olcut / Deger Metrik Stratejik Etki
Sandbox Profili Türü container (App), system (Daemon), profile (Custom) Profil Karmaşıklığı (Kural Sayısı) Yanal hareket yüzeyini (Attack Surface) kısıtlar; container en sıkı, system en geniş.
XPC Bağlantı Tipi NSXPCConnection (Obj-C/Swift), xpc_connection_t (C) Serileştirme Maliyeti (µs/msg) NSXPCConnection tip güvenliği (Proxy) sağlar; C API’si performans için riskli.
Audit Token Bileşenleri PID, UID, GID, ASID, CDHash, Entitlements Doğrulama Gecikmesi (ns) CDHash, kod bütünlüğünü çalışma anında kanıtlar; imza değiştirmeyi engeller.
Entitlement Kapsamı com.apple.security.app-sandbox, application-groups, xpc-services Yetki Genişliği (Bitmask) Gruplar (Groups) veri paylaşımını; XPC Services iş mantığı yalıtımını sağlar.
Hardened Runtime Bayrakları Runtime, Library Validation, DYLD, JIT, Unsigned Executable Bypass Zorluğu (CVE Sayısı) Library Validation, enjeksiyonu (DYLD_INSERT_LIBRARIES) tamamen bloke eder.
Mach Port Hakları MACH_MSG_TYPE_COPY_SEND, MAKE_SEND, MOVE_RECEIVE Port Sızıntı Riski (Leak Count) MOVE_RECEIVE tek alıcı garantisi verir; COPY_SEND yaygın ama riskli.
Mesaj Boyut Limiti xpc_connection_set_message_size_limit (Varsayılan ~4MB/16MB) DoS Dayanıklılığı (MB/s) Sınırsız mesaj bellek tüketimine (OOM Kill) yol açar; kota zorunlu.
Reply/Timeout Mekanizması xpc_connection_set_event_handler + dispatch_time Yanıtsızlık Tespit Süresi (ms) Asenkron tasarımda “Fire-and-forget” hatalarını ve deadlock’ları önler.
Code Signing Gerekliliği codesign --verify --deep --strict --verbose=2 Bütünlük Doğrulama Başarısı (%) Çekirdek imzasız/bozuk kodun execve veya dlopen yapmasını engeller.
Privacy Info.plist Keys NSPrivacyAccessedAPIType, NSPrivacyCollectedDataType App Store Reddedilme Oranı iOS 17+ API kullanım şeffaflığı; sandbox dışı veri erişimini denetler.
XPC Service Daemon Yönetimi launchd.plist (RunOnDemand, KeepAlive, ThrottleInterval) Kaynak Tüketimi (CPU/RAM %) ThrottleInterval (10sn), çökme döngülerini (Crash Loop) engeller.
Inter-App Communication Universal Links, Custom URL Schemes, App Groups Veri Sızıntı Vektör Sayısı URL Schemes “Open Redirect” riski taşır; Universal Links + App Groups tercih edilir.
Kernel Extension (Kext) / DriverKit com.apple.developer.driverkit Entitlement Çekirdek Yüzey Alanı Genişliği DriverKit (User-space), Kext’e (Kernel-space) göre sandbox ihlali riskini azaltır.

Bölüm 5: Günlük Hayatta ve Doğada Nerede Karşımıza Çıkar?

Kritik bir senaryo Apple Pay / Secure Enclave etkileşimidir: Uygulama (App Process) ödeme verisini asla belleğinde tutmaz; PKPaymentAuthorizationController aracılığıyla ayrı bir XPC servisi (passd / paymentd) ile iletişim kurar. Sandbox, uygulamanın com.apple.developer.payment-pass-provisioning entitlements olmadan bu servise bağlanmasını engeller. App Extensions (Share, Widget, Keyboard) senaryosunda; ana uygulama (Containing App) ve eklenti (Extension) tamamen ayrı sandbox konteynerlerinde çalışır. Veri paylaşımı sadece App Groups entitlements (group.com.firma.uygulama) ile etkinleştirilen paylaşılan konteyner (Library/Caches veya UserDefaults suite) üzerinden gerçekleşir. Network Extension (VPN/DNS Proxy) senaryosunda NEVPNManager / NEDNSSettingsManager yapılandırması, com.apple.developer.networking.networkextension entitlements ve kullanıcı onayı (System Preferences) ile nesessionmanager daemon’una XPC üzerinden aktarılır; sandbox bu daemon dışı ağ trafiğini engeller. XPC Hizmeti Çökmesi (Crash) Dayanıklılığı: Bir XPC Service (örn. video işleme, ML çıkarımı) çökerse, launchd ThrottleInterval sayesinde aniden yeniden başlatmayı engeller; ana uygulama NSXPCConnection invalidationHandler bloğu tetiklenerek kullanıcı arayüzünü “İşlem başarısız, tekrar deneniyor” durumuna çeker, bu da “Arıza” (Fault) toleransını sağlar.

iOS Sandboxing ve IPC (Inter-Process Communication): Uygulama Yalıtımı ve XPC Güvenliği Detay Görseli
Uygulama ve inceleme aşaması: Doğada ve sahada iOS Sandboxing ve IPC (Inter-Process Communication): Uygulama Yalıtımı ve XPC Güvenliği etkilerinin somut yansımaları.

Bölüm 6: Karşılaşılan Zorluklar ve Pratik Çözümler

1. XPC “Type Confusion” ve Deserialization Saldırıları: NSXPCConnection interface (Protocol) tanımı olmadan setExportedObject kullanıldığında, saldırgan NSKeyedArchiver payload’u ile istemci tarafında NSSetUncaughtExceptionHandler manipülasyonu veya NSXPCListener sahtecilik yapabilir. Çözüm: Kesinlikle NXPCInterface (Protocol) tanımlama, allowedClasses kısıtlaması (NSSecureCoding zorunluluğu) ve reply bloklarında auditToken doğrulaması. 2. Sandbox Escape via Kernel Vulnerability (CVE-2021-30807 / IOMobileFrameBuffer): Kullanıcı alanı (userland) sandbox kuralları çekirdek hatasıyla bypass edilebilir. Çözüm: Pointer Authentication Codes (PAC – ARMv8.3+), Kernel Text Read-Only (KTRR), PPL (Protected Process Light) ve CoreTrust politikaları ile çekirdek yüzey alanı minimize edilir; hızlı yama (Rapid Security Response) stratejisi uygulanır. 3. Mach Port “Port Right” Sızıntısı: mach_port_insert_right veya bootstrap_look_up hatalarıyla port yetkileri istenmeyen süreçlere geçebilir. Çözüm: xpc_connection_create_mach_service kullanımı (launchd brokered), manuel mach_msg yerine XPC abstraksiyonu; launchd port namespace’ini izole eder. 4. Time-of-Check to Time-of-Use (TOCTOU) Dosya Erişimi: Sandbox dosya erişimi open() anında kontrol edilir; sembolik link (symlink) saldırılarıyla hedef değiştirilebilir. Çözüm: openat() + O_NOFOLLOW kullanımı, file coordination (NSFileCoordinator) ve App Sandbox File Access (Security-Scoped Bookmarks) ile kalıcı erişim izni yönetimi. 5. Replay Saldırısı (Message Replay): Ağ trafiği yakalanıp XPC mesajı yeniden gönderilirse (örn. “Ödeme Onayla” mesajı). Çözüm: Her XPC isteğinde Ephemeral Nonce (Sunucu tarafında üretilen, tek kullanımlık challenge) ve Transaction ID kullanımı; idempotency key tasarımı.

Bölüm 7: Gelecek Perspektifi ve Yeni Gelişmeler

iOS 17/18 ve macOS Sonoma/Sequoia ile gelen Lockdown Mode (Kilitli Mod), XPC saldırı yüzeyini radikal şekilde daraltır: NSXPCConnection uzak bağlantılarını engeller, JIT derlemeyi tamamen kapatır, linkedit segmentlerini imzalar. DriverKit ve IOKit User Clients tamamen kullanıcı alanına (userspace) taşındı; bu sayede sürücü hataları (driver bugs) çekirdek paniğine (kernel panic) veya sandbox escape’e yol açmak yerine süreç çökmesine (process crash) sınırlı kalıyor. Swift Concurrency (async/await, Actors) XPC çağrıları için withCheckedContinuation ve Actor izolasyonu ile thread-guvenli, deadlock-önleyici yapılar sunuyor; Distributed Actors (gelecekte) ağ şeffaf IPC’yi getirecek. CHERI (Capability Hardware Enhanced RISC Instructions) / ARM Morello entegrasyonu deneysel seviyededir; donanım seviyesinde bellek güvenliği (spatial/temporal safety) ve yetki (capability) taşıma, yazılımdan bağımsız sandbox zorunluluğu getirecek. Rapid Security Response (RSR) mekanizması, Safari/WebKit ve kritik sistem kütüphaneleri (dyld shared cache) için yeniden başlatma gerektirmeden anında yama dağıtımı sağlıyor. 5-10 Yıllık Projeksiyon: Tamamen Rust/Swift ile yeniden yazılmış, resmi doğrulamalı (formally verified – seL4 benzeri mikroçekirdek yaklaşımları) bir “System Services” katmanı; IPC için Cap’n Proto / FlatBuffers gibi sıfır-kopyalı (zero-copy), şema kayıtlı (schema-registry) protokollerin XPC’yi tamamlaması/yerine geçmesi; AI tabanlı Anomali Tespiti (On-device ML) ile anormal XPC mesaj trafiğinin (fuzzing benzeri davranışlar) gerçek zamanlı engellenmesi.

Bölüm 8: Merak Edilen Sorular ve Cevaplar

Soru 1: Neden NSXPCConnection yerine doğrudan xpc_connection_t (C API) kullanılmamalıdır?

Cevap: C API’si (xpc.h) tip güvenliği (type safety) sağlamaz; mesaj sözlüğü (xpc_dictionary_t) anahtar-değer çiftleri string tabanlıdır ve derleme zamanında doğrulanamaz. NSXPCConnection (Foundation), NXPCInterface protokolü aracılığıyla Obj-C/Swift tiplerini (Objective-C runtime metadata) kullanarak otomatik serileştirme/deserileştirme ve tip doğrulama yapar. Ayrıca NSXPCListener delegate metodu listener:shouldAcceptNewConnection: içinde newConnection.exportedInterface ve exportedObject ataması, sunucu tarafında hangi metotların çağrılabileceğini sözleşme (contract) tabanlı kılar. C API’sinde bu kontrol manuel xpc_dictionary_get_value ve xpc_type kontrolleriyle yapılır ki bu, “Type Confusion” ve “Key Injection” hatalarına açık bir yüzey oluşturur.

Soru 2: App Groups entitlements olmadan iki uygulama (veya App + Extension) veri nasıl paylaşır?

Cevap: Paylaşamaz. iOS sandbox modeli zorunlu erişim kontrolü (MAC) uygular; container dizinleri (/var/mobile/Containers/Data/Application/<UUID>) birbirinden tamamen izole sandbox profillerine (Seatbelt) tabidir. App Groups (com.apple.security.application-groups entitlement), launchd ve kernel tarafından ortak bir Grup Konteyner Kimliği (Group Container ID) oluşturulmasını ve her iki sürecin profiline allow file-read* / file-write* kuralının eklenmesini tetikler. Bu olmadan open(), stat(), unlink() syscall’leri EPERM (Operation not permitted) hatasıyla reddedilir. Alternatif olarak Universal Links / Custom URL Schemes ile aktif veri geçişi (x-callback-url) yapılabilir ama bu pasif dosya sistemi paylaşımı değildir.

Soru 3: XPC Servisi (XPC Service) ana uygulamadan ayrı bir süreç (process) mi çalıştırır?

Cevap: Evet. XPC Service (.xpc bundle), ana uygulama bundle’ı içine gömülü olsa bile (Contents/XPCServices), çalışma anında launchd tarafından bağımsız bir PID ile, ana uygulamadan farklı bir sandbox profiliyle (genellikle daha kısıtlayıcı) başlatılır. Bu, Privilege Separation (Ayrıcalık Ayrımı) prensibinin uygulamasıdır: Örn. Video çözümleme (parser) hatası (buffer overflow) sadece XPC servisini çökertir; ana uygulama (UI process) hayatta kalır ve kullanıcı verisi (Keychain, Core Data) korumalı kalır. Info.plist içindeki RunOnDemand = YES ile sadece ihtiyaçlandığında başlar.

Soru 4: Hardened Runtime Library Validation bayrağı XPC’i nasıl etkiler?

Cevap: Library Validation ( com.apple.security.cs.disable-library-validation yoksa ), sürecin sadece Apple imzalı veya kendi Team ID ile imzalanmış dinamik kütüphaneleri (dylib, framework) yüklemesine (dlopen) izin verir. XPC servisi ana uygulama ile aynı Team ID sahipse (ki genelde öyledir), ana uygulama bundle’ı içindeki Frameworks klasöründeki kütüphaneleri yükleyebilir. Ancak, bir saldırgan DYLD_INSERT_LIBRARIES ortam değişkeni ile veya dlopen ile kötü amaçlı bir kütüphaneyi enjekte etmeye çalışırsa, çekirdek (AMFI – Apple Mobile File Integrity) bunu engeller. Bu, XPC bağlantı noktası (listener) üzerinden gelen mesajların işlenmesi sırasında bellek bozulması (memory corruption) sonucu kod akışının kaçırılmasını (control flow hijack) zorlaştırır.

Soru 5: NSXPCConnection invalidationHandler ve interruptionHandler farkı nedir?

Cevap: invalidationHandler: Bağlantı kalıcı olarak sonlandırıldığında (Sunucu çöktü, invalidate() çağrıldı, süreç sonlandı) tek seferlik çalışır. Genelde temizlik (cleanup), proxy nesnelerinin serbest bırakılması ve UI’ya “Bağlantı kesildi” bildirimi için kullanılır. interruptionHandler: Bağlantı geçici olarak kesildiğinde (Sunucu launchd tarafından yeniden başlatılıyor, sistem kaynak baskısı, xpc_connection_suspend durumu) çalışır. Bağlantı otomatik olarak yeniden kurulmaya çalışılır (reconnect). Bu handler’da bekleyen isteklerin (pending replies) nasıl yönetileceği (retry, fail, queue) kararı alınır. Karıştırılması “Message Replay” veya “Use-after-free” hatalarına yol açar.

Soru 6: Sandbox profili (.sb) özel kural yazmak (Custom Profile) App Store uygulamalarında mümkün mü?

Cevap: Hayır. App Store dağıtımı için Custom Sandbox Profiles (.sb dosyaları sandbox-exec veya seatbelt profilleri) yasaktır. Apple, uygulamaları standart container profili (Entitlements tabanlı) ile sınırlar. com.apple.security.app-sandbox entitlements ve ilgili com.apple.security.files.user-selected.* (Open/Save Panel), network.client/server, personal-information.* anahtarları bildirim tabanlı (declarative) güvenlik modelini oluşturur. Özel kural yazma yetkisi (seatbelt-profiles entitlement) sadece Apple dahili uygulamaları, Sistem Daemon’ları ve Enterprise (In-house) / Developer ID dağıtımlı macOS uygulamaları için (bazı kısıtlamalarla) geçerlidir. iOS’ta third-party uygulamalar için bu mekanizma tamamen kapalıdır.

Bölüm 9: Bilmeniz Gereken Temel Terimler

Seatbelt (Sandbox Kernel Extension): XNU çekirdeğinin TrustedBSD MAC Framework üzerinden uyguladığı, kural tabanlı (Scheme/BPF benzeri sözdizimi) zorunlu erişim kontrol modülünün kod adıdır. Kullanıcı alanı sandboxd daemon ile iletişim kurar.

CDHash (Code Directory Hash): Code Signing yapısının (CodeDirectory blob) SHA-1/SHA-256 özetidir. Çekirdek (AMFI), bir binary’nin execve edilmesi veya bir sayfanın belleğe yüklenmesi (page-in) anında bu hash’i imza ile doğrular. XPC audit_token içinde taşıyarak gönderenin kimliğini kanıtlar.

Entitlement (Hak/Talep): Uygulama binary’si içine gömülü (Code Signature içinde Entitlements blob), plist formatında, “Bu uygulama X kaynağına erişebilir” bildirimleridir. Çekirdek ve launchd bu anahtarları okuyup sandbox profilini dinamik oluşturur.

Mach Port (Mach İstasyonu): Mikroçekirdek (Mach) miraslı, süreçler arası iletişim (IPC) için kullanılan, çekirdek tarafından yönetilen, hak (right) tabanlı (Send, Receive, Send-Once) adreslenebilir iletişim uç noktasıdır. XPC bu portların üstünde kurulu bir çerçevedir.

Launchd (PID 1): Sistem ve kullanıcı seviyesinde servis yöneticisi, süreç başlatıcı (spawner) ve XPC Bootstrap Name Server‘dır. bootstrap_look_up ile servis isimlerini (örn. com.apple.myxpcservice) Mach Port haklarıyla eşler.

Hardened Runtime: Xcode derleyici/linker bayrakları (-enable-hardened-runtime) ve Entitlements kombinasyasıyla etkinleştirilen, çalışma zamanı saldırı yüzeyini (JIT, DYLD injection, unsigned code, debugger attach) daraltan güvenlik modudur.

App Sandbox Container: Uygulamaya atanan, /var/mobile/Containers/Data/Application/<UUID> yolundaki, mobile kullanıcısı sahibi, Seatbelt profiliyle korunan, dosya sistemi kökünü (root) taklit eden izole dizin hiyerarşisidir.

XPC Service (XPC Hizmeti): Ana uygulamadan ayrı bir süreçte çalışan, launchd yönetiminde, kendi sandbox profiline sahip, NSXPCListener/xpc_connection_t ile erişilen, iş mantığı yalıtımı (privilege separation) sağlayan yardımcı binary’dir.

Bölüm 10: Özet ve Çıkarılması Gereken Dersler

iOS Sandboxing ve XPC mimarisi, “Güvenilmeyen Kodun Yürütülmesi” paradoksunu çözmek için donanım (PAC, MTE), çekirdek (MACF, AMFI, PP

BENZER İNCELEMELER

İlgili Diğer Rehberler