mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 20:53:37 +00:00
Translated ['binary-exploitation/common-binary-protections-and-bypasses/
This commit is contained in:
parent
342fb337ce
commit
39ca008942
4 changed files with 254 additions and 34 deletions
|
@ -725,6 +725,7 @@
|
|||
* [Ret2plt](binary-exploitation/common-binary-protections-and-bypasses/aslr/ret2plt.md)
|
||||
* [Ret2ret & Reo2pop](binary-exploitation/common-binary-protections-and-bypasses/aslr/ret2ret.md)
|
||||
* [CET & Shadow Stack](binary-exploitation/common-binary-protections-and-bypasses/cet-and-shadow-stack.md)
|
||||
* [Libc Protections](binary-exploitation/common-binary-protections-and-bypasses/libc-protections.md)
|
||||
* [Memory Tagging Extension (MTE)](binary-exploitation/common-binary-protections-and-bypasses/memory-tagging-extension-mte.md)
|
||||
* [No-exec / NX](binary-exploitation/common-binary-protections-and-bypasses/no-exec-nx.md)
|
||||
* [PIE](binary-exploitation/common-binary-protections-and-bypasses/pie/README.md)
|
||||
|
|
|
@ -0,0 +1,108 @@
|
|||
# Protections Libc
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **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 vos 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.
|
||||
|
||||
</details>
|
||||
|
||||
## Application de l'alignement des tranches
|
||||
|
||||
**Malloc** alloue de la mémoire par groupes de **8 octets (32 bits) ou 16 octets (64 bits)**. Cela signifie que la fin des tranches dans les systèmes 32 bits doit être alignée sur **0x8**, et dans les systèmes 64 bits sur **0x0**. La fonctionnalité de sécurité vérifie que chaque tranche s'aligne correctement à ces emplacements spécifiques avant d'utiliser un pointeur d'un bac.
|
||||
|
||||
### Avantages en termes de sécurité
|
||||
|
||||
L'application de l'alignement des tranches dans les systèmes 64 bits améliore considérablement la sécurité de Malloc en **limitant le placement des tranches falsifiées à seulement 1 adresse sur 16**. Cela complique les efforts d'exploitation, en particulier dans les scénarios où l'utilisateur a un contrôle limité sur les valeurs d'entrée, rendant les attaques plus complexes et plus difficiles à exécuter avec succès.
|
||||
|
||||
* **Attaque Fastbin sur \_\_malloc\_hook**
|
||||
|
||||
Les nouvelles règles d'alignement dans Malloc contrecarrent également une attaque classique impliquant le `__malloc_hook`. Auparavant, les attaquants pouvaient manipuler les tailles de tranche pour **écraser ce pointeur de fonction** et obtenir une **exécution de code**. Désormais, l'exigence stricte d'alignement garantit que de telles manipulations ne sont plus viables, fermant ainsi une voie d'exploitation courante et améliorant la sécurité globale.
|
||||
|
||||
## Mélange de pointeurs sur les fastbins et tcache
|
||||
|
||||
Le **mélange de pointeurs** est une amélioration de sécurité utilisée pour protéger les **pointeurs Fd fastbin et tcache** dans les opérations de gestion de mémoire. Cette technique aide à prévenir certains types de tactiques d'exploitation de mémoire, en particulier celles qui ne nécessitent pas d'informations de mémoire divulguées ou qui manipulent directement les emplacements mémoire par rapport à des positions connues (écrasements **relatifs**).
|
||||
|
||||
Le cœur de cette technique est une formule d'obscurcissement :
|
||||
|
||||
**`Nouveau_Ptr = (L >> 12) XOR P`**
|
||||
|
||||
* **L** est l'**emplacement de stockage** du pointeur.
|
||||
* **P** est le **pointeur Fd fastbin/tcache** réel.
|
||||
|
||||
La raison du décalage des bits de l'emplacement de stockage (L) de 12 bits vers la droite avant l'opération XOR est critique. Cette manipulation adresse une vulnérabilité inhérente à la nature déterministe des 12 bits les moins significatifs des adresses mémoire, qui sont généralement prévisibles en raison des contraintes de l'architecture du système. En décalant les bits, la partie prévisible est éliminée de l'équation, améliorant le caractère aléatoire du nouveau pointeur mélangé et protégeant ainsi contre les attaques qui reposent sur la prévisibilité de ces bits.
|
||||
|
||||
Ce pointeur mélangé exploite le caractère aléatoire existant fourni par la **Randomisation de l'Agencement de l'Espace d'Adresses (ASLR)**, qui randomise les adresses utilisées par les programmes pour rendre difficile aux attaquants de prédire la disposition mémoire d'un processus.
|
||||
|
||||
**Démêler** le pointeur pour récupérer l'adresse d'origine implique d'utiliser la même opération XOR. Ici, le pointeur mélangé est traité comme P dans la formule, et lorsqu'il est XORé avec l'emplacement de stockage inchangé (L), cela révèle le pointeur d'origine. Cette symétrie dans le mélange et le démélange garantit que le système peut encoder et décoder efficacement les pointeurs sans surcharge significative, tout en augmentant considérablement la sécurité contre les attaques qui manipulent les pointeurs mémoire.
|
||||
|
||||
### Avantages en termes de sécurité
|
||||
|
||||
Le mélange de pointeurs vise à **empêcher les écrasements partiels et complets de pointeurs dans la gestion du tas**, une amélioration significative en termes de sécurité. Cette fonctionnalité impacte les techniques d'exploitation de plusieurs manières :
|
||||
|
||||
1. **Prévention des écrasements relatifs de Bye Byte** : Auparavant, les attaquants pouvaient modifier une partie d'un pointeur pour **rediriger les tranches du tas vers des emplacements différents sans connaître les adresses exactes**, une technique évidente dans l'exploit **House of Roman** sans fuite. Avec le mélange de pointeurs, de tels écrasements relatifs **sans fuite de tas nécessitent désormais une force brute**, réduisant considérablement leur probabilité de succès.
|
||||
2. **Difficulté accrue des attaques Fastbin/Tcache Bin** : Les attaques courantes qui écrasent les pointeurs de fonction (comme `__malloc_hook`) en manipulant les entrées fastbin ou tcache sont entravées. Par exemple, une attaque pourrait impliquer la divulgation d'une adresse LibC, la libération d'une tranche dans le tcache bin, puis l'écrasement du pointeur Fd pour le rediriger vers `__malloc_hook` pour une exécution de code arbitraire. Avec le mélange de pointeurs, ces pointeurs doivent être correctement mélangés, **nécessitant une fuite de tas pour une manipulation précise**, élevant ainsi la barrière d'exploitation.
|
||||
3. **Nécessité de fuites de tas dans des emplacements non-tas** : Créer une fausse tranche dans des zones non-tas (comme la pile, la section .bss ou PLT/GOT) nécessite désormais également une fuite de tas en raison du besoin de mélange de pointeurs. Cela étend la complexité de l'exploitation de ces zones, similaire à l'exigence de manipulation des adresses LibC.
|
||||
4. **La fuite d'adresses de tas devient plus difficile** : Le mélange de pointeurs restreint l'utilité des pointeurs Fd dans les bacs fastbin et tcache en tant que sources de fuites d'adresses de tas. Cependant, les pointeurs dans les bacs non triés, petits et grands restent non mélangés, donc toujours utilisables pour la fuite d'adresses. Ce changement pousse les attaquants à explorer ces bacs pour des informations exploitables, bien que certaines techniques permettent toujours de démêler les pointeurs avant une fuite, bien que sous contraintes.
|
||||
|
||||
### **Démêler les pointeurs avec une fuite de tas**
|
||||
|
||||
{% hint style="danger" %}
|
||||
Pour une meilleure explication du processus, [**consultez le message original ici**](https://maxwelldulin.com/BlogPost?post=5445977088).
|
||||
{% endhint %}
|
||||
|
||||
### Aperçu de l'algorithme
|
||||
|
||||
La formule utilisée pour mélanger et démêler les pointeurs est : 
|
||||
|
||||
**`Nouveau_Ptr = (L >> 12) XOR P`**
|
||||
|
||||
Où **L** est l'emplacement de stockage et **P** est le pointeur Fd. Lorsque **L** est décalé vers la droite de 12 bits, il expose les bits les plus significatifs de **P**, en raison de la nature de **XOR**, qui produit 0 lorsque les bits sont XORés avec eux-mêmes.
|
||||
|
||||
**Étapes clés de l'algorithme :**
|
||||
|
||||
1. **Fuite initiale des bits les plus significatifs** : En XORant le décalage de **L** avec **P**, vous obtenez efficacement les 12 bits supérieurs de **P** car la partie décalée de **L** sera zéro, laissant les bits correspondants de **P** inchangés.
|
||||
2. **Récupération des bits du pointeur** : Comme XOR est réversible, connaître le résultat et l'un des opérandes vous permet de calculer l'autre opérande. Cette propriété est utilisée pour déduire l'ensemble complet de bits pour **P** en XORant successivement des ensembles de bits connus avec des parties du pointeur mélangé.
|
||||
3. **Démêlage itératif** : Le processus est répété, chaque fois en utilisant les bits de **P** nouvellement découverts de l'étape précédente pour décoder le segment suivant du pointeur mélangé, jusqu'à ce que tous les bits soient récupérés.
|
||||
4. **Gestion des bits déterministes** : Les 12 derniers bits de **L** sont perdus en raison du décalage, mais ils sont déterministes et peuvent être reconstruits après le processus.
|
||||
|
||||
Vous pouvez trouver une implémentation de cet algorithme ici : [https://github.com/mdulin2/mangle](https://github.com/mdulin2/mangle)
|
||||
## Garde de pointeur
|
||||
|
||||
La garde de pointeur est une technique de mitigation des exploits utilisée dans glibc pour protéger les pointeurs de fonction stockés, en particulier ceux enregistrés par des appels de bibliothèque tels que `atexit()`. Cette protection implique de brouiller les pointeurs en les XORant avec un secret stocké dans les données du thread (`fs:0x30`) et en appliquant une rotation bit à bit. Ce mécanisme vise à empêcher les attaquants de détourner le flux de contrôle en écrivant sur les pointeurs de fonction.
|
||||
|
||||
### **Contourner la Garde de Pointeur avec une fuite**
|
||||
|
||||
1. **Compréhension des Opérations de Garde de Pointeur :** Le brouillage des pointeurs est effectué en utilisant la macro `PTR_MANGLE` qui XOR le pointeur avec un secret de 64 bits puis effectue une rotation gauche de 0x11 bits. L'opération inverse pour récupérer le pointeur d'origine est gérée par `PTR_DEMANGLE`.
|
||||
2. **Stratégie d'Attaque :** L'attaque est basée sur une approche de texte clair connu, où l'attaquant doit connaître à la fois la version originale et la version brouillée d'un pointeur pour déduire le secret utilisé pour le brouillage.
|
||||
3. **Exploitation des Textes Clairs Connus :**
|
||||
* **Identification des Pointeurs de Fonction Fixes :** En examinant le code source de glibc ou les tables de pointeurs de fonction initialisées (comme `__libc_pthread_functions`), un attaquant peut trouver des pointeurs de fonction prévisibles.
|
||||
* **Calcul du Secret :** En utilisant un pointeur de fonction connu tel que `__pthread_attr_destroy` et sa version brouillée de la table de pointeurs de fonction, le secret peut être calculé en effectuant une rotation inverse (rotation droite) du pointeur brouillé puis en le XORant avec l'adresse de la fonction.
|
||||
4. **Textes Clairs Alternatifs :** L'attaquant peut également expérimenter en brouillant des pointeurs avec des valeurs connues comme 0 ou -1 pour voir si cela produit des motifs identifiables en mémoire, révélant potentiellement le secret lorsque ces motifs sont trouvés dans les vidages mémoire.
|
||||
5. **Application Pratique :** Après avoir calculé le secret, un attaquant peut manipuler les pointeurs de manière contrôlée, contournant essentiellement la protection de la Garde de Pointeur dans une application multi-thread avec la connaissance de l'adresse de base de la libc et la capacité de lire des emplacements mémoire arbitraires.
|
||||
|
||||
## Références
|
||||
|
||||
* [https://maxwelldulin.com/BlogPost?post=5445977088](https://maxwelldulin.com/BlogPost?post=5445977088)
|
||||
* [https://blog.infosectcbr.com.au/2020/04/bypassing-pointer-guard-in-linuxs-glibc.html?m=1](https://blog.infosectcbr.com.au/2020/04/bypassing-pointer-guard-in-linuxs-glibc.html?m=1)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
D'autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous voulez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF** Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **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 vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
|
@ -18,14 +18,14 @@ Autres façons de soutenir HackTricks :
|
|||
|
||||
Un **package d'installation macOS** (également connu sous le nom de fichier `.pkg`) est un format de fichier utilisé par macOS pour **distribuer des logiciels**. Ces fichiers sont comme une **boîte qui contient tout ce dont un logiciel** a besoin pour s'installer et fonctionner correctement.
|
||||
|
||||
Le fichier du package est en fait une archive qui contient une **hiérarchie de fichiers et de répertoires qui seront installés sur la cible**. Il peut également inclure des **scripts** pour effectuer des tâches avant et après l'installation, comme la configuration des fichiers ou le nettoyage des anciennes versions du logiciel.
|
||||
Le fichier du package est en fait une archive qui contient une **hiérarchie de fichiers et de répertoires qui seront installés sur la cible**. Il peut également inclure des **scripts** pour effectuer des tâches avant et après l'installation, comme la configuration des fichiers de configuration ou le nettoyage des anciennes versions du logiciel.
|
||||
|
||||
### Hiérarchie
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/Pasted Graphic.png" alt="https://www.youtube.com/watch?v=iASSG0_zobQ"><figcaption></figcaption></figure>
|
||||
|
||||
- **Distribution (xml)** : Personnalisations (titre, texte de bienvenue...) et scripts/vérifications d'installation
|
||||
- **PackageInfo (xml)** : Informations, exigences d'installation, emplacement d'installation, chemins vers les scripts à exécuter
|
||||
- **Distribution (xml)** : Personnalisations (titre, texte de bienvenue...) et vérifications de script/installation
|
||||
- **PackageInfo (xml)** : Infos, exigences d'installation, emplacement d'installation, chemins vers les scripts à exécuter
|
||||
- **Liste des matériaux (bom)** : Liste des fichiers à installer, mettre à jour ou supprimer avec les autorisations de fichier
|
||||
- **Charge utile (archive CPIO compressée gzip)** : Fichiers à installer dans l'emplacement d'installation à partir de PackageInfo
|
||||
- **Scripts (archive CPIO compressée gzip)** : Scripts d'installation pré et post et autres ressources extraites vers un répertoire temporaire pour l'exécution.
|
||||
|
@ -50,27 +50,31 @@ Pour visualiser le contenu de l'installateur sans le décompresser manuellement,
|
|||
|
||||
Les fichiers DMG, ou images disque Apple, sont un format de fichier utilisé par macOS d'Apple pour les images disque. Un fichier DMG est essentiellement une **image disque montable** (il contient son propre système de fichiers) qui contient des données de bloc brut généralement compressées et parfois chiffrées. Lorsque vous ouvrez un fichier DMG, macOS le **monte comme s'il s'agissait d'un disque physique**, vous permettant d'accéder à son contenu.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Notez que les installateurs **`.dmg`** prennent en charge **tant de formats** que par le passé, certains d'entre eux contenant des vulnérabilités ont été abusés pour obtenir une **exécution de code kernel**.
|
||||
{% endhint %}
|
||||
|
||||
### Hiérarchie
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (222).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
La hiérarchie d'un fichier DMG peut être différente en fonction du contenu. Cependant, pour les DMG d'applications, elle suit généralement cette structure :
|
||||
La hiérarchie d'un fichier DMG peut être différente en fonction du contenu. Cependant, pour les DMG d'application, elle suit généralement cette structure :
|
||||
|
||||
* Niveau supérieur : C'est la racine de l'image disque. Il contient souvent l'application et éventuellement un lien vers le dossier Applications.
|
||||
* Application (.app) : Il s'agit de l'application réelle. Dans macOS, une application est généralement un package qui contient de nombreux fichiers et dossiers individuels qui composent l'application.
|
||||
* Lien vers Applications : Il s'agit d'un raccourci vers le dossier Applications dans macOS. Le but de ceci est de faciliter l'installation de l'application. Vous pouvez faire glisser le fichier .app vers ce raccourci pour installer l'application.
|
||||
- Niveau supérieur : C'est la racine de l'image disque. Il contient souvent l'application et éventuellement un lien vers le dossier Applications.
|
||||
- Application (.app) : Il s'agit de l'application réelle. Dans macOS, une application est généralement un package qui contient de nombreux fichiers et dossiers individuels qui composent l'application.
|
||||
- Lien vers Applications : Il s'agit d'un raccourci vers le dossier Applications dans macOS. Le but de ceci est de faciliter l'installation de l'application. Vous pouvez faire glisser le fichier .app vers ce raccourci pour installer l'application.
|
||||
|
||||
## Privilège élevé via abus de pkg
|
||||
|
||||
### Exécution à partir de répertoires publics
|
||||
|
||||
Si un script d'installation préalable ou postérieur exécute par exemple à partir de **`/var/tmp/Installerutil`**, et qu'un attaquant peut contrôler ce script, il peut alors escalader les privilèges chaque fois qu'il est exécuté. Ou un autre exemple similaire :
|
||||
Si un script d'installation pré ou post exécute par exemple à partir de **`/var/tmp/Installerutil`**, et qu'un attaquant pouvait contrôler ce script, il pourrait escalader les privilèges chaque fois qu'il est exécuté. Ou un autre exemple similaire :
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/Pasted Graphic 5.png" alt="https://www.youtube.com/watch?v=iASSG0_zobQ"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/Pasted Graphic 5.png" alt="https://www.youtube.com/watch?v=iASSG0_zobQ"><figcaption><p><a href="https://www.youtube.com/watch?v=kCXhIYtODBg">https://www.youtube.com/watch?v=kCXhIYtODBg</a></p></figcaption></figure>
|
||||
|
||||
### AuthorizationExecuteWithPrivileges
|
||||
|
||||
Il s'agit d'une [fonction publique](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) que plusieurs installateurs et mises à jour appelleront pour **exécuter quelque chose en tant que root**. Cette fonction accepte le **chemin** du **fichier** à **exécuter** en tant que paramètre, cependant, si un attaquant peut **modifier** ce fichier, il pourra **abuser** de son exécution avec les privilèges root pour **escalader les privilèges**.
|
||||
Il s'agit d'une [fonction publique](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) que plusieurs installateurs et mises à jour appelleront pour **exécuter quelque chose en tant que root**. Cette fonction accepte le **chemin** du **fichier** à **exécuter** en tant que paramètre, cependant, si un attaquant pouvait **modifier** ce fichier, il serait capable d'**abuser** de son exécution avec les privilèges root pour **escalader les privilèges**.
|
||||
```bash
|
||||
# Breakpoint in the function to check wich file is loaded
|
||||
(lldb) b AuthorizationExecuteWithPrivileges
|
||||
|
@ -82,7 +86,7 @@ Pour plus d'informations, consultez cette présentation : [https://www.youtube.c
|
|||
|
||||
Si un installateur écrit dans `/tmp/fixedname/bla/bla`, il est possible de **créer un montage** sur `/tmp/fixedname` sans propriétaires afin de **modifier n'importe quel fichier pendant l'installation** pour abuser du processus d'installation.
|
||||
|
||||
Un exemple de ceci est **CVE-2021-26089** qui a réussi à **écraser un script périodique** pour obtenir une exécution en tant que root. Pour plus d'informations, consultez la présentation : [**OBTS v4.0: "Mont(agne) de Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
|
||||
Un exemple de cela est **CVE-2021-26089** qui a réussi à **écraser un script périodique** pour obtenir une exécution en tant que root. Pour plus d'informations, consultez la présentation : [**OBTS v4.0: "Mont(agne) de Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
|
||||
|
||||
## pkg en tant que logiciel malveillant
|
||||
|
||||
|
@ -90,16 +94,17 @@ Un exemple de ceci est **CVE-2021-26089** qui a réussi à **écraser un script
|
|||
|
||||
Il est possible de simplement générer un fichier **`.pkg`** avec des **scripts de pré et post-installation** sans aucune charge utile.
|
||||
|
||||
### JS dans le fichier xml de distribution
|
||||
### JS dans le xml de distribution
|
||||
|
||||
Il est possible d'ajouter des balises **`<script>`** dans le fichier xml de **distribution** du package et ce code sera exécuté et il peut **exécuter des commandes** en utilisant **`system.run`**:
|
||||
Il est possible d'ajouter des balises **`<script>`** dans le fichier **xml de distribution** du package et ce code sera exécuté et il peut **exécuter des commandes** en utilisant **`system.run`**:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1040).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Références
|
||||
|
||||
* [**DEF CON 27 - Déballage des Pkgs Un regard à l'intérieur des packages d'installation de Macos et des failles de sécurité courantes**](https://www.youtube.com/watch?v=iASSG0\_zobQ)
|
||||
* [**DEF CON 27 - Déballage des Pkgs Un regard à l'intérieur des packages d'installation de MacOS et des failles de sécurité courantes**](https://www.youtube.com/watch?v=iASSG0\_zobQ)
|
||||
* [**OBTS v4.0: "Le monde sauvage des installateurs macOS" - Tony Lambert**](https://www.youtube.com/watch?v=Eow5uNHtmIg)
|
||||
* [**DEF CON 27 - Déballage des Pkgs Un regard à l'intérieur des packages d'installation de MacOS**](https://www.youtube.com/watch?v=kCXhIYtODBg)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -110,7 +115,7 @@ Autres façons de soutenir HackTricks :
|
|||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -30,7 +30,7 @@ Permissions dans un **répertoire** :
|
|||
|
||||
- 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 **accès en écriture**
|
||||
- Un **groupe d'utilisateurs** a un accès **en écriture** au **fichier**
|
||||
- Un **groupe d'utilisateurs** a un **accès en écriture** au **fichier**
|
||||
|
||||
Avec l'une des combinaisons précédentes, un attaquant pourrait **injecter** un **lien symbole/dur** dans le chemin attendu pour obtenir une écriture arbitraire privilégiée.
|
||||
|
||||
|
@ -44,7 +44,7 @@ Exemple dans : [https://theevilbit.github.io/posts/exploiting\_directory\_permis
|
|||
|
||||
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.
|
||||
|
||||
Consultez les autres sections où un attaquant pourrait **abuser d'une écriture arbitraire pour escalader les privilèges**.
|
||||
Vérifiez dans les autres sections où un attaquant pourrait **abuser d'une écriture arbitraire pour escalader les privilèges**.
|
||||
|
||||
## .fileloc
|
||||
|
||||
|
@ -62,9 +62,9 @@ Exemple :
|
|||
</dict>
|
||||
</plist>
|
||||
```
|
||||
## Descripteur de fichier arbitraire
|
||||
## FD arbitraire
|
||||
|
||||
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`**, de sorte que `exploit.py` obtiendra le descripteur de fichier vers le fichier à l'intérieur de `/etc/sudoers` et l'abusera.
|
||||
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 FD du fichier à l'intérieur de `/etc/sudoers` et l'abusera.
|
||||
|
||||
Par exemple : [https://youtu.be/f1HA5QhLQ7Y?t=21098](https://youtu.be/f1HA5QhLQ7Y?t=21098)
|
||||
|
||||
|
@ -76,7 +76,7 @@ xattr -d com.apple.quarantine /path/to/file_or_app
|
|||
```
|
||||
### Drapeau uchg / uchange / uimmutable
|
||||
|
||||
Si un fichier/dossier a cet attribut immuable, il ne sera pas possible d'y ajouter un xattr
|
||||
Si un fichier/dossier a cet attribut immuable, il ne sera pas possible d'y mettre un xattr
|
||||
```bash
|
||||
echo asd > /tmp/asd
|
||||
chflags uchg /tmp/asd # "chflags uchange /tmp/asd" or "chflags uimmutable /tmp/asd"
|
||||
|
@ -99,7 +99,7 @@ xattr: [Errno 1] Operation not permitted: '/tmp/mnt/lol'
|
|||
```
|
||||
### ACL writeextattr
|
||||
|
||||
Cet ACL empêche l'ajout de `xattrs` au fichier.
|
||||
Cet ACL empêche l'ajout de `xattrs` au fichier
|
||||
```bash
|
||||
rm -rf /tmp/test*
|
||||
echo test >/tmp/test
|
||||
|
@ -122,9 +122,9 @@ ls -le /tmp/test
|
|||
```
|
||||
### **com.apple.acl.text xattr + AppleDouble**
|
||||
|
||||
Le format de fichier **AppleDouble** copie un fichier avec 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 de l'ACL stockée à l'intérieur de l'xattr appelé **`com.apple.acl.text`** va être 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 un ACL qui empêche l'écriture d'autres xattrs... l'xattr de quarantaine n'a pas été 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 à l'intérieur du 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 un ACL qui empêche l'écriture d'autres xattrs dessus... le 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.
|
||||
|
||||
|
@ -233,7 +233,7 @@ hdiutil create -srcfolder justsome.app justsome.dmg
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
En général, macOS monte le disque en dialoguant avec le service Mach `com.apple.DiskArbitration.diskarbitrationd` (fourni par `/usr/libexec/diskarbitrationd`). Si vous ajoutez le paramètre `-d` au fichier LaunchDaemons plist et redémarrez, il stockera des journaux dans `/var/log/diskarbitrationd.log`.\
|
||||
En général, macOS monte le disque en parlant au service Mach `com.apple.DiskArbitration.diskarbitrationd` (fourni par `/usr/libexec/diskarbitrationd`). Si vous ajoutez le paramètre `-d` au fichier plist de LaunchDaemons et redémarrez, il stockera des journaux dans `/var/log/diskarbitrationd.log`.\
|
||||
Cependant, il est possible d'utiliser des outils comme `hdik` et `hdiutil` pour communiquer directement avec le kext `com.apple.driver.DiskImages`.
|
||||
|
||||
## Écritures arbitraires
|
||||
|
@ -242,11 +242,11 @@ Cependant, il est possible d'utiliser des outils comme `hdik` et `hdiutil` pour
|
|||
|
||||
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é chaque jour.
|
||||
|
||||
Vous pouvez **simuler** l'exécution de ce script avec: **`sudo periodic daily`**
|
||||
Vous pouvez **simuler** l'exécution de ce script avec : **`sudo periodic daily`**
|
||||
|
||||
### Daemons
|
||||
|
||||
Écrivez un **LaunchDaemon** arbitraire comme **`/Library/LaunchDaemons/xyz.hacktricks.privesc.plist`** avec un plist exécutant un script arbitraire comme:
|
||||
Écrivez un **LaunchDaemon** arbitraire comme **`/Library/LaunchDaemons/xyz.hacktricks.privesc.plist`** avec un plist exécutant un script arbitraire comme :
|
||||
```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">
|
||||
|
@ -269,13 +269,13 @@ Si vous avez **l'écriture arbitraire**, vous pourriez créer un fichier à l'in
|
|||
|
||||
### 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 **le détourner** en modifiant ce fichier.
|
||||
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 le **détourner** 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`.
|
||||
|
||||
## Générer des fichiers inscriptibles en tant qu'autres utilisateurs
|
||||
|
||||
Cela générera un fichier appartenant à root qui est inscriptible par moi ([**code from here**](https://github.com/gergelykalman/brew-lpe-via-periodic/blob/main/brew\_lpe.sh)). Cela pourrait également fonctionner comme une élévation de privilèges:
|
||||
Cela générera un fichier appartenant à root qui est inscriptible par moi ([**code à partir d'ici**](https://github.com/gergelykalman/brew-lpe-via-periodic/blob/main/brew\_lpe.sh)). Cela pourrait également fonctionner comme élévation de privilèges :
|
||||
```bash
|
||||
DIRNAME=/usr/local/etc/periodic/daily
|
||||
|
||||
|
@ -287,20 +287,126 @@ MallocStackLogging=1 MallocStackLoggingDirectory=$DIRNAME MallocStackLoggingDont
|
|||
FILENAME=$(ls "$DIRNAME")
|
||||
echo $FILENAME
|
||||
```
|
||||
## Mémoire partagée POSIX
|
||||
|
||||
**La mémoire partagée POSIX** permet aux processus des systèmes d'exploitation compatibles POSIX d'accéder à une zone mémoire commune, facilitant une communication plus rapide par rapport à d'autres méthodes de communication inter-processus. Cela implique la création ou l'ouverture d'un objet mémoire partagée avec `shm_open()`, en définissant sa taille avec `ftruncate()`, et en le mappant dans l'espace d'adressage du processus à l'aide de `mmap()`. Les processus peuvent ensuite lire directement et écrire dans cette zone mémoire. Pour gérer l'accès concurrent et prévenir la corruption des données, des mécanismes de synchronisation tels que des mutex ou des sémaphores sont souvent utilisés. Enfin, les processus désallouent et ferment la mémoire partagée avec `munmap()` et `close()`, et éventuellement suppriment l'objet mémoire avec `shm_unlink()`. Ce système est particulièrement efficace pour une IPC efficace et rapide dans des environnements où plusieurs processus ont besoin d'accéder rapidement à des données partagées.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Exemple de code du producteur</summary>
|
||||
```c
|
||||
// gcc producer.c -o producer -lrt
|
||||
#include <fcntl.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main() {
|
||||
const char *name = "/my_shared_memory";
|
||||
const int SIZE = 4096; // Size of the shared memory object
|
||||
|
||||
// Create the shared memory object
|
||||
int shm_fd = shm_open(name, O_CREAT | O_RDWR, 0666);
|
||||
if (shm_fd == -1) {
|
||||
perror("shm_open");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
// Configure the size of the shared memory object
|
||||
if (ftruncate(shm_fd, SIZE) == -1) {
|
||||
perror("ftruncate");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
// Memory map the shared memory
|
||||
void *ptr = mmap(0, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
|
||||
if (ptr == MAP_FAILED) {
|
||||
perror("mmap");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
// Write to the shared memory
|
||||
sprintf(ptr, "Hello from Producer!");
|
||||
|
||||
// Unmap and close, but do not unlink
|
||||
munmap(ptr, SIZE);
|
||||
close(shm_fd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
</details>
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Exemple de code consommateur</summary>
|
||||
```c
|
||||
// gcc consumer.c -o consumer -lrt
|
||||
#include <fcntl.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main() {
|
||||
const char *name = "/my_shared_memory";
|
||||
const int SIZE = 4096; // Size of the shared memory object
|
||||
|
||||
// Open the shared memory object
|
||||
int shm_fd = shm_open(name, O_RDONLY, 0666);
|
||||
if (shm_fd == -1) {
|
||||
perror("shm_open");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
// Memory map the shared memory
|
||||
void *ptr = mmap(0, SIZE, PROT_READ, MAP_SHARED, shm_fd, 0);
|
||||
if (ptr == MAP_FAILED) {
|
||||
perror("mmap");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
// Read from the shared memory
|
||||
printf("Consumer received: %s\n", (char *)ptr);
|
||||
|
||||
// Cleanup
|
||||
munmap(ptr, SIZE);
|
||||
close(shm_fd);
|
||||
shm_unlink(name); // Optionally unlink
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
```
|
||||
</details>
|
||||
|
||||
## Descripteurs protégés macOS
|
||||
|
||||
Les **descripteurs protégés macOS** sont une fonctionnalité de sécurité introduite dans macOS pour améliorer la sécurité et la fiabilité des **opérations de descripteur de fichier** dans les applications utilisateur. Ces descripteurs protégés fournissent un moyen d'associer des restrictions spécifiques ou des "gardes" à des descripteurs de fichier, qui sont appliqués par le noyau.
|
||||
|
||||
Cette fonctionnalité est particulièrement utile pour prévenir certaines classes de vulnérabilités de sécurité telles que l'**accès non autorisé aux fichiers** ou les **conditions de concurrence**. Ces vulnérabilités se produisent par exemple lorsqu'un thread accède à une description de fichier donnant **à un autre thread vulnérable un accès dessus** ou lorsqu'un descripteur de fichier est **hérité** par un processus enfant vulnérable. Certaines fonctions liées à cette fonctionnalité sont :
|
||||
|
||||
* `guarded_open_np` : Ouvre un FD avec un garde
|
||||
* `guarded_close_np` : Le ferme
|
||||
* `change_fdguard_np` : Modifie les indicateurs de garde sur un descripteur (même en supprimant la protection du garde)
|
||||
|
||||
## Références
|
||||
|
||||
* [https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/](https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks:
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF** Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos 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.
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
Loading…
Reference in a new issue