BloodHound et chemins d'attaque
Collecte des données Active Directory avec SharpHound, modélisation en graphe et calcul des chemins d'attaque les plus courts vers Domain Admins, avec une méthode de restitution du risque adaptée à l'IT comme au COMEX.
Table des matières
Pourquoi BloodHound change la posture offensive
Sur un domaine Active Directory de taille réelle — quelques milliers d'objets, une dizaine de groupes imbriqués les uns dans les autres, des délégations Kerberos oubliées depuis des années — il est illusoire de reconstruire à la main les chemins de compromission. Un consultant qui énumère les ACL objet par objet avec dsacls ou PowerView finit par noyer la relation intéressante dans des centaines de lignes de bruit. BloodHound résout ce problème en changeant de modèle : au lieu de raisonner objet par objet, on raisonne en graphe de relations, et on pose une question simple au moteur — quel est le chemin le plus court entre ce compte que je contrôle et Domain Admins ?
Ce chapitre couvre la chaîne complète : collecte des donnéesdonnéesIAEnsemble d'informations structurées ou non utilisées pour entraîner, évaluer ou alimenter un modèle. La qualité, la quantité et la représentativité des données sont les facteurs décisifs pour les performances en apprentissage automatique.Voir dans le glossaire, modélisation du graphe, requêtes d'analyse, construction d'un chemin exploitable de bout en bout, puis restitution du risque à des publics très différents — l'équipe IT qui doit corriger, et le COMEX qui doit arbitrer un budget de remédiation.
Le modèle de données : un graphe, pas une liste
BloodHound modélise Active Directory (et Azure AD / Entra ID depuis les versions récentes) sous forme de graphe orienté stocké dans une base Neo4j. Les nœuds représentent les objets du domaine : utilisateurs, groupes, ordinateurs, GPO, unités d'organisation, domaines, comptes de service. Les arêtes représentent des relations, et chaque type d'arête correspond à une primitive d'attaque potentielle :
| Relation | Signification | Exploitation typique |
|---|---|---|
MemberOf |
Appartenance à un groupe | Hérite des droits du groupe |
AdminTo |
Administrateur local sur une machine | Dump LSASS, pass-the-hash |
HasSession |
Session ouverte sur une machine | Vol de credentials en mémoire |
GenericAll / GenericWrite |
Contrôle total ou partiel sur l'objet | Reset de mot de passe, ajout SPN |
WriteDacl / WriteOwner |
Capacité à modifier les permissions | Auto-attribution de droits |
ForceChangePassword |
Changement de mot de passe sans connaître l'ancien | Prise de contrôle du compte |
AddMember |
Ajout de membres à un groupe | Auto-ajout dans un groupe privilégié |
DCSync (via droits de réplication) |
Extraction des hashs via réplication | Compromission de tout le domaine |
Cette représentation transforme un problème d'énumération manuelle en un problème de théorie des graphes : trouver le plus court chemin entre un nœud source et un nœud cible devient une requête Cypher standard, résolue en millisecondes même sur des dizaines de milliers de nœuds.
BloodHound Community Edition (CE) a remplacé l'architecture Legacy (Neo4j + interface Electron autonome) par une stack conteneurisée (API REST, PostgreSQL, Neo4j, interface web). Les concepts de graphe restent identiques, mais les commandes de déploiement et le format d'ingestion diffèrent. Vérifiez systématiquement la version ciblée avant de choisir votre collecteur.
Collecte : SharpHound et ses méthodes
Le collecteur officiel, SharpHound (C#) ou son équivalent Python bloodhound.py, s'exécute avec le contextefenêtre de contexteIAQuantité de texte qu'un modèle peut prendre en compte simultanément : question, documents fournis et historique. Au-delà, les éléments les plus anciens sortent du champ.Voir dans le glossaire d'un utilisateur du domaine — authentifié, pas nécessairement privilégié. Il interroge LDAP pour la structure de l'annuaire (utilisateurs, groupes, ACL, GPO) et utilise des appels SMB/RPC (comme NetSessionEnum ou l'accès au registre distant) pour recenser les sessions actives et les administrateurs locaux.
Les méthodes de collecte les plus courantes :
- Default : combine Group, LocalAdmin, Session, Trusts — un bon compromis pour une première passe.
- All : ajoute ACL, ObjectProps, ComputerOnly, ce qui inclut la collecte des permissions détaillées et déclenche davantage de requêtes réseau.
- Session seul : utile pour rafraîchir uniquement les données de session sans re-scanner toute l'ACL, par exemple lors d'un test qui dure plusieurs jours.
- DCOnly : collecte via LDAP uniquement, sans toucher les postes de travail — beaucoup plus discret, mais sans les sessions ni les administrateurs locaux détectés par énumération directe.
SharpHound.exe -c All,GPOLocalGroup --domain corp.local --outputdirectory C:\temp
La collecte
Allgénère un volume de trafic réseau et d'événements (4624, 5145, appels RPC vers chaque poste) qui est trivialement détectable par un EDR ou un SOC correctement instrumenté. En mission red team avec objectif de furtivité, préférezDCOnlycomplété par une collecte de sessions ciblée uniquement sur le sous-ensemble de machines pertinent, et étalez la collecte dans le temps plutôt que de lancer un scan massif en une passe.
La collecte BloodHound touche l'intégralité de l'annuaire, y compris des objets et attributs hors du périmètre technique strictement nécessaire à la mission. Assurez-vous que l'autorisation écrite (ROE) couvre explicitement l'énumération LDAP complète et la lecture des ACL, et clarifiez avec le client les modalités de destruction des données collectées en fin de mission.
Analyse : requêtes intégrées et Cypher sur mesure
Une fois les fichiers JSON ingérés dans l'interface, l'onglet Cheat Sheet propose des requêtes préconstruites : "Find all Domain Admins", "Shortest Paths to Domain Admins", "Find Computers where Domain Users are Local Admin", "Shortest Paths from Kerberoastable Users". Ces requêtes couvrent l'essentiel d'une première passe d'analyse et suffisent souvent à identifier un ou deux chemins exploitables dès la première heure.
Pour aller plus loin, le langage Cypher permet d'écrire des requêtes personnalisées directement contre le graphe Neo4j sous-jacent :
MATCH p = shortestPath(
(u:User {name:"J.MARTIN@CORP.LOCAL"})-[*1..]->(g:Group {name:"DOMAIN ADMINS@CORP.LOCAL"})
)
RETURN p
Pour prioriser la remédiation, cherchez les nœuds "goulots d'étranglement" — ceux qui apparaissent sur un grand nombre de chemins distincts vers des cibles à haute valeur. Une requête du type
MATCH (n) WHERE n.highvalue = false RETURN n, count(*) AS chemins ORDER BY chemins DESC(adaptée à votre schéma de données) fait souvent ressortir un unique groupe mal configuré responsable de dizaines de chemins simultanés — corriger ce point unique a un effet de levier bien supérieur à corriger chaque chemin individuellement.
Des primitives ACL à l'exploitation concrète
Le graphe ne remplace pas l'exploitation, il la guide. Chaque relation identifiée doit être traduite en action outillée :
GenericAllsur un utilisateur → reset direct du mot de passe via RPC (net rpc passwordou un module dédié), ou ajout d'un SPN pour forcer un Kerberoasting ciblé.WriteDaclsur un objet → ajout d'un droitGenericAllsupplémentaire pour soi-même, puis pivot comme ci-dessus.AddMembersur un groupe → auto-ajout, effectif immédiatement si le groupe est utilisé pour des droits d'administration locale via GPO.AdminTo+HasSession→ dump LSASS ou lecture du SAM local une fois l'accès administrateur local confirmé, puis extraction des credentials en cache de la session active.- Droits de réplication (
DS-Replication-Get-Changes+DS-Replication-Get-Changes-All) → attaque DCSync, extraction de tous les hashs du domaine sans toucher le contrôleur de domaine physiquement.
Lors d'un test, le compte
J.MARTIN(helpdesk) est membre du groupeSUPPORT-IT, qui dispose d'un droitGenericAllhérité sur le compte de serviceSVC-SQL— une délégation posée trois ans plus tôt pour permettre à l'équipe support de réinitialiser ce compte en cas de blocage, jamais retirée depuis.SVC-SQLest administrateur local du serveurSQL01via un GPO de déploiement applicatif. Un administrateur du domaine a ouvert une session RDP surSQL01deux jours plus tôt pour une opération de maintenance et ne s'est pas déconnecté proprement. BloodHound relie ces quatre faits, dispersés dans quatre systèmes différents et jamais corrélés par les équipes IT, en un chemin unique : reset du mot de passe deSVC-SQL, authentification, dump LSASS surSQL01, récupération du hash de l'administrateur du domaine, compromission totale.
Restituer le risque : storytelling pour COMEX et IT
Un graphe Neo4j n'a aucune valeur en soi pour un décideur non technique. Le travail de restitution est aussi important que la découverte technique, et il se fait à deux niveaux distincts :
Pour l'équipe IT / Tier 0 : exportez le chemin retenu avec les identifiants précis des objets (SamAccountName, SID, nom de machine), les relations exactes impliquées, et une recommandation de correction ciblée — retirer le droit GenericAll obsolète, déplacer SVC-SQL hors du groupe d'administration locale, imposer une politique de déconnexion des sessions privilégiées. Une capture d'écran du graphe annotée vaut mieux qu'un paragraphe de description.
Pour le COMEX : traduisez le chemin technique en risque métier. Ne dites pas "GenericAll sur SVC-SQL" mais "un compte helpdesk sans privilège particulier peut, en quatre étapes automatisables, obtenir un accès équivalent à celui d'un administrateur système sur l'ensemble du système d'information, sans qu'aucune alerte ne se déclenche avec la configuration actuelle". Chiffrez l'effort d'exploitation (quelques minutes, un seul outil) face à l'effort de remédiation (un ticket, une revue de groupe) — ce contraste est ce qui débloque un budget.
Gardez une slide "avant / après" : le graphe complet avec des dizaines de chemins convergents vers Domain Admins avant remédiation, puis le même graphe après application des correctifs prioritaires, montrant la disparition des chemins courts. Cette visualisation comparative est souvent l'argument le plus efficace en comité de pilotage.
Détection et durcissement côté défense
Une équipe purple team doit connaître les traces laissées par la collecte et par l'exploitation des chemins identifiés :
- Les requêtes LDAP massives et répétitives depuis un poste utilisateur, hors comportement applicatif connu, sont détectables par une baseline sur les contrôleurs de domaine.
NetSessionEnumappelé en boucle contre un grand nombre de machines depuis un même poste est un indicateur fort de reconnaissance BloodHound-like.- Côté durcissement, l'ajout du groupe
Protected Users, la limitation des délégations Kerberos non contraintes, et un audit périodique des ACL avec BloodHound lui-même (utilisé en mode défensif) permettent de réduire drastiquement la surface de chemins courts vers Tier 0. - La mise en quarantaine des comptes de service avec des mots de passe non tournés depuis plus d'un an, combinée à une revue trimestrielle des groupes imbriqués, élimine la majorité des chemins "hérités" comme celui de l'exemple ci-dessus.
Pièges courants et erreurs à éviter
- Confondre "chemin trouvé" et "chemin réellement exploitable" : certaines relations affichées dans le graphe (notamment issues d'une collecte incomplète ou d'objets désactivés) ne sont pas exploitables en pratique. Validez chaque saut manuellement avant de le présenter comme confirmé.
- Négliger la fraîcheur des données : les sessions changent en continu ; un chemin basé sur
HasSessionpeut être obsolète quelques heures après la collecte. Horodatez systématiquement vos exports. - Se limiter aux requêtes préconstruites : les chemins les plus dangereux impliquent souvent des combinaisons de relations non couvertes par le Cheat Sheet par défaut. La maîtrise de Cypher est ce qui distingue une analyse superficielle d'une analyse exhaustive.
- Oublier les objets "High Value" personnalisés : par défaut, seuls certains groupes bien connus sont marqués comme cibles de valeur. Ajoutez manuellement vos comptes de service critiques, vos comptes de sauvegarde et vos comptes applicatifs sensibles pour que les calculs de chemins les intègrent.
- Ignorer les tiers de confiance inter-domaines : dans une forêt multi-domaines, un chemin peut traverser une relation d'approbation (
trust) mal configurée. Ne limitez jamais l'analyse à un seul domaine si la forêt en compte plusieurs.
Checklist opérationnelle
- ROE couvrant explicitement la collecte LDAP complète et la lecture des ACL
- Choix de la méthode de collecte adapté au besoin de discrétion (
DCOnlyvsAll) - Collecte étalée dans le temps si contrainte de furtivité
- Marquage manuel des objets "High Value" pertinents pour le client
- Vérification manuelle de chaque saut du chemin retenu avant exploitation
- Export horodaté du graphe et des chemins identifiés
- Deux livrables de restitution distincts : technique (IT/Tier 0) et exécutif (COMEX)
- Recommandations de durcissement priorisées par effet de levier (nœuds goulots d'étranglement)
- Modalités de destruction des données de collecte actées avec le client en fin de mission
BloodHound ne remplace pas la compréhension fine d'Active Directory ; il l'accélère et la rend visible. La valeur d'un pentester expérimenté ne se mesure plus à sa capacité à retrouver un chemin à la main, mais à sa capacité à trier les chemins trouvés, à distinguer le bruit du risque réel, et à transformerTransformerIAArchitecture introduite en 2017, fondée sur le mécanisme d'attention, qui traite une séquence entière en parallèle. Elle sert de base à tous les grands modèles de langage actuels.Voir dans le glossaire un graphe technique en décision business actionnable.
L'essentiel à retenir
Ce chapitre présente BloodHound comme outil de modélisation des relations Active Directory sous forme de graphe, de la collecte via SharpHound jusqu'au calcul des chemins d'attaque les plus courts vers Domain Admins. Il détaille les primitives ACL exploitables (GenericAll, WriteDacl, AdminTo, HasSession, DCSync) et leur traduction en actions d'exploitation concrètes. Une attention particulière est portée à la discrétion de la collecte, aux pièges d'analyse courants, et à la restitution du risque à deux publics distincts : les équipes IT en charge de la remédiation technique, et le COMEX qui doit arbitrer les priorités.
- Graphe de relations Active Directory (nœuds et arêtes)
- Collecte de données avec SharpHound et bloodhound.py
- Chemin le plus court (shortest path) vers une cible à haute valeur
- Primitives ACL abusables : GenericAll, WriteDacl, ForceChangePassword
- Requêtes Cypher personnalisées sur le graphe Neo4j
- Sessions administrateur et mouvement latéral (HasSession, AdminTo)
- Storytelling du risque pour audiences techniques et exécutives
- Détection et durcissement des chemins d'attaque côté défense
Questions fréquentes
Faut-il des droits d'administrateur du domaine pour lancer une collecte SharpHound ?
Quelle est la différence entre BloodHound Legacy et BloodHound Community Edition ?
Cypher est-il indispensable ou les requêtes préconstruites suffisent-elles ?
Comment limiter le bruit détecté par un EDR lors d'une collecte en mission red team ?
Un chemin trouvé dans BloodHound est-il toujours exploitable en pratique ?
Comment BloodHound gère-t-il les environnements multi-domaines ou hybrides avec Azure AD / Entra ID ?
Quelles données faut-il détruire après une mission utilisant BloodHound ?
Progression sauvegardée dans votre navigateur.
Quiz de validation
Quiz Player
Quiz de validation
Plusieurs réponses possibles — validez ensuite.
Vrai ou faux.
Quiz indisponible (données invalides).