macOS Auto Start
Cette section est fortement basée sur la série de blogs Au-delà des bons vieux LaunchAgents, le but est d'ajouter plus d'emplacements de démarrage automatique (si possible), d'indiquer quelles techniques fonctionnent toujours de nos jours avec la dernière version de macOS (13.4) et de spécifier les autorisations nécessaires.
Contournement de la Sandbox
Ici, vous pouvez trouver des emplacements de démarrage utiles pour le contournement de la sandbox qui vous permettent simplement d'exécuter quelque chose en l'écrivant dans un fichier et en attendant une action très courante, un montant déterminé de temps ou une action que vous pouvez généralement effectuer depuis l'intérieur d'une sandbox sans avoir besoin de permissions root.
Launchd
Emplacements
/Library/LaunchAgents
Déclencheur : Redémarrage
Nécessite des droits root
/Library/LaunchDaemons
Déclencheur : Redémarrage
Nécessite des droits root
/System/Library/LaunchAgents
Déclencheur : Redémarrage
Nécessite des droits root
/System/Library/LaunchDaemons
Déclencheur : Redémarrage
Nécessite des droits root
~/Library/LaunchAgents
Déclencheur : Reconnexion
~/Library/LaunchDemons
Déclencheur : Reconnexion
Description & Exploitation
launchd
est le premier processus exécuté par le noyau OX S au démarrage et le dernier à se terminer à l'arrêt. Il devrait toujours avoir le PID 1. Ce processus lira et exécutera les configurations indiquées dans les plists ASEP dans :
/Library/LaunchAgents
: Agents par utilisateur installés par l'administrateur/Library/LaunchDaemons
: Daemons système installés par l'administrateur/System/Library/LaunchAgents
: Agents par utilisateur fournis par Apple./System/Library/LaunchDaemons
: Daemons système fournis par Apple.
Lorsqu'un utilisateur se connecte, les plists situés dans /Users/$USER/Library/LaunchAgents
et /Users/$USER/Library/LaunchDemons
sont démarrés avec les permissions des utilisateurs connectés.
La principale différence entre les agents et les daemons est que les agents sont chargés lorsque l'utilisateur se connecte et les daemons sont chargés au démarrage du système (car il y a des services comme ssh qui doivent être exécutés avant que tout utilisateur n'accède au système). De plus, les agents peuvent utiliser l'interface graphique tandis que les daemons doivent s'exécuter en arrière-plan.
Il existe des cas où un agent doit être exécuté avant la connexion de l'utilisateur, ceux-ci sont appelés PreLoginAgents. Par exemple, cela est utile pour fournir une technologie d'assistance lors de la connexion. Ils peuvent également être trouvés dans /Library/LaunchAgents
(voir ici un exemple).
Les nouveaux fichiers de configuration de Daemons ou Agents seront chargés après le prochain redémarrage ou en utilisant launchctl load <target.plist>
. Il est également possible de charger des fichiers .plist sans cette extension avec launchctl -F <file>
(cependant, ces fichiers plist ne seront pas automatiquement chargés après le redémarrage).
Il est également possible de décharger avec launchctl unload <target.plist>
(le processus pointé par celui-ci sera terminé).
Pour s'assurer qu'il n'y a rien (comme un remplacement) empêchant un Agent ou Daemon de s'exécuter, exécutez : sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.smdb.plist
Listez tous les agents et daemons chargés par l'utilisateur actuel :
Si un plist est détenu par un utilisateur, même s'il se trouve dans des dossiers système de démon, la tâche sera exécutée en tant qu'utilisateur et non en tant que root. Cela peut prévenir certaines attaques d'escalade de privilèges.
Fichiers de démarrage shell
Writeup: https://theevilbit.github.io/beyond/beyond_0001/ Writeup (xterm): https://theevilbit.github.io/beyond/beyond_0018/
Utile pour contourner le bac à sable : ✅
Contournement de TCC : ✅
Mais vous devez trouver une application avec un contournement de TCC qui exécute un shell chargeant ces fichiers
Emplacements
~/.zshrc
,~/.zlogin
,~/.zshenv.zwc
,~/.zshenv
,~/.zprofile
Déclencheur : Ouvrir un terminal avec zsh
/etc/zshenv
,/etc/zprofile
,/etc/zshrc
,/etc/zlogin
Déclencheur : Ouvrir un terminal avec zsh
Nécessite les droits root
~/.zlogout
Déclencheur : Fermer un terminal avec zsh
/etc/zlogout
Déclencheur : Fermer un terminal avec zsh
Nécessite les droits root
Potentiellement plus dans :
man zsh
~/.bashrc
Déclencheur : Ouvrir un terminal avec bash
/etc/profile
(n'a pas fonctionné)~/.profile
(n'a pas fonctionné)~/.xinitrc
,~/.xserverrc
,/opt/X11/etc/X11/xinit/xinitrc.d/
Déclencheur : Censé être déclenché avec xterm, mais il n'est pas installé et même après installation, cette erreur est générée : xterm :
DISPLAY is not set
Description & Exploitation
Lors de l'initialisation d'un environnement shell tel que zsh
ou bash
, certains fichiers de démarrage sont exécutés. macOS utilise actuellement /bin/zsh
comme shell par défaut. Ce shell est automatiquement accédé lorsque l'application Terminal est lancée ou lorsqu'un appareil est accédé via SSH. Bien que bash
et sh
soient également présents dans macOS, ils doivent être explicitement invoqués pour être utilisés.
La page de manuel de zsh, que nous pouvons lire avec man zsh
, contient une longue description des fichiers de démarrage.
Applications Réouvertes
Configurer l'exploitation indiquée et se déconnecter et se reconnecter ou même redémarrer n'a pas fonctionné pour moi pour exécuter l'application. (L'application n'était pas exécutée, peut-être qu'elle doit être en cours d'exécution lorsque ces actions sont effectuées)
Writeup: https://theevilbit.github.io/beyond/beyond_0021/
Emplacement
~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
Déclencheur : Redémarrer l'ouverture des applications
Description & Exploitation
Toutes les applications à rouvrir se trouvent dans le plist ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
Ainsi, pour que les applications à rouvrir lancent la vôtre, vous devez simplement ajouter votre application à la liste.
L'UUID peut être trouvé en listant ce répertoire ou avec ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'
Pour vérifier les applications qui seront rouvertes, vous pouvez faire :
Pour ajouter une application à cette liste, vous pouvez utiliser :
Préférences du Terminal
Utile pour contourner le bac à sable : ✅
Contournement de TCC : ✅
Le Terminal doit avoir les autorisations FDA de l'utilisateur qui l'utilise
Emplacement
~/Library/Preferences/com.apple.Terminal.plist
Déclencheur : Ouvrir le Terminal
Description & Exploitation
Dans ~/Library/Preferences
sont stockées les préférences de l'utilisateur dans les Applications. Certaines de ces préférences peuvent contenir une configuration pour exécuter d'autres applications/scripts.
Par exemple, le Terminal peut exécuter une commande au démarrage :
Cette configuration est reflétée dans le fichier ~/Library/Preferences/com.apple.Terminal.plist
de cette manière :
Donc, si le plist des préférences du terminal dans le système pouvait être écrasé, alors la fonctionnalité open
peut être utilisée pour ouvrir le terminal et cette commande sera exécutée.
Vous pouvez ajouter ceci depuis la ligne de commande avec:
Scripts Terminal / Autres extensions de fichiers
Utile pour contourner le bac à sable: ✅
Contournement de TCC: ✅
Utilisation du terminal pour avoir les autorisations FDA de l'utilisateur qui l'utilise
Emplacement
N'importe où
Déclencheur: Ouvrir le Terminal
Description & Exploitation
Si vous créez un script .terminal
et l'ouvrez, l'application Terminal sera automatiquement invoquée pour exécuter les commandes indiquées. Si l'application Terminal a des privilèges spéciaux (comme TCC), votre commande sera exécutée avec ces privilèges spéciaux.
Essayez avec:
Vous pouvez également utiliser les extensions .command
, .tool
, avec du contenu de scripts shell réguliers et ils seront également ouverts par Terminal.
Si le terminal a l'accès complet au disque, il pourra effectuer cette action (notez que la commande exécutée sera visible dans une fenêtre de terminal).
Plugins Audio
Writeup: https://theevilbit.github.io/beyond/beyond_0013/ Writeup: https://posts.specterops.io/audio-unit-plug-ins-896d3434a882
Utile pour contourner le bac à sable: ✅
Contournement de TCC : 🟠
Vous pourriez obtenir un accès TCC supplémentaire
Emplacement
/Library/Audio/Plug-Ins/HAL
Nécessite des privilèges d'administrateur
Déclencheur : Redémarrer coreaudiod ou l'ordinateur
/Library/Audio/Plug-ins/Components
Nécessite des privilèges d'administrateur
Déclencheur : Redémarrer coreaudiod ou l'ordinateur
~/Library/Audio/Plug-ins/Components
Déclencheur : Redémarrer coreaudiod ou l'ordinateur
/System/Library/Components
Nécessite des privilèges d'administrateur
Déclencheur : Redémarrer coreaudiod ou l'ordinateur
Description
Selon les writeups précédents, il est possible de compiler certains plugins audio et de les charger.
Plugins QuickLook
Writeup: https://theevilbit.github.io/beyond/beyond_0028/
Utile pour contourner le bac à sable: ✅
Contournement de TCC : 🟠
Vous pourriez obtenir un accès TCC supplémentaire
Emplacement
/System/Library/QuickLook
/Library/QuickLook
~/Library/QuickLook
/Applications/NomApplicationIci/Contents/Library/QuickLook/
~/Applications/NomApplicationIci/Contents/Library/QuickLook/
Description & Exploitation
Les plugins QuickLook peuvent être exécutés lorsque vous déclenchez l'aperçu d'un fichier (appuyez sur la barre d'espace avec le fichier sélectionné dans Finder) et qu'un plugin prenant en charge ce type de fichier est installé.
Il est possible de compiler votre propre plugin QuickLook, de le placer dans l'un des emplacements précédents pour le charger, puis d'aller sur un fichier pris en charge et d'appuyer sur espace pour le déclencher.
Hooks de Connexion/Déconnexion
Cela n'a pas fonctionné pour moi, ni avec le LoginHook utilisateur ni avec le LogoutHook root
Writeup : https://theevilbit.github.io/beyond/beyond_0022/
Emplacement
Vous devez être capable d'exécuter quelque chose comme
defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh
Situé dans
~/Library/Preferences/com.apple.loginwindow.plist
Ils sont obsolètes mais peuvent être utilisés pour exécuter des commandes lorsque un utilisateur se connecte.
Ce paramètre est stocké dans /Users/$USER/Library/Preferences/com.apple.loginwindow.plist
Pour le supprimer :
Le fichier de l'utilisateur root est stocké dans /private/var/root/Library/Preferences/com.apple.loginwindow.plist
Contournement conditionnel du bac à sable
Ici, vous pouvez trouver des emplacements de démarrage utiles pour le contournement du bac à sable qui vous permet de simplement exécuter quelque chose en l'écrivant dans un fichier et en attendant des conditions pas très courantes comme des programmes spécifiques installés, des actions d'utilisateur "non courantes" ou des environnements.
Cron
Writeup: https://theevilbit.github.io/beyond/beyond_0004/
Utile pour contourner le bac à sable: ✅
Cependant, vous devez pouvoir exécuter le binaire
crontab
Ou être root
Contournement de TCC : 🔴
Emplacement
/usr/lib/cron/tabs/
,/private/var/at/tabs
,/private/var/at/jobs
,/etc/periodic/
Accès en écriture directe nécessite les droits root. Pas besoin de droits root si vous pouvez exécuter
crontab <fichier>
Déclencheur : Dépend de la tâche cron
Description et exploitation
Listez les tâches cron de l'utilisateur actuel avec :
Vous pouvez également voir tous les travaux cron des utilisateurs dans /usr/lib/cron/tabs/
et /var/at/tabs/
(nécessite des privilèges root).
Dans MacOS, plusieurs dossiers exécutant des scripts à certaines fréquences peuvent être trouvés dans :
Voici où vous pouvez trouver les tâches cron régulières, les tâches at (peu utilisées) et les tâches périodiques (principalement utilisées pour nettoyer les fichiers temporaires). Les tâches périodiques quotidiennes peuvent être exécutées par exemple avec : periodic daily
.
Pour ajouter un travail cron d'utilisateur de manière programmatique, il est possible d'utiliser :
iTerm2
Writeup: https://theevilbit.github.io/beyond/beyond_0002/
Utile pour contourner le bac à sable: ✅
Contournement de TCC: ✅
iTerm2 utilisé pour avoir accordé des autorisations TCC
Emplacements
~/Library/Application Support/iTerm2/Scripts/AutoLaunch
Déclencheur: Ouvrir iTerm
~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt
Déclencheur: Ouvrir iTerm
~/Library/Preferences/com.googlecode.iterm2.plist
Déclencheur: Ouvrir iTerm
Description & Exploitation
Les scripts stockés dans ~/Library/Application Support/iTerm2/Scripts/AutoLaunch
seront exécutés. Par exemple:
Le script ~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt
sera également exécuté:
Le fichier de préférences iTerm2 situé dans ~/Library/Preferences/com.googlecode.iterm2.plist
peut indiquer une commande à exécuter lorsque le terminal iTerm2 est ouvert.
Ce paramètre peut être configuré dans les paramètres d'iTerm2 :
Et la commande est reflétée dans les préférences :
Vous pouvez définir la commande à exécuter avec :
Il est très probable qu'il existe d'autres moyens d'abuser des préférences d'iTerm2 pour exécuter des commandes arbitraires.
xbar
Writeup: https://theevilbit.github.io/beyond/beyond_0007/
Utile pour contourner le bac à sable : ✅
Mais xbar doit être installé
Contournement de TCC : ✅
Il demande des autorisations d'accessibilité
Emplacement
~/Library/Application\ Support/xbar/plugins/
Déclencheur : Une fois que xbar est exécuté
Description
Si le programme populaire xbar est installé, il est possible d'écrire un script shell dans ~/Library/Application\ Support/xbar/plugins/
qui sera exécuté lorsque xbar est lancé :
Hammerspoon
Writeup: https://theevilbit.github.io/beyond/beyond_0008/
Utile pour contourner le bac à sable: ✅
Mais Hammerspoon doit être installé
Contournement de TCC: ✅
Il demande des autorisations d'accessibilité
Emplacement
~/.hammerspoon/init.lua
Déclencheur: Une fois que Hammerspoon est exécuté
Description
Hammerspoon sert de plateforme d'automatisation pour macOS, utilisant le langage de script LUA pour ses opérations. Notamment, il prend en charge l'intégration de code AppleScript complet et l'exécution de scripts shell, améliorant considérablement ses capacités de script.
L'application recherche un seul fichier, ~/.hammerspoon/init.lua
, et lorsque le script est démarré, il sera exécuté.
BetterTouchTool
Utile pour contourner le bac à sable: ✅
Mais BetterTouchTool doit être installé
Contournement de TCC: ✅
Il demande les autorisations Automation-Shortcuts et Accessibilité
Emplacement
~/Library/Application Support/BetterTouchTool/*
Cet outil permet d'indiquer des applications ou des scripts à exécuter lorsque certaines combinaisons de touches sont pressées. Un attaquant pourrait configurer sa propre combinaison de touches et action à exécuter dans la base de données pour exécuter du code arbitraire (une combinaison de touches pourrait consister simplement à appuyer sur une touche).
Alfred
Utile pour contourner le bac à sable: ✅
Mais Alfred doit être installé
Contournement de TCC: ✅
Il demande les autorisations Automation, Accessibilité et même Accès complet au disque
Emplacement
???
Il permet de créer des workflows qui peuvent exécuter du code lorsque certaines conditions sont remplies. Potentiellement, il est possible pour un attaquant de créer un fichier de workflow et de le faire charger par Alfred (il est nécessaire de payer la version premium pour utiliser les workflows).
SSHRC
Writeup: https://theevilbit.github.io/beyond/beyond_0006/
Utile pour contourner le bac à sable: ✅
Mais ssh doit être activé et utilisé
Contournement de TCC: ✅
SSH a besoin d'un accès complet au disque
Emplacement
~/.ssh/rc
Déclencheur: Connexion via ssh
/etc/ssh/sshrc
Nécessite les droits root
Déclencheur: Connexion via ssh
Pour activer ssh, un accès complet au disque est requis:
Description & Exploitation
Par défaut, sauf si PermitUserRC no
dans /etc/ssh/sshd_config
, lorsque un utilisateur se connecte via SSH, les scripts /etc/ssh/sshrc
et ~/.ssh/rc
seront exécutés.
Éléments de connexion
Writeup: https://theevilbit.github.io/beyond/beyond_0003/
Utile pour contourner le bac à sable : ✅
Mais vous devez exécuter
osascript
avec des argumentsContournement de TCC : 🔴
Emplacements
~/Library/Application Support/com.apple.backgroundtaskmanagementagent
Déclencheur : Connexion
Charge utile d'exploitation stockée en appelant
osascript
/var/db/com.apple.xpc.launchd/loginitems.501.plist
Déclencheur : Connexion
Nécessite des privilèges root
Description
Dans Préférences Système -> Utilisateurs et groupes -> Éléments de connexion, vous pouvez trouver les éléments à exécuter lorsque l'utilisateur se connecte. Il est possible de les lister, ajouter et supprimer en ligne de commande :
Ces éléments sont stockés dans le fichier ~/Library/Application Support/com.apple.backgroundtaskmanagementagent
Les éléments de connexion peuvent également être indiqués en utilisant l'API SMLoginItemSetEnabled qui stockera la configuration dans /var/db/com.apple.xpc.launchd/loginitems.501.plist
ZIP en tant qu'élément de connexion
(Vérifiez la section précédente sur les éléments de connexion, c'est une extension)
Si vous stockez un fichier ZIP en tant qu'élément de connexion, l'Archive Utility
l'ouvrira et si le zip était par exemple stocké dans ~/Library
et contenait le dossier LaunchAgents/file.plist
avec une porte dérobée, ce dossier sera créé (ce n'est pas le cas par défaut) et le plist sera ajouté afin que la prochaine fois que l'utilisateur se connectera, la porte dérobée indiquée dans le plist sera exécutée.
Une autre option serait de créer les fichiers .bash_profile
et .zshenv
à l'intérieur du répertoire de l'utilisateur afin que si le dossier LaunchAgents existe déjà, cette technique fonctionnerait toujours.
At
Analyse : https://theevilbit.github.io/beyond/beyond_0014/
Utile pour contourner le bac à sable : ✅
Mais vous devez exécuter
at
et il doit être activéContournement de TCC : 🔴
Emplacement
Besoin d'exécuter
at
et il doit être activé
Description
Les tâches at
sont conçues pour planifier des tâches ponctuelles à exécuter à des moments précis. Contrairement aux tâches cron, les tâches at
sont automatiquement supprimées après l'exécution. Il est crucial de noter que ces tâches persistent à travers les redémarrages du système, ce qui les classe comme des préoccupations de sécurité potentielles dans certaines conditions.
Par défaut, elles sont désactivées mais l'utilisateur root peut les activer avec :
Cela créera un fichier dans 1 heure :
Vérifiez la file d'attente des tâches en utilisant atq:
Ci-dessus, nous pouvons voir deux tâches planifiées. Nous pouvons imprimer les détails de la tâche en utilisant at -c NUMÉRODETÂCHE
.
Si les tâches AT ne sont pas activées, les tâches créées ne seront pas exécutées.
Les fichiers de tâches peuvent être trouvés à /private/var/at/jobs/
Le nom de fichier contient la file d'attente, le numéro de tâche et l'heure à laquelle elle est programmée pour s'exécuter. Par exemple, examinons a0001a019bdcd2
.
a
- c'est la file d'attente0001a
- numéro de tâche en hexadécimal,0x1a = 26
019bdcd2
- heure en hexadécimal. Il représente les minutes écoulées depuis l'époque.0x019bdcd2
est26991826
en décimal. Si nous le multiplions par 60, nous obtenons1619509560
, qui estGMT: 2021. April 27., Tuesday 7:46:00
.
Si nous imprimons le fichier de tâche, nous constatons qu'il contient les mêmes informations que celles obtenues en utilisant at -c
.
Actions de Dossier
Analyse : https://theevilbit.github.io/beyond/beyond_0024/ Analyse : https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d
Utile pour contourner le bac à sable : ✅
Mais vous devez être capable d'appeler
osascript
avec des arguments pour contacterSystem Events
afin de pouvoir configurer les Actions de DossierContournement de TCC : 🟠
Il a quelques autorisations TCC de base comme Bureau, Documents et Téléchargements
Emplacement
/Library/Scripts/Folder Action Scripts
Nécessite des privilèges d'administrateur
Déclencheur : Accès au dossier spécifié
~/Library/Scripts/Folder Action Scripts
Déclencheur : Accès au dossier spécifié
Description & Exploitation
Les Actions de Dossier sont des scripts déclenchés automatiquement par des changements dans un dossier tels que l'ajout, la suppression d'éléments, ou d'autres actions comme l'ouverture ou le redimensionnement de la fenêtre du dossier. Ces actions peuvent être utilisées pour diverses tâches et peuvent être déclenchées de différentes manières, comme en utilisant l'interface utilisateur Finder ou des commandes terminal.
Pour configurer des Actions de Dossier, vous avez des options comme :
Créer un flux de travail d'Action de Dossier avec Automator et l'installer en tant que service.
Attacher un script manuellement via la Configuration des Actions de Dossier dans le menu contextuel d'un dossier.
Utiliser OSAScript pour envoyer des messages d'événements Apple à l'application
System Events.app
pour configurer de manière programmatique une Action de Dossier.
Cette méthode est particulièrement utile pour intégrer l'action dans le système, offrant un niveau de persistance.
Le script suivant est un exemple de ce qui peut être exécuté par une Action de Dossier :
Pour rendre le script ci-dessus utilisable par les actions de dossier, compilez-le en utilisant :
Après la compilation du script, configurez les Actions de dossier en exécutant le script ci-dessous. Ce script activera les Actions de dossier de manière globale et attachera spécifiquement le script compilé précédemment au dossier Bureau.
Exécutez le script de configuration avec :
Voici la manière de mettre en œuvre cette persistance via l'interface graphique :
Voici le script qui sera exécuté :
Compilez-le avec : osacompile -l JavaScript -o folder.scpt source.js
Déplacez-le vers :
Ensuite, ouvrez l'application Folder Actions Setup
, sélectionnez le dossier que vous souhaitez surveiller et sélectionnez dans votre cas folder.scpt
(dans mon cas, je l'ai appelé output2.scp) :
Maintenant, si vous ouvrez ce dossier avec Finder, votre script sera exécuté.
Cette configuration a été stockée dans le plist situé dans ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist
au format base64.
Maintenant, essayons de préparer cette persistance sans accès GUI :
Copiez
~/Library/Preferences/com.apple.FolderActionsDispatcher.plist
vers/tmp
pour le sauvegarder :
cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp
Supprimez les Folder Actions que vous venez de définir :
Maintenant que nous avons un environnement vide
Copiez le fichier de sauvegarde :
cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/
Ouvrez l'application Folder Actions Setup pour consommer cette configuration :
open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"
Et cela n'a pas fonctionné pour moi, mais ce sont les instructions du rapport :(
Raccourcis Dock
Rapport : https://theevilbit.github.io/beyond/beyond_0027/
Utile pour contourner le bac à sable : ✅
Mais vous devez avoir installé une application malveillante dans le système
Contournement de TCC : 🔴
Emplacement
~/Library/Preferences/com.apple.dock.plist
Déclencheur : Lorsque l'utilisateur clique sur l'application dans le dock
Description & Exploitation
Toutes les applications qui apparaissent dans le Dock sont spécifiées dans le plist : ~/Library/Preferences/com.apple.dock.plist
Il est possible d'ajouter une application simplement avec :
En utilisant un peu d'ingénierie sociale, vous pourriez vous faire passer par exemple pour Google Chrome dans le dock et en réalité exécuter votre propre script :
Sélecteurs de couleurs
Writeup: https://theevilbit.github.io/beyond/beyond_0017
Utile pour contourner le bac à sable: 🟠
Une action très spécifique doit se produire
Vous vous retrouverez dans un autre bac à sable
Contournement de TCC: 🔴
Emplacement
/Library/ColorPickers
Nécessite des privilèges d'administration
Déclencheur : Utilisation du sélecteur de couleurs
~/Library/ColorPickers
Déclencheur : Utilisation du sélecteur de couleurs
Description & Exploitation
Compilez un bundle de sélecteur de couleurs avec votre code (vous pourriez utiliser celui-ci par exemple) et ajoutez un constructeur (comme dans la section Économiseur d'écran) puis copiez le bundle dans ~/Library/ColorPickers
.
Ensuite, lorsque le sélecteur de couleurs est déclenché, votre code devrait également l'être.
Notez que le binaire chargeant votre bibliothèque a un bac à sable très restrictif : /System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64
Extensions de synchronisation Finder
Writeup: https://theevilbit.github.io/beyond/beyond_0026/ Writeup: https://objective-see.org/blog/blog_0x11.html
Utile pour contourner le bac à sable : Non, car vous devez exécuter votre propre application
Contournement de TCC : ???
Emplacement
Une application spécifique
Description & Exploit
Un exemple d'application avec une extension Finder Sync peut être trouvé ici.
Les applications peuvent avoir des Extensions de synchronisation Finder
. Cette extension ira à l'intérieur d'une application qui sera exécutée. De plus, pour que l'extension puisse exécuter son code, elle doit être signée avec un certificat de développeur Apple valide, elle doit être sous bac à sable (bien que des exceptions assouplies puissent être ajoutées) et elle doit être enregistrée avec quelque chose comme :
Économiseur d'écran
Writeup: https://theevilbit.github.io/beyond/beyond_0016/ Writeup: https://posts.specterops.io/saving-your-access-d562bf5bf90b
Utile pour contourner le bac à sable : 🟠
Mais vous finirez dans un bac à sable d'application commun
Contournement de TCC : 🔴
Emplacement
/System/Library/Screen Savers
Nécessite les droits d'administrateur
Déclencheur : Sélectionnez l'économiseur d'écran
/Library/Screen Savers
Nécessite les droits d'administrateur
Déclencheur : Sélectionnez l'économiseur d'écran
~/Library/Screen Savers
Déclencheur : Sélectionnez l'économiseur d'écran
Description & Exploit
Créez un nouveau projet dans Xcode et sélectionnez le modèle pour générer un nouvel économiseur d'écran. Ensuite, ajoutez-y votre code, par exemple le code suivant pour générer des journaux.
Compilez et copiez le paquet .saver
dans ~/Library/Screen Savers
. Ensuite, ouvrez l'interface graphique de l'économiseur d'écran et si vous cliquez simplement dessus, cela devrait générer beaucoup de journaux :
Notez que parce que à l'intérieur des autorisations du binaire qui charge ce code (/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver
) vous pouvez trouver com.apple.security.app-sandbox
vous serez à l'intérieur du bac à sable d'application commun.
Code de l'économiseur:
Plugins Spotlight
writeup: https://theevilbit.github.io/beyond/beyond_0011/
Utile pour contourner le bac à sable: 🟠
Mais vous finirez dans un bac à sable d'application
Contournement de TCC: 🔴
Le bac à sable semble très limité
Emplacement
~/Library/Spotlight/
Déclencheur: Un nouveau fichier avec une extension gérée par le plugin Spotlight est créé.
/Library/Spotlight/
Déclencheur: Un nouveau fichier avec une extension gérée par le plugin Spotlight est créé.
Nécessite des privilèges d'administrateur
/System/Library/Spotlight/
Déclencheur: Un nouveau fichier avec une extension gérée par le plugin Spotlight est créé.
Nécessite des privilèges d'administrateur
Some.app/Contents/Library/Spotlight/
Déclencheur: Un nouveau fichier avec une extension gérée par le plugin Spotlight est créé.
Nouvelle application requise
Description & Exploitation
Spotlight est la fonction de recherche intégrée de macOS, conçue pour offrir aux utilisateurs un accès rapide et complet aux données de leurs ordinateurs. Pour faciliter cette capacité de recherche rapide, Spotlight maintient une base de données propriétaire et crée un index en analysant la plupart des fichiers, permettant des recherches rapides à la fois dans les noms de fichiers et leur contenu.
Le mécanisme sous-jacent de Spotlight implique un processus central nommé 'mds', qui signifie 'serveur de métadonnées'. Ce processus orchestre l'ensemble du service Spotlight. En complément, il existe plusieurs démons 'mdworker' qui effectuent diverses tâches de maintenance, telles que l'indexation de différents types de fichiers (ps -ef | grep mdworker
). Ces tâches sont rendues possibles grâce aux plugins importateurs Spotlight, ou bundles ".mdimporter", qui permettent à Spotlight de comprendre et d'indexer le contenu de divers formats de fichiers.
Les plugins ou bundles .mdimporter
sont situés aux endroits mentionnés précédemment et si un nouveau bundle apparaît, il est chargé en quelques minutes (pas besoin de redémarrer de service). Ces bundles doivent indiquer quels types de fichiers et extensions ils peuvent gérer, de cette manière, Spotlight les utilisera lorsqu'un nouveau fichier avec l'extension indiquée est créé.
Il est possible de trouver tous les mdimporters
chargés en exécutant:
Et par exemple /Library/Spotlight/iBooksAuthor.mdimporter est utilisé pour analyser ce type de fichiers (extensions .iba
et .book
entre autres) :
Si vous vérifiez le Plist d'autres mdimporter
, vous pourriez ne pas trouver l'entrée UTTypeConformsTo
. C'est parce que c'est un Uniform Type Identifiers (UTI) intégré et il n'a pas besoin de spécifier les extensions.
De plus, les plugins par défaut du système ont toujours la priorité, donc un attaquant ne peut accéder qu'aux fichiers qui ne sont pas indexés par les propres mdimporters
d'Apple.
Pour créer votre propre importateur, vous pourriez commencer avec ce projet : https://github.com/megrimm/pd-spotlight-importer puis changer le nom, les CFBundleDocumentTypes
et ajouter UTImportedTypeDeclarations
pour prendre en charge l'extension que vous souhaitez supporter et les refléter dans schema.xml
. Ensuite, modifiez le code de la fonction GetMetadataForFile
pour exécuter votre charge utile lorsqu'un fichier avec l'extension traitée est créé.
Enfin, compilez et copiez votre nouveau fichier .mdimporter
dans l'un des emplacements précédents et vous pouvez vérifier s'il est chargé en surveillant les journaux ou en vérifiant mdimport -L.
Panneau de préférences
Il semble que cela ne fonctionne plus.
Explication : https://theevilbit.github.io/beyond/beyond_0009/
Utile pour contourner le bac à sable : 🟠
Nécessite une action utilisateur spécifique
Contournement de TCC : 🔴
Emplacement
/System/Library/PreferencePanes
/Library/PreferencePanes
~/Library/PreferencePanes
Description
Il semble que cela ne fonctionne plus.
Contournement du bac à sable root
Ici, vous pouvez trouver des emplacements de démarrage utiles pour le contournement du bac à sable qui vous permettent simplement d'exécuter quelque chose en l'écrivant dans un fichier en étant root et/ou en nécessitant d'autres conditions étranges.
Périodique
Explication : https://theevilbit.github.io/beyond/beyond_0019/
Emplacement
/etc/periodic/daily
,/etc/periodic/weekly
,/etc/periodic/monthly
,/usr/local/etc/periodic
Nécessite d'être root
Déclencheur : Lorsque le moment arrive
/etc/daily.local
,/etc/weekly.local
ou/etc/monthly.local
Nécessite d'être root
Déclencheur : Lorsque le moment arrive
Description & Exploitation
Les scripts périodiques (/etc/periodic
) sont exécutés en raison des daemons de lancement configurés dans /System/Library/LaunchDaemons/com.apple.periodic*
. Notez que les scripts stockés dans /etc/periodic/
sont exécutés en tant que propriétaire du fichier, donc cela ne fonctionnera pas pour une éventuelle élévation de privilèges.
Il existe d'autres scripts périodiques qui seront exécutés indiqués dans /etc/defaults/periodic.conf
:
Si vous parvenez à écrire l'un des fichiers /etc/daily.local
, /etc/weekly.local
ou /etc/monthly.local
, il sera exécuté tôt ou tard.
Notez que le script périodique sera exécuté en tant que propriétaire du script. Ainsi, si un utilisateur régulier est propriétaire du script, il sera exécuté en tant qu'utilisateur (ceci pourrait empêcher les attaques d'escalade de privilèges).
PAM
Writeup: Linux Hacktricks PAM Writeup: https://theevilbit.github.io/beyond/beyond_0005/
Emplacement
Toujours nécessite les droits root
Description & Exploitation
Comme PAM est plus axé sur la persistance et les logiciels malveillants que sur l'exécution facile à l'intérieur de macOS, ce blog ne donnera pas d'explication détaillée, lisez les writeups pour mieux comprendre cette technique.
Vérifiez les modules PAM avec :
Une technique de persistance/escalade de privilèges abusant de PAM est aussi simple que de modifier le module /etc/pam.d/sudo en ajoutant au début la ligne :
Donc cela ressemblera à quelque chose comme ceci :
Et donc toute tentative d'utiliser sudo
fonctionnera.
Notez que ce répertoire est protégé par TCC, il est donc très probable que l'utilisateur reçoive une invite demandant l'accès.
Plugins d'autorisation
Writeup: https://theevilbit.github.io/beyond/beyond_0028/ Writeup: https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65
Utile pour contourner le bac à sable: 🟠
Mais vous devez être root et effectuer des configurations supplémentaires
Contournement de TCC : ???
Emplacement
/Library/Security/SecurityAgentPlugins/
Nécessite des privilèges root
Il est également nécessaire de configurer la base de données d'autorisation pour utiliser le plugin
Description & Exploitation
Vous pouvez créer un plugin d'autorisation qui sera exécuté lorsque qu'un utilisateur se connecte pour maintenir la persistance. Pour plus d'informations sur la création de ces plugins, consultez les writeups précédents (et soyez prudent, un plugin mal écrit peut vous bloquer et vous devrez nettoyer votre Mac en mode de récupération).
Déplacez le bundle vers l'emplacement à charger :
Enfin, ajoutez la règle pour charger ce Plugin :
Le evaluate-mechanisms
indiquera au framework d'autorisation qu'il devra appeler un mécanisme externe pour l'autorisation. De plus, privileged
fera en sorte qu'il soit exécuté par root.
Déclenchez-le avec :
Et ensuite, le groupe staff devrait avoir un accès sudo (lire /etc/sudoers
pour confirmer).
Man.conf
Writeup: https://theevilbit.github.io/beyond/beyond_0030/
Utile pour contourner le bac à sable : 🟠
Mais vous devez être root et l'utilisateur doit utiliser man
Contournement de TCC : 🔴
Emplacement
/private/etc/man.conf
Nécessite les droits root
/private/etc/man.conf
: Chaque fois que man est utilisé
Description & Exploit
Le fichier de configuration /private/etc/man.conf
indique le binaire/script à utiliser lors de l'ouverture des fichiers de documentation man. Ainsi, le chemin vers l'exécutable pourrait être modifié de sorte qu'à chaque fois que l'utilisateur utilise man pour lire des documents, une porte dérobée est exécutée.
Par exemple, définir dans /private/etc/man.conf
:
Et ensuite créez /tmp/view
comme suit :
Apache2
Writeup: https://theevilbit.github.io/beyond/beyond_0023/
Utile pour contourner le bac à sable: 🟠
Mais vous devez être root et apache doit être en cours d'exécution
Contournement de TCC: 🔴
Httpd n'a pas d'attributs
Emplacement
/etc/apache2/httpd.conf
Root requis
Déclencheur: Lorsque Apache2 est démarré
Description & Exploit
Vous pouvez indiquer dans /etc/apache2/httpd.conf
de charger un module en ajoutant une ligne comme suit:
De cette façon, vos modules compilés seront chargés par Apache. La seule condition est que vous deviez le signer avec un certificat Apple valide, ou vous deviez ajouter un nouveau certificat de confiance dans le système et le signer avec celui-ci.
Ensuite, si nécessaire, pour vous assurer que le serveur sera démarré, vous pourriez exécuter :
Exemple de code pour le Dylb :
Cadre d'audit BSM
Writeup: https://theevilbit.github.io/beyond/beyond_0031/
Utile pour contourner le bac à sable: 🟠
Mais vous devez être root, auditd doit être en cours d'exécution et provoquer un avertissement
Contournement de TCC: 🔴
Emplacement
/etc/security/audit_warn
Root requis
Déclencheur: Lorsque auditd détecte un avertissement
Description & Exploit
Chaque fois qu'auditd détecte un avertissement, le script /etc/security/audit_warn
est exécuté. Vous pourriez donc y ajouter votre charge utile.
Éléments de démarrage
Ceci est obsolète, donc rien ne devrait être trouvé dans ces répertoires.
Le StartupItem est un répertoire qui devrait être positionné soit dans /Library/StartupItems/
ou /System/Library/StartupItems/
. Une fois ce répertoire établi, il doit contenir deux fichiers spécifiques :
Un script rc : Un script shell exécuté au démarrage.
Un fichier plist, nommé spécifiquement
StartupParameters.plist
, qui contient divers paramètres de configuration.
Assurez-vous que le script rc et le fichier StartupParameters.plist
sont correctement placés à l'intérieur du répertoire StartupItem pour que le processus de démarrage les reconnaisse et les utilise.
Emplacements de démarrage automatique macOS
Emplacements de démarrage automatique
Les emplacements suivants peuvent être utilisés pour démarrer automatiquement des programmes sur macOS :
/Library/LaunchAgents/
/Library/LaunchDaemons/
/System/Library/LaunchAgents/
/System/Library/LaunchDaemons/
~/Library/LaunchAgents/
Désactivation des emplacements de démarrage automatique
Pour désactiver les emplacements de démarrage automatique, vous pouvez supprimer les fichiers de configuration des programmes que vous ne souhaitez pas démarrer automatiquement. Assurez-vous de sauvegarder les fichiers avant de les supprimer au cas où vous auriez besoin de les restaurer ultérieurement.
Vérification des emplacements de démarrage automatique
Pour vérifier quels programmes sont configurés pour démarrer automatiquement, vous pouvez examiner les fichiers présents dans les emplacements mentionnés ci-dessus. Assurez-vous de vérifier régulièrement ces emplacements pour détecter toute activité suspecte.
emond
Je ne trouve pas ce composant dans mon macOS, pour plus d'informations consultez le writeup
Writeup: https://theevilbit.github.io/beyond/beyond_0023/
Introduit par Apple, emond est un mécanisme de journalisation qui semble être sous-développé ou peut-être abandonné, mais reste accessible. Bien que peu bénéfique pour un administrateur Mac, ce service obscur pourrait servir de méthode de persistance subtile pour les acteurs de menace, probablement inaperçue par la plupart des administrateurs macOS.
Pour ceux qui connaissent son existence, identifier toute utilisation malveillante de emond est simple. Le LaunchDaemon du système pour ce service recherche des scripts à exécuter dans un seul répertoire. Pour inspecter cela, la commande suivante peut être utilisée:
XQuartz
Writeup: https://theevilbit.github.io/beyond/beyond_0018/
Emplacement
/opt/X11/etc/X11/xinit/privileged_startx.d
Nécessite les droits d'administrateur
Déclencheur: Avec XQuartz
Description & Exploit
XQuartz n'est plus installé dans macOS, donc pour plus d'informations, consultez le writeup.
kext
Il est tellement compliqué d'installer un kext même en tant qu'administrateur que je ne considérerai pas cela comme une échappatoire des sandbox ou même pour la persistance (à moins que vous ayez une faille)
Emplacement
Pour installer un KEXT en tant qu'élément de démarrage, il doit être installé dans l'un des emplacements suivants:
/System/Library/Extensions
Fichiers KEXT intégrés dans le système d'exploitation OS X.
/Library/Extensions
Fichiers KEXT installés par des logiciels tiers
Vous pouvez lister les fichiers kext actuellement chargés avec:
Pour plus d'informations sur les extensions de noyau, consultez cette section.
amstoold
Writeup: https://theevilbit.github.io/beyond/beyond_0029/
Emplacement
/usr/local/bin/amstoold
Nécessite les droits d'administrateur
Description & Exploitation
Apparemment, le plist
de /System/Library/LaunchAgents/com.apple.amstoold.plist
utilisait ce binaire tout en exposant un service XPC... le problème est que le binaire n'existait pas, donc vous pouviez y placer quelque chose et lorsque le service XPC était appelé, votre binaire serait exécuté.
Je ne trouve plus cela dans mon macOS.
xsanctl
Writeup: https://theevilbit.github.io/beyond/beyond_0015/
Emplacement
/Library/Preferences/Xsan/.xsanrc
Nécessite les droits d'administrateur
Déclencheur: Lorsque le service est exécuté (rarement)
Description & exploitation
Apparemment, il n'est pas très courant d'exécuter ce script et je ne l'ai même pas trouvé dans mon macOS, donc si vous voulez plus d'informations, consultez le writeup.
/etc/rc.common
Cela ne fonctionne pas dans les versions récentes de MacOS
Il est également possible de placer ici des commandes qui seront exécutées au démarrage. Exemple de script rc.common régulier:
Techniques et outils de persistance
Last updated