Translated ['macos-hardening/macos-security-and-privilege-escalation/mac

This commit is contained in:
Translator 2024-04-18 13:51:46 +00:00
parent 6ff7ee387a
commit 7041a5c31a
4 changed files with 227 additions and 68 deletions

View file

@ -6,14 +6,28 @@
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 [**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) dépôts GitHub.
- 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 [**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) dépôts GitHub.
</details>
### [WhiteIntel](https://whiteintel.io)
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) est un moteur de recherche alimenté par le **dark web** qui offre des fonctionnalités **gratuites** pour vérifier si une entreprise ou ses clients ont été **compromis** par des **logiciels malveillants voleurs**.
Le but principal de WhiteIntel est de lutter contre les prises de contrôle de compte et les attaques de ransomware résultant de logiciels malveillants volant des informations.
Vous pouvez consulter leur site Web et essayer leur moteur **gratuitement** sur :
{% embed url="https://whiteintel.io" %}
---
## Analyse statique
### otool
@ -85,7 +99,7 @@ ldid -S/tmp/entl.xml <binary>
### SuspiciousPackage
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) est un outil utile pour inspecter les fichiers **.pkg** (installateurs) et voir ce qu'ils contiennent avant de les installer.\
Ces installateurs contiennent des scripts bash `preinstall` et `postinstall` que les auteurs de logiciels malveillants utilisent généralement pour **persister** **le** **logiciel malveillant**.
Ces installateurs ont des scripts bash `preinstall` et `postinstall` que les auteurs de logiciels malveillants utilisent généralement pour **persister** **le** **logiciel malveillant**.
### hdiutil
@ -119,7 +133,7 @@ Lorsqu'une fonction est appelée dans un binaire qui utilise Objective-C, le cod
Les paramètres attendus par cette fonction sont les suivants :
- Le premier paramètre (**self**) est "un pointeur qui pointe vers l'**instance de la classe qui doit recevoir le message**". En d'autres termes, il s'agit de l'objet sur lequel la méthode est invoquée. Si la méthode est une méthode de classe, il s'agira d'une instance de l'objet de classe (dans son ensemble), tandis que pour une méthode d'instance, self pointera vers une instance instanciée de la classe en tant qu'objet.
- Le premier paramètre (**self**) est "un pointeur qui pointe vers l'**instance de la classe qui doit recevoir le message**". En d'autres termes, il s'agit de l'objet sur lequel la méthode est invoquée. Si la méthode est une méthode de classe, il s'agira d'une instance de l'objet de la classe (dans son ensemble), tandis que pour une méthode d'instance, self pointera vers une instance instanciée de la classe en tant qu'objet.
- Le deuxième paramètre, (**op**), est "le sélecteur de la méthode qui gère le message". En termes plus simples, il s'agit simplement du **nom de la méthode**.
- Les paramètres restants sont toutes les **valeurs requises par la méthode** (op).
@ -167,10 +181,10 @@ https://github.com/ghidraninja/ghidra_scripts/blob/master/swift_demangler.py
# Swift cli
swift demangle
```
### Binaires packagés
### Binaires packés
* Vérifiez l'entropie élevée
* Vérifiez les chaînes de caractères (s'il n'y a presque aucune chaîne compréhensible, c'est empaqueté)
* Vérifiez les chaînes de caractères (s'il n'y a presque aucune chaîne compréhensible, c'est packé)
* Le packer UPX pour MacOS génère une section appelée "\_\_XHDR"
## Analyse dynamique
@ -213,14 +227,14 @@ Dans le panneau de droite, vous pouvez voir des informations intéressantes tell
### dtrace
Il permet aux utilisateurs d'accéder aux applications à un niveau extrêmement **bas** et offre un moyen aux utilisateurs de **tracer** les **programmes** et même de modifier leur flux d'exécution. Dtrace utilise des **sondes** qui sont **placées dans tout le noyau** et se trouvent à des endroits tels que le début et la fin des appels système.
Il permet aux utilisateurs d'accéder aux applications à un niveau extrêmement **bas** et offre un moyen aux utilisateurs de **tracer** des **programmes** et même de modifier leur flux d'exécution. Dtrace utilise des **sondes** qui sont **placées dans tout le noyau** et se trouvent à des emplacements tels que le début et la fin des appels système.
DTrace utilise la fonction **`dtrace_probe_create`** pour créer une sonde pour chaque appel système. Ces sondes peuvent être déclenchées au **point d'entrée et de sortie de chaque appel système**. L'interaction avec DTrace se fait via /dev/dtrace qui n'est disponible que pour l'utilisateur root.
{% hint style="success" %}
Pour activer Dtrace sans désactiver complètement la protection SIP, vous pouvez exécuter en mode de récupération : `csrutil enable --without dtrace`
Vous pouvez également **`dtrace`** ou **`dtruss`** des binaires que **vous avez compilés**.
Vous pouvez également **`dtrace`** ou **`dtruss`** des binaires **que vous avez compilés**.
{% endhint %}
Les sondes disponibles de dtrace peuvent être obtenues avec :
@ -235,7 +249,7 @@ ID PROVIDER MODULE FUNCTION NAME
```
Le nom de la sonde se compose de quatre parties : le fournisseur, le module, la fonction et le nom (`fbt:mach_kernel:ptrace:entry`). Si vous ne spécifiez pas une partie du nom, Dtrace appliquera cette partie comme un joker.
Pour configurer DTrace afin d'activer les sondes et de spécifier les actions à effectuer lorsqu'elles se déclenchent, nous devrons utiliser le langage D.
Pour configurer DTrace pour activer les sondes et spécifier les actions à effectuer lorsqu'elles se déclenchent, nous devrons utiliser le langage D.
Une explication plus détaillée et plus d'exemples peuvent être trouvés dans [https://illumos.org/books/dtrace/chp-intro.html](https://illumos.org/books/dtrace/chp-intro.html)
@ -312,7 +326,7 @@ Vous devez surveiller votre Mac avec une commande comme **`sudo eslogger fork ex
### FileMonitor
[**FileMonitor**](https://objective-see.com/products/utilities.html#FileMonitor) permet de surveiller les événements liés aux fichiers (comme les créations, modifications et suppressions) en fournissant des informations détaillées sur ces événements.
[**FileMonitor**](https://objective-see.com/products/utilities.html#FileMonitor) permet de surveiller les événements liés aux fichiers (comme la création, les modifications et les suppressions) en fournissant des informations détaillées sur ces événements.
### Crescendo
@ -342,14 +356,14 @@ Dans [**cet article de blog**](https://knight.sc/debugging/2019/06/03/debugging-
### lldb
**lldb** est l'outil de **débogage** de binaire **macOS** de facto.
**lldb** est l'outil de **débogage** binaire **macOS** de facto.
```bash
lldb ./malware.bin
lldb -p 1122
lldb -n malware.bin
lldb -n malware.bin --waitfor
```
Vous pouvez définir le style Intel lors de l'utilisation de lldb en créant un fichier appelé **`.lldbinit`** dans votre dossier personnel avec la ligne suivante :
Vous pouvez définir l'option intel en utilisant lldb en créant un fichier appelé **`.lldbinit`** dans votre dossier personnel avec la ligne suivante :
```bash
settings set target.x86-disassembly-flavor intel
```
@ -357,7 +371,7 @@ settings set target.x86-disassembly-flavor intel
À l'intérieur de lldb, dump un processus avec `process save-core`
{% endhint %}
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Commande</strong></td><td><strong>Description</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Démarrer l'exécution, qui se poursuivra jusqu'à ce qu'un point d'arrêt soit atteint ou que le processus se termine.</td></tr><tr><td><strong>continue (c)</strong></td><td>Continuer l'exécution du processus en cours de débogage.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Exécuter l'instruction suivante. Cette commande sautera les appels de fonction.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Exécuter l'instruction suivante. Contrairement à la commande nexti, cette commande entrera dans les appels de fonction.</td></tr><tr><td><strong>finish (f)</strong></td><td>Exécuter le reste des instructions dans la fonction actuelle ("frame") et s'arrêter.</td></tr><tr><td><strong>control + c</strong></td><td>Mettre en pause l'exécution. Si le processus a été exécuté (r) ou continué (c), cela provoquera l'arrêt du processus ... où qu'il soit actuellement en cours d'exécution.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Toute fonction appelée main</p><p>b &#x3C;nom_bin>`main #Fonction principale du binaire</p><p>b set -n main --shlib &#x3C;nom_lib> #Fonction principale du binaire indiqué</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Liste des points d'arrêt</p><p>br e/dis &#x3C;num> #Activer/Désactiver le point d'arrêt</p><p>breakpoint delete &#x3C;num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Obtenir de l'aide sur la commande de point d'arrêt</p><p>help memory write #Obtenir de l'aide pour écrire dans la mémoire</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format &#x3C;<a href="https://lldb.llvm.org/use/variable.html#type-format">format</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s &#x3C;reg/adresse_mémoire></strong></td><td>Afficher la mémoire sous forme de chaîne terminée par un caractère nul.</td></tr><tr><td><strong>x/i &#x3C;reg/adresse_mémoire></strong></td><td>Afficher la mémoire sous forme d'instruction d'assemblage.</td></tr><tr><td><strong>x/b &#x3C;reg/adresse_mémoire></strong></td><td>Afficher la mémoire sous forme d'octet.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Cela affichera l'objet référencé par le paramètre</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Remarquez que la plupart des API ou méthodes Objective-C d'Apple renvoient des objets et doivent donc être affichées via la commande "print object" (po). Si po ne produit pas de sortie significative, utilisez <code>x/b</code></p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #Écrire AAAA à cette adresse<br>memory write -f s $rip+0x11f+7 "AAAA" #Écrire AAAA à l'adresse</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Désassembler la fonction actuelle</p><p>dis -n &#x3C;nom_fonction> #Désassembler la fonction</p><p>dis -n &#x3C;nom_fonction> -b &#x3C;nom_base> #Désassembler la fonction<br>dis -c 6 #Désassembler 6 lignes<br>dis -c 0x100003764 -e 0x100003768 # De une adresse à l'autre<br>dis -p -c 4 # Commencer à désassembler à l'adresse actuelle</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # Vérifier le tableau de 3 composants dans le registre x1</td></tr></tbody></table>
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Commande</strong></td><td><strong>Description</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Démarrer l'exécution, qui se poursuivra jusqu'à ce qu'un point d'arrêt soit atteint ou que le processus se termine.</td></tr><tr><td><strong>continue (c)</strong></td><td>Continuer l'exécution du processus en cours de débogage.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Exécuter l'instruction suivante. Cette commande sautera les appels de fonction.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Exécuter l'instruction suivante. Contrairement à la commande nexti, cette commande entrera dans les appels de fonction.</td></tr><tr><td><strong>finish (f)</strong></td><td>Exécuter le reste des instructions dans la fonction actuelle ("frame") et s'arrêter.</td></tr><tr><td><strong>control + c</strong></td><td>Mettre en pause l'exécution. Si le processus a été démarré (r) ou continué (c), cela provoquera l'arrêt du processus ... où qu'il soit actuellement en cours d'exécution.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Toute fonction appelée main</p><p>b &#x3C;nom_du_binaire>`main #Fonction principale du binaire</p><p>b set -n main --shlib &#x3C;nom_lib> #Fonction principale du binaire indiqué</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Liste des points d'arrêt</p><p>br e/dis &#x3C;num> #Activer/Désactiver le point d'arrêt</p><p>breakpoint delete &#x3C;num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Obtenir de l'aide sur la commande de point d'arrêt</p><p>help memory write #Obtenir de l'aide pour écrire dans la mémoire</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format &#x3C;<a href="https://lldb.llvm.org/use/variable.html#type-format">format</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s &#x3C;reg/adresse_mémoire></strong></td><td>Afficher la mémoire sous forme de chaîne terminée par un caractère nul.</td></tr><tr><td><strong>x/i &#x3C;reg/adresse_mémoire></strong></td><td>Afficher la mémoire sous forme d'instruction d'assemblage.</td></tr><tr><td><strong>x/b &#x3C;reg/adresse_mémoire></strong></td><td>Afficher la mémoire sous forme d'octet.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Cela affichera l'objet référencé par le paramètre</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Notez que la plupart des API ou méthodes Objective-C d'Apple renvoient des objets et doivent donc être affichées via la commande "print object" (po). Si po ne produit pas de sortie significative, utilisez <code>x/b</code></p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #Écrire AAAA à cette adresse<br>memory write -f s $rip+0x11f+7 "AAAA" #Écrire AAAA à l'adresse</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Désassembler la fonction actuelle</p><p>dis -n &#x3C;nom_de_la_fonction> #Désassembler la fonction</p><p>dis -n &#x3C;nom_de_la_fonction> -b &#x3C;nom_de_base> #Désassembler la fonction<br>dis -c 6 #Désassembler 6 lignes<br>dis -c 0x100003764 -e 0x100003768 # De une adresse à l'autre<br>dis -p -c 4 # Commencer à l'adresse actuelle à désassembler</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # Vérifier le tableau de 3 composants dans le registre x1</td></tr></tbody></table>
{% hint style="info" %}
Lors de l'appel de la fonction **`objc_sendMsg`**, le registre **rsi** contient le **nom de la méthode** sous forme de chaîne terminée par un caractère nul ("C"). Pour afficher le nom via lldb, faites :
@ -370,7 +384,7 @@ Lors de l'appel de la fonction **`objc_sendMsg`**, le registre **rsi** contient
`(lldb) reg read $rsi: rsi = 0x00000001000f1576 "startMiningWithPort:password:coreCount:slowMemory:currency:"`
{% endhint %}
### Analyse dynamique anti
### Anti-Analyse Dynamique
#### Détection de VM
@ -379,7 +393,7 @@ Lors de l'appel de la fonction **`objc_sendMsg`**, le registre **rsi** contient
* Certains malwares peuvent également **détecter** si la machine est basée sur **VMware** en fonction de l'adresse MAC (00:50:56).
* Il est également possible de savoir si un processus est en cours de débogage avec un code simple tel que :
* `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //processus en cours de débogage }`
* Il est également possible d'invoquer l'appel système **`ptrace`** avec le drapeau **`PT_DENY_ATTACH`**. Cela **empêche** un déb**u**ggeur de se connecter et de tracer.
* Il est également possible d'invoquer l'appel système **`ptrace`** avec le drapeau **`PT_DENY_ATTACH`**. Cela **empêche** un déb**u**ggeur de s'attacher et de tracer.
* Vous pouvez vérifier si la fonction **`sysctl`** ou **`ptrace`** est **importée** (mais le malware pourrait l'importer dynamiquement)
* Comme indiqué dans cet article, “[Déjouer les techniques anti-débogage : variantes de ptrace sur macOS](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
"_Le message Processus # a quitté avec **le statut = 45 (0x0000002d)** est généralement un signe révélateur que la cible de débogage utilise **PT\_DENY\_ATTACH**_"
@ -391,7 +405,7 @@ ReportCrash **analyse les processus qui plantent et enregistre un rapport de pla
Pour les applications et autres processus **fonctionnant dans le contexte de lancement par utilisateur**, ReportCrash s'exécute en tant que LaunchAgent et enregistre les rapports de plantage dans `~/Library/Logs/DiagnosticReports/` de l'utilisateur.\
Pour les démons, les autres processus **fonctionnant dans le contexte de lancement système** et d'autres processus privilégiés, ReportCrash s'exécute en tant que LaunchDaemon et enregistre les rapports de plantage dans `/Library/Logs/DiagnosticReports` du système.
Si vous craignez que les rapports de plantage **soient envoyés à Apple**, vous pouvez les désactiver. Sinon, les rapports de plantage peuvent être utiles pour **déterminer comment un serveur a planté**.
Si vous êtes préoccupé par les rapports de plantage **envoyés à Apple**, vous pouvez les désactiver. Sinon, les rapports de plantage peuvent être utiles pour **déterminer comment un serveur a planté**.
```bash
#To disable crash reporting:
launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
@ -455,7 +469,7 @@ Fonctionne pour les outils en ligne de commande
#### [Litefuzz](https://github.com/sec-tools/litefuzz)
Il "**fonctionne simplement"** avec les outils GUI macOS. Notez que certaines applications macOS ont des exigences spécifiques comme des noms de fichiers uniques, la bonne extension, la nécessité de lire les fichiers à partir du sandbox (`~/Library/Containers/com.apple.Safari/Data`)...
Il "**fonctionne simplement"** avec les outils GUI macOS. Notez que certaines applications macOS ont des exigences spécifiques telles que des noms de fichiers uniques, la bonne extension, la nécessité de lire les fichiers à partir du sandbox (`~/Library/Containers/com.apple.Safari/Data`)...
Quelques exemples:
@ -499,16 +513,29 @@ litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash
* [**https://taomm.org/vol1/analysis.html**](https://taomm.org/vol1/analysis.html)
* [**The Art of Mac Malware: The Guide to Analyzing Malicious Software**](https://taomm.org/)
### [WhiteIntel](https://whiteintel.io)
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) est un moteur de recherche alimenté par le **dark web** qui offre des fonctionnalités **gratuites** pour vérifier si une entreprise ou ses clients ont été **compromis** par des **logiciels malveillants voleurs**.
Le but principal de WhiteIntel est de lutter contre les prises de contrôle de compte et les attaques de ransomware résultant de logiciels malveillants volant des informations.
Vous pouvez consulter leur site Web et essayer leur moteur **gratuitement** sur :
{% embed url="https://whiteintel.io" %}
<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>
<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>
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 [**The PEASS Family**](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)**.**
* Découvrez [**The PEASS Family**](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>

View file

@ -14,9 +14,23 @@ Autres façons de soutenir HackTricks:
</details>
### [WhiteIntel](https://whiteintel.io)
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) est un moteur de recherche alimenté par le **dark web** qui offre des fonctionnalités **gratuites** pour vérifier si une entreprise ou ses clients ont été **compromis** par des **logiciels malveillants voleurs**.
Le but principal de WhiteIntel est de lutter contre les prises de contrôle de compte et les attaques de ransomware résultant de logiciels malveillants volant des informations.
Vous pouvez consulter leur site Web et essayer leur moteur **gratuitement** sur :
{% embed url="https://whiteintel.io" %}
---
## **Informations de base**
**La Protection de l'Intégrité du Système (SIP)** dans macOS est un mécanisme conçu pour empêcher même les utilisateurs les plus privilégiés de faire des modifications non autorisées dans les dossiers système clés. Cette fonctionnalité joue un rôle crucial dans le maintien de l'intégrité du système en restreignant des actions telles que l'ajout, la modification ou la suppression de fichiers dans des zones protégées. Les principaux dossiers protégés par SIP incluent :
**La Protection de l'Intégrité du Système (SIP)** dans macOS est un mécanisme conçu pour empêcher même les utilisateurs les plus privilégiés d'apporter des modifications non autorisées aux dossiers système clés. Cette fonctionnalité joue un rôle crucial dans le maintien de l'intégrité du système en restreignant des actions telles que l'ajout, la modification ou la suppression de fichiers dans des zones protégées. Les dossiers principaux protégés par SIP comprennent :
* **/System**
* **/bin**
@ -32,7 +46,7 @@ Considérez l'exemple ci-dessous:
* /usr/local
* /usr/share/man
```
Cet extrait implique que bien que SIP sécurise généralement le répertoire **`/usr`**, il existe des sous-répertoires spécifiques (`/usr/libexec/cups`, `/usr/local` et `/usr/share/man`) où des modifications sont permises, comme indiqué par l'astérisque (\*) précédant leurs chemins.
Ce passage implique que bien que SIP sécurise généralement le répertoire **`/usr`**, il existe des sous-répertoires spécifiques (`/usr/libexec/cups`, `/usr/local` et `/usr/share/man`) où des modifications sont permises, comme indiqué par l'astérisque (\*) précédant leurs chemins.
Pour vérifier si un répertoire ou un fichier est protégé par SIP, vous pouvez utiliser la commande **`ls -lOd`** pour vérifier la présence du drapeau **`restricted`** ou **`sunlnk`**. Par exemple:
```bash
@ -75,7 +89,7 @@ Si vous souhaitez conserver SIP activé mais supprimer les protections de débog
```bash
csrutil enable --without debug
```
### Autres Restrictions
### Autres restrictions
* **Interdit le chargement d'extensions de noyau non signées** (kexts), garantissant que seules les extensions vérifiées interagissent avec le noyau du système.
* **Empêche le débogage** des processus système macOS, protégeant les composants principaux du système contre tout accès et modification non autorisés.
@ -87,14 +101,14 @@ csrutil enable --without debug
Contourner SIP permet à un attaquant de :
* **Accéder aux données utilisateur** : Lire des données sensibles des utilisateurs telles que les e-mails, les messages et l'historique de Safari de tous les comptes utilisateurs.
* **Accéder aux données utilisateur** : Lire des données sensibles des utilisateurs telles que les e-mails, les messages et l'historique de Safari de tous les comptes utilisateur.
* **Contournement de TCC** : Manipuler directement la base de données TCC (Transparency, Consent, and Control) pour accorder un accès non autorisé à la webcam, au microphone et à d'autres ressources.
* **Établir une persistance** : Placer des logiciels malveillants dans des emplacements protégés par SIP, les rendant résistants à la suppression, même avec des privilèges root. Cela inclut également la possibilité de manipuler l'outil de suppression de logiciels malveillants (MRT).
* **Charger des extensions de noyau** : Bien qu'il existe des protections supplémentaires, contourner SIP simplifie le processus de chargement d'extensions de noyau non signées.
### Packages d'installation
**Les packages d'installation signés avec le certificat d'Apple** peuvent contourner ses protections. Cela signifie que même les packages signés par des développeurs standard seront bloqués s'ils tentent de modifier des répertoires protégés par SIP.
Les **packages d'installation signés avec le certificat d'Apple** peuvent contourner ses protections. Cela signifie que même les packages signés par des développeurs standard seront bloqués s'ils tentent de modifier des répertoires protégés par SIP.
### Fichier SIP inexistant
@ -114,15 +128,15 @@ Le démon **`system_installd`** installera des packages signés par **Apple**.
Les chercheurs ont découvert que lors de l'installation d'un package signé par Apple (.pkg), **`system_installd`** **exécute** tous les scripts **post-installation** inclus dans le package. Ces scripts sont exécutés par le shell par défaut, **`zsh`**, qui **exécute automatiquement** les commandes du fichier **`/etc/zshenv`**, s'il existe, même en mode non interactif. Ce comportement pourrait être exploité par des attaquants : en créant un fichier `/etc/zshenv` malveillant et en attendant que **`system_installd` invoque `zsh`**, ils pourraient effectuer des opérations arbitraires sur l'appareil.
De plus, il a été découvert que **`/etc/zshenv` pourrait être utilisé comme une technique d'attaque générale**, pas seulement pour contourner SIP. Chaque profil utilisateur a un fichier `~/.zshenv`, qui se comporte de la même manière que `/etc/zshenv` mais ne nécessite pas de permissions root. Ce fichier pourrait être utilisé comme mécanisme de persistance, se déclenchant à chaque démarrage de `zsh`, ou comme mécanisme d'élévation de privilèges. Si un utilisateur admin élève ses privilèges à root en utilisant `sudo -s` ou `sudo <commande>`, le fichier `~/.zshenv` serait déclenché, élevant effectivement à root.
De plus, il a été découvert que **`/etc/zshenv` pourrait être utilisé comme une technique d'attaque générale**, pas seulement pour contourner SIP. Chaque profil utilisateur a un fichier `~/.zshenv`, qui se comporte de la même manière que `/etc/zshenv` mais ne nécessite pas de permissions root. Ce fichier pourrait être utilisé comme mécanisme de persistance, se déclenchant à chaque démarrage de `zsh`, ou comme mécanisme d'élévation de privilèges. Si un utilisateur administrateur élève ses privilèges à root en utilisant `sudo -s` ou `sudo <commande>`, le fichier `~/.zshenv` serait déclenché, élevant effectivement à root.
#### [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/)
Dans [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/), il a été découvert que le même processus **`system_installd`** pouvait toujours être abusé car il plaçait le **script post-installation dans un dossier nommé aléatoirement protégé par SIP à l'intérieur de `/tmp`**. Le fait est que **`/tmp` n'est pas protégé par SIP**, il était donc possible de **monter** une **image virtuelle dessus**, puis l'**installateur** placerait dans ce dossier le **script post-installation**, **démonterait** l'image virtuelle, **re-créerait** tous les **dossiers** et **ajouterait** le **script de post-installation** avec la **charge utile** à exécuter.
Dans [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/), il a été découvert que le même processus **`system_installd`** pouvait toujours être abusé car il plaçait le **script post-installation dans un dossier nommé aléatoirement protégé par SIP à l'intérieur de `/tmp`**. La chose est que **`/tmp` n'est pas protégé par SIP**, il était donc possible de **monter** une **image virtuelle dessus**, puis l'**installateur** placerait dans ce dossier le **script post-installation**, **démonterait** l'image virtuelle, **re-créerait** tous les **dossiers** et **ajouterait** le **script de post-installation** avec la **charge utile** à exécuter.
#### [Utilitaire fsck\_cs](https://www.theregister.com/2016/03/30/apple\_os\_x\_rootless/)
Une vulnérabilité a été identifiée où **`fsck_cs`** a été induit en erreur pour corrompre un fichier crucial, en raison de sa capacité à suivre les **liens symboliques**. Plus précisément, les attaquants ont créé un lien de _`/dev/diskX`_ vers le fichier `/System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist`. L'exécution de **`fsck_cs`** sur _`/dev/diskX`_ a conduit à la corruption de `Info.plist`. L'intégrité de ce fichier est vitale pour la Protection de l'Intégrité du Système (SIP) du système d'exploitation, qui contrôle le chargement des extensions de noyau. Une fois corrompu, la capacité de SIP à gérer les exclusions du noyau est compromise.
Une vulnérabilité a été identifiée où **`fsck_cs`** a été induit en erreur pour corrompre un fichier crucial, en raison de sa capacité à suivre les **liens symboliques**. Plus précisément, les attaquants ont créé un lien depuis _`/dev/diskX`_ vers le fichier `/System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist`. L'exécution de **`fsck_cs`** sur _`/dev/diskX`_ a conduit à la corruption de `Info.plist`. L'intégrité de ce fichier est vitale pour la Protection de l'Intégrité du Système (SIP) du système d'exploitation, qui contrôle le chargement des extensions de noyau. Une fois corrompu, la capacité de SIP à gérer les exclusions de noyau est compromise.
Les commandes pour exploiter cette vulnérabilité sont :
```bash
@ -152,7 +166,7 @@ La sécurité de ce processus peut être compromise si un attaquant modifie l'im
Le code de l'attaquant prend le contrôle pendant le processus de mise à niveau, exploitant la confiance du système envers l'installateur. L'attaque se poursuit en modifiant l'image `InstallESD.dmg` via le swizzling de méthode, ciblant en particulier la méthode `extractBootBits`. Cela permet l'injection de code malveillant avant l'utilisation de l'image disque.
De plus, dans `InstallESD.dmg`, il y a un `BaseSystem.dmg`, qui sert de système de fichiers racine du code de mise à niveau. L'injection d'une bibliothèque dynamique dans cela permet au code malveillant de fonctionner dans un processus capable de modifier des fichiers au niveau du système d'exploitation, augmentant considérablement le potentiel de compromission du système.
De plus, dans `InstallESD.dmg`, il y a un `BaseSystem.dmg`, qui sert de système de fichiers racine du code de mise à niveau. L'injection d'une bibliothèque dynamique dans celle-ci permet au code malveillant de fonctionner dans un processus capable de modifier des fichiers au niveau du système, augmentant considérablement le potentiel de compromission du système.
#### [systemmigrationd (2023)](https://www.youtube.com/watch?v=zxZesAN-TEk)
@ -176,13 +190,13 @@ Voici un aperçu plus détaillé :
1. **Système Immuable** : Les Instantanés Système Scellés rendent le volume système macOS "immuable", ce qui signifie qu'il ne peut pas être modifié. Cela empêche toute modification non autorisée ou accidentelle du système qui pourrait compromettre la sécurité ou la stabilité du système.
2. **Mises à Jour du Logiciel Système** : Lorsque vous installez des mises à jour ou des mises à niveau macOS, macOS crée un nouveau instantané système. Le volume de démarrage macOS utilise ensuite **APFS (Apple File System)** pour basculer vers ce nouvel instantané. Tout le processus d'application des mises à jour devient plus sûr et fiable car le système peut toujours revenir à l'instantané précédent en cas de problème lors de la mise à jour.
3. **Séparation des Données** : En conjonction avec le concept de séparation des volumes de Données et du Système introduit dans macOS Catalina, la fonctionnalité d'Instantanés Système Scellés garantit que toutes vos données et paramètres sont stockés sur un volume "**Données**" séparé. Cette séparation rend vos données indépendantes du système, ce qui simplifie le processus de mise à jour du système et améliore la sécurité du système.
3. **Séparation des Données** : En conjonction avec le concept de séparation des volumes de Données et du Système introduit dans macOS Catalina, la fonctionnalité d'Instantanés Système Scellés garantit que toutes vos données et paramètres sont stockés sur un volume "**Données**" séparé. Cette séparation rend vos données indépendantes du système, ce qui simplifie le processus de mises à jour du système et améliore la sécurité du système.
Rappelez-vous que ces instantanés sont automatiquement gérés par macOS et n'occupent pas d'espace supplémentaire sur votre disque, grâce aux capacités de partage d'espace d'APFS. Il est également important de noter que ces instantanés sont différents des **instantanés Time Machine**, qui sont des sauvegardes accessibles par l'utilisateur de l'ensemble du système.
Rappelez-vous que ces instantanés sont automatiquement gérés par macOS et ne prennent pas d'espace supplémentaire sur votre disque, grâce aux capacités de partage d'espace d'APFS. Il est également important de noter que ces instantanés sont différents des **instantanés Time Machine**, qui sont des sauvegardes accessibles par l'utilisateur de l'ensemble du système.
### Vérifier les Instantanés
La commande **`diskutil apfs list`** affiche les **détails des volumes APFS** et leur disposition :
La commande **`diskutil apfs list`** liste les **détails des volumes APFS** et leur disposition :
<pre><code>+-- Container disk3 966B902E-EDBA-4775-B743-CF97A0556A13
| ====================================================
@ -223,7 +237,7 @@ La commande **`diskutil apfs list`** affiche les **détails des volumes APFS** e
Dans la sortie précédente, il est possible de voir que les **emplacements accessibles par l'utilisateur** sont montés sous `/System/Volumes/Data`.
De plus, l'**instantané du volume système macOS** est monté dans `/` et il est **scellé** (signé cryptographiquement par le système d'exploitation). Ainsi, si SIP est contourné et le modifie, le **système d'exploitation ne démarrera plus**.
De plus, le **snapshot du volume système macOS** est monté dans `/` et il est **scellé** (signé cryptographiquement par le système d'exploitation). Ainsi, si SIP est contourné et le modifie, le **système d'exploitation ne démarrera plus**.
Il est également possible de **vérifier que le scellement est activé** en exécutant :
```bash
@ -231,20 +245,32 @@ csrutil authenticated-root status
Authenticated Root status: enabled
```
De plus, le disque de snapshot est également monté en **lecture seule**:
```
```bash
mount
/dev/disk3s1s1 on / (apfs, sealed, local, read-only, journaled)
```
### [WhiteIntel](https://whiteintel.io)
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) est un moteur de recherche alimenté par le **dark web** qui offre des fonctionnalités **gratuites** pour vérifier si une entreprise ou ses clients ont été **compromis** par des **malwares voleurs**.
Leur objectif principal est de lutter contre les prises de contrôle de compte et les attaques de ransomware résultant de malwares volant des informations.
Vous pouvez consulter leur site Web et essayer leur moteur **gratuitement** sur :
{% embed url="https://whiteintel.io" %}
<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 Red Team AWS de HackTricks)</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 de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
D'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) !
* 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>

View file

@ -2,9 +2,9 @@
<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 Red Team AWS de HackTricks)</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 Red Team AWS HackTricks)</strong></a><strong>!</strong></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 du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Travaillez-vous dans une **entreprise de cybersécurité**? Vous voulez voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à 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 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** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
@ -12,27 +12,41 @@
</details>
### [WhiteIntel](https://whiteintel.io)
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) est un moteur de recherche alimenté par le **dark web** qui offre des fonctionnalités **gratuites** pour vérifier si une entreprise ou ses clients ont été **compromis** par des **logiciels malveillants voleurs**.
Le but principal de WhiteIntel est de lutter contre les prises de contrôle de compte et les attaques de ransomware résultant de logiciels malveillants volant des informations.
Vous pouvez consulter leur site Web et essayer leur moteur **gratuitement** sur :
{% embed url="https://whiteintel.io" %}
---
## Exécution de la méthode Same Origin
Il y aura des occasions où vous pourrez exécuter un peu de javascript limité sur une page. Par exemple, dans le cas où vous pouvez [**contrôler une valeur de rappel qui sera exécutée**](./#javascript-function).
Il y aura des occasions où vous _pouvez exécuter un peu de javascript limité sur une page. Par exemple, dans le cas où vous pouvez [**contrôler une valeur de rappel qui sera exécutée**](./#javascript-function).
Dans ces cas, l'une des meilleures choses que vous pourriez faire est d'**accéder au DOM pour appeler n'importe quelle** action sensible que vous pouvez trouver (comme cliquer sur un bouton). Cependant, vous trouverez généralement cette vulnérabilité dans **de petits points de terminaison sans rien d'intéressant dans le DOM**.
Dans ce cas, l'une des meilleures choses que vous pourriez faire est d'**accéder au DOM pour appeler n'importe quelle** action sensible que vous pouvez trouver (comme cliquer sur un bouton). Cependant, vous trouverez généralement cette vulnérabilité dans **de petits points de terminaison sans rien d'intéressant dans le DOM**.
Dans ces scénarios, cette attaque sera très utile, car son but est de pouvoir **abuser de l'exécution JS limitée à l'intérieur d'un DOM à partir d'une page différente du même domaine** avec des actions beaucoup plus intéressantes.
Dans ces scénarios, cette attaque sera très utile, car son objectif est de pouvoir **abuser de l'exécution JS limitée à l'intérieur d'un DOM à partir d'une page différente du même domaine** avec des actions plus intéressantes.
Essentiellement, le flux de l'attaque est le suivant :
* Trouver un **rappel que vous pouvez abuser** (potentiellement limité à \[\w\\.\_]).
* S'il n'est pas limité et que vous pouvez exécuter n'importe quel JS, vous pourriez simplement abuser de cela comme un XSS régulier.
* Faites **ouvrir une page** contrôlée par l'**attaquant** à la **victime**.
* Faites **ouvrir une page** contrôlée par la **attaquant** à la **victime**.
* La **page s'ouvrira** dans une **fenêtre différente** (la nouvelle fenêtre aura l'objet **`opener`** faisant référence à la première).
* La **page initiale** chargera la **page** où se trouve le **DOM intéressant**.
* La **deuxième page** chargera la **page vulnérable en abusant du rappel** et en utilisant l'objet **`opener`** pour **accéder et exécuter une action dans la page initiale** (qui contient maintenant le DOM intéressant).
* La **deuxième page** chargera en **abusant du rappel de la page vulnéréable** et en utilisant l'objet **`opener`** pour **accéder et exécuter une action dans la page initiale** (qui contient maintenant le DOM intéressant).
{% hint style="danger" %}
Notez que même si la page initiale accède à une nouvelle URL après avoir créé la deuxième page, l'**objet `opener` de la deuxième page est toujours une référence valide à la première page dans le nouveau DOM**.
Notez que même si la page initiale accède à une nouvelle URL après avoir créé la deuxième page, l'**objet `opener` de la deuxième page reste une référence valide à la première page dans le nouveau DOM**.
De plus, pour que la deuxième page puisse utiliser l'objet opener, **les deux pages doivent être dans la même origine**. C'est la raison pour laquelle, pour exploiter cette vulnérabilité, vous devez trouver une sorte de **XSS dans la même origine**.
De plus, pour que la deuxième page puisse utiliser l'objet opener, **les deux pages doivent être dans la même origine**. C'est la raison pour laquelle, pour abuser de cette vulnérabilité, vous devez trouver une sorte de **XSS dans la même origine**.
{% endhint %}
### Exploitation
@ -42,10 +56,60 @@ De plus, pour que la deuxième page puisse utiliser l'objet opener, **les deux p
### Exemple
* Vous pouvez trouver un exemple vulnérable sur [https://www.someattack.com/Playground/](https://www.someattack.com/Playground/)
* Vous pouvez trouver un exemple vulnérable sur [https://www.someattack.com/Playground/](https://www.someattack.com/Playground.
* Notez que dans cet exemple, le serveur **génère du code javascript** et **l'ajoute** au HTML en fonction du **contenu du paramètre de rappel:** `<script>opener.{callbacl_content}</script>` . C'est pourquoi dans cet exemple, vous n'avez pas besoin d'indiquer explicitement l'utilisation de `opener`.
* Consultez également ce write-up CTF : [https://ctftime.org/writeup/36068](https://ctftime.org/writeup/36068)
## Références
* [https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/](https://conference.hitb.org/hitb historians. Sm.
is.
of
of of of of of of of of of .
Pic of 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140.
### Exécution de la méthode Same Origin
Il y aura des occasions où vous _pouvez exécuter un peu de javascript limité sur une page. Par exemple, dans le cas où vous pouvez [**contrôler une valeur de rappel qui sera exécutée**](./#javascript-function).
Dans ce cas, l'une des meilleures choses que vous pourriez faire est d'**accéder au DOM pour appeler n'importe quelle** action sensible que vous pouvez trouver (comme cliquer sur un bouton). Cependant, vous trouverez généralement cette vulnérabilité dans **de petits points de terminaison sans rien d'intéressant dans le DOM**.
Dans ces scénarios, cette attaque sera très utile, car son objectif est de pouvoir **abuser *abuser de l'exécution JS limitée à l'intérieur d'un DOM à partir d'une page différente du même domaine** avec des actions plus intéressantes.
Essentiellement, le flux de l'attaque est le suivant :
* Trouver un **rappel que vous pouvez abuser** (potentiellement limité à \[\w\\.\_]).
* S'il n'est pas limité et que vous pouvez exécuter n'importe quel JS, vous pourriez simplement abuser de cela comme un XSS régulier.
* Faites **ouvrir une page** contrôlée par la **attaquant** à la **victime**.
* La **page s'ouvrira** dans une **fenêtre différente** (la nouvelle fenêtre aura l'objet **`opener`** faisant référence à la première).
* La **page initiale** chargera la **page** où se trouve le **DOM intéressant**.
* La **deuxième page** chargera en **abusant du rappel de la page vulnérable** et en utilisant l'objet **`opener`** pour **accéder et exécuter une action dans la page initiale** (qui contient maintenant le DOM intéressant).
{% hint style="danger" %}
Notez que même si la page initiale accède à une nouvelle URL après avoir créé la deuxième page, l'**objet `opener` de la deuxième page reste une référence valide à la première page dans le nouveau DOM**.
De plus, pour que la deuxième page puisse utiliser l'objet opener, **les deux pages doivent être dans la même origine**. C'est la raison pour laquelle, pour abuser de cette vulnérabilité, vous devez trouver une sorte de **XSS dans la même origine**.
{% endhint %}
### Exploitation
* Vous pouvez utiliser ce formulaire pour **générer un PoC** pour exploiter ce type de vulnérabilité : [https://www.someattack.com/Playground/SOMEGenerator](https://www.someattack.com/Playground/SOMEGenerator)
* Pour trouver un chemin DOM vers un élément HTML avec un clic, vous pouvez utiliser cette extension de navigateur : [https://www.someattack.com/Playground/targeting\_tool](https://www.someattack.com/Playground/targeting\_tool)
### Exemple
* Vous pouvez trouver un exemple vulnérable sur [https://www.someattack.com/Playground/](https://www.someattack.com/Playground/).
* Notez que dans cet exemple, le serveur **génère du code javascript** et **l'ajoute** au HTML en fonction du **contenu du paramètre de rappel:** `<script>opener.{callbacl_content}</script>` . C'est pourquoi dans cet exemple, vous n'avez pas besoin d'indiquer explicitement l'utilisation de `opener`.
* Consultez également ce write-up CTF : [https://ctftime.org/writeup/36068](https://ctftime.org/writeup/36068)
## Références
* [https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/](https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/)

View file

@ -6,26 +6,40 @@
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)**.**
- **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.
* 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 [**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) dépôts GitHub.
</details>
### [WhiteIntel](https://whiteintel.io)
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) est un moteur de recherche alimenté par le **dark web** qui offre des fonctionnalités **gratuites** pour vérifier si une entreprise ou ses clients ont été **compromis** par des **logiciels malveillants voleurs**.
Le but principal de WhiteIntel est de lutter contre les prises de contrôle de compte et les attaques de ransomware résultant de logiciels malveillants volant des informations.
Vous pouvez consulter leur site Web et essayer leur moteur **gratuitement** sur :
{% embed url="https://whiteintel.io" %}
---
## Niveaux d'intégrité
Dans Windows Vista et les versions ultérieures, tous les éléments protégés sont associés à une balise de **niveau d'intégrité**. Ce paramétrage attribue principalement un niveau d'intégrité "moyen" aux fichiers et clés de registre, sauf pour certains dossiers et fichiers auxquels Internet Explorer 7 peut écrire à un niveau d'intégrité faible. Le comportement par défaut est que les processus lancés par des utilisateurs standard ont un niveau d'intégrité moyen, tandis que les services fonctionnent généralement à un niveau d'intégrité système. Une étiquette d'intégrité élevée protège le répertoire racine.
Dans Windows Vista et les versions ultérieures, tous les éléments protégés sont associés à une balise de **niveau d'intégrité**. Ce paramétrage attribue principalement un niveau d'intégrité "moyen" aux fichiers et clés de registre, sauf pour certains dossiers et fichiers auxquels Internet Explorer 7 peut écrire à un niveau d'intégrité bas. Le comportement par défaut est que les processus initiés par des utilisateurs standard ont un niveau d'intégrité moyen, tandis que les services fonctionnent généralement à un niveau d'intégrité système. Une étiquette d'intégrité élevée protège le répertoire racine.
Une règle clé est que les objets ne peuvent pas être modifiés par des processus ayant un niveau d'intégrité inférieur à celui de l'objet. Les niveaux d'intégrité sont :
- **Non approuvé** : Ce niveau est destiné aux processus avec des connexions anonymes. %%%Exemple : Chrome%%%
- **Faible** : Principalement pour les interactions Internet, notamment dans le mode protégé d'Internet Explorer, affectant les fichiers et processus associés, et certains dossiers comme le **Dossier Internet Temporaire**. Les processus à faible intégrité sont soumis à des restrictions importantes, notamment l'absence d'accès en écriture au registre et un accès limité à l'écriture de profil utilisateur.
- **Moyen** : Le niveau par défaut pour la plupart des activités, attribué aux utilisateurs standard et aux objets sans niveaux d'intégrité spécifiques. Même les membres du groupe Administrateurs fonctionnent à ce niveau par défaut.
- **Élevé** : Réservé aux administrateurs, leur permettant de modifier des objets à des niveaux d'intégrité inférieurs, y compris ceux au niveau élevé lui-même.
- **Système** : Le niveau opérationnel le plus élevé pour le noyau Windows et les services principaux, inaccessible même pour les administrateurs, assurant la protection des fonctions système vitales.
- **Installateur** : Un niveau unique qui se situe au-dessus de tous les autres, permettant aux objets à ce niveau de désinstaller tout autre objet.
* **Non approuvé** : Ce niveau est destiné aux processus avec des connexions anonymes. %%%Exemple : Chrome%%%
* **Faible** : Principalement pour les interactions Internet, en particulier dans le mode protégé d'Internet Explorer, affectant les fichiers et processus associés, et certains dossiers comme le **Dossier Internet Temporaire**. Les processus à faible intégrité font face à des restrictions importantes, notamment l'absence d'accès en écriture au registre et un accès limité à l'écriture de profil utilisateur.
* **Moyen** : Le niveau par défaut pour la plupart des activités, attribué aux utilisateurs standard et aux objets sans niveaux d'intégrité spécifiques. Même les membres du groupe Administrateurs fonctionnent à ce niveau par défaut.
* **Élevé** : Réservé aux administrateurs, leur permettant de modifier des objets à des niveaux d'intégrité inférieurs, y compris ceux au niveau élevé lui-même.
* **Système** : Le niveau opérationnel le plus élevé pour le noyau Windows et les services principaux, inaccessible même pour les administrateurs, assurant la protection des fonctions système vitales.
* **Installateur** : Un niveau unique qui se situe au-dessus de tous les autres, permettant aux objets à ce niveau de désinstaller tout autre objet.
Vous pouvez obtenir le niveau d'intégrité d'un processus en utilisant **Process Explorer** de **Sysinternals**, en accédant aux **propriétés** du processus et en consultant l'onglet "**Sécurité**" :
@ -38,7 +52,7 @@ Vous pouvez également obtenir votre **niveau d'intégrité actuel** en utilisan
### Niveaux d'intégrité dans le système de fichiers
Un objet à l'intérieur du système de fichiers peut nécessiter un **niveau d'intégrité minimum requis** et si un processus n'a pas ce niveau d'intégrité, il ne pourra pas interagir avec lui.\
Par exemple, créons un **fichier console régulier à partir d'un utilisateur console régulier et vérifions les autorisations** :
Par exemple, créons un fichier console régulier à partir d'un utilisateur régulier et vérifions les autorisations :
```
echo asd >asd.txt
icacls asd.txt
@ -64,7 +78,7 @@ NT AUTHORITY\SERVICE:(I)(M,DC)
NT AUTHORITY\BATCH:(I)(M,DC)
Mandatory Label\High Mandatory Level:(NW)
```
C'est là que les choses deviennent intéressantes. Vous pouvez voir que l'utilisateur `DESKTOP-IDJHTKP\user` a **des privilèges COMPLETS** sur le fichier (en effet, c'était l'utilisateur qui a créé le fichier), cependant, en raison du niveau d'intégrité minimum implémenté, il ne pourra plus modifier le fichier à moins qu'il ne soit en cours d'exécution à l'intérieur d'un niveau d'intégrité élevé (notez qu'il pourra le lire) :
C'est là que les choses deviennent intéressantes. Vous pouvez voir que l'utilisateur `DESKTOP-IDJHTKP\user` a **des privilèges COMPLETS** sur le fichier (en effet, c'était l'utilisateur qui a créé le fichier), cependant, en raison du niveau d'intégrité minimum implémenté, il ne pourra plus modifier le fichier à moins qu'il ne s'exécute à l'intérieur d'un niveau d'intégrité élevé (notez qu'il pourra toujours le lire) :
```
echo 1234 > asd.txt
Access is denied.
@ -74,7 +88,7 @@ C:\Users\Public\asd.txt
Access is denied.
```
{% hint style="info" %}
**Par conséquent, lorsqu'un fichier a un niveau d'intégrité minimum, pour le modifier vous devez au moins être en cours d'exécution à ce niveau d'intégrité.**
**Par conséquent, lorsqu'un fichier a un niveau d'intégrité minimum, pour le modifier, vous devez au moins fonctionner à ce niveau d'intégrité.**
{% endhint %}
### Niveaux d'intégrité dans les binaires
@ -97,6 +111,34 @@ Pour les curieux, si vous attribuez un niveau d'intégrité élevé à un binair
### Niveaux d'intégrité dans les processus
Tous les fichiers et dossiers n'ont pas de niveau d'intégrité minimum, **mais tous les processus s'exécutent avec un niveau d'intégrité**. Et de manière similaire à ce qui s'est passé avec le système de fichiers, **si un processus souhaite écrire dans un autre processus, il doit avoir au moins le même niveau d'intégrité**. Cela signifie qu'un processus avec un niveau d'intégrité bas ne peut pas ouvrir une poignée avec un accès complet à un processus avec un niveau d'intégrité moyen.
Tous les fichiers et dossiers n'ont pas un niveau d'intégrité minimum, **mais tous les processus s'exécutent avec un niveau d'intégrité**. Et de manière similaire à ce qui s'est passé avec le système de fichiers, **si un processus souhaite écrire dans un autre processus, il doit avoir au moins le même niveau d'intégrité**. Cela signifie qu'un processus avec un niveau d'intégrité bas ne peut pas ouvrir une poignée avec un accès complet à un processus avec un niveau d'intégrité moyen.
En raison des restrictions mentionnées dans cette section et la précédente, d'un point de vue de la sécurité, il est toujours **recommandé d'exécuter un processus avec le niveau d'intégrité le plus bas possible**.
### [WhiteIntel](https://whiteintel.io)
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) est un moteur de recherche alimenté par le **dark web** qui offre des fonctionnalités **gratuites** pour vérifier si une entreprise ou ses clients ont été **compromis** par des **malwares voleurs**.
Le but principal de WhiteIntel est de lutter contre les prises de contrôle de compte et les attaques de ransomware résultant de malwares volant des informations.
Vous pouvez consulter leur site web et essayer leur moteur **gratuitement** sur :
{% embed url="https://whiteintel.io" %}
<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>
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 [**The PEASS Family**](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) github repos.
</details>