App Sandbox, bir uygulamanın dosya sistemine, diğer uygulamaların verilerine ve işletim sisteminin sistem kaynaklarına erişimini kısıtlayan bir izolasyon mekanizmasıdır. Her uygulama, minimum ayrıcalıklarla kendi izole edilmiş ortamında çalışır ve izinler aracılığıyla ek yeteneklere erişim talep eder. Apple Security Documentation (2025)'a göre Sandbox, mobil platformlarda veri korumanın temel bir unsurudur. App Sandbox, bireysel bir uygulama tehlikeye girse bile kullanıcı verilerine yetkisiz erişimi önler.
Anahtar Noktalar
App Sandbox, her uygulamayı sistem kaynaklarına sınırlı erişimle kendi yürütme ortamında izole eden mimari bir güvenlik mekanizmasıdır. Terim, çocuklar için kum havuzu konseptinden gelir — bir çocuğun tehlikeli nesnelere erişmeden oynayabileceği güvenli bir alan. Benzer şekilde, bir uygulama diğer uygulamaların verilerine veya kritik sistem bileşenlerine erişmeden kısıtlı bir ortamda çalışır.
Sandbox'un ana hedefi en az ayrıcalık ilkesinin uygulanmasıdır: her uygulama yalnızca beyan edilen işlevlerini yerine getirmek için gerekli hakları alır. Bir saldırgan bir uygulamada güvenlik açığı bulsa bile, sandbox diğer uygulamaların verilerine, fotoğraflara, kişilere veya sistem dosyalarına erişimi engeller. Hasar tek bir uygulamanın sınırları içinde kalır.
Mobil işletim sistemleri, sandbox'ları masaüstü sistemlerden daha önce uygulamıştır. iOS, ilk SDK sürümünden (2008) bu yana Sandbox kullanırken, Android sürüm 1.0'dan (2008) itibaren, Android 4.3'te (2013) SELinux aracılığıyla güçlendirilmiştir. Masaüstü sistemler yetişiyor: macOS 2012'de Sandbox'u tanıttı, Windows ise Windows 8'de izole UWP uygulamalarını tanıttı.
Sandbox'taki izolasyon, işletim sisteminin farklı seviyelerinde birden fazla mekanizmanın birleşimiyle elde edilir. Dosya sistemi seviyesinde, her uygulamaya yalnızca kendisinin tam erişime sahip olduğu korumalı bir dizin tahsis edilir. İşlem seviyesinde, her uygulama için benzersiz bir kullanıcı tanımlayıcısı (UID) kullanılır. Çekirdek seviyesinde, SELinux veya benzer mekanizmalar aracılığıyla zorunlu erişim kontrolü (MAC) uygulanır.
Her uygulama, cihazın dosya sisteminde kendi kök dizinini alır. iOS'ta bu, /var/mobile/Containers/Data/Application/{UUID} dizinidir, Android'te — /data/data/{package_name}. Uygulama yalnızca bu dizin içinde dosyaları okuyabilir ve yazabilir. Bu dizin dışındaki herhangi bir dosyaya erişim, işletim sistemi çekirdeği seviyesinde engellenir.
Sistem ayrıca sınırlı erişimle özel paylaşılan dizinler sağlar. iOS'ta bunlar, kullanıcı verileri için Documents dizini, ayarlar için Library ve geçici dosyalar için Caches'tir. Android'te — dahili depolama (getFilesDir) ve harici depolama (getExternalFilesDir), bunlara erişim ek izin gerektirmez.
Android'te, her uygulama benzersiz bir UID (Kullanıcı Kimliği) ile ayrı bir Linux işlemi olarak çalışır. UID, uygulama yüklendiğinde atanır ve yaşam döngüsü boyunca değişmeden kalır. Farklı UID'lere sahip işlemler çekirdek seviyesinde birbirinden izole edilir — birbirlerinin belleğine veya dosyalarına erişemezler. iOS'ta XNU çekirdeği ve koruma sistemi aracılığıyla benzer bir mekanizma çalışır.
Android'te ek bir koruma katmanı, Android 4.3'ten itibaren enforcing modunda SELinux (Security-Enhanced Linux) tarafından sağlanır. SELinux, zorunlu erişim kontrolünü (MAC) uygular: her işlem eylemi, dosya sahibinin izinlerinden bağımsız olarak güvenlik politikasına göre kontrol edilir. Bir uygulama UID root ile çalışsa bile, SELinux belirli kaynaklara erişimi engelleyebilir.
iOS sandbox'u, mobil işletim sistemleri arasında en katılardan biri olarak kabul edilir. Her uygulama konteyner seviyesinde izole edilir — diğer uygulamaların erişemeyeceği dosya sisteminin korumalı bir alanı. iOS, Sandbox Kernel Extension (Sandbox.kext) aracılığıyla zorunlu erişim kontrolü ve genişletilmiş ayrıcalıklar vermek için entitlement mekanizmasının bir kombinasyonunu kullanır.
iOS uygulama konteyneri, farklı erişim seviyelerine sahip birkaç dizinden oluşur. Documents — iCloud ve iTunes aracılığıyla yedekleme sırasında korunan kullanıcı verileri için. Library — yapılandırma ve önbellek dosyaları için. tmp — sistemin her an silebileceği geçici veriler için. AppName.app — salt okunur olan uygulama paketinin kendisi.
Diğer uygulamaların verilerine erişim kesinlikle yasaktır. iOS, başka bir uygulamanın konteynerinden dosyaları okumak için API sağlamaz. Veri paylaşmanın tek yolu sistem mekanizmalarıdır: paylaşım için UIActivityViewController, pano için UIPasteboard, aynı geliştiricinin uygulamaları için App Groups. Bu mekanizmaların her biri işletim sisteminin kontrolü altında çalışır.
Standart sandbox'un ötesindeki genişletilmiş yetenekler Entitlements aracılığıyla sağlanır — uygulamanın kod imzasına eklenen dijital imzalar. Örneğin, com.apple.security.application-groups entitlement'ı, aynı gruptaki uygulamaların paylaşılan bir konteynere sahip olmasına izin verir. Push bildirimleri, iCloud, Apple Pay — tüm bu özellikler ilgili entitlement'ları gerektirir.
iOS'ta entitlement'ların izinlerle aynı şey olmadığını belirtmek önemlidir. İzinler çalışma zamanında kullanıcıdan talep edilir (kamera erişimi gibi), entitlement'lar ise kurulum sırasında sistem tarafından kontrol edilir ve kullanıcı tarafından değiştirilemez. Entitlement'lar geliştirici tarafından tanımlanır ve uygulama inceleme sürecinde Apple tarafından imzalanır.
Android, Linux çekirdeğine dayalı çok katmanlı bir sandbox modeli kullanır. Her uygulama, benzersiz bir UID ile ayrı bir Linux kullanıcısı olarak çalışır ve işlem ve dosya düzeyinde temel izolasyon sağlar. Ek katmanlar, zorunlu erişim kontrolü için SELinux ve sistem API'lerine erişimi kontrol etmek için İzinler'i içerir.
Android'te SELinux, enforcing modunda çalışır, yani güvenlik politikalarının zorunlu olarak uygulanması anlamına gelir. Her uygulamaya bir güvenlik bağlamı (security context) atanır ve tüm sistem çağrıları politikaya göre kontrol edilir. SELinux, Android'te dosya sistemini, işlemler arası iletişimi, soketleri ve sistem çağrılarını kapsayan 1500'den fazla kural içerir.
UID izolasyonu, bir uygulamanın başka bir uygulamanın dosyalarına doğrudan erişmesini önler. Örneğin, UID 10001 olan uygulama A, her ikisi de aynı telefon kullanıcı hesabı altında çalışsa bile, UID 10002 olan uygulama B'nin dosyalarını okuyamaz. Bu, mobil cihazlar için uyarlanmış Linux'un çok kullanıcılı güvenlik temel ilkesidir.
// Android'te uygulamanın kendi dizinine erişim
File appDir = context.getFilesDir();
File cacheDir = context.getCacheDir();
File externalDir = context.getExternalFilesDir(null);
// Başka bir uygulamanın dizinine erişmeye çalışmak SecurityException'a neden olur
// File otherApp = new File("/data/data/com.other.app/shared_prefs/");
// Güvenli dosya paylaşımı için FileProvider kullanımı
Uri contentUri = FileProvider.getUriForFile(
context, "com.example.fileprovider", file
);
Android, uygulamalar arasında güvenli veri alışverişi için ek mekanizmalar sağlar. ContentProvider — bir uygulamanın, kesin olarak tanımlanmış bir URI aracılığıyla diğer uygulamalara verilerine erişim sağlamasına izin veren bir Android bileşenidir. FileProvider — dosya sistemi yollarını ifşa etmeden dosyaları paylaşmanın güvenli bir yoludur.
App Sandbox güçlü bir güvenlik mekanizması olmasına rağmen, temel sınırlamaları vardır. Sandbox, yatay erişime (uygulamadan uygulamaya) karşı korur, ancak dikey erişime (çekirdek seviyesinde kötü amaçlı yazılım veya cihaza fiziksel erişim) karşı korumaz. Jailbreak veya root erişimi ile sandbox atlanabilir çünkü saldırgan süper kullanıcı ayrıcalıkları elde eder.
İkinci sınırlama kötü niyetli izinlerdir. Bir kullanıcı bir uygulamaya kişilere ve mikrofona erişim izni verirse, sandbox bu verilerin toplanmasını engelleyemez çünkü uygulama meşru sistem API'lerini kullanır. Bu durumda koruma, kullanıcı farkındalığı ve App Store ile Google Play inceleme süreçleri düzeyine geçer.
Üçüncü sınırlama sandbox'lar arası etkileşimdir. Bazı sistem hizmetleri (NotificationListenerService, AccessibilityService), diğer uygulamaların verilerine genişletilmiş erişime sahiptir. Bir saldırgan, uygun izinleri alırsa bu hizmetleri kullanarak sandbox'u atlatabilir. Google ve Apple bu tür hizmetler için politikaları sürekli günceller.
Sınırlamalara rağmen, sandbox mobil işletim sistemlerinin kritik bir güvenlik bileşenidir. Android Security Report (2024)'e göre, sandbox izolasyonu uygulamalar arası veri erişim girişimlerinin %99'undan fazlasını engeller. Kod İmzalama, Uygulama İncelemesi ve çalışma zamanı izinleriyle kombinasyon halinde Sandbox, modern mobil cihazın çok katmanlı korumasını oluşturur.
Sıkça Sorulan Sorular
App Sandbox, her uygulamanın kendi izole alanında çalıştığı, kullanıcının açık izni olmadan diğer uygulamaların verilerine erişemediği bir izolasyon sistemidir.
iOS, Sandbox.kext ve entitlement'lar aracılığıyla katı konteyner izolasyonu kullanır. Android, Linux çekirdeği seviyesinde UID ayrımı ve SELinux kullanır. Prensip aynıdır, ancak uygulama ve esneklik farklıdır.
Sandbox'u atlamak yalnızca jailbreak (iOS) veya root erişimi (Android) ile mümkündür. İşletim sistemi değişikliği olmayan standart cihazlarda, meşru API'ler aracılığıyla sandbox'u atlamak imkansızdır.
iOS, UIActivityViewController ve App Groups kullanır. Android, ContentProvider, FileProvider ve Intents kullanır. Tüm mekanizmalar güvenlik kontrollü sistem API'leri aracılığıyla çalışır.
İlke, bir uygulamanın çalışması için yalnızca gerekli izinleri alması anlamına gelir. Ek kaynaklara erişim izinler aracılığıyla talep edilir ve kullanıcı tarafından verilir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun