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, 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 ontolojik çerçeve, her uygulamanın (bundle) kendine ait benzersiz bir “ev dizini” (home directory) ve kimlik (Bundle ID, Team ID, Entitlements) ile donatılmış, diğer süreçlerin bellek alanına, dosya sistemine ve donanım kaynaklarına erişimini kernel seviyesinde engelleyen bir izolasyon modeli kurar. IPC (Inter-Process Communication) ise bu katı yalıtım duvarları arasında, güvenlik ilkeleri (sandbox profile) tarafından beyaz listeye alınmış, kapalı ve denetlenmiş kanallar üzerinden veri ve mesaj alışverişini sağlayan mühendislik disiplinidir. XPC (Cross-Process Communication), bu IPC paradigmasının Apple’ın modern, yapılandırılmış (structured), mesaj tabanlı ve ayrıcalık ayrımı (privilege separation) odaklı gerçekleştirimidir. Temel yaklaşım; “en az ayrıcalık” (least privilege) ilkesini merkeze alarak, tek bir bileşenin ihlali durumunda sistem geneline yayılma riskini (lateral movement) matematiksel olarak minimize etmektir. Bu analiz, sandbox profillerinin derinlemesine anatomisini, XPC bağlantı yaşam döngüsünü ve entitlement tabanlı yetkilendirme mantığını kapsar.

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

Sandboxing mekanizması, XNU çekirdeğinin (Kernel) Sandbox.kext (veya modern sürümlerde AMFI – Apple Mobile File Integrity ve Sandbox subsystems) modülleri tarafından uygulanır. Her süreç başlatıldığında execve sistem çağrısı sırasında, kod imzası (Code Signature) içindeki entitlements blob’u ve provisioning profile doğrulanır; ardından sandbox_init_with_parameters veya sandbox_compile ile derlenmiş bir SB (Sandbox) profili süreç kimliğine (PID) bağlanır. Bu profil, file-read*, file-write*, network-out, mach-lookup, sysctl-read gibi işlemleri düzenleyen kural kümelerini (regular expression tabanlı path matching) içerir. IPC tarafında XPC, libxpc.dylib üzerinden xpc_connection_create_mach_service (sunucu) ve xpc_connection_create (istemci) API’leriyle Mach port tabanlı bir iletişim kanalı kurar. Mesajlar xpc_dictionary_t (serialize edilmiş property list) formatında, kopya-yazma (copy-on-write) semantiğiyle taşınır. Güvenlik kritik noktası, sunucu tarafında xpc_connection_set_event_handler içinde gelen xpc_connection_t nesnesinin audit_token (pid, uid, gid, asid) ve code_signing_identifier alanlarının sec_code_check_validity ve sec_static_code_check_validity_with_errors API’leriyle doğrulanmasıdır. Bu, “kim bağlanıyor?” sorusunu kernel seviyesinde kanıtlanmış kimlikle cevaplar.

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, Common Criteria (ISO/IEC 15408) EAL 4+ sertifikasyon hedefleriyle uyumlu olarak tasarlanmış olup, NIST SP 800-53 (SC-3, SC-7, AC-4, AC-6) kontrol ailesi ile doğrudan eşlenir. Kod imzalama (Code Signing) altyapısı, X.509 PKI standardlarına dayalı Apple Root CA zinciri (Apple Root CA -> Apple IST CA -> Developer ID/Application CA) kullanır. Entitlement’lar (com.apple.security.app-sandbox, com.apple.developer.xpc.services vb.) bu sertifika zincirine kriptografik olarak bağlanmıştır. IPC protokolü olarak XPC, Mach IPC (Mach Message, Port Rights: Send, Receive, Send-Once) üzerine inşa edilmiş, serileştirme (serialization) için XDR (External Data Representation) benzeri binary property list (bplist16) formatını kullanır. Güvenlik değerlendirme metodolojisi; Statik Analiz (Entitlement denetimi, codesign -d --entitlements :-), Dinamik Analiz (dtrace, opensnoop, xpcspy, frida hooking), Fuzzing (libFuzzer XPC dictionary girdileri için) ve Formal Verification (TLA+ modelleme ile deadlock/race condition analizi) olmak üzere dört boyutlu bir doğrulama süreci gerektirir. App Store Review Guidelines (Section 2.5.1, 5.1.1, 5.2.3) bu teknik kontrollerin operasyonel zorunluluklarını belirler.

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

Parametre Olcut / Deger Metrik Stratejik Etki
Sandbox Profili Türü container (App) vs system (Daemon) Profil Kapsamı (Kural Sayısı) Uygulama izolasyon derinliği; sistem servisleri için platform profili gerekir.
Entitlement Doğrulama com.apple.security.get-task-allow (Debug) Boolean (Var/Yok) Production build’de false olmalı; true durumunda ptrace/XPC injection riski Kritik.
XPC Servis Tanımı LaunchServices (User) vs launchd.plist (System) Başlatma Bağlamı (Context) User agent’lar kullanıcı oturumunda; System daemon’lar root/boot context’inde çalışır.
Bağlantı Kimlik Doğrulaması audit_token + CDHash Doğrulaması Doğrulama Gecikmesi (ms) / Başarı Oranı sec_code_check_validity olmadan MITM/Privilege Escalation (CVE-2021-30807 tipi) riski Yüksek.
Mesaj Serileştirme xpc_dictionary Schema Validation Girdi Doğrulama Kapsamı (%) Tip güvenliği (Type Safety) olmadan Deserialization/Type Confusion (CVE-2020-9906) riski Orta-Yüksek.
Ayrıcalık Ayrımı XPC Helper Tool (SMJobBless) Kullanımı Root Süreç Sayısı Ana uygulama sandbox’ta kalır; sadece helper root yetkisinde çalışır (En Az Ayrıcalık).
Mach Port Hakları MACH_MSG_TYPE_COPY_SEND vs MAKE_SEND Port Yetkisi Yayılma Derecesi MAKE_SEND yetkisi paylaşımı, port uzayı kirliliğine ve DoS’a yol açar.
Ağ Erişimi Kapsamı com.apple.security.network.client/server Çıkan/Gelen Bağlantı Sayısı server entitlement’ı sandbox profiline network-in kuralı ekler; yüzey alanı artar.
Dosya Sistemi Erişimi com.apple.security.files.user-selected.* Powerbox Etkileşim Sayısı Kullanıcı onayı (Powerbox) olmadan read/write engellenir; otomasyon engellenir.
Çevre Değişkenleri DYLD_INSERT_LIBRARIES Engelleme Injection Vektörü Sayısı Hardened Runtime (com.apple.security.cs.disable-library-validation) kapalıysa risk Kritik.
Günlükleme (Logging) os_log / XPC_ACTIVITY İzleme Olay Başına Log Hacmi (KB) Anomali tespiti (ML tabanlı) için yapılandırılmış log (signpost) zorunluluğu.
Uzaktan Yönetim MDM Profil Yükleme (com.apple.managed.vpn.shared) Politika Yayılma Süresi (sn) Kurumsal cihazlarda sandbox kural seti dinamik olarak daraltılabilir.

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

Kritik bir vaka analizi olarak, bir bankacılık uygulamasının (App) biyometrik kimlik doğrulama (FaceID/TouchID) ve şifreleme anahtar yönetimi (KeyChain) için ayrıcalıklı bir XPC Helper Tool (SMJobBless ile yüklenmiş com.example.bank.helper) kullandığı senaryo ele alınır. Ana uygulama container sandboxında çalışırken, helper system sandboxında (root) çalışır. IPC kanalı üzerinden kSecAttrAccessControl politikalarını taşıyan xpc_dictionary mesajları akar. Teknik tuzak: Helper, gelen bağlantıda audit_token‘ı doğrulamakla yetinip, code_signing_identifier‘ın (com.example.bank) ve team_identifier‘ın (ABCDE12345) ve CDHash‘in üretim sertifikasıyla eşleştiğini doğrulamazsa, bir saldırgan com.evil.app bundle ID’siyle imzalanmış, get-task-allow entitlement’lı bir süreç başlatarak helper’a bağlanabilir ve SecKeyCreateRandomKey çağrılarıyla anahtar çıkarma (key extraction) saldırısı gerçekleştirebilir. Başka bir senaryo: NSXPCConnection kullanarak NSSecureCoding protokolü uygulayan özel sınıflar (NSSecureCoding conformance) serileştirilirken, allowedClasses kümesi kısıtlanmazsa (örneğin NSDictionary, NSArray yerine somut BankTransaction sınıfı belirtilmezse), NSKeyedUnarchiver üzerinden “Object Substitution” saldırısı ile NSFileHandle veya NSTask gibi tehlikeli nesneler enjekte edilerek RCE (Remote Code Execution) veya sandbox escape sağlanabilir. Enterprise imzalı uygulamalarda (Enterprise Distribution) com.apple.security.get-task-allow: true varsayılan risk vektörüdür.

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

Birincil operasyonel darboğaz, XPC Servis Keşfi (Discovery) ve Yaşam Döngüsü Yönetimi‘dir. launchd user domain’inde (launchctl bootstrap gui/$(id -u)) kayıtlı servisler, uygulama güncellemelerinde (version mismatch) xpc_connection_set_event_handler callback’lerinin eski sürüm protokolüyle yeni sürüm mesajlarını işlemesi (veya tersi) durumunda “Protocol Mismatch” hatalarına ve EXC_BAD_INSTRUCTION çökmelerine yol açar. Çözüm: Semantic Versioning ile xpc_dictionary içine protocol_version alanı ekleyip, sunucu tarafında if (version < MIN_SUPPORTED) { reply error; return; } guard clause koymak. İkinci risk: Race Condition (TOCTOU) audit_token Doğrulamasında. Bağlantı kabul edildiği an (event_handler) token alınır, ancak işlem yapıldığı an (async block içinde) saldırgan süreç execve yapıp kimliğini değiştirebilir (port rights transferi ile). Çözüm: xpc_connection_get_audit_token her kritik işlem öncesinde (her mesajda) yeniden sorgulanmalı ve pid_for_task / proc_pidpath ile çapraz doğrulanmalıdır. Üçüncü tuzak: Hardened Runtime Bypass via com.apple.security.cs.allow-dyld-environment-variables. Bu entitlement test için gereklidir ancak production’a sızarsa DYLD_INSERT_LIBRARIES ile kod enjeksiyonu kapısını açar. Proaktif strateji: CI/CD pipeline’ında codesign --verify --deep --strict --verbose=2 ve codesign -d --entitlements :- çıktısının allow-dyld-environment-variables ve disable-library-validation anahtarlarının false/absent olduğunun otomatik assert edilmesi.

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

iOS 17/macOS 14 (Sonoma) ile birlikte XPC Activity API (xpc_activity_register, xpc_activity_unregister) modernize edildi; artık XPC_ACTIVITY_PRIORITY_UTILITY ve XPC_ACTIVITY_FLAG_DEFERRABLE bayraklarıyla enerji verimli arka plan işlemleri sandbox kısıtlamaları içinde (Power Nap, App Nap) daha deterministik planlanabiliyor. Lockdown Mode (Kilitlenme Modu), com.apple.security.network.client ve com.apple.security.files.user-selected.read-write gibi yüzey alanını genişleten entitlement’ların çalışma zamanında dinamik olarak devre dışı bırakılmasını (runtime restriction) zorunlu kılıyor; bu, XPC servislerinin “Lockdown Aware” olmasını (bağlantı reddedilmesi veya işlevsellik azaltılması) gerektiriyor. Pointer Authentication Codes (PAC – ARMv8.3-A/PAC) ve Branch Target Identification (BTI), XPC mesaj işleme döngülerindeki xpc_connection_get_event_handler blok adreslerinin ve objc_msgSend çağrılarının ROP/JOP saldırılarına karşı donanım seviyesinde korunmasını sağlıyor. Gelecek 5-10 yılık projeksiyonda; CHERI (Capability Hardware Enhanced RISC Instructions) mimarilerinin (ARM Morello) benimsenmesiyle, Mach port hakları (port rights) ve bellek işaretçileri (pointers) “capability” tabanlı koruma altına alınacak, bu da sandbox escape’in (örn. mach_vm_remap exploitleri) matematiksel imkansızlığa yakın hale getirilmesini vaat ediyor. Ayrıca eBPF (extended Berkeley Packet Filter) tabanlı kernel observability (Apple os_signpost / DTrace evrimi), XPC trafiğinin anomali tespiti (ML-based anomaly detection on IPC message entropy/structure) için standart hale gelecek.

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

Soru 1: Neden NSXPCConnection yerine doğrudan libxpc (C API) tercih edilmelidir?

NSXPCConnection Objective-C/Swift runtime’ına bağımlıdır ve NSSecureCoding serileştirme maliyeti (type checking, class mapping) getirir. libxpc (C API) sıfır maliyetli (zero-copy) xpc_object_t manipülasyonu, daha ince audit_token kontrolü ve dispatch_io entegrasyonu ile yüksek performanslı, düşük gecikmeli (low-latency) sistem servisleri (daemon’lar) için tek uygun seçimdir. Güvenlik açısından da NSXPCListener delegate yöntemi (listener:shouldAcceptNewConnection:) NSXPCConnection nesnesi üzerinden exportedInterface kontrolü yaparken, C API’de xpc_dictionary_get_string(connection, XPC_EVENT_KEY_NAME) ve ham audit_token ile politikalar merkezi bir security_policy modülünde (örn. Rust/C++ shared library) zorlanabilir.

Soru 2: SMJobBless ile yüklenen Helper Tool’un sandbox profili nasıl tanımlanır?

Helper Tool, Info.plist içindeki SMCopyAllJobDictionaries / SMJobSubmit mekanizmasıyla launchd (PID 1) tarafından root ayrıcalığında başlatılır. Sandbox profili, Helper Tool binary’si içindeki __TEXT,__entitlements segmentinde kod imzasıyla birlikte gömülü com.apple.security.app-sandbox entitlement’ı ve platform profil türüne (seatbelt-profiles içinde system/unrestricted varyantları) referans veren özel bir profil (com.apple.security.sandbox.profile-path veya platform default’u) ile belirlenir. Genellikle platform profili (daha gevşek, sistem servisleri için) kullanılır ancak file-write* kural seti /Library/PrivilegedHelperTools ve kendi cache diziniyle kısıtlanmalıdır.

Soru 3: XPC üzerinden büyük veri (Large Data / Blob) transferi nasıl optimize edilir?

xpc_dictionary_set_data ile kopyalama yapmak yerine xpc_dictionary_set_mach_send / xpc_dictionary_set_fd (file descriptor passing) veya xpc_shmem_create (Shared Memory) mekanizmaları kullanılır. xpc_shmem_create ile oluşturulan bölge, Mach VM vm_map ile her iki süreç adres alanına da eşlenir (copy-on-write). Bu, 100MB+ video/şifreleme tamponları için bellek basıncını ve CPU kopyalama maliyetini (memcpy) sıfırlar. Güvenlik: Paylaşılan bölge VM_PROT_READ | VM_PROT_WRITE ile eşlenir; yazma bitişinde msync ve xpc_shmem_remote ile erişim hakları iptal edilmelidir (revocation).

Soru 4: App Groups (com.apple.security.application-groups) Sandbox izolasyonunu nasıl etkiler?

App Groups, container sandbox profiline allow file-read* file-write* /private/var/mobile/Containers/Shared/AppGroup/<GROUP_ID> kuralını enjekte eder. Bu, iki farklı uygulama (veya app + extension) arasında dosya sistemi seviyesinde paylaşım sağlar. Ancak bu, IPC kanalı (XPC/Mach Port) sağlamaz. Sadece paylaşılan bir “dropbox” klasörü yaratır. Senkronizasyon (locking, NSFileCoordinator) uygulama sorumluluğundadır. Risk: Bir uygulama ihlal edilirse, paylaşılan gruptaki dosyalar (SQLite DB, KeyChain exportları) tehlikeye girer. com.apple.security.keychain-access-groups ise KeyChain item paylaşımı için ayrı, daha güvenli bir mekanizmadır (ACL tabanlı).

Soru 5: xpc_connection_set_target_queue ile dispatch_queue kullanımının thread safety etkileri nelerdir?

XPC bağlantısı bir dispatch_queue (serial veya concurrent) ile ilişkilendirildiğinde, event_handler ve reply_handler blokları o kuyruğun bağlamında çalıştırılır. Serial queue kullanımı, paylaşılan durum (state) koruyan sunucu taraflı nesneler için kilitsiz (lock-free) thread safety sağlar (actor modeli benzetimi). Ancak, eğer reply_handler içinde bloklayıcı (blocking) bir sistem çağrısı (örn. read() network socket, sqlite3_step) yapılırsa, o serial queue tıkar ve yeni mesajlar işlenmez (Head-of-Line Blocking). Çözüm: İstemci tarafında dispatch_semaphore ile senkron bekleme yerine async/await (Swift Concurrency) veya dispatch_async ile ayrı bir worker queue’ya işi dispatch etmek, XPC kuyruğunu serbest bırakmaktır.

Soru 6: Hardened Runtime’da com.apple.security.cs.allow-unsigned-executable-memory (JIT) entitlement’ı XPC güvenliğini nasıl etkiler?

Bu entitlement (genellikle WebKit/JavaScriptCore için gereklidir), mmap(PROT_WRITE | PROT_EXEC) veya mprotect(PROT_EXEC) çağrılarına izin verir. Bu, W^X (Write XOR Execute) politikasını zayıflatır. Eğer bir XPC servisi (helper) bu entitlement’a sahipse ve bir bellek bozuşma (buffer overflow/heap spray) zafiyeti içeriyorsa, saldırgan shellcode’u yazıp çalıştırabilir (RCE). Kural: XPC Helper Tool’larda bu entitlement asla olmamalıdır. Sadece ana uygulama (WebView barındıran) için WKWebView zorunluluğu varsa minimal kapsamda verilmeli ve com.apple.security.cs.disable-library-validation ile birleşmemelidir (kombinasyon = tam kod enjeksiyonu serbestisi).

Bölüm 9: Bilmeniz Gereken Temel Terimler

Entitlement (Hak/Talep): Uygulama paketi (bundle) içindeki CodeSignature/Entitlements.plist (veya __TEXT,__entitlements segmenti) içinde kod imzasıyla kriptografik olarak bağlanmış, çalışma zamanında sandbox motoru ve task_for_pid/xpc yetkilendirme motorları tarafından sorgulanan yetki anahtar-değer çiftleri (örn. com.apple.security.network.client).
Mach Port (Mach İstasyonu): XNU mikrokernel mimarisinde süreçler arası iletişimin (IPC) atomik birimi. MACH_PORT_RIGHT_SEND (gönderme), RECEIVE (alma), SEND_ONCE (tek seferlik yanıt) hakları launchd (bootstrap namespace) veya xpc_connection üzerinden transfer edilir.
Audit Token (Denetim Jetonu): BSD kimlik bilgilerini (ruid, euid, rgid, egid, pid, asid – audit session ID) içeren, kernel tarafından doğrulanmış, kopyalanamaz (unforgeable) bir kimlik yapısı (audit_token_t). XPC bağlantısında xpc_connection_get_audit_token ile elde edilir.
Hardened Runtime: iOS/macOS’ta varsayılan etkin olan, mmap(PROT_EXEC) yasaklama, DYLD_INSERT_LIBRARIES engelleme, task_for_pid kısıtlama, heap koruması (guard pages, malloc nano zone) gibi exploit mitigations (sömürü engelleme) katmanının toplamı.
XPC Service (XPC Hizmeti): Uygulama paketi içindeki Contents/XPCServices/ altında yer alan, ana uygulamadan ayrı bir süreç (process) olarak launchd tarafından yönetilen, kendi Info.plist, entitlements ve sandbox profiline sahip, NSXPCListener / xpc_connection_create_mach_service sunucu ucu.
Seatbelt (Sandbox Kernel Subsystem): XNU kernel içindeki Sandbox.kext (veya modern Sandbox subsystem) adı verilen, sandbox_check kancaları (hooks) ile vnode (dosya), socket (ağ), proc (süreç), mach (port) işlemlerini mediaten zorunlu erişim kontrolü (MAC) yapan güvenlik modülü.

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

iOS Sandboxing ve XPC IPC mimarisi, modern mobil güvenliğin “Altın Standardı” niteliğinde derinlemesine bir savunma derinliği (Defense in Depth) örneğidir. Ancak bu mimarinin gücü, geliştiricinin Entitlement Minimalizmi, XPC Sunucu Tarafı Girdi Doğrulama (Schema Validation), Bağlantı Kimliği Kanıtlama (Audit Token + CDHash) ve Hardened Runtime Bayraklarının Üretimde Korunması disiplinine sadık kalmasıyla gerçekleşir. Teknik tuzakların (Race Condition, Type Confusion, Entitlement Sızması, JIT Bypass) tümü, “Güvenilir Giriş” varsayımının yıkılmasıyla ortaya çıkar. Karar vericiler için yol haritası şudur: 1) CI/CD Entegrasyonu: codesign --verify --deep ve entitlement statik analizi (allow-list/deny-list) build kırma kriteri olmalı. 2) Runtime İzlenebilirlik: os_signpost ile XPC mesaj gecikmesi, boyutu, hata oranları ve audit_token değişim anomali metriktoplanmalı. 3) Saldırı Yüzeyi Azaltma: Kullanılmayan XPC servisleri (WatchKit, Intents, SiriKit) Info.plist‘den ve paketten fiziken silinmeli. 4) Geleceğe Hazırlık: CHERI/PAC donanım korumalarını test etmek için ARM Morello/FVP simülasyon ortamları kurulmalı. Güvenlik bir ürün özelliği değil, mimari bir invariant’tır; XPC kanalları bu invariant’ın en kritik denetim noktalarıdır.

BENZER İNCELEMELER

İlgili Diğer Rehberler