
Ensemble d'outils automatisé et extensible qui exécute des requêtes cypher sur le backend Neo4j de Bloodhound et enregistre la sortie dans des feuilles de calcul.
Ensemble d'outils automatisé et extensible qui exécute des requêtes Cypher sur le backend Neo4j de BloodHound et enregistre les résultats dans des feuilles de calcul.
Ceci est un script bash qui automatise l'exécution de requêtes Cypher contre les données BloodHound stockées dans une base de données Neo4j.
Je me suis retrouvé à ré-exécuter les mêmes requêtes via l'interface web Neo4j lors de multiples évaluations et me suis dit qu'il devait y avoir une manière plus simple. 😅
La liste des requêtes Cypher à exécuter est entièrement extensible. L'exemple de formatage ci-dessous montre comment ajouter les vôtres.
Partagez toute requête utile supplémentaire afin que je puisse les ajouter à ce projet !
Testé et fonctionnel sous Bash sur Linux, macOS et Windows
(Rendu avec termtosvg pour votre plaisir visuel)
cypher-shell est fournie avec Neo4j et est requise pour le fonctionnement de ce script
cypher-shell n'est pas trouvé, vous avez peut-être une version obsolète de Neo4jssconvert est présente, le script combinera tous les fichiers .csv en feuilles dans un fichier .xls
Sous Windows, nous recommandons d'utiliser WSL pour exécuter ce script, tandis que la base de données Neo4j s'exécute sous Windows. Vous devrez simplement installer le paquet cypher-shell dans WSL (Linux).
Flags:
-u Neo4J Username (Required)
-p Neo4J Password (Required)
-d Fully Qualified Domain Name (Required) (Case Sensitive)
-a Bolt address (Optional) (Default: localhost:7687)
-t Query Timeout (Optional) (Default: 30s)
-v Verbose mode (Optional) (Default:FALSE)
-h Help text and usage example (Optional)
Exemple avec les valeurs par défaut :
./cypheroth.sh -u neo4j -p BloodHound -d TESTLAB.LOCAL
Exemple avec toutes les options :
./cypheroth.sh -u neo4j -p hunter2 -d BigTech.corp -a 10.0.0.1:7687 -t 5m -v true
Les fichiers sont ajoutés dans un sous-répertoire nommé d'après le FQDN.
Il y a actuellement près de 60 requêtes dans le script. Voici un échantillon des informations que vous recevrez :
Pour ajouter des requêtes supplémentaires, éditez le tableau queries dans cypheroth.sh et ajoutez une ligne au format suivant :
Description;Cypher Query;Output File
Si vous ajoutez une requête qui nécessite la valeur du domaine, enregistrez-la sous $DOMAIN.
Exemple 1 :
All Usernames;MATCH (u:User) RETURN u.name;usernames.csv
Exemple 2 :
All Domain Admins;MATCH (u:User) MATCH (g:Group {name:'DOMAIN ADMINS@$DOMAIN'}) RETURN u.displayname;domainAdmins.csv
Si vous devez analyser plusieurs domaines, vous pouvez exécuter plusieurs instances de Cypheroth en parallèle, chacune travaillant sur son domaine. Vous pouvez utiliser le script suivant par exemple (10 en parallèle).
#!/usr/bin/env bash
DOMAINS=(domA.example.net domB.example.net [...])
parallel -j10 --lb ./cypheroth.sh <args> -d {} ::: "${DOMAINS[@]}"
Si vous utilisez une version obsolète de cypher-shell, vous pouvez rencontrer l'erreur suivante :
DateTime is not supported as a return type in Bolt protocol version 1.
Please make sure driver supports at least protocol version 2.
Driver upgrade is most likely required.
Pour résoudre, mettez à jour Neo4j vers la dernière version.
Chris Farrell (@seajay)
#cypher_queries pour l'assistance