Pathfinding : rechercher les chemins d’attaque
À présent, nous allons nous intéresser aux edges et au menu "PathFinding" de BloodHound qui permet d'utiliser les relations entre les nodes pour dessiner des chemins d'attaque.
Sommaire
I. Découverte des Edges
Maintenant que nous savons rechercher un node et obtenir des informations à son sujet, nous pouvons commencer à nous intéresser aux relations (edges) entre ces objets (nodes). Nous en avons déjà aperçu quelques-unes, et notamment l'edge "Member of". Le type de la relation entre deux nodes est toujours affiché au milieu de la flèche qui les relie. Également, soyez attentif au sens de la flèche qui représente le sens de la relation :
Si l'on regarde ces deux informations (label et flèche), on comprend explicitement que c'est le groupe "ACCUEIL BATIEMENT Z" qui est membre du groupe "IMPRIMANTE ACCUEIL" non l'inverse. Comme pour les nodes, nous pouvons obtenir plus d'informations sur cette relation en cliquant dessus :
À droite de l'interface web, nous trouvons donc des détails sur la relation sélectionnée, ici l'edge "AdminTo". Les sections affichées ici seront toujours présentes pour n'importe quel edge :
- General : Il s'agit d'une description textuelle de la relation sélectionnée qui vise à décrire sa nature, mais aussi les risques et possibilités d'exploitation pour un attaquant.
- Abuse : Il s'agit d'une description précise des techniques des attaquants sur cet edge. Cette section contient notamment des outils, voire lignes de commande à utiliser dans le cadre de l'exploitation de cet edge. Cette section est avant tout faite pour les auditeurs, pentester, red teamers (et hélas, attaquants réels).
- OPSEC : Cette section contient des informations destinées à la blue team et particulièrement aux équipes de détection (SOC, analystes) et d'investigation numérique (forensic). On y trouvera, par exemple, la liste des artefacts que pourrait faire apparaitre l'exploitation de cette relation (nom d'outils, event ID, processus ciblé, etc.).
- References : Il s'agit de références externes (blogposts, ressources officielles) afin d'en apprendre plus sur la relation en elle-même, la manière de l'exploiter pour un attaquant ou de la corriger/durcir pour un défenseur.
Intéressons-nous, par exemple, à certaines sections de l'edge "AddKeyCredentialLink" entre le contrôleur de domaine "AD01" et le groupe "Administrateurs Clés entreprise" :
Nous pouvons notamment voir dans la section "Linux Abuse" le lien vers un outil d'exploitation (pyWhisker) et la commande exacte à utiliser pour exploiter ce lien "AddKeyCredentialLink. La section OPSEC nous renseigne sur les event ID "5136" et "4768" que fera apparaitre cette attaque sur l'Active Directory. Enfin, les détails de l'attaque et du lien peuvent être obtenus sur les deux références externes indiquées, ici ce sont des liens vers Github et un blogpost de SpecterOps.
II. Effectuer une recherche de chemin d'attaque
Avec ces informations en tête, nous pouvons commencer à utiliser le menu "Pathfinding". Il permet de demander à BloodHound de nous afficher toutes les relations qui existent entre les deux nodes indiqués (le sens a une importance !). Prenons un exemple, je cherche un chemin d'attaque depuis le compte "MMARTIN", que je suppose compromis, vers le contrôleur de domaine "AD01" :
Ici, Bloodhound nous indique un chemin d’attaque en 3 étapes (donc reposant sur 3 relations) :
- L’utilisateur "MMARTIN" appartient au groupe "ACCUEIL BATIMENT Z" ;
- Le groupe "ACCUEIL BATIMENT Z" appartient au groupe "IMPRIMANTE ACCUEIL" ;
- Le groupe "IMPRIMANTE ACCUEIL" peut administrer l’ordinateur "AD01".
III. Utiliser les filtres dans le PathFinding
Admettons que nous ne soyons pas intéressés par les relations de type "AdminTo", nous considérons par exemple que le filtrage réseau est suffisant et que cette relation ne pourra pas être exploitée, qu'il est déjà en cours de correction, ou autre. Nous pouvons demander à BloodHound d'effectuer la même requête, en omettant les résultats contenant cet edge. Il faut pour cela se rendre dans l'entonnoir au niveau du menu "Pathfinding" et décocher le type d'edge que nous ne souhaitons plus voir apparaitre :
Si l'on applique cette modification, BloodHound nous montrera un tout autre chemin :
Nous voyons ici un tout autre scénario, le groupe "IMPRIMANTE ACCUEIL" partie du groupe "ADMINS DU DOMAINE" qui a bien sûr toutes les permissions nécessaires pour manipuler "AD01" (GenericAll, Owns).
III. Effectuer une recherche depuis un node
Pour revenir aux deux options de la fin du chapitre précédent, le fait de faire un clic droit sur un node et de cliquer sur "Set as starting/ending node" permet d'ajouter directement le node en question en tant que node de départ ou d'arrivée "Path Finding" :
Nous pouvons alors facilement commencer une recherche dans laquelle notre node est le point de départ ou d'arrivée.
N'hésitez pas à cliquer sur ces nouveaux edges pour en apprendre plus sur leur nature, risques, procédures d'exploitation et de détection.
IV. Les principaux edges
En date d'écriture de ce cours, il existe 74 types d'edge dans BloodHound. Vous trouverez la liste exhaustive de ces edges sur le site officiel : BloodHound - Data Analysis - Edges. Voici les principaux edges auxquels vous pourrez avoir affaire (d'après mon expérience) dans un Active Directory classique :
- MemberOf : Indique que le node (un utilisateur ou un groupe) est membre du groupe relié (un groupe).
- Members : Sans surprise, indique que le node cible est membre du groupe (un utilisateur ou un autre groupe).
- AddMember : Indique que le node source a la possibilité d'ajouter des membres dans le node cible (un groupe).
- AdminTo : Indique que le node source est un administrateur local sur l'ordinateur cible.
- HasSession : Indique que l'utilisateur source possède une session active sur l'ordinateur cible.
- GenericWrite : Accorde la possibilité d'écrire sur n'importe quel attribut non protégé de l'objet cible, y compris les "Members" pour un groupe et "ServicePrincipalNames" pour un utilisateur.
- Owns : Indique que le node source est le propriétaire du node cible, il peut notamment modifier les descripteurs et attributs de sécurité de ce node.
- GenericAll : Le node source possède tous les droits sur le node cible.
- CanRDP : Le node source a les droits d'établir une session RDP sur le node Ordinateur.
- CanPSRemote : Le node source a les droits d'établir une session interactive sur le node Ordinateur.
- DCSync : Le node source a les droits de se synchroniser (repliquer/copier) avec la base Active Directory du domaine cible.
- WriteDacl : Le node source peut modifier les ACL du node cible.
Bien sûr, les descriptions de ces différents edges font appel à différentes attaques, outils et faiblesses classiques de l'Active Directory. C'est pour cela que des notions plus globales autour de la cybersécurité, de la sécurité offensive et des attaques classiques autour de l'AD sont nécessaires pour utiliser et comprendre BloodHound.
Je n'ai bien entendu pas listé tous les edges ici, mais il y a de très fortes chances pour que ceux-ci soient ceux que vous rencontrerez le plus souvent et le plus rapidement lors de la découverte de BloodHound. N'hésitez pas à consulter la ressource indiquée plus haut pour avoir la liste et les détails de chaque edge existant dans BloodHound.