Garden of KnowledgeApplied Sciences › Computer Science › Software › Security › Active Directory
March 22, 2026

BloodHound

BloodHound est un outil d’analyse graphique des environnements Active Directory. Il modélise les relations entre objets AD (utilisateurs, groupes, ordinateurs, GPO) et identifie automatiquement les chemins d’attaque vers des cibles à hauts privilèges (Domain Admins, DC).

Architecture§

SharpHound / BloodHound.py  →  Collecte des données AD

        Données JSON

    Neo4j (base de graphes)  ←  BloodHound GUI (React)

    Requêtes Cypher → Chemins d'attaque visualisés

Collecte avec SharpHound§

# Télécharger SharpHound sur la machine compromise
# https://github.com/BloodHoundAD/SharpHound

# Collecte standard (la plus complète)
.\SharpHound.exe -c All

# Collecte ciblée — seulement les sessions actives
.\SharpHound.exe -c Session

# Collecte silencieuse (LDAP uniquement, moins bruyante)
.\SharpHound.exe -c DCOnly

# Collecte depuis une autre session (pass-the-hash)
.\SharpHound.exe --ldapusername alice --ldappassword password

# Avec un DC spécifique
.\SharpHound.exe -d domaine.local --domaincontroller 192.168.1.10

# Sortie : archive ZIP contenant des fichiers JSON
# computers.json, users.json, groups.json, sessions.json, domains.json...

Collecte avec BloodHound.py (sans accès local à la machine Windows)§

# Depuis Kali/Linux avec des credentials
bloodhound-python -u alice -p password -d domaine.local -dc dc01.domaine.local -c All

# Avec pass-the-hash
bloodhound-python -u alice --hashes :ntlm_hash -d domaine.local -ns 192.168.1.10 -c All

# Collecte DNS-less
bloodhound-python -u alice -p password -d domaine.local -ns 192.168.1.10 -c All --dns-timeout 5

Importation et interface§

# 1. Démarrer Neo4j
sudo neo4j start
# Interface : http://localhost:7474 (défaut : neo4j/neo4j → changer au 1er login)

# 2. Démarrer BloodHound GUI
bloodhound

# 3. Importer les données
# Menu → Upload Data → sélectionner le ZIP ou les JSON
# Ou glisser-déposer les fichiers

Requêtes pré-construites (GUI)§

BloodHound propose des requêtes prêtes à l’emploi :

Analysis → Pre-Built Analytics Queries :

"Find all Domain Admins"
  → Liste tous les Domain Admins

"Find Shortest Paths to Domain Admins"
  → Chemin d'attaque le plus court depuis n'importe quel utilisateur

"Find Principals with DCSync Rights"
  → Qui peut effectuer un DCSync ?

"Find Computers where Domain Users are Local Admin"
  → Tous les postes où les utilisateurs du domaine ont admin local

"Shortest Paths to Unconstrained Delegation Systems"
  → Délégation Kerberos non contrainte (vecteur d'escalade)

"Find AS-REP Roastable Users"
  → Comptes sans pré-authentification Kerberos

"Find Kerberoastable Users"
  → Comptes avec SPN (cibles du Kerberoasting)

Requêtes Cypher personnalisées§

BloodHound utilise le langage de requête Neo4j Cypher.

// Trouver tous les chemins d'attaque depuis "alice" vers "Domain Admins"
MATCH p=shortestPath(
    (n:User {name:"[email protected]"})-[*1..]->(m:Group {name:"DOMAIN [email protected]"})
)
RETURN p

// Trouver les utilisateurs qui ont GenericAll sur un autre objet
MATCH (n)-[r:GenericAll]->(m)
WHERE n.name <> m.name
RETURN n.name, m.name, type(r)

// Ordinateurs avec délégation non contrainte (sauf les DC)
MATCH (c:Computer {unconstraineddelegation:true})
WHERE NOT c.name CONTAINS "DC"
RETURN c.name

// Utilisateurs membres de groupes imbriqués menant à Domain Admins
MATCH (u:User)-[:MemberOf*1..]->(g:Group {name:"DOMAIN [email protected]"})
RETURN u.name

// Sessions actives sur les DC
MATCH (u:User)-[:HasSession]->(c:Computer {domain:"DOMAINE.LOCAL"})
WHERE c.name CONTAINS "DC"
RETURN u.name, c.name

// Comptes avec des droits sur les GPO
MATCH (n)-[r:GPLink|WriteGPLink|AllExtendedRights|GenericAll|GenericWrite]->(g:GPO)
RETURN n.name, type(r), g.name

// High value targets qui sont atteignables
MATCH (n {highvalue:true})
RETURN n.name, labels(n)

// Tous les chemins depuis les utilisateurs du groupe "IT" vers Domain Admins
MATCH p=shortestPath(
    (g:Group {name:"[email protected]"})-[*1..]->(m:Group {name:"DOMAIN [email protected]"})
)
RETURN p

Edges (relations) exploitables§

EdgeDescriptionExploitation
MemberOfAppartenance à un groupeHéritage des droits du groupe
AdminToAdmin local sur un ordinateurpsexec, WMI, DCOM
HasSessionSession active d’un utilisateurVol de token, dump LSASS
GenericAllContrôle total d’un objetModifier le mot de passe, ajouter aux groupes
GenericWriteÉcriture sur un objetModifier des attributs (scriptPath, servicePrincipalName)
WriteOwnerChanger le propriétaireS’attribuer GenericAll
WriteDACLModifier la liste d’accèsS’accorder n’importe quel droit
ForceChangePasswordForcer le changement de MDPChanger le mot de passe sans le connaître
DCSyncGetChangesAll sur le domaineDump de tous les hashes
AllowedToDelegateDélégation Kerberos contrainteImpersonate n’importe quel utilisateur
AllowedToActRBCD (Resource-Based Constrained Delegation)Escalade via délégation basée sur les ressources
AddMemberAjouter des membres à un groupeS’ajouter à Domain Admins
GPLinkLien vers une GPOSi écriture sur GPO → exécution de code sur les objets liés

Marquer les assets et construire une stratégie§

Dans l'interface :
1. Clic droit sur un utilisateur/ordinateur → "Mark as Owned" (objectif compromis)
2. Clic droit sur un groupe → "Mark as High Value" (cible)

→ BloodHound montre automatiquement les chemins depuis les "Owned" vers les "High Value"

Workflow typique :
1. Importer les données
2. Marquer le compte compromis initial comme "Owned"
3. "Find Shortest Paths to Domain Admins" → voir le chemin graphique
4. Identifier la relation exploitable suivante (GenericAll, AdminTo, etc.)
5. Exploiter cette relation → marquer le prochain objet comme Owned
6. Répéter jusqu'à Domain Admin

Contre-mesures (détection et hardening)§

Détection de la collecte BloodHound :
  - Volume anormal de requêtes LDAP (SharpHound → beaucoup de requêtes)
  - Requêtes LDAP avec de nombreux attributs (objectClass, adminCount, etc.)
  - Connexions SMB anormales (pour la collecte des sessions)
  - Outil : Purple Knight, PingCastle (audit AD)

Hardening des chemins d'attaque :
  - Réduire le nombre d'AdminTo (pas d'admin local pour les utilisateurs normaux)
  - Tier Model (Admin Tier 0/1/2 — séparation des comptes par criticité)
  - Nettoyer les ACL excessives (GenericAll, WriteDACL sur des objets sensibles)
  - Activer la pré-authentification Kerberos sur tous les comptes
  - Supprimer les SPN inutiles
  - Protected Users Security Group pour les comptes sensibles

Pièges courants§

—The Gardener