La théorie des graphes
Dans ce chapitre, nous allons voir ce qu'est la théorie des graphes et pourquoi elle est l'élément clé de l’efficacité de BloodHound.
Sommaire
I. La théorie des graphes, qu'est-ce que c'est ?
L'intérêt et la nouveauté majeure de BloodHound par rapport à d'autres outils offensifs concernant l'Active Directory est l'utilisation de la théorie des graphes pour découvrir des chemins d'attaque complexes entre les objets. Il faut savoir qu'à l'origine, les créateurs de BloodHound se sont inspirés d'un outil de l'ANSSI (Agence nationale de la sécurité des systèmes d'information) : AD Control Path.
La théorie des graphes est la discipline mathématique et informatique qui étudie les graphes, lesquels sont des modèles abstraits de dessins de réseaux reliant des objets. Ces modèles sont constitués de sommets (nœuds), et d'arêtes (liens) entre ces sommets.
https://fr.wikipedia.org/wiki/Théorie_des_graphes
Voici un autre exemple de ce que peut produire BloodHound grâce à la théorie des graphes (cliquez sur l'image pour zoomer) :
Nous y voyons un ensemble de nœuds et de relations entre ceux-ci, le tout permet de découvrir des chemins partant d'un point A à un point X ou Y en suivant chaque relation.
II. Petite mise en situation
Représentez-vous l'Active Directory d'une entreprise actuelle : 16 000 objets utilisateurs, 40 000 groupes, 20 000 objets ordinateurs, des groupes, des OU, différents sites géographiques, une instance Azure AD (Entra ID), le tout multiplié par les relations qui peuvent exister entre eux… Comment savoir si, avec tous ces objets, parfois obsolètes, disposant parfois de permissions ou appartenance à des groupes historiques ou "temporaires", il n'existe pas un moyen pour un utilisateur X d'obtenir les droits "administrateurs" du domaine ?
Pour rappel, l'Active Directory est le service d'annuaire proposé par Microsoft, il joue un rôle central dans la gestion des identités et des ressources. L'Active Directory stocke de nombreux objets pour organiser et gérer le système d'information, notamment les utilisateurs, les groupes, les ordinateurs et les imprimantes. En tant qu'annuaire centralisé, il facilite la gestion des accès et des autorisations au sein du réseau. Les administrateurs peuvent y définir des politiques de sécurité et l'utiliser pour gérer les ressources et globalement simplifier l'administration des différents objets et utilisateurs.
Exemple : J'ajoute certains de mes 16 000 utilisateurs au groupe "Accueil batiment Z", et ce groupe sera lui-même membre du groupe "imprimante_Accueil" pour que ses membres puissent accéder à l'imprimante à côté de la machine à café et à ses partages, etc. Un beau matin, mon prestataire d'impression change d'imprimante et, par facilité, bêtise ou ignorance, décide qu'il serait bien plus facile pour la maintenance que ce groupe "imprimante_Accueil" soit membre de "Admins du domaine". Nous venons ici de créer un chemin d'attaque à plusieurs "nœuds" :
- Certains de mes utilisateurs sont membres du groupe "Accueil batiment Z".
- Ce groupe est membre du groupe "imprimante Accueil", par extension, les membres du groupe "Accueil batiment Z" aussi.
- Le groupe "imprimante_Accueil" est maintenant membre du groupe "Admins du domaine", par extension le groupe "Accueil batiment Z", et donc ses membres sont administrateur du domaine.
À présent, imaginez découvrir cela au sein de votre AD de 16 000 utilisateurs et 40 000 groupes à l'aide des outils natifs de l'Active Directory sous Windows :
Ouvrir le groupe, regarder ses membres, y trouver un second groupe, regarder ses membres, etc. Fastidieux ! De plus, avec 40 000 groupes, la chaine à dérouler pour dresser la liste exhaustive des droits d'un utilisateur est bien longue.
III. Les graphes produits par BloodHound
Avec Bloodhound, voilà comment ce chemin d'attaque est représenté :
L'exemple est simpliste, mais sachez qu'à l'heure de l'écriture de cet article, il existe 25 types de nodes et 74 edges dans BloodHound, et certainement bien plus au sein de l'Active Directory. Imaginez la prise de tête d'investiguer sur toutes les relations et faiblesses potentielles via les outils natifs de l'AD, impossible.
Pour les définir plus explicitement :
- un Nœud/Node est un objet de l'Active Directory, comme "Users", "Computers", "Domains", "GPO", "OU", "Groupes", etc. Ils sont représentés pas une icône spécifique et une couleur.
- Dans notre exemple, nous voyons un node "User" (vert) et 3 nodes "Group" (jaune).
- une arête/Edge est une relation qui existe entre un node et un autre. Soyons vigilant au sens de la relation (représenté par une flèche) et à son type (label au milieu de la flèche).
- Dans notre exemple, nous avons essentiellement des nodes "MemberOf", indiquant que le node au départ de la flèche est membre du groupe au bout de la flèche.
- un chemin/Path est un chemin d'attaque comprenant plusieurs nodes et edges, et indiquant la possibilité pour un node de départ d'atteindre un node d'arrivée.
- Toujours dans notre exemple ci-dessus, l'utilisateur "MMARTIN" est, par appartenance successive à des groupes, membre du groupe "ADMINS DU DOMAINE
Vous l'aurez compris, BloodHound offre une représentation différente des données de l'Active Directory à l'aide de technologies différentes (base de données, langage de recherche) et avec un focus sur les chemins d'attaque et la sécurité. Ici, c'est le langage de recherche Cypher, orienté relation, qui permet de découvrir la relation qui existe en "MMARTIN" et "ADMINS DU DOMAINE". L'attaquant s'en servira pour identifier les cibles intéressantes, alors que l'administrateur système/sécurité afin de trouver les faiblesses et les corriger.