macOS Sandbox
Grundinformationen
MacOS Sandbox (anfangs Seatbelt genannt) beschränkt Anwendungen, die innerhalb des Sandboxes ausgeführt werden, auf die erlaubten Aktionen, die im Sandbox-Profil festgelegt sind, mit dem die App ausgeführt wird. Dies hilft sicherzustellen, dass die Anwendung nur auf erwartete Ressourcen zugreift.
Jede App mit der Berechtigung com.apple.security.app-sandbox
wird innerhalb des Sandboxes ausgeführt. Apple-Binärdateien werden normalerweise innerhalb eines Sandboxes ausgeführt, und um im App Store veröffentlicht zu werden, ist diese Berechtigung obligatorisch. Daher werden die meisten Anwendungen innerhalb des Sandboxes ausgeführt.
Um zu kontrollieren, was ein Prozess tun oder nicht tun kann, hat der Sandbox Hooks in allen Syscalls im Kernel. Abhängig von den Berechtigungen der App wird der Sandbox bestimmte Aktionen erlauben.
Einige wichtige Komponenten des Sandboxes sind:
Die Kernel-Erweiterung
/System/Library/Extensions/Sandbox.kext
Das private Framework
/System/Library/PrivateFrameworks/AppSandbox.framework
Ein Daemon, der im Userland läuft
/usr/libexec/sandboxd
Die Container
~/Library/Containers
Im Container-Ordner finden Sie einen Ordner für jede App, die sandboxed ausgeführt wird, mit dem Namen der Bundle-ID:
Innerhalb jedes Bundle-ID-Ordners finden Sie die plist und das Datenverzeichnis der App:
Beachten Sie, dass selbst wenn die Symlinks vorhanden sind, um aus dem Sandbox zu "entkommen" und auf andere Ordner zuzugreifen, die App dennoch Berechtigungen haben muss, um auf sie zuzugreifen. Diese Berechtigungen befinden sich in der .plist
.
Alles, was von einer Sandbox-Anwendung erstellt/modified wird, erhält das Quarantäneattribut. Dies wird einen Sandbox-Raum verhindern, indem Gatekeeper 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 Sandbox erlaubt/verboten ist. Es verwendet die Sandbox Profile Language (SBPL), die die Scheme Programmiersprache nutzt.
Hier finden Sie ein Beispiel:
Überprüfen Sie diese Forschung um weitere Aktionen zu überprüfen, die erlaubt oder verweigert werden könnten.
Wichtige Systemdienste laufen ebenfalls in ihrem eigenen benutzerdefinierten Sandbox, wie der Dienst mdnsresponder
. Sie können diese benutzerdefinierten Sandbox-Profile einsehen in:
/usr/share/sandbox
/System/Library/Sandbox/Profiles
Andere Sandbox-Profile können unter https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles überprüft werden.
App Store-Apps verwenden das Profil /System/Library/Sandbox/Profiles/application.sb
. Sie können in diesem Profil überprüfen, wie Berechtigungen wie com.apple.security.network.server
einem Prozess erlauben, das Netzwerk zu nutzen.
SIP ist ein Sandbox-Profil, das in /System/Library/Sandbox/rootless.conf als platform_profile bezeichnet wird.
Sandbox-Profilbeispiele
Um eine Anwendung mit einem spezifischen Sandbox-Profil zu starten, können Sie verwenden:
Beachten Sie, dass die von Apple verfasste Software, die auf Windows läuft, keine zusätzlichen Sicherheitsvorkehrungen hat, wie z.B. die Anwendungssandbox.
Beispiele für Umgehungen:
https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c (sie können Dateien außerhalb der Sandbox schreiben, deren Name mit
~$
beginnt).
MacOS Sandbox-Profile
macOS speichert System-Sandbox-Profile an zwei Orten: /usr/share/sandbox/ und /System/Library/Sandbox/Profiles.
Und wenn eine Drittanbieteranwendung das com.apple.security.app-sandbox Recht hat, wendet das System das /System/Library/Sandbox/Profiles/application.sb Profil auf diesen Prozess an.
iOS Sandbox-Profil
Das Standardprofil heißt container und wir haben keine SBPL-Textdarstellung. Im Speicher wird diese Sandbox als Erlauben/Verweigern-Binärbaum für jede Berechtigung aus der Sandbox dargestellt.
Debuggen & Umgehen der Sandbox
Auf macOS, im Gegensatz zu iOS, wo Prozesse von Anfang an durch den Kernel in einer Sandbox laufen, müssen Prozesse selbst in die Sandbox eintreten. Das bedeutet, dass ein Prozess auf macOS nicht durch die Sandbox eingeschränkt ist, bis er aktiv entscheidet, sie zu betreten.
Prozesse werden automatisch aus dem Userland in die Sandbox gesetzt, wenn sie starten, wenn sie das Recht com.apple.security.app-sandbox
haben. Für eine detaillierte Erklärung dieses Prozesses siehe:
Überprüfen der PID-Berechtigungen
Laut diesem kann der sandbox_check
(es ist ein __mac_syscall
), überprüfen, ob eine Operation erlaubt ist oder nicht durch die Sandbox in einer bestimmten PID.
Das Tool sbtool kann überprüfen, ob eine PID eine bestimmte Aktion ausführen kann:
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 genehmigt werden muss.
Es ist möglich, die Definition dieser Berechtigung in /System/Library/Sandbox/Profiles/application.sb:
zu überprüfen.
Dies wird den String nach diesem Berechtigungsnachweis als Sandbox-Profil eval.
Last updated