Interaction avec la base de données Neo4j
Dans ce chapitre, nous allons nous attarder un peu plus sur la base de données principale de BloodHound : Neo4j. L'interaction avec Neo4j est de moins en moins nécessaire au fur et à mesure des mises à jour et nouvelles fonctionnalités proposées par BloodHound, mais il est toujours intéressant de savoir qu'il est possible d'y accéder pour obtenir des vues ou informations complémentaires de celles proposées par BloodHound.
Sommaire
I. Accéder à l'interface web de Neo4j
Si vous vous souvenez des tout premiers chapitres de ce cours, nous pouvons obtenir le port d'écoute de la base de données Neo4j (si les conteneurs sont actifs) via la commande docker suivante :
docker ps --format "table {{.Image}}\t{{.Ports}}\t{{.Names}}"
Voici le résultat attendu :
Ou dans le fichier "docker-compose.yml" qui nous permet de créer puis gérer l'infrastructure docker de BloodHound :
$ cat docker-compose.yml
graph-db:
image: docker.io/library/neo4j:4.4
[...]
ports:
- 127.0.0.1:${NEO4J_DB_PORT:-7687}:7687
- 127.0.0.1:${NEO4J_WEB_PORT:-7474}:7474
Si vous vous rendez avec un navigateur web sur le service http://127.0.0.1:7474, vous aurez accès à l'interface web suivante, appelée "neo4j Browser" :
Pour s'authentifier, il faut utiliser les identifiants paramétrés dans le "docker-compose.yml" :
NEO4J_AUTH=${NEO4J_USER:-neo4j}/${NEO4J_SECRET:-bloodhoundcommunityedition}
Une fois authentifié, nous accédons au Neo4j Browser et pouvons manipuler et visualiser les données importées de notre Active Directory.
II. Visualiser les edges et les nodes dans Neo4j
La première chose à faire est de lister tous les éléments disponibles dans Neo4j. Pour cela, il faut cliquer sur l'icône de base de données en haut à droite de l'interface :
Nous avons ici une vue d'ensemble de tous les nodes, edges et propriétés sur lesquels peuvent porter nos requêtes (dans Neo4j, et donc dans BloodHound). Cette visualisation aide aussi à comprendre la puissance de BloodHound et la façon dont nous pouvons construire nos requêtes Cypher.
III. Requêtes Cypher et format de réponse
En cliquant sur l'un de ces éléments, une requête Cypher (limitée à 25 éléments) est exécutée :
Là aussi, nous voyons que cette interface peut nous aider à mieux comprendre les requêtes Cypher puisqu'elle en produit à partir d'une simple sélection. Lorsque l'on débute en Cypher, cela peut constituer une base de départ intéressante pour construire une requête plus complexe. Egalement, il y a de l’auto-complétion, ce qui est très pratique quand on ne connait pas bien la structure des requêtes. En cliquant sur l'un des nodes, vous aurez accès à droite à l'intégralité des attributs qu'il possède, ce qui vous donnera aussi une meilleure idée des éléments que vos requêtes Cypher dans BloodHound peuvent utiliser :
Autre point intéressant, vous pouvez voir à gauche du graphe produit par la requête Cypher plusieurs formats de mise en format : graph, table, text ou code. Je trouve ces différentes options particulièrement intéressantes dans certains cas de figure où l'on cherche simplement une liste d'éléments, sans relations entre ceux-ci.
Exemple, nous souhaitons obtenir la liste des descriptions des utilisateurs pour y rechercher des mots de passe (cas classique d'informations sensibles stockées au mauvais endroit). Je peux tout à fait utiliser la requête Cypher suivante :
MATCH (u:User) WHERE u.description CONTAINS "password" RETURN u.samaccountname,u.description
Ce n'est pas la fonction première de neo4j ou du Cypher de traiter des requêtes qui ne sont pas orientées relations, mais cela fonctionne très bien quand même. Je choisis ici une sortie au format table, qui correspond mieux à l'affichage du résultat de ma requête :
Vous notez d'ailleurs que lorsque la requête Cypher n'est pas orientée relation, la vue graphe n'est pas proposée, nous avons ici le choix entre les vues table, text et code. Autre option intéressante, la possibilité d'exporter ces informations en CSV (tableau) ou JSON :
Ces exports sont notamment très utiles pour faire du reporting et avoir rapidement les données sous un format Excel ou interprétables par du code.
Bref, vous l'aurez compris, le neo4j Browser regorge de fonctionnalités intéressantes pour aller encore plus loin dans l'analyse des données de votre Active Directory.