macOS Pesak (inicijalno nazvan Seatbelt) ograničava aplikacije koje se izvršavaju unutar peska na dozvoljene akcije navedene u profilu peska sa kojim se aplikacija izvršava. Ovo pomaže da se osigura da aplikacija pristupa samo očekivanim resursima.
Bilo koja aplikacija sa ovlašćenjemcom.apple.security.app-sandbox će biti izvršena unutar peska. Apple binarni fajlovi se obično izvršavaju unutar peska i kako bi se objavili u App Store-u, ovo ovlašćenje je obavezno. Dakle, većina aplikacija će biti izvršena unutar peska.
Da bi se kontrolisalo šta proces može ili ne može da radi, Pesak ima kuke u svim sistemskim pozivima širom jezgra. Zavisno o ovlašćenjima aplikacije, Pesak će dozvoliti određene akcije.
Imajte na umu da čak i ako su simboličke veze tu da "pobegnu" iz Sandbox-a i pristupe drugim fasciklama, aplikacija i dalje mora imati dozvole da im pristupi. Ove dozvole se nalaze unutar .plist fajla.
# 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 je kreirano/izmenjeno od strane aplikacije u pesku će dobiti atribut karantina. Ovo će sprečiti prostor peska da pokrene Gatekeeper ako aplikacija u pesku pokuša da izvrši nešto sa open.
Profili peska
Profil peska su konfiguracioni fajlovi koji ukazuju šta će biti dozvoljeno/zabranjeno u tom pesku. Koristi se jezik profila peska (SBPL), koji 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"))
Pogledajte ovaj istraživački radda biste proverili više akcija koje mogu biti dozvoljene ili odbijene.
Važne sistemske usluge takođe se izvršavaju unutar svojih sopstvenih prilagođenih sandbox-ova, kao što je mdnsresponder usluga. Ove prilagođene sandbox profile možete videti unutar:
Aplikacije iz App Store-a koriste profil /System/Library/Sandbox/Profiles/application.sb. U ovom profilu možete proveriti kako ovlašćenja poput com.apple.security.network.server omogućavaju procesu korišćenje mreže.
SIP je Sandbox profil nazvan platform_profile u /System/Library/Sandbox/rootless.conf
Primeri Sandbox Profila
Da biste pokrenuli aplikaciju sa određenim 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 se pokreće na Windowsunema dodatne sigurnosne mere, kao što je sandboxing aplikacija.
macOS čuva sistemske profile sandbox-a na dve lokacije: /usr/share/sandbox/ i /System/Library/Sandbox/Profiles.
Ako treća strana aplikacija ima com.apple.security.app-sandbox privilegiju, sistem primenjuje profil /System/Library/Sandbox/Profiles/application.sb na taj proces.
iOS Sandbox Profil
Podrazumevani profil se naziva container i nemamo SBPL tekstualnu reprezentaciju. U memoriji, ovaj sandbox je predstavljen kao binarno stablo Dozvoli/Odbij za svaku dozvolu iz sandbox-a.
Debugiranje i zaobilaženje Sandbox-a
Na macOS-u, za razliku od iOS-a gde su procesi od početka sandbox-ovani od strane jezgra, procesi moraju sami da se odluče za sandbox. To znači da na macOS-u, proces nije ograničen sandbox-om sve dok aktivno ne odluči da uđe u njega.
Procesi automatski dobijaju Sandbox kada se pokrenu iz korisničkog prostora ako imaju privilegiju: com.apple.security.app-sandbox. Za detaljno objašnjenje ovog procesa pogledajte:
Prema ovome, sandbox_check (to je __mac_syscall), može proveriti da li je operacija dozvoljena ili ne od strane sandbox-a za određeni PID.
Alatka sbtool može proveriti da li PID može izvršiti određenu radnju:
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
Prilagođeni SBPL u aplikacijama App Store-a
Moguće je da kompanije svoje aplikacije pokreću sa prilagođenim Sandbox profilima (umesto sa podrazumevanim). Za to je potrebno koristiti privilegiju com.apple.security.temporary-exception.sbpl koju mora odobriti Apple.
Moguće je proveriti definiciju ove privilegije u /System/Library/Sandbox/Profiles/application.sb: