macOS SIP
Informations de base
La Protection de l'Intégrité du Système (SIP) dans macOS est un mécanisme conçu pour empêcher même les utilisateurs les plus privilégiés de faire des modifications non autorisées dans les dossiers système clés. Cette fonctionnalité joue un rôle crucial dans le maintien de l'intégrité du système en restreignant des actions telles que l'ajout, la modification ou la suppression de fichiers dans des zones protégées. Les principaux dossiers protégés par SIP incluent :
/System
/bin
/sbin
/usr
Les règles qui régissent le comportement de SIP sont définies dans le fichier de configuration situé à /System/Library/Sandbox/rootless.conf
. Dans ce fichier, les chemins préfixés par un astérisque (*) sont désignés comme des exceptions aux restrictions SIP par ailleurs strictes.
Considérez l'exemple ci-dessous:
Ce passage implique que bien que SIP sécurise généralement le répertoire /usr
, il existe des sous-répertoires spécifiques (/usr/libexec/cups
, /usr/local
et /usr/share/man
) où des modifications sont autorisées, comme indiqué par l'astérisque (*) précédant leurs chemins.
Pour vérifier si un répertoire ou un fichier est protégé par SIP, vous pouvez utiliser la commande ls -lOd
pour vérifier la présence du drapeau restricted
ou sunlnk
. Par exemple:
Dans ce cas, le drapeau sunlnk
signifie que le répertoire /usr/libexec/cups
lui-même ne peut pas être supprimé, bien que des fichiers à l'intérieur puissent être créés, modifiés ou supprimés.
D'autre part:
Ici, le drapeau restricted
indique que le répertoire /usr/libexec
est protégé par SIP. Dans un répertoire protégé par SIP, les fichiers ne peuvent pas être créés, modifiés ou supprimés.
De plus, si un fichier contient l'attribut étendu com.apple.rootless
, ce fichier sera également protégé par SIP.
SIP limite également d'autres actions root telles que :
Chargement d'extensions de noyau non fiables
Obtention de ports de tâche pour les processus signés par Apple
Modification des variables NVRAM
Autorisation du débogage du noyau
Les options sont maintenues dans la variable nvram sous forme de bitflag (csr-active-config
sur Intel et lp-sip0
est lu à partir de l'arborescence de périphérique démarrée pour ARM). Vous pouvez trouver les drapeaux dans le code source XNU dans csr.sh
:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2088318145-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frq9WIQinJaxpWMvakjIQ%252Fuploads%252Fgit-blob-cfe9a62d4b3d7c5a3ae7856e1c1f22ba568ce4ab%252Fimage%2520%28720%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=397b5d6a&sv=1)
État de SIP
Vous pouvez vérifier si SIP est activé sur votre système avec la commande suivante :
Si vous devez désactiver SIP, vous devez redémarrer votre ordinateur en mode de récupération (en appuyant sur Commande+R au démarrage), puis exécuter la commande suivante :
Si vous souhaitez conserver SIP activé mais supprimer les protections de débogage, vous pouvez le faire avec :
Autres restrictions
Interdit le chargement d'extensions de noyau non signées (kexts), garantissant que seules les extensions vérifiées interagissent avec le noyau du système.
Empêche le débogage des processus système macOS, protégeant les composants principaux du système contre tout accès et modification non autorisés.
Inhibe les outils tels que dtrace d'inspecter les processus système, renforçant ainsi la protection de l'intégrité du fonctionnement du système.
En savoir plus sur les informations SIP dans cette présentation.
Contournements de SIP
Contourner SIP permet à un attaquant de :
Accéder aux données utilisateur : Lire des données sensibles des utilisateurs telles que les e-mails, les messages et l'historique de Safari de tous les comptes utilisateur.
Contournement de TCC : Manipuler directement la base de données TCC (Transparency, Consent, and Control) pour accorder un accès non autorisé à la webcam, au microphone et à d'autres ressources.
Établir une persistance : Placer des logiciels malveillants dans des emplacements protégés par SIP, les rendant résistants à la suppression, même avec des privilèges root. Cela inclut également la possibilité de manipuler l'outil de suppression de logiciels malveillants (MRT).
Charger des extensions de noyau : Bien qu'il existe des protections supplémentaires, contourner SIP simplifie le processus de chargement d'extensions de noyau non signées.
Packages d'installation
Les packages d'installation signés avec le certificat d'Apple peuvent contourner ses protections. Cela signifie que même les packages signés par des développeurs standard seront bloqués s'ils tentent de modifier des répertoires protégés par SIP.
Fichier SIP inexistant
Une faille potentielle est que si un fichier est spécifié dans rootless.conf
mais n'existe pas actuellement, il peut être créé. Les logiciels malveillants pourraient exploiter cela pour établir une persistance sur le système. Par exemple, un programme malveillant pourrait créer un fichier .plist dans /System/Library/LaunchDaemons
s'il est répertorié dans rootless.conf
mais n'est pas présent.
com.apple.rootless.install.heritable
L'entitlement com.apple.rootless.install.heritable
permet de contourner SIP
Shrootless
Des chercheurs de ce billet de blog ont découvert une vulnérabilité dans le mécanisme de Protection de l'Intégrité du Système (SIP) de macOS, appelée la vulnérabilité 'Shrootless'. Cette vulnérabilité tourne autour du démon system_installd
, qui a un entitlement, com.apple.rootless.install.heritable
, permettant à l'un de ses processus enfants de contourner les restrictions du système de fichiers de SIP.
Le démon system_installd
installera des packages signés par Apple.
Les chercheurs ont découvert que lors de l'installation d'un package signé par Apple (.pkg), system_installd
exécute tous les scripts post-installation inclus dans le package. Ces scripts sont exécutés par le shell par défaut, zsh
, qui exécute automatiquement les commandes du fichier /etc/zshenv
, s'il existe, même en mode non interactif. Cette fonctionnalité pourrait être exploitée par des attaquants : en créant un fichier /etc/zshenv
malveillant et en attendant que system_installd
invoque zsh
, ils pourraient effectuer des opérations arbitraires sur l'appareil.
De plus, il a été découvert que /etc/zshenv
pourrait être utilisé comme une technique d'attaque générale, pas seulement pour contourner SIP. Chaque profil utilisateur a un fichier ~/.zshenv
, qui se comporte de la même manière que /etc/zshenv
mais ne nécessite pas de permissions root. Ce fichier pourrait être utilisé comme mécanisme de persistance, se déclenchant à chaque démarrage de zsh
, ou comme mécanisme d'élévation de privilèges. Si un utilisateur administrateur élève ses privilèges à root en utilisant sudo -s
ou sudo <commande>
, le fichier ~/.zshenv
serait déclenché, élevant effectivement à root.
Dans CVE-2022-22583, il a été découvert que le même processus system_installd
pouvait toujours être abusé car il plaçait le script post-installation à l'intérieur d'un dossier nommé aléatoirement protégé par SIP à l'intérieur de /tmp
. Le fait est que /tmp
n'est pas protégé par SIP en soi, il était donc possible de monter une image virtuelle dessus, puis l'installateur placerait le script post-installation dedans, démonterait l'image virtuelle, re-créerait tous les dossiers et ajouterait le script de post-installation avec la charge utile à exécuter.
Une vulnérabilité a été identifiée où fsck_cs
a été induit en erreur pour corrompre un fichier crucial, en raison de sa capacité à suivre les liens symboliques. Plus précisément, les attaquants ont créé un lien depuis /dev/diskX
vers le fichier /System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist
. L'exécution de fsck_cs
sur /dev/diskX
a conduit à la corruption de Info.plist
. L'intégrité de ce fichier est vitale pour la Protection de l'Intégrité du Système (SIP) du système d'exploitation, qui contrôle le chargement des extensions de noyau. Une fois corrompu, la capacité de SIP à gérer les exclusions de noyau est compromise.
Les commandes pour exploiter cette vulnérabilité sont :
L'exploitation de cette vulnérabilité a des implications graves. Le fichier Info.plist
, normalement responsable de la gestion des autorisations pour les extensions du noyau, devient inefficace. Cela inclut l'incapacité de mettre sur liste noire certaines extensions, telles que AppleHWAccess.kext
. Par conséquent, avec le mécanisme de contrôle du SIP hors service, cette extension peut être chargée, accordant un accès en lecture et en écriture non autorisé à la RAM du système.
Il était possible de monter un nouveau système de fichiers sur des dossiers protégés par SIP pour contourner la protection.
Le système est configuré pour démarrer à partir d'une image disque d'installateur intégrée dans Install macOS Sierra.app
pour mettre à niveau le système d'exploitation, en utilisant l'utilitaire bless
. La commande utilisée est la suivante:
La sécurité de ce processus peut être compromise si un attaquant modifie l'image de mise à niveau (InstallESD.dmg
) avant le démarrage. La stratégie consiste à substituer un chargeur dynamique (dyld) par une version malveillante (libBaseIA.dylib
). Ce remplacement entraîne l'exécution du code de l'attaquant lorsque l'installateur est lancé.
Le code de l'attaquant prend le contrôle pendant le processus de mise à niveau, exploitant la confiance du système envers l'installateur. L'attaque se poursuit en modifiant l'image InstallESD.dmg
via le swizzling de méthode, ciblant en particulier la méthode extractBootBits
. Cela permet l'injection de code malveillant avant l'utilisation de l'image disque.
De plus, dans InstallESD.dmg
, il y a un BaseSystem.dmg
, qui sert de système de fichiers racine du code de mise à niveau. L'injection d'une bibliothèque dynamique dans cela permet au code malveillant de fonctionner dans un processus capable de modifier des fichiers au niveau du système, augmentant considérablement le potentiel de compromission du système.
Dans cette présentation de DEF CON 31, il est montré comment systemmigrationd
(qui peut contourner SIP) exécute un script bash et un script perl, qui peuvent être exploités via les variables d'environnement BASH_ENV
et PERL5OPT
.
com.apple.rootless.install
L'entitlement com.apple.rootless.install
permet de contourner SIP
L'entitlement com.apple.rootless.install
est connu pour contourner la Protection de l'Intégrité du Système (SIP) sur macOS. Cela a été notamment mentionné en relation avec CVE-2022-26712.
Dans ce cas spécifique, le service XPC système situé à /System/Library/PrivateFrameworks/ShoveService.framework/Versions/A/XPCServices/SystemShoveService.xpc
possède cet entitlement. Cela permet au processus associé de contourner les contraintes de SIP. De plus, ce service présente notamment une méthode qui permet le déplacement de fichiers sans appliquer de mesures de sécurité.
Instantanés Système Scellés
Les Instantanés Système Scellés sont une fonctionnalité introduite par Apple dans macOS Big Sur (macOS 11) dans le cadre de son mécanisme de Protection de l'Intégrité du Système (SIP) pour fournir une couche supplémentaire de sécurité et de stabilité du système. Ce sont essentiellement des versions en lecture seule du volume système.
Voici un aperçu plus détaillé :
Système Immuable : Les Instantanés Système Scellés rendent le volume système macOS "immuable", ce qui signifie qu'il ne peut pas être modifié. Cela empêche toute modification non autorisée ou accidentelle du système qui pourrait compromettre la sécurité ou la stabilité du système.
Mises à Jour du Logiciel Système : Lorsque vous installez des mises à jour ou des mises à niveau macOS, macOS crée un nouveau instantané système. Le volume de démarrage macOS utilise ensuite APFS (Apple File System) pour basculer vers ce nouvel instantané. Tout le processus d'application des mises à jour devient plus sûr et fiable car le système peut toujours revenir à l'instantané précédent en cas de problème lors de la mise à jour.
Séparation des Données : En conjonction avec le concept de séparation des volumes de Données et de Système introduit dans macOS Catalina, la fonctionnalité d'Instantanés Système Scellés garantit que toutes vos données et paramètres sont stockés sur un volume "Données" séparé. Cette séparation rend vos données indépendantes du système, ce qui simplifie le processus de mise à jour du système et améliore la sécurité du système.
Rappelez-vous que ces instantanés sont automatiquement gérés par macOS et ne prennent pas d'espace supplémentaire sur votre disque, grâce aux capacités de partage d'espace d'APFS. Il est également important de noter que ces instantanés sont différents des instantanés Time Machine, qui sont des sauvegardes accessibles par l'utilisateur de l'ensemble du système.
Vérifier les Instantanés
La commande diskutil apfs list
liste les détails des volumes APFS et leur disposition :
Dans la sortie précédente, il est possible de voir que les emplacements accessibles par l'utilisateur sont montés sous /System/Volumes/Data
.
De plus, l'instantané du volume système macOS est monté dans /
et il est scellé (signé cryptographiquement par le système d'exploitation). Ainsi, si SIP est contourné et le modifie, le système d'exploitation ne démarrera plus.
Il est également possible de vérifier que le scellement est activé en exécutant :
De plus, le disque de snapshot est également monté en lecture seule :
Last updated