Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an dieHackTricks und HackTricks CloudGitHub-Repositories senden.
Grundlegende Informationen
Der macOS Sandbox (ursprünglich Seatbelt genannt) beschränkt Anwendungen, die innerhalb der Sandbox ausgeführt werden, auf die in dem Sandbox-Profil festgelegten zulässigen Aktionen. Dadurch wird sichergestellt, dass die Anwendung nur auf erwartete Ressourcen zugreift.
Jede App mit der Berechtigungcom.apple.security.app-sandbox wird innerhalb der Sandbox ausgeführt. Apple-Binärdateien werden normalerweise innerhalb einer Sandbox ausgeführt und um sie im App Store zu veröffentlichen, ist diese Berechtigung obligatorisch. Daher werden die meisten Anwendungen innerhalb der Sandbox ausgeführt.
Um zu kontrollieren, was ein Prozess tun kann oder nicht, hat die Sandbox Hooks in allen Syscalls im Kernel. Abhängig von den Berechtigungen der App erlaubt die Sandbox bestimmte Aktionen.
Einige wichtige Komponenten der Sandbox sind:
Die Kernel-Erweiterung/System/Library/Extensions/Sandbox.kext
Das private Framework/System/Library/PrivateFrameworks/AppSandbox.framework
Ein Daemon, der in Userland läuft /usr/libexec/sandboxd
Die Container~/Library/Containers
Im Ordner "Containers" finden Sie einen Ordner für jede in der Sandbox ausgeführte App mit dem Namen der Bundle-ID:
Beachten Sie, dass selbst wenn die symbolischen Links vorhanden sind, um aus dem Sandbox auszubrechen und auf andere Ordner zuzugreifen, die App immer noch Berechtigungen haben muss, um auf sie zuzugreifen. Diese Berechtigungen befinden sich in der .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/>[...]
Alles, was von einer Sandbox-Anwendung erstellt/geändert wird, erhält das Quarantäneattribut. Dadurch wird verhindert, dass eine Sandbox-Umgebung ausgelöst wird, wenn die Sandbox-App versucht, etwas mit open auszuführen.
Sandbox-Profile
Die Sandbox-Profile sind Konfigurationsdateien, die angeben, was in dieser Sandboxerlaubt/verboten ist. Es verwendet die Sandbox Profile Language (SBPL), die die Scheme-Programmiersprache verwendet.
Hier finden Sie ein Beispiel:
(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"))
Überprüfen Sie diese Forschungum weitere Aktionen zu überprüfen, die erlaubt oder verweigert werden könnten.
Wichtige Systemdienste laufen auch in ihrer eigenen benutzerdefinierten Sandbox, wie z.B. der Dienst mdnsresponder. Sie können diese benutzerdefinierten Sandbox-Profile anzeigen unter:
App Store-Apps verwenden das Profil /System/Library/Sandbox/Profiles/application.sb. In diesem Profil können Sie überprüfen, wie Berechtigungen wie com.apple.security.network.server einem Prozess die Nutzung des Netzwerks ermöglichen.
SIP ist ein Sandbox-Profil namens platform_profile in /System/Library/Sandbox/rootless.conf
Beispiele für Sandbox-Profile
Um eine Anwendung mit einem spezifischen Sandbox-Profil zu starten, können Sie verwenden:
(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
Beachten Sie, dass die von Apple entwickelte Software, die auf Windows läuft, keine zusätzlichen Sicherheitsvorkehrungen wie Anwendungssandboxing hat.
macOS speichert System-Sandbox-Profile an zwei Orten: /usr/share/sandbox/ und /System/Library/Sandbox/Profiles.
Und wenn eine Drittanbieteranwendung die Berechtigung com.apple.security.app-sandbox hat, wendet das System das Profil /System/Library/Sandbox/Profiles/application.sb auf diesen Prozess an.
iOS Sandbox-Profil
Das Standardprofil heißt container und wir haben keine textuelle Darstellung des SBPL. Im Speicher wird diese Sandbox als Allow/Deny-Baum für jede Berechtigung aus der Sandbox dargestellt.
Debuggen und Umgehen der Sandbox
Auf macOS, im Gegensatz zu iOS, wo Prozesse von Anfang an vom Kernel in einer Sandbox ausgeführt werden, müssen Prozesse sich selbst für die Sandbox entscheiden. Das bedeutet, dass auf macOS ein Prozess nicht durch die Sandbox eingeschränkt ist, bis er aktiv beschließt, in sie einzutreten.
Prozesse werden automatisch in der Benutzerland-Sandbox ausgeführt, wenn sie die Berechtigung com.apple.security.app-sandbox haben. Für eine ausführliche Erklärung dieses Prozesses siehe:
Gemäß diesem Video kann sandbox_check (es handelt sich um einen __mac_syscall) überprüfen, ob eine Operation in einer bestimmten PID von der Sandbox erlaubt ist oder nicht.
Das Tool sbtool kann überprüfen, ob eine PID eine bestimmte Aktion ausführen kann:
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
Benutzerdefinierte SBPL in App Store Apps
Es könnte für Unternehmen möglich sein, ihre Apps mit benutzerdefinierten Sandbox-Profilen (anstatt mit dem Standardprofil) auszuführen. Sie müssen die Berechtigung com.apple.security.temporary-exception.sbpl verwenden, die von Apple autorisiert werden muss.
Es ist möglich, die Definition dieser Berechtigung in /System/Library/Sandbox/Profiles/application.sb: zu überprüfen.