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/