Песак за апликације (App Sandbox) — механизам изолације који ограничава приступ апликације систему датотека, подацима других апликација и системским ресурсима оперативног система. Свака апликација ради у сопственом изолованом окружењу са минималним привилегијама, захтевајући приступ додатним могућностима кроз дозволе. Према Apple Security Documentation (2025), Sandbox је фундаментални елемент заштите података на мобилним платформама. App Sandbox спречава неовлашћени приступ корисничким подацима чак и када је појединачна апликација компромитована.
Главно
Песак за апликације (App Sandbox) — архитектонски безбедносни механизам који изолује сваку апликацију у сопствено извршно окружење са ограниченим приступом системским ресурсима. Термин потиче из концепта „песка“ за децу — безбедног простора у коме дете може да се игра без приступа опасним предметима. Аналогно томе, апликација ради у ограниченом окружењу, без приступа подацима других апликација или критичним системским компонентама.
Основни циљ Sandbox-а је имплементација принципа минималних привилегија: свака апликација добија само она права која су неопходна за обављање декларисаних функција. Чак и ако нападач пронађе рањивост у апликацији, песак му не дозвољава приступ подацима других апликација, fotografijama, контактима или системским датотекама. Штета је ограничена на оквире једне апликације.
Мобилни оперативни системи су увели пескове раније од десктопних. iOS користи Sandbox од изласка прве верзије SDK-а (2008), Android — од верзије 1.0 (2008), али са појачањем у Android 4.3 (2013) кроз SELinux. Десктоп системи сустижу: macOS је увео Sandbox 2012. године, Windows — изоловане UWP апликације у Windows 8.
Изолација у песку се постиже комбинацијом неколико механизама на различитим нивоима оперативног система. На нивоу система датотека свакој апликацији се додељује сопствени заштићени директоријум коме само она има пун приступ. На нивоу процеса користи се јединствени идентификатор корисника (UID) за сваку апликацију. На нивоу кернела примењује се обавезна контрола приступа (MAC) кроз SELinux или сличне механизме.
Свака апликација добија сопствени корени директоријум на систему датотека уређаја. У iOS-у је то директоријум /var/mobile/Containers/Data/Application/{UUID}, у Android-у — /data/data/{package_name}. Апликација може да чита и пише датотеке само унутар овог директоријума. Приступ било којим датотекама изван овог директоријума се блокира на нивоу кернела оперативног система.
Систем такође обезбеђује посебне заједничке директоријуме са ограниченим приступом. У iOS-у су то директоријум Documents за корисничке податке, Library за подешавања и Caches за привремене датотеке. У Android-у — интерна меморија (getFilesDir) и екстерна меморија (getExternalFilesDir), чији приступ не захтева додатне дозволе.
У Android-у се свака апликација покреће као засебан Linux процес са јединственим UID-ом (User ID). UID се додељује приликом инсталације апликације и остаје непромењен током целог животног циклуса. Процеси са различитим UID-овима су изоловани једни од других на нивоу кернела — не могу приступити меморији или датотекама других процеса. Сличан механизам ради у iOS-у кроз XNU кернел и његов систем заштите.
Додатни ниво заштите у Android-у обезбеђује SELinux (Security-Enhanced Linux) у enforcing режиму од верзије Android 4.3. SELinux имплементира обавезну контролу приступа (MAC): свака акција процеса се проверава на усклађеност са безбедносном политиком независно од права власника датотеке. Чак и ако апликација ради са UID root, SELinux може блокирати приступ одређеним ресурсима.
Песак iOS-а се сматра једним од најстрожих међу мобилним оперативним системима. Свака апликација је изолована на нивоу контејнера — заштићене области система датотека којој је приступ немогућ из других апликација. iOS користи комбинацију обавезне контроле приступа кроз Sandbox Kernel Extension (Sandbox.kext) и механизма entitlement за доделу проширених права.
Контејнер iOS апликације се састоји од неколико директоријума са различитим нивоима приступа. Documents — за корисничке податке који се чувају приликом прављења резервне копије путем iCloud-а и iTunes-а. Library — за конфигурационе датотеке и кеш. tmp — за привремене податке које систем може да обрише у било ком тренутку. AppName.app — сам пакет апликације који је доступан само за читање.
Приступ подацима других апликација је категорички забрањен. iOS не обезбеђује АПИ за читање датотека из контејнера друге апликације. Једини начин размене података је кроз системске механизме: UIActivityViewController за дељење, UIPasteboard за клипборд, App Groups за апликације истог програмера. Сваки од ових механизама ради под контролом оперативног система.
Проширене могућности изван стандардног песка се обезбеђују кроз Entitlements — дигиталне потписе који се додају у потпис кода апликације. На пример, entitlement com.apple.security.application-groups омогућава апликацијама из исте групе да имају заједнички контејнер. Push обавештења, iCloud, Apple Pay — све ове функције захтевају одговарајуће entitlements.
Важно је напоменути да entitlements у iOS-у нису исто што и дозволе (permissions). Дозволе се захтевају од корисника у рантајму (на пример, приступ камери), док entitlements систем проверава у фази инсталације и корисник их не може мењати. Entitlement одређује програмер и потписује га Apple у процесу прегледа апликације.
Android користи вишеслојни модел песка заснован на Linux кернелу. Свака апликација ради као засебан Linux корисник са јединственим UID-ом, што обезбеђује основну изолацију на нивоу процеса и датотека. Додатни слојеви — SELinux за обавезну контролу приступа и Permissions за контролу приступа системским АПИ-јима.
SELinux у Android-у ради у enforcing режиму, што значи обавезну примену безбедносних политика. Свакој апликацији се додељује безбедносни контекст (security context), а сви системски позиви се проверавају на усклађеност са политиком. SELinux у Android-у садржи преко 1500 правила која покривају систем датотека, међупроцесну комуникацију, сокете и системске позиве.
UID изолација спречава директан приступ апликације датотекама друге апликације. На пример, апликација A са UID 10001 не може читати датотеке апликације B са UID 10002, чак и ако обе раде у име истог корисника телефона. Ово је основни принцип вишекорисничке безбедности Linux-а прилагођен за мобилне уређаје.
// Приступ сопственом директоријуму апликације у Android-у
File appDir = context.getFilesDir();
File cacheDir = context.getCacheDir();
File externalDir = context.getExternalFilesDir(null);
// Покушај приступа туђем директоријуму ће изазвати SecurityException
// File otherApp = new File("/data/data/com.other.app/shared_prefs/");
// Коришћење FileProvider-а за безбедно дељење датотека
Uri contentUri = FileProvider.getUriForFile(
context, "com.example.fileprovider", file
);
Android обезбеђује додатне механизме за безбедну размену података између апликација. ContentProvider — Android компонента која омогућава апликацији да обезбеди приступ својим подацима другим апликацијама кроз строго дефинисани URI. FileProvider — безбедан начин дељења датотека без откривања путања система датотека.
Иако је App Sandbox моћан безбедносни механизам, он има фундаментална ограничења. Песак штити од хоризонталног приступа (апликација-ка-апликацији), али не и од вертикалног (малвер на нивоу кернела или физички приступ уређају). При jailbreak-у или root приступу, песак може бити заобиђен јер нападач добија права суперкорисника.
Друго ограничење — злонамерне дозволе. Ако корисник одобри апликацији приступ контактима и микрофону, песак не може спречити прикупљање ових података јер апликација користи легитимне системске АПИ-је. Заштита у овом случају прелази на ниво свести корисника и прегледа App Store и Google Play.
Треће ограничење — интеракција између пескова. Неке системске услуге (NotificationListenerService, AccessibilityService) имају проширен приступ подацима других апликација. Нападач може искористити ове услуге за заобилажење песка ако добије одговарајуће дозволе. Google и Apple стално ажурирају политике за такве услуге.
Упркос ограничењима, песак је критична безбедносна компонента мобилних оперативних система. Према Android Security Report (2024), изолација sandbox-а спречава преко 99% покушаја међуапликацијског приступа подацима. У комбинацији са Code Signing, App Review и runtime permissions, Sandbox формира вишеслојну заштиту савременог мобилног уређаја.
Често постављана питања
Песак за апликације — систем изолације у коме свака апликација ради у сопственом изолованом простору, без приступа подацима других апликација без изричите дозволе корисника.
iOS користи строгу контејнерску изолацију кроз Sandbox.kext и entitlements. Android користи UID раздвајање на нивоу Linux кернела и SELinux. Принцип је исти, али се имплементација и флексибилност разликују.
Заобилажење песка је могуће само уз jailbreak (iOS) или root приступ (Android). На стандардним уређајима без модификације ОС-а, заобилажење песка није могуће кроз легитимне АПИ-је.
iOS користи UIActivityViewController и App Groups. Android — ContentProvider, FileProvider и Intents. Сви механизми раде кроз системске АПИ-је са безбедносном контролом.
Принцип значи да апликација добија само она права која су неопходна за њен рад. Приступ додатним ресурсима се захтева кроз дозволе и одобрава га корисник.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође