12/12/2024

Les tags Owned et High value

Dans ce chapitre, nous allons nous intéresser au marquage des nodes à l'aide des tags "Owned" et "High Value". Nous verrons notamment comment ils permettent d'adapter les requêtes et les recherches faites par BloodHound à notre contexte.

I. Gérer les tags Owned et High Value

Dans l'ensemble des chapitres de ce cours ou en utilisant vous-même BloodHound, vous avez peut-être remarqué que certains nodes sont accompagnés d'une petite icône de diamant :

Exemple de node marqué comme "High Value".
Exemple de node marqué comme "High Value".

Cette icône signifie simplement que le node a été tagué dans le groupe "High Value". Pour le groupe "Owned", il n'entraine pas l'apparition d'une icône spécifique, mais peut modifier les chemins d'attaque affichés par BloodHound.

Pour que cela soit plus clair, vous pouvez vous rendre dans l'onglet "Group Management" au sein de l'interface web BloodHound :

Accès au menu "Group Management" dans l'interface BloodHound.
Accès au menu "Group Management" dans l'interface BloodHound.

Dans le menu de sélection en haut à gauche, vous pourrez notamment avoir le choix entre l'affichage des membres du groupe "High Value" ou "Owned" :

Choix d'affichage des deux groupes "Owned" et "High Value".
Choix d'affichage des deux groupes "Owned" et "High Value".

Attention, nous parlons ici non plus des groupes au sens Active Directory. Il s'agit de groupes qui n'ont de valeur qu'au sein de l'interface web et des recherches BloodHound, ils permettent de faire un tri entre certains nodes.

Juste en dessous de cette sélection, vous pouvez également choisir le domaine de recherche et n'importe quel node parmi les données importées. Cela vous donne la possibilité d'ajouter le node sélectionné à un groupe ("Owned" ou "High Value") :

Ajout de deux nodes au groupe "High Value".
Ajout de deux nodes au groupe "High Value".

Une fois vos objets sélectionnés et le bouton "Confirm Changes" validé, vous pourrez voir vos objets dans la colonne centrale :

Visualisation des deux nodes ajoutés au groupe "High Value".
Visualisation des deux nodes ajoutés au groupe "High Value".

II. À quoi servent ces tags ?

Le groupe "Owned" permet de marquer les nodes que l'on a compromis, et ainsi profiter de certaines requêtes qui utilisent la source "Owned Principals".

Dans le cadre d'une attaque sur le domaine, il peut s'agir d'un compte que l'on sait compromis et qui va donc servir de point de départ à une compromission du domaine. En utilisant ce tag, on signale simplement à BloodHound : "J'ai compromis ce node, où peut-il me mener ?".

Lors de sa progression, un attaquant va chercher à compromettre de plus en plus de comptes et de machines. Plus il ajoutera ces nodes dans le groupe "Owned", plus BloodHound sera en mesure de lui trouver des chemins d'attaque, menant ainsi à un effet boule de neige dans lequel chaque compromission ouvre de nouvelles opportunités.

Le groupe "High Value" permet de marquer des nodes comme particulièrement sensibles ou d'intérêt. Ils deviendront alors des cibles pour les requêtes pointant vers "High value" :

Ce groupe est notamment pratique lorsque l'on souhaite apporter des éléments contextuels à BloodHound. Par exemple, le compte du PDG de l'entreprise est forcément sensible (données, mails) mais il n'a pas de lien avec des groupes type "administrateurs du domaine". Ainsi, BloodHound ne le marquera jamais et il s'agira juste d'un compte comme un autre. En le marquant comme "High Value", on signale à BloodHound qu'il s'agit d'une cible d'intérêt et cela nous permet d'obtenir des chemins d'attaque menant vers cette cible.

Vous remarquerez que par défaut, BloodHound marque certains nodes comme "High Value". Il s'agit particulièrement des contrôleurs de domaine, des groupes d'administration par défaut de tout Active Directory et de leur membre directs et indirects. Si l'on reprend notre exemple type utilisé depuis le début de ce cours : l'utilisateur "MMARTIN" n'est pas particulièrement privilégié si l'on regarde ses groupes directs :

Visualisation des groupes directs de l'utilisateur "mmartin".
Visualisation des groupes directs de l'utilisateur "mmartin".

Si l'on regarde ses groupes indirects, il est administrateurs du domaine, BloodHound a donc automatiquement marqué ce node comme "High Value", ainsi que tous ses groupes intermédiaires :

Tag automatique des nodes ayant un lien vers "admins du domaine" par BloodHound.
Tag automatique des nodes ayant un lien vers "admins du domaine" par BloodHound.

III. Exemples d'utilisation des tags Owned/High Value

Considérons maintenant que, dans mon contexte, le système nommé "DESKTOP-VAU6BQO.IT-CONNECT.TECH" soit particulièrement sensible, car il permet de gérer un automate qui stocke des secrets industriels. Dans BloodHound, je peux utiliser la fonction "Search" pour rechercher ce node. Puis, via un simple clic droit (le menu "Group Management"), j'ajoute ce node à la liste des "High Value" :

Ajout d'un node Computer dans les node "High Value".
Ajout d'un node Computer dans les node "High Value".

J'utilise ensuite dans le "PathFinding" la requête "Shortest Path to High value/Tiers Zero targets" qui permet de trouver le chemin le plus court vers mes cibles "sensibles". Les "High value/Tiers Zero targets" regroupant ceux sélectionnés par défaut par BloodHound, est à présent mon node "DESKTOP-VAU6BQO.IT-CONNECT.TECH" :

L’attribut alt de cette image est vide, son nom de fichier est bloodhound-group-management-shortest_path-high_value-800x683.png.
Découverte d'un chemin d'attaque menant à une cible "High Value" relative à mon contexte de sécurité.
Découverte d'un chemin d'attaque menant à une cible "High Value" relative à mon contexte de sécurité.

Parmi les nombreux résultats que peut retourner cette requête Cypher, nous voyons à présent un chemin d'attaque vers ma ressource nouvellement déclarée "sensible" : mon node "[email protected]".

Le chemin d'attaque vers ce node existe depuis le début, mais BloodHound ne l'affichait pas, car il ne savait pas qu'il s'agissait d'un node d'intérêt pour nous. C'est ce à quoi sert ce groupe "High Value", aussi appelée "Tier Zero" dans BloodHound.

Au niveau de la base de données Neo4j, l'ajout d'un node dans le groupe "Owned" lui ajoute un attribut "system_tags" valué à "owned. Pour le groupe "High Value", ce même attribut sera valué à "admin_tiers_0" :

Affichage des "system_tags" utilisée pour les groupes "Owned" et "High Value" dans la base de données neo4j.
Affichage des "system_tags" utilisée pour les groupes "Owned" et "High Value" dans la base de données neo4j.

Cette dernière vue nous mène tout droit au prochain chapitre dans lequel nous étudierons plus en profondeur la base de données utilisée par BloodHound : Neo4j. Mais juste avant, jetons un œil à la requête Cypher qui utilise justement ce tag "admin_tier_0" ("High Value") :

MATCH p=shortestPath((n)-[:Owns|GenericAll|GenericWrite|WriteOwner|WriteDacl|MemberOf|ForceChangePassword|AllExtendedRights|AddMember|HasSession|Contains|GPLink|AllowedToDelegate|TrustedBy|AllowedToAct|AdminTo|CanPSRemote|CanRDP|ExecuteDCOM|HasSIDHistory|AddSelf|DCSync|ReadLAPSPassword|ReadGMSAPassword|DumpSMSAPassword|SQLAdmin|AddAllowedToAct|WriteSPN|AddKeyCredentialLink|SyncLAPSPassword|WriteAccountRestrictions|GoldenCert|ADCSESC1|ADCSESC3|ADCSESC4|ADCSESC5|ADCSESC6|ADCSESC7*1..]->(m))
WHERE m.system_tags = "admin_tier_0" AND n<>m
RETURN p

Dans la clause "WHERE", nous retrouvons bien le filtre sur l'attribut "system_tags" qui nous permettra d'obtenir uniquement les chemins vers les nodes de destination "admin_tier_0".

En suivant cette logique, nous pouvons utiliser le "system_tags: owned" pour faire une requête du type : Donne-moi tous les chemins des nodes "owned" vers les nodes "Computer" marqué comme "admin_tier_0" :

MATCH p=shortestPath((n)-[:Owns|GenericAll|GenericWrite|WriteOwner|WriteDacl|MemberOf|ForceChangePassword|AllExtendedRights|AddMember|HasSession|Contains|GPLink|AllowedToDelegate|TrustedBy|AllowedToAct|AdminTo|CanPSRemote|CanRDP|ExecuteDCOM|HasSIDHistory|AddSelf|DCSync|ReadLAPSPassword|ReadGMSAPassword|DumpSMSAPassword|SQLAdmin|AddAllowedToAct|WriteSPN|AddKeyCredentialLink|SyncLAPSPassword|WriteAccountRestrictions|GoldenCert|ADCSESC1|ADCSESC3|ADCSESC4|ADCSESC5|ADCSESC6|ADCSESC7*1..]->(m:Computer))
WHERE n.system_tags = "owned"
AND m.system_tags = "admin_tier_0"
AND n<>m
return p

Nous utilisons ici la fonction shortestPath sur n'importe quel type de node (nommé "n") et à destination d'un node "Computer" (nommé "m"). Nous rajoutons notamment nos filtres sur le node source, qui devrait être marqué "owned" et le node destination, qui devrait être "High Value" ("admin_tier_0").

Rajoutons que, dans mon exemple, j'ai également marqué un des node utilisateur en "Owned" (l'utilisateur "[email protected]") car ce compte utilise un mot de passe très faible. Voici le résultat obtenu :

Résultat d'une requête "owned" vers "high value" avec un node "Utilisateur" en source
Résultat d'une requête "owned" vers "high value" avec un node "Utilisateur" en source

Nous voyons ici un chemin d'attaque intéressant qui commence à utilisateur "[email protected]", marqué en "owned", et qui finit au contrôleur de domaine "AD01.IT-CONNECT.TECH", automatiquement marqué en "High Value/admin_tier_0" par BloodHound. Nous pouvons profiter de son appartenance au groupe "BE-ALH-ADMINGROUP1" qui possède les droits d'administration sur le node ordinateur "DESKTOP-VAU6BQO". Ce dernier possède, au moment de la collecte des données, une session de l'utilisateur "MMARTIN". Cet utilisateur est lui en lien quasi direct avec "AD01" puisqu'il fait partie du groupe "ACCUEIL BATIMENT Z", lui-même membre de "IMPRIMANTE_ACCUEIL" qui possède des droits d'administration sur le contrôleur de domaine.

Lorsqu'un node possède la relation "adminTo" vers un node "Computer", cela indique qu'il est administrateur local du système. Il peut donc dérober les secrets d'authentification qui y sont stockés. On parle ici des techniques T1003.001 - OS Credential Dumping: LSASS Memory et T1003.002 - OS Credential Dumping: Security Account Manager par exemple.

Nous commençons à avoir un aperçu de la complexité des chemins d'attaque qui peuvent apparaître dans des environnements réels. Ces chemins d'attaque utilisent de nombreuses relations de natures différentes, eux-mêmes nécessitent différents outils pour être exploités.

author avatar
Mickael Dorigny Co-founder
Co-fondateur d'IT-Connect.fr. Auditeur/Pentester chez Orange Cyberdéfense.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.