Alkalmazás homokozó (App Sandbox) — elkülönítő mechanizmus, amely korlátozza az alkalmazás hozzáférését a fájlrendszerhez, más alkalmazások adataihoz és az operációs rendszer erőforrásaihoz. Minden alkalmazás saját elkülönített környezetben működik minimális jogosultságokkal, és további képességekhez való hozzáférést engedélyeken keresztül kér. A Apple Security Documentation (2025) szerint a Sandbox alapvető eleme az adatvédelemnek mobil platformokon. Az App Sandbox megakadályozza a felhasználói adatokhoz való jogosulatlan hozzáférést még egy egyedi alkalmazás kompromittálódása esetén is.
Főbb pontok
Alkalmazás homokozó (App Sandbox) — egy architekturális biztonsági mechanizmus, amely minden alkalmazást saját végrehajtási környezetébe különít el korlátozott hozzáféréssel a rendszer erőforrásaihoz. A kifejezés a gyermekek számára készült „homokozó“ koncepciójából származik — egy biztonságos tér, ahol a gyermek játszhat anélkül, hogy veszélyes tárgyakhoz férne hozzá. Hasonlóképpen, az alkalmazás korlátozott környezetben működik, hozzáférés nélkül más alkalmazások adataihoz vagy kritikus rendszerkomponensekhez.
A Sandbox fő célja a minimális jogosultságok elvének megvalósítása: minden alkalmazás csak azokat a jogokat kapja meg, amelyek a deklarált funkciók végrehajtásához szükségesek. Még ha a támadó sebezhetőséget talál is az alkalmazásban, a homokozó nem engedi hozzáférni más alkalmazások adataihoz, fényképekhez, névjegyekhez vagy rendszerfájlokhoz. A kár egyetlen alkalmazás keretein belül marad.
A mobil operációs rendszerek korábban vezették be a homokozókat, mint az asztali rendszerek. Az iOS az SDK első verziójának (2008) megjelenése óta használ Sandbox-ot, az Android — az 1.0 verziótól (2008), de megerősítéssel az Android 4.3-ban (2013) a SELinux segítségével. Az asztali rendszerek felzárkóznak: a macOS 2012-ben vezette be a Sandbox-ot, a Windows — az elkülönített UWP alkalmazásokat a Windows 8-ban.
Az elkülönítés a homokozóban több mechanizmus kombinációjával valósul meg az operációs rendszer különböző szintjein. A fájlrendszer szintjén minden alkalmazás saját védett könyvtárat kap, amelyhez csak annak van teljes hozzáférése. A folyamatok szintjén egyedi felhasználói azonosítót (UID) használnak minden alkalmazáshoz. A kernel szintjén kötelező hozzáférés-vezérlést (MAC) alkalmaznak SELinux vagy hasonló mechanizmusok segítségével.
Minden alkalmazás saját gyökérkönyvtárat kap az eszköz fájlrendszerében. iOS-ben ez a /var/mobile/Containers/Data/Application/{UUID} könyvtár, Android-ban — /data/data/{package_name}. Az alkalmazás csak ezen a könyvtáron belül olvashat és írhat fájlokat. A könyvtáron kívüli fájlokhoz való hozzáférést az operációs rendszer kernel szintjén blokkolja.
A rendszer speciális megosztott könyvtárakat is biztosít korlátozott hozzáféréssel. iOS-ben ezek a Documents könyvtár a felhasználói adatok számára, a Library a beállításokhoz és a Caches az ideiglenes fájlokhoz. Android-ban — a belső tárhely (getFilesDir) és a külső tárhely (getExternalFilesDir), amelyekhez való hozzáférés nem igényel további engedélyeket.
Android-ban minden alkalmazás külön Linux folyamatként indul egyedi UID-val (User ID). Az UID az alkalmazás telepítésekor kerül kiosztásra, és a teljes életciklus során változatlan marad. A különböző UID-val rendelkező folyamatok a kernel szintjén elkülönülnek egymástól — nem férhetnek hozzá egymás memóriájához vagy fájljaihoz. Hasonló mechanizmus működik iOS-ben az XNU kernel és védelmi rendszere segítségével.
További védelmi szintet Android-ban a SELinux (Security-Enhanced Linux) biztosít enforcing módban az Android 4.3 verziótól kezdve. A SELinux kötelező hozzáférés-vezérlést (MAC) valósít meg: a folyamat minden műveletét ellenőrzi a biztonsági politikának való megfelelés szempontjából, függetlenül a fájltulajdonos jogaitól. Még ha az alkalmazás root UID-val működik is, a SELinux blokkolhatja a hozzáférést bizonyos erőforrásokhoz.
Az iOS homokozó az egyik legszigorúbbnak számít a mobil operációs rendszerek között. Minden alkalmazás konténer szinten van elkülönítve — a fájlrendszer egy védett területén, amelyhez más alkalmazások nem férhetnek hozzá. Az iOS a kötelező hozzáférés-vezérlés kombinációját használja a Sandbox Kernel Extension (Sandbox.kext) és az entitlement mechanizmus segítségével a kiterjesztett jogok biztosításához.
Az iOS alkalmazás konténere több könyvtárból áll, különböző hozzáférési szintekkel. Documents — a felhasználói adatok számára, amelyek megmaradnak az iCloud-on és iTunes-on keresztüli biztonsági mentés során. Library — konfigurációs fájlok és gyorsítótár számára. tmp — ideiglenes adatok számára, amelyeket a rendszer bármikor törölhet. AppName.app — maga az alkalmazáscsomag, amely csak olvasható.
Más alkalmazások adataihoz való hozzáférés kategorikusan tilos. Az iOS nem biztosít API-t más alkalmazás konténeréből való fájlolvasáshoz. Az adatcsere egyetlen módja a rendszermechanizmusokon keresztül történik: UIActivityViewController megosztáshoz, UIPasteboard a vágólaphoz, App Groups azonos fejlesztő alkalmazásai számára. E mechanizmusok mindegyike az operációs rendszer ellenőrzése alatt működik.
A szabványos homokozón túli kiterjesztett képességeket Entitlements segítségével biztosítják — digitális aláírások, amelyeket az alkalmazás kódaláírásához adnak hozzá. Például a com.apple.security.application-groups entitlement lehetővé teszi egy csoport alkalmazásai számára, hogy közös konténerrel rendelkezzenek. A Push értesítések, iCloud, Apple Pay — mindezek a funkciók megfelelő entitlements-t igényelnek.
Fontos megjegyezni, hogy az entitlements iOS-ben nem azonosak az engedélyekkel (permissions). Az engedélyeket a felhasználótól kérik futásidőben (például hozzáférés a kamerához), míg az entitlements-t a rendszer ellenőrzi a telepítési fázisban, és a felhasználó nem változtathatja meg. Az entitlement-et a fejlesztő határozza meg, és az Apple írja alá az alkalmazás felülvizsgálati folyamata során.
Az Android többrétegű homokozó modellt használ, amely a Linux kernelre épül. Minden alkalmazás külön Linux felhasználóként működik egyedi UID-val, ami alapvető elkülönítést biztosít a folyamat és fájl szintjén. További rétegek — SELinux a kötelező hozzáférés-vezérléshez és Permissions a rendszer API-okhoz való hozzáférés ellenőrzéséhez.
A SELinux Android-ban enforcing módban működik, ami a biztonsági politikák kötelező alkalmazását jelenti. Minden alkalmazás biztonsági kontextust (security context) kap, és minden rendszerhívás ellenőrzésre kerül a politikának való megfelelés szempontjából. A SELinux Android-ban több mint 1500 szabályt tartalmaz, amelyek lefedik a fájlrendszert, a folyamatok közötti kommunikációt, a socketeket és a rendszerhívásokat.
Az UID elkülönítés megakadályozza, hogy egy alkalmazás közvetlenül hozzáférjen egy másik alkalmazás fájljaihoz. Például az A alkalmazás 10001 UID-val nem olvashatja a B alkalmazás 10002 UID-val rendelkező fájljait, még akkor sem, ha mindkettő ugyanazon telefonfelhasználó nevében fut. Ez a Linux többfelhasználós biztonságának alapelve, amelyet mobileszközökhöz adaptáltak.
// Hozzáférést az alkalmazás saját könyvtárához Android-ban
File appDir = context.getFilesDir();
File cacheDir = context.getCacheDir();
File externalDir = context.getExternalFilesDir(null);
// Más könyvtárához való hozzáférési kísérlet SecurityException-t okoz
// File otherApp = new File("/data/data/com.other.app/shared_prefs/");
// FileProvider használata fájlok biztonságos megosztásához
Uri contentUri = FileProvider.getUriForFile(
context, "com.example.fileprovider", file
);
Az Android további mechanizmusokat biztosít a biztonságos adatcseréhez az alkalmazások között. ContentProvider — egy Android komponens, amely lehetővé teszi az alkalmazás számára, hogy hozzáférést biztosítson adataihoz más alkalmazások számára egy szigorúan meghatározott URI-n keresztül. FileProvider — egy biztonságos mód a fájlok megosztására anélkül, hogy felfedné a fájlrendszer elérési útjait.
Bár az App Sandbox egy erős védelmi mechanizmus, alapvető korlátozásokkal rendelkezik. A homokozó a vízszintes hozzáférés (alkalmazástól-alkalmazásig) ellen véd, de nem véd a függőleges hozzáférés (kernel szintű rosszindulatú szoftver vagy fizikai hozzáférés az eszközhöz) ellen. Jailbreak vagy root hozzáférés esetén a homokozó megkerülhető, mivel a támadó szuperfelhasználói jogokat szerez.
A második korlátozás — rosszindulatú engedélyek. Ha a felhasználó hozzáférést biztosít az alkalmazásnak a névjegyekhez és a mikrofonhoz, a homokozó nem akadályozhatja meg ezen adatok gyűjtését, mivel az alkalmazás legitim rendszer API-okat használ. A védelem ebben az esetben a felhasználói tudatosság és az App Store és Google Play felülvizsgálat szintjére kerül.
A harmadik korlátozás — kölcsönhatás a homokozók között. Néhány rendszerszolgáltatás (NotificationListenerService, AccessibilityService) kiterjesztett hozzáféréssel rendelkezik más alkalmazások adataihoz. A támadó felhasználhatja ezeket a szolgáltatásokat a homokozó megkerülésére, ha megszerzi a megfelelő engedélyeket. A Google és az Apple folyamatosan frissíti a politikákat az ilyen szolgáltatásokra vonatkozóan.
A korlátozások ellenére a homokozó a mobil operációs rendszerek kritikus biztonsági összetevője. Az Android Security Report (2024) szerint a sandbox elkülönítés megakadályozza az alkalmazások közötti adathozzáférési kísérletek több mint 99%-át. A Code Signing, App Review és futásidejű engedélyek kombinációjával a Sandbox egy modern mobileszköz többrétegű védelmét alkotja.
Gyakran Ismételt Kérdések
Alkalmazás homokozó — egy elkülönítő rendszer, amelyben minden alkalmazás saját elkülönített térben működik, hozzáférés nélkül más alkalmazások adataihoz a felhasználó kifejezett engedélye nélkül.
Az iOS szigorú konténer elkülönítést használ a Sandbox.kext és entitlements segítségével. Az Android UID-szétválasztást használ a Linux kernel szintjén és SELinux-ot. Az elv ugyanaz, de a megvalósítás és rugalmasság eltérő.
A homokozó megkerülése csak jailbreak (iOS) vagy root hozzáférés (Android) esetén lehetséges. Szabványos eszközökön az operációs rendszer módosítása nélkül a homokozó megkerülése nem lehetséges legitim API-okon keresztül.
Az iOS a UIActivityViewController és az App Groups eszközt használja. Az Android — ContentProvider, FileProvider és Intents. Minden mechanizmus rendszer API-okon keresztül működik biztonsági ellenőrzéssel.
Az elv azt jelenti, hogy az alkalmazás csak azokat a jogokat kapja meg, amelyek a működéséhez szükségesek. Hozzáférés további erőforrásokhoz engedélyeken keresztül kérhető, és a felhasználó biztosítja.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is