Aplikační sandbox (App Sandbox) — izolační mechanismus, který omezuje přístup aplikace k souborovému systému, datům jiných aplikací a systémovým prostředkům operačního systému. Každá aplikace pracuje ve vlastním izolovaném prostředí s minimálními oprávněními a žádá o přístup k dalším možnostem prostřednictvím povolení. Podle Apple Security Documentation (2025) je Sandbox základním prvkem ochrany dat na mobilních platformách. App Sandbox zabraňuje neoprávněnému přístupu k uživatelským datům i v případě kompromitace jednotlivé aplikace.
Hlavní body
Aplikační sandbox (App Sandbox) — architektonický bezpečnostní mechanismus, který izoluje každou aplikaci v jejím vlastním spouštěcím prostředí s omezeným přístupem k systémovým zdrojům. Termín pochází z koncepce „pískoviště“ pro děti — bezpečného prostoru, kde si dítě může hrát bez přístupu k nebezpečným předmětům. Analogicky aplikace pracuje v omezeném prostředí, bez přístupu k datům jiných aplikací nebo kritickým systémovým komponentům.
Hlavním cílem Sandboxu je implementace principu minimálních oprávnění: každá aplikace získá pouze ta práva, která jsou nezbytná pro provádění deklarovaných funkcí. I když útočník najde zranitelnost v aplikaci, sandbox mu neumožní přístup k datům jiných aplikací, fotkám, kontaktům nebo systémovým souborům. Škoda je omezena na rámec jedné aplikace.
Mobilní operační systémy zavedly sandboxy dříve než desktopové. iOS používá Sandbox od vydání první verze SDK (2008), Android — od verze 1.0 (2008), ale s posílením v Android 4.3 (2013) prostřednictvím SELinuxu. Desktopové systémy dohánějí: macOS zavedl Sandbox v roce 2012, Windows — izolované aplikace UWP v systému Windows 8.
Izolace v sandboxu je dosažena kombinací několika mechanismů na různých úrovních operačního systému. Na úrovni souborového systému je každé aplikaci přidělen vlastní chráněný adresář, ke kterému má pouze ona plný přístup. Na úrovni procesů se pro každou aplikaci používá jedinečný identifikátor uživatele (UID). Na úrovni jádra se uplatňuje povinná kontrola přístupu (MAC) prostřednictvím SELinuxu nebo podobných mechanismů.
Každá aplikace získá vlastní kořenový adresář v souborovém systému zařízení. V iOS je to adresář /var/mobile/Containers/Data/Application/{UUID}, v Androidu — /data/data/{package_name}. Aplikace může číst a zapisovat soubory pouze v rámci tohoto adresáře. Přístup k jakýmkoli souborům mimo tento adresář je blokován na úrovni jádra operačního systému.
Systém rovněž poskytuje speciální sdílené adresáře s omezeným přístupem. V iOS jsou to adresář Documents pro uživatelská data, Library pro nastavení a Caches pro dočasné soubory. V Androidu — interní úložiště (getFilesDir) a externí úložiště (getExternalFilesDir), k jejichž přístupu není potřeba dalších povolení.
V Androidu je každá aplikace spuštěna jako samostatný proces Linuxu s jedinečným UID (User ID). UID je přiděleno při instalaci aplikace a zůstává nezměněno po celý životní cyklus. Procesy s různými UID jsou od sebe izolovány na úrovni jádra — nemohou přistupovat k paměti nebo souborům toho druhého. Podobný mechanismus funguje v iOS prostřednictvím jádra XNU a jeho ochranného systému.
Další úroveň ochrany v Androidu poskytuje SELinux (Security-Enhanced Linux) v režimu enforcing od verze Android 4.3. SELinux implementuje povinnou kontrolu přístupu (MAC): každá akce procesu je kontrolována na soulad s bezpečnostní politikou nezávisle na právech vlastníka souboru. I když aplikace běží s UID root, SELinux může zablokovat přístup k určitým zdrojům.
Sandbox iOS je považován za jeden z nejpřísnějších mezi mobilními operačními systémy. Každá aplikace je izolována na úrovni kontejneru — chráněné oblasti souborového systému, ke které je přístup z jiných aplikací nemožný. iOS používá kombinaci povinné kontroly přístupu prostřednictvím Sandbox Kernel Extension (Sandbox.kext) a mechanismu entitlement pro poskytování rozšířených práv.
Kontejner aplikace iOS se skládá z několika adresářů s různými úrovněmi přístupu. Documents — pro uživatelská data, která jsou uchovávána při zálohování prostřednictvím iCloudu a iTunes. Library — pro konfigurační soubory a mezipaměť. tmp — pro dočasná data, která může systém kdykoli smazat. AppName.app — samotný balíček aplikace, který je pouze pro čtení.
Přístup k datům jiných aplikací je kategoricky zakázán. iOS neposkytuje API pro čtení souborů z kontejneru jiné aplikace. Jediným způsobem výměny dat je prostřednictvím systémových mechanismů: UIActivityViewController pro sdílení, UIPasteboard pro schránku, App Groups pro aplikace stejného vývojáře. Každý z těchto mechanismů pracuje pod kontrolou operačního systému.
Rozšířené možnosti nad rámec standardního sandboxu jsou poskytovány prostřednictvím Entitlements — digitálních podpisů, které jsou přidány k podpisu kódu aplikace. Například entitlement com.apple.security.application-groups umožňuje aplikacím z jedné skupiny mít sdílený kontejner. Push notifikace, iCloud, Apple Pay — všechny tyto funkce vyžadují odpovídající entitlements.
Je důležité poznamenat, že entitlements v iOS nejsou totéž co povolení (permissions). Povolení jsou vyžadována od uživatele za běhu (například přístup ke kameře), zatímco entitlements jsou kontrolována systémem ve fázi instalace a uživatel je nemůže změnit. Entitlement je určen vývojářem a podepsán Apple v procesu kontroly aplikace.
Android používá vícevrstvý model sandboxu založený na jádře Linuxu. Každá aplikace pracuje jako samostatný uživatel Linuxu s jedinečným UID, což zajišťuje základní izolaci na úrovni procesů a souborů. Další vrstvy — SELinux pro povinnou kontrolu přístupu a Permissions pro kontrolu přístupu k systémovým API.
SELinux v Androidu pracuje v režimu enforcing, což znamená vynucené uplatňování bezpečnostních politik. Každé aplikaci je přiřazen bezpečnostní kontext (security context) a všechna systémová volání jsou kontrolována na soulad s politikou. SELinux v Androidu obsahuje více než 1500 pravidel pokrývajících souborový systém, meziprocesovou komunikaci, sockety a systémová volání.
Izolace UID zabraňuje přímému přístupu aplikace k souborům jiné aplikace. Například aplikace A s UID 10001 nemůže číst soubory aplikace B s UID 10002, i když obě běží jménem stejného uživatele telefonu. To je základní princip víceuživatelské bezpečnosti Linuxu přizpůsobený pro mobilní zařízení.
// Přístup k vlastnímu adresáři aplikace v Androidu
File appDir = context.getFilesDir();
File cacheDir = context.getCacheDir();
File externalDir = context.getExternalFilesDir(null);
// Pokus o přístup k cizímu adresáři vyvolá SecurityException
// File otherApp = new File("/data/data/com.other.app/shared_prefs/");
// Použití FileProvider pro bezpečné sdílení souborů
Uri contentUri = FileProvider.getUriForFile(
context, "com.example.fileprovider", file
);
Android poskytuje další mechanismy pro bezpečnou výměnu dat mezi aplikacemi. ContentProvider — komponenta Androidu, která umožňuje aplikaci poskytnout přístup ke svým datům jiným aplikacím prostřednictvím přesně definovaného URI. FileProvider — bezpečný způsob sdílení souborů bez odhalení cest souborového systému.
Přestože je App Sandbox mocným ochranným mechanismem, má zásadní omezení. Sandbox chrání před horizontálním přístupem (aplikace-k-aplikaci), ale ne před vertikálním (malware na úrovni jádra nebo fyzický přístup k zařízení). Při jailbreaku nebo root přístupu může být sandbox obejit, protože útočník získá práva superuživatele.
Druhé omezení — škodlivá povolení. Pokud uživatel udělí aplikaci přístup ke kontaktům a mikrofonu, sandbox nemůže zabránit shromažďování těchto dat, protože aplikace používá legitimní systémová API. Ochrana v tomto případě přechází na úroveň povědomí uživatele a kontroly ze strany App Store a Google Play.
Třetí omezení — interakce mezi sandboxy. Některé systémové služby (NotificationListenerService, AccessibilityService) mají rozšířený přístup k datům jiných aplikací. Útočník může tyto služby využít k obejití sandboxu, pokud získá příslušná povolení. Google a Apple neustále aktualizují politiky pro takové služby.
Navzdory omezením je sandbox kritickým bezpečnostním komponentem mobilních operačních systémů. Podle Android Security Report (2024) izolace sandboxu zabraňuje více než 99 % pokusů o mezipřístup k datům. V kombinaci s Code Signing, App Review a runtime oprávněními tvoří Sandbox vícevrstvou ochranu moderního mobilního zařízení.
Často kladené otázky
Aplikační sandbox — izolační systém, ve kterém každá aplikace pracuje ve vlastním izolovaném prostoru, bez přístupu k datům jiných aplikací bez výslovného souhlasu uživatele.
iOS používá přísnou kontejnerovou izolaci prostřednictvím Sandbox.kext a entitlements. Android používá oddělení UID na úrovni jádra Linuxu a SELinux. Princip je stejný, ale implementace a flexibilita se liší.
Obejití sandboxu je možné pouze s jailbreak (iOS) nebo root přístupem (Android). Na standardních zařízeních bez modifikace OS není obejití sandboxu možné prostřednictvím legitimních API.
iOS používá UIActivityViewController a App Groups. Android — ContentProvider, FileProvider a Intents. Všechny mechanismy fungují prostřednictvím systémových API s bezpečnostní kontrolou.
Princip znamená, že aplikace získává pouze ta práva, která jsou nezbytná pro její fungování. Přístup k dalším zdrojům je vyžadován prostřednictvím povolení a poskytován uživatelem.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také