10 KiB
Extensions système 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 !
- Découvrez The PEASS Family, notre collection exclusive de NFT
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.
Extensions système / Cadre de sécurité de point de terminaison
Contrairement aux extensions du noyau, les extensions système s'exécutent dans l'espace utilisateur au lieu de l'espace du noyau, réduisant ainsi le risque de plantage du système en cas de dysfonctionnement de l'extension.
Il existe trois types d'extensions système : les extensions DriverKit, les extensions Network et les extensions Endpoint Security.
Extensions DriverKit
DriverKit est un remplacement des extensions du noyau qui fournit une prise en charge matérielle. Il permet aux pilotes de périphériques (comme les pilotes USB, série, NIC et HID) de s'exécuter dans l'espace utilisateur plutôt que dans l'espace du noyau. Le framework DriverKit comprend des versions pour l'espace utilisateur de certaines classes I/O Kit, et le noyau transfère les événements I/O Kit normaux vers l'espace utilisateur, offrant ainsi un environnement plus sûr pour l'exécution de ces pilotes.
Extensions Network
Les extensions réseau permettent de personnaliser les comportements réseau. Il existe plusieurs types d'extensions réseau :
- Proxy d'application : cela est utilisé pour créer un client VPN qui implémente un protocole VPN personnalisé orienté flux. Cela signifie qu'il gère le trafic réseau en fonction des connexions (ou flux) plutôt que des paquets individuels.
- Tunnel de paquets : cela est utilisé pour créer un client VPN qui implémente un protocole VPN personnalisé orienté paquet. Cela signifie qu'il gère le trafic réseau en fonction des paquets individuels.
- Filtrage de données : cela est utilisé pour filtrer les "flux" réseau. Il peut surveiller ou modifier les données réseau au niveau du flux.
- Filtrage de paquets : cela est utilisé pour filtrer les paquets réseau individuels. Il peut surveiller ou modifier les données réseau au niveau du paquet.
- Proxy DNS : cela est utilisé pour créer un fournisseur DNS personnalisé. Il peut être utilisé pour surveiller ou modifier les requêtes et réponses DNS.
Cadre de sécurité de point de terminaison
Endpoint Security est un cadre fourni par Apple dans macOS qui fournit un ensemble d'API pour la sécurité du système. Il est destiné à être utilisé par les fournisseurs de sécurité et les développeurs pour créer des produits qui peuvent surveiller et contrôler l'activité du système afin d'identifier et de se protéger contre les activités malveillantes.
Ce cadre fournit une collection d'API pour surveiller et contrôler l'activité du système, telle que l'exécution des processus, les événements du système de fichiers, les événements réseau et du noyau.
Le cœur de ce cadre est implémenté dans le noyau, en tant qu'extension du noyau (KEXT) située à /System/Library/Extensions/EndpointSecurity.kext
. Ce KEXT est composé de plusieurs composants clés :
- EndpointSecurityDriver : il agit comme le "point d'entrée" de l'extension du noyau. C'est le principal point d'interaction entre le système d'exploitation et le cadre Endpoint Security.
- EndpointSecurityEventManager : ce composant est responsable de la mise en œuvre des hooks du noyau. Les hooks du noyau permettent au cadre de surveiller les événements du système en interceptant les appels système.
- EndpointSecurityClientManager : il gère la communication avec les clients de l'espace utilisateur, en suivant les clients connectés et qui ont besoin de recevoir des notifications d'événements.
- EndpointSecurityMessageManager : il envoie des messages et des notifications d'événements aux clients de l'espace utilisateur.
Les événements que le cadre Endpoint Security peut surveiller sont catégorisés en :
- Événements de fichiers
- Événements de processus
- Événements de socket
- Événements du noyau (tels que le chargement/déchargement d'une extension du noyau ou l'ouverture d'un périphérique I/O Kit)
Architecture du cadre de sécurité de point de terminaison
La communication avec l'espace utilisateur du cadre Endpoint Security se fait via la classe IOUserClient. Deux sous-classes différentes sont utilisées, en fonction du type d'appelant :
- EndpointSecurityDriverClient : cela nécessite l'autorisation
com.apple.private.endpoint-security.manager
, qui est détenue uniquement par le processus systèmeendpointsecurityd
. - EndpointSecurityExternalClient : cela nécessite l'autorisation
com.apple.developer.endpoint-security.client
. Cela serait généralement utilisé par des logiciels de sécurité tiers qui ont besoin d'interagir avec le cadre Endpoint Security.
Les extensions de sécurité de point de terminaison : libEndpointSecurity.dylib
est la bibliothèque C utilisée par les extensions système pour communiquer avec le noyau. Cette bibliothèque utilise I/O Kit (IOKit
) pour communiquer avec l'extension Endpoint Security KEXT.
endpointsecurityd
est un démon système clé impliqué dans la gestion et le lancement des extensions système de sécurité de point de terminaison, en particulier pendant le processus de démarrage initial. Seules les extensions système marquées avec NSEndpointSecurityEarlyBoot
dans leur fichier Info.plist
reçoivent ce traitement de démarrage initial.
Un autre démon système, sysextd
, valide les extensions système et les déplace vers les emplacements système appropriés. Il demande ensuite au démon pertinent de charger l'extension. Le SystemExtensions.framework
est responsable de l'activation et de la désactivation des extensions système.
Contournement de l'ESF
L'ESF est utilisé par des outils de sécurité qui tentent de détecter un membre de l'équipe rouge, donc toute information sur la façon d'éviter cela est intéressante.
CVE-2021-30965
Le problème est que l'application de sécurité doit avoir les permissions d'accès complet au disque. Donc, si un attaquant pouvait les supprimer, il pourrait empêcher le logiciel de s'exécuter :
tccutil reset All
Pour plus d'informations sur cette contournement et les contournements connexes, consultez la présentation #OBTS v5.0 : "Le talon d'Achille d'EndpointSecurity" - Fitzl Csaba
Finalement, cela a été résolu en donnant la nouvelle permission kTCCServiceEndpointSecurityClient
à l'application de sécurité gérée par tccd
afin que tccutil
ne supprime pas ses autorisations, l'empêchant ainsi de s'exécuter.
Références
- OBTS v3.0 : "Sécurité et insécurité des points de terminaison" - Scott Knight
- https://knight.sc/reverse%20engineering/2019/08/24/system-extension-internals.html
☁️ 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 !
- Découvrez The PEASS Family, notre collection exclusive de NFTs
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.