macOS Sandbox
Informations de base
Le bac à sable macOS (initialement appelé Seatbelt) limite les applications s'exécutant à l'intérieur du bac à sable aux actions autorisées spécifiées dans le profil du bac à sable avec lequel l'application s'exécute. Cela aide à garantir que l'application n'accédera qu'aux ressources attendues.
Toute application avec l'autorisation com.apple.security.app-sandbox
sera exécutée à l'intérieur du bac à sable. Les binaires Apple sont généralement exécutés à l'intérieur d'un bac à sable et pour être publiés dans l'App Store, cette autorisation est obligatoire. Ainsi, la plupart des applications seront exécutées à l'intérieur du bac à sable.
Pour contrôler ce qu'un processus peut ou ne peut pas faire, le bac à sable a des crochets dans tous les appels système à travers le noyau. En fonction des autorisations de l'application, le bac à sable autorise certaines actions.
Certains composants importants du bac à sable sont :
L'extension de noyau
/System/Library/Extensions/Sandbox.kext
Le framework privé
/System/Library/PrivateFrameworks/AppSandbox.framework
Un démon s'exécutant dans l'espace utilisateur
/usr/libexec/sandboxd
Les conteneurs
~/Library/Containers
À l'intérieur du dossier des conteneurs, vous pouvez trouver un dossier pour chaque application exécutée dans un bac à sable avec le nom de l'identifiant de bundle :
À l'intérieur de chaque dossier d'identifiant de bundle, vous pouvez trouver le plist et le répertoire Data de l'application :
Notez que même si les liens symboliques sont là pour "échapper" au Bac à sable et accéder à d'autres dossiers, l'application doit toujours avoir les autorisations pour y accéder. Ces autorisations se trouvent dans le fichier .plist
.
Tout ce qui est créé/modifié par une application Sandbox aura l'attribut de quarantaine. Cela empêchera un espace de sandbox en déclenchant Gatekeeper si l'application sandbox tente d'exécuter quelque chose avec open
.
Profils de Sandbox
Les profils de Sandbox sont des fichiers de configuration qui indiquent ce qui va être autorisé/interdit dans cette sandbox. Il utilise le Langage de Profil de Sandbox (SBPL), qui utilise le langage de programmation Scheme.
Voici un exemple :
Consultez cette recherche pour vérifier plus d'actions qui pourraient être autorisées ou refusées.
Les services système importants s'exécutent également à l'intérieur de leur propre sandbox personnalisée telle que le service mdnsresponder
. Vous pouvez consulter ces profils de sandbox personnalisés à l'intérieur de :
/usr/share/sandbox
/System/Library/Sandbox/Profiles
D'autres profils de sandbox peuvent être consultés sur https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles.
Les applications App Store utilisent le profil /System/Library/Sandbox/Profiles/application.sb
. Vous pouvez vérifier dans ce profil comment les autorisations telles que com.apple.security.network.server
permettent à un processus d'utiliser le réseau.
SIP est un profil de sandbox appelé platform_profile dans /System/Library/Sandbox/rootless.conf
Exemples de Profils de Sandbox
Pour démarrer une application avec un profil de sandbox spécifique, vous pouvez utiliser :
Notez que les logiciels développés par Apple qui s'exécutent sur Windows ne bénéficient pas de précautions de sécurité supplémentaires, telles que l'isolation des applications.
Exemples de contournements :
https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c (ils peuvent écrire des fichiers en dehors du bac à sable dont le nom commence par
~$
).
Profils de bac à sable de MacOS
macOS stocke les profils de bac à sable système dans deux emplacements : /usr/share/sandbox/ et /System/Library/Sandbox/Profiles.
Et si une application tierce possède l'attribution com.apple.security.app-sandbox, le système applique le profil /System/Library/Sandbox/Profiles/application.sb à ce processus.
Profil de bac à sable iOS
Le profil par défaut s'appelle container et nous n'avons pas la représentation textuelle SBPL. En mémoire, ce bac à sable est représenté comme un arbre binaire Autoriser/Refuser pour chaque autorisation du bac à sable.
Débogage & Contournement du Bac à Sable
Sur macOS, contrairement à iOS où les processus sont isolés dès le départ par le noyau, les processus doivent choisir de rejoindre le bac à sable eux-mêmes. Cela signifie que sur macOS, un processus n'est pas restreint par le bac à sable tant qu'il ne décide pas activement d'y entrer.
Les processus sont automatiquement mis en bac à sable depuis l'espace utilisateur lorsqu'ils démarrent s'ils possèdent l'attribution : com.apple.security.app-sandbox
. Pour une explication détaillée de ce processus, consultez :
Vérifier les Privilèges PID
D'après ceci, le sandbox_check
(c'est un __mac_syscall
), peut vérifier si une opération est autorisée ou non par le bac à sable dans un PID spécifique.
L'outil sbtool peut vérifier si un PID peut effectuer une certaine action :
Profils SBPL personnalisés dans les applications de l'App Store
Il pourrait être possible pour les entreprises de faire fonctionner leurs applications avec des profils Sandbox personnalisés (au lieu de celui par défaut). Elles doivent utiliser l'attribution com.apple.security.temporary-exception.sbpl
qui doit être autorisée par Apple.
Il est possible de vérifier la définition de cette attribution dans /System/Library/Sandbox/Profiles/application.sb:
Cela évaluera la chaîne après cette autorisation en tant que profil Sandbox.
Last updated