
Outil offensif de vidage et d'analyse de GPO qui exploite et enrichit les données de BloodHound
GPOHound est un outil pour extraire et analyser les objets de stratégie de groupe (GPO) extraits du partage SYSVOL.
Il fournit un format structuré et formalisé pour aider à découvrir les mauvaises configurations, les paramètres non sécurisés et les chemins d'élévation de privilèges dans les environnements Active Directory.
L'outil s'intègre à la base de données Neo4j de BloodHound, l'utilisant comme source de type LDAP pour les informations Active Directory tout en l'enrichissant en ajoutant de nouvelles relations (arêtes) et propriétés de nœuds basées sur l'analyse.
Extrait les GPO dans un format JSON structuré ou arborescent
Gère plusieurs domaines
Résout les noms de GPO avec les GUID de GPO
Filtre la sortie par fichiers GPO, GUID de GPO et domaines
Recherche dans les paires clé/valeur à l'aide d'expressions régulières
Regroupe les paramètres par objet impacté (ex. : Groupes locaux, Registre)
Détecte les membres ajoutés aux groupes locaux privilégiés
Détecte les paramètres de registre non sécurisés, les informations d'identification stockées et les droits de privilège
Prend en charge le déchiffrement des informations d'identification VNC et des mots de passe GPP
Trouve les domaines, conteneurs et UO affectés par les GPO
Obtient les GPO appliqués à un utilisateur, un ordinateur, une UO, un conteneur ou un domaine spécifique
Enrichit les données BloodHound avec des relations et des propriétés
git clone "https://github.com/cogiceo/GPOHound"
cd GPOHound
pip install .
pipx install "git+https://github.com/cogiceo/GPOHound"
Vous devez configurer Neo4j APOC pour l'enrichissement des données BloodHound :
Si vous utilisez l'installation standard de Neo4j, vous pouvez activer APOC en copiant le fichier jar d'APOC dans le dossier des plugins, puis en redémarrant Neo4j :
cp /var/lib/neo4j/labs/apoc-* /var/lib/neo4j/plugins/
neo4j restart
Si vous installez Neo4j avec "Docker Compose", ajoutez la variable d'environnement NEO4J_PLUGINS=["apoc"] :
neo4j:
image: neo4j:latest
environment:
- NEO4J_PLUGINS=["apoc"]
Pour plus de détails ou d'autres méthodes d'installation, consultez la documentation officielle d'APOC.
Pour visualiser les relations et propriétés ajoutées par GPOHound, vous pouvez importer les requêtes personnalisées du fichier customqueries.json dans BloodHound. Par défaut, ce fichier se trouve dans ~/.config/bloodhound/customqueries.json.
Commencez par télécharger le contenu de SYSVOL depuis le contrôleur de domaine.
Télécharger l'intégralité du SYSVOL :
gpohound sysvol --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD
Télécharger uniquement les GPO :
gpohound sysvol --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD --gpos
Télécharger avec exclusions :
gpohound sysvol --dc $DC_HOST -u $USER -p $PASSWORD --exclude '/Policydefinitions/','/scripts/' --max-size 100
Récupérez toutes les données nécessaires depuis LDAP :
gpohound ldap --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD
Pour l'enrichissement des données BloodHound, vous devez collecter les données BloodHound à l'aide d'un collecteur tel que bloodhound.py ou SharpHound.exe, puis importer les données recueillies dans l'interface BloodHound.
Des exemples de fichiers GPOHound sont disponibles dans example.zip. Extrayez-les avec unzip example.zip.
Consultez CONFIG.md pour des instructions sur la personnalisation des valeurs par défaut et des configurations.
gpohound --neo4j-user $USER --neo4j-pass $PASS dump
gpohound --neo4j-user $USER --neo4j-pass $PASS analysis
gpohound parse "gpos/sysvols/$DOMAIN/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Registry.pol"
gpohound dump
gpohound dump --list
gpohound dump --guid 31B2F340-016D-11D2-945F-00C04FB984F9
gpohound dump --policies scripts psscripts
gpohound dump --search 'VNC.*Server' --show
gpohound analysis
gpohound analysis --affected
gpohound analysis --trustee 'SRV01.SEVENKINGDOMS.LOCAL'
gpohound analysis --trustee 'SRV01.SEVENKINGDOMS.LOCAL' --list
gpohound analysis --trustee 'SRV01.SEVENKINGDOMS.LOCAL' --dump
gpohound analysis --enrich
gpohound analysis --enrich-ce
[!IMPORTANT]
- Les conditions telles que les filtres de sécurité, les filtres WMI et le ciblage au niveau des éléments ne sont pas interprétées.
- Les conflits de GPO ne sont pas simulés, afin d'éviter de manquer des paramètres valides.
Détection des utilisateurs affectés aux groupes locaux privilégiés lors de la connexion
Détection des groupes locaux privilégiés intégrés renommés
Détection des trustees ajoutés aux groupes locaux privilégiés à l'aide de "Variables de processus de préférence" (ex. : %ComputerName%, %DomainName%)
Détection des trustees abusables via le détournement de sAMAccountName
Détection de tout trustee ajouté aux groupes locaux privilégiés :
Les trustees privilégiés par défaut, ainsi que les comptes de service dont les SID commencent par S-1-5-8, sont exclus de l'analyse.
| Groupe | Arête |
|---|
| Administrateurs | AdminTo |
| Utilisateurs du Bureau à distance | CanRDP |
| Utilisateurs COM distribués | ExecuteDCOM |
| Utilisateurs de la gestion à distance | CanPSRemote |
| Opérateurs de sauvegarde | CanPrivEsc |
| Opérateurs d'impression | CanPrivEsc |
| Opérateurs de configuration réseau | CanPrivEsc |
| Analyse | Propriété |
|---|
| Le groupe "Tout le monde" inclut "Ouverture de session anonyme" | — |
| La signature de session du serveur SMB n'est pas activée | smbSigningEnabled: false |
| La signature de session du serveur SMB n'est pas requise | smbSigningRequired: false |
| L'authentification NTLMv1 est prise en charge | NTLMv1Support: true |
| Mot de passe par défaut de la connexion automatique Windows | — |
| Informations d'identification VNC (Générique : RealVNC, TightVNC, TigerVNC, etc.) | *VNC*PASS* (divers) |
| Mots de passe stockés FileZilla | — |
| Mot de passe proxy PuTTY | — |
| Informations d'identification stockées TeamViewer | — |
| Sessions enregistrées WinSCP | — |
| Mot de passe stocké Picasa | — |
| Privilège | Description | Arête |
|---|
| SeDebugPrivilege | Permet à l'utilisateur de déboguer et d'interagir avec tout processus | CanPrivEsc |
| SeBackupPrivilege | Accorde l'accès aux fichiers sensibles | CanPrivEsc |
| SeRestorePrivilege | Contourne les autorisations d'objet lors de la restauration | CanPrivEsc |
| SeAssignPrimaryTokenPrivilege | Permet l'usurpation de jeton pour l'élévation vers SYSTEM | CanPrivEsc |
| SeImpersonatePrivilege | Permet la création d'un processus sous le contexte d'un autre utilisateur | CanPrivEsc |
| SeTakeOwnershipPrivilege | Permet aux utilisateurs de prendre possession d'objets système | CanPrivEsc |
| SeTcbPrivilege | Accorde la capacité d'agir en tant que partie du système d'exploitation | CanPrivEsc |
| SeCreateTokenPrivilege | Permet la création de jetons d'authentification | CanPrivEsc |
| SeLoadDriverPrivilege | Autorise le chargement/déchargement de pilotes | CanPrivEsc |
| SeManageVolumePrivilege | Accorde les privilèges de gestion de volume ou de disque | CanPrivEsc |
| SeEnableDelegationPrivilege | Permet de faire confiance aux comptes d'ordinateur et d'utilisateur pour la délégation |