MacOS Sandbox (prvobitno nazvan Seatbelt) ograničava aplikacije koje se izvršavaju unutar sandboxes na dozvoljene radnje specificirane u Sandbox profilu sa kojim aplikacija radi. Ovo pomaže da se osigura da aplikacija pristupa samo očekivanim resursima.
Svaka aplikacija sa entitlementcom.apple.security.app-sandbox će biti izvršena unutar sandboxes. Apple binarni fajlovi se obično izvršavaju unutar Sandbox-a i da bi se objavili unutar App Store-a, ova dozvola je obavezna. Tako da će većina aplikacija biti izvršena unutar sandboxes.
Da bi se kontrolisalo šta proces može ili ne može da radi, Sandbox ima hook-ove u svim syscalls kroz kernel. U zavisnosti od entitlements aplikacije, Sandbox će dozvoliti određene radnje.
Imajte na umu da čak i ako su simboličke veze tu da "pobegnu" iz Sandbox-a i pristupe drugim folderima, aplikacija i dalje mora imati dozvole da im pristupi. Ove dozvole su unutar .plist.
# Get permissionsplutil-convertxml1.com.apple.containermanagerd.metadata.plist-o-# Binary sandbox profile<key>SandboxProfileData</key><data>AAAhAboBAAAAAAgAAABZAO4B5AHjBMkEQAUPBSsGPwsgASABHgEgASABHwEf...# In this file you can find the entitlements:<key>Entitlements</key><dict><key>com.apple.MobileAsset.PhishingImageClassifier2</key><true/><key>com.apple.accounts.appleaccount.fullaccess</key><true/><key>com.apple.appattest.spi</key><true/><key>keychain-access-groups</key><array><string>6N38VWS5BX.ru.keepcoder.Telegram</string><string>6N38VWS5BX.ru.keepcoder.TelegramShare</string></array>[...]# Some parameters<key>Parameters</key><dict><key>_HOME</key><string>/Users/username</string><key>_UID</key><string>501</string><key>_USER</key><string>username</string>[...]# The paths it can access<key>RedirectablePaths</key><array><string>/Users/username/Downloads</string><string>/Users/username/Documents</string><string>/Users/username/Library/Calendars</string><string>/Users/username/Desktop</string><key>RedirectedPaths</key><array/>[...]
Sve što kreira/menja aplikacija u Sandbox-u dobiće atribut karantina. To će sprečiti prostor sandboksovanja aktiviranjem Gatekeeper-a ako aplikacija u sandboksu pokuša da izvrši nešto sa open.
Sandbox Profili
Sandbox profili su konfiguracione datoteke koje označavaju šta će biti dozvoljeno/zabranjeno u tom Sandbox-u. Koristi Sandbox Profile Language (SBPL), koja koristi Scheme programski jezik.
Ovde možete pronaći primer:
(version 1) ; First you get the version(deny default) ; Then you shuold indicate the default action when no rule applies(allow network*) ; You can use wildcards and allow everything(allow file-read* ; You can specify where to apply the rule(subpath "/Users/username/")(literal "/tmp/afile")(regex #"^/private/etc/.*"))(allow mach-lookup(global-name "com.apple.analyticsd"))
Proverite ovo istraživanjeda biste proverili više akcija koje mogu biti dozvoljene ili zabranjene.
Važne sistemske usluge takođe rade unutar svojih prilagođenih sandbox-a, kao što je usluga mdnsresponder. Možete pregledati ove prilagođene sandbox profile unutar:
App Store aplikacije koriste profil/System/Library/Sandbox/Profiles/application.sb. Možete proveriti u ovom profilu kako ovlašćenja kao što je com.apple.security.network.server omogućavaju procesu da koristi mrežu.
SIP je Sandbox profil nazvan platform_profile u /System/Library/Sandbox/rootless.conf
Primeri Sandbox Profila
Da biste pokrenuli aplikaciju sa specifičnim sandbox profilom, možete koristiti:
(version 1)(deny default)(allow file* (literal "/private/tmp/hacktricks.txt"))(allow process* (literal "/usr/bin/touch"))(allow file-read-data (literal "/")); This one will work
Napomena da Apple-ovsoftver koji radi na Windows-unema dodatne bezbednosne mere, kao što je sandboxing aplikacija.
macOS čuva sistemske sandbox profile na dve lokacije: /usr/share/sandbox/ i /System/Library/Sandbox/Profiles.
I ako treća strana aplikacija nosi com.apple.security.app-sandbox pravo, sistem primenjuje /System/Library/Sandbox/Profiles/application.sb profil na taj proces.
iOS Sandbox Profil
Podrazumevani profil se zove container i nemamo SBPL tekstualnu reprezentaciju. U memoriji, ovaj sandbox je predstavljen kao binarno stablo Dozvoli/Zabranjeno za svaku dozvolu iz sandbox-a.
Debug & Zaobilaženje Sandbox-a
Na macOS-u, za razliku od iOS-a gde su procesi sandbox-ovani od samog početka od strane jezgra, procesi moraju sami da se prijave za sandbox. To znači da na macOS-u, proces nije ograničen sandbox-om dok aktivno ne odluči da uđe u njega.
Procesi se automatski sandbox-uju iz korisničkog prostora kada počnu ako imaju pravo: com.apple.security.app-sandbox. Za detaljno objašnjenje ovog procesa pogledajte:
Prema ovome, sandbox_check (to je __mac_syscall), može da proveri da li je operacija dozvoljena ili ne od strane sandbox-a u određenom PID-u.
alat sbtool može da proveri da li PID može da izvrši određenu akciju:
sbtool<pid>mach#Check mac-ports (got from launchd with an api)sbtool<pid>file/tmp#Check file accesssbtool<pid>inspect#Gives you an explaination of the sandbox profilesbtool<pid>all
Custom SBPL u aplikacijama iz App Store-a
Moguće je da kompanije pokreću svoje aplikacije sa prilagođenim Sandbox profilima (umesto sa podrazumevanim). Potrebno je koristiti pravo com.apple.security.temporary-exception.sbpl koje mora biti odobreno od strane Apple-a.
Moguće je proveriti definiciju ovog prava u /System/Library/Sandbox/Profiles/application.sb: