
AD Miner est un outil d'audit d'Active Directory qui utilise des requêtes Cypher pour traiter les données de la base de données de graphes #Bloodhound afin de découvrir des faiblesses de sécurité.
Fonctionnalités des rapports web :
Une évaluation basée sur le risque des faiblesses Active Directory, accompagnée de chemins d'atténuation complets.
Barre de recherche et contrôles soigneusement adaptés pour identifier les configurations les plus risquées.
Vous pouvez également observer les indicateurs au fil du temps pour aider à mesurer l'efficacité des mesures d'atténuation.
AD Miner a été initialement créé par Forvis Mazars et est maintenu par l'équipe Cybersecurity Audit & Advisory de Grant Thornton.
Pour exécuter AD Miner, vous devez d'abord disposer d'une base de données Neo4j contenant les objets Active Directory :
[!CAUTION] Nous recommandons vivement l'utilisation de BloodHound Automation, car il installe le plugin Graph Data Science Neo4j, qui :
- améliore considérablement le temps de calcul et les performances globales.
- permet d'utiliser Smartest Path au lieu de la fonction intégrée shortestPath() de Neo4j (c'est-à-dire des chemins plus faciles à exploiter plutôt que le nombre minimal de nœuds).
Pour configurer votre environnement BloodHound (y compris l'interface graphique et la base de données Neo4j), BloodHound Automation est fortement recommandé pour son intégration transparente avec le plugin Graph Data Science. Bien qu'il soit tout à fait possible d'utiliser l'installation par défaut de BloodHound CE, sachez que vous passerez à côté des avantages de GDS (par exemple, une recherche de chemin plus intelligente, une amélioration de la vitesse d'exécution, etc.).
Par défaut, BloodHound crée une base Neo4j accessible sur le port 7687.
La méthode la plus simple consiste à exécuter la commande suivante avec pipx :
pipx install 'git+https://github.com/AD-Security/AD_Miner.git'
ADMiner est également disponible sur certaines distributions Linux :
pacman -S ad-minernix-env -iA nixos.ad-minerUne image Docker est disponible pour construction. Construisez l'image avec la commande suivante :
docker build -t ad-miner .
Pour exécuter sous Windows avec les données de BloodHound Community Edition, utilisez les commandes ci-dessous :
docker run -v ${PWD}:/tmp ad-miner AD-miner -b bolt://host.docker.internal:7687 -u neo4j -p mypassword -cf VOTRE_PREFIXE
Pour exécuter sous Linux avec les données de BloodHound Community Edition, utilisez les commandes ci-dessous :
docker run -v ${PWD}:/tmp --network host ad-miner AD-miner -b bolt://localhost:7687 -u neo4j -p mypassword -cf VOTRE_PREFIXE
Notez que le montage du volume avec -v est essentiel pour obtenir la sortie des données. Cela suppose que le serveur BHCE fonctionne sur l'hôte Docker avec les paramètres par défaut.
Exécutez l'outil :
AD-miner [-h] [-b BOLT] [-u USERNAME] [-p PASSWORD] [-e EXTRACT_DATE] [-r RENEWAL_PASSWORD] [-a] [-c] [-l LEVEL] -cf CACHE_PREFIX [-ch NB_CHUNKS] [-co NB_CORES] [--rdp] [--evolution EVOLUTION] [--cluster CLUSTER]
Exemple :
AD-miner -cf Mon_Rapport -u neo4j -p mypassword
Des fichiers de cache sont générés à la fin de chaque requête Neo4j. Cette fonctionnalité vous permet de mettre en pause ou d'arrêter AD Miner à tout moment sans perdre les résultats précédemment calculés. Pour utiliser le cache, utilisez le paramètre -c. Les fichiers de cache sont stockés dans le dossier cache_neo4j de votre répertoire courant. Pour que le cache soit utilisé, le nom du rapport doit correspondre au préfixe du fichier de cache :
AD-miner -c -cf Mon_Rapport -u neo4j -p mypassword
Pour mieux gérer les grands ensembles de données, il est possible d'activer le multi-threading et d'utiliser un cluster de bases de données Neo4j, comme dans l'exemple suivant (où le serveur1 gère 32 threads et le serveur2 en gère 16) :
AD-miner -c -cf Mon_Rapport -b bolt://serveur1:7687 -u neo4j -p mypassword --cluster serveur1:7687:32,serveur2:7687:16
Si la politique de renouvellement des mots de passe est connue, vous pouvez la spécifier à l'aide du paramètre -r pour garantir que les contrôles de renouvellement de mot de passe correspondent aux paramètres de votre environnement (par défaut 90 jours). Par exemple, si la politique de mot de passe est fixée à 180 jours, utilisez la commande suivante :
AD-miner -c -cf Mon_Rapport -b bolt://serveur:7687 -u neo4j -p mypassword -r 180
[!TIP] Le mot de passe par défaut de la base de données Neo4j de Bloodhound CE est
bloodhoundcommunityeditionouneo5jsi vous utilisez BloodHound Automation
Options :
-h, --help affiche ce message d'aide et quitte
-b BOLT, --bolt BOLT Connexion bolt Neo4j (par défaut : bolt://127.0.0.1:7687)
-u USERNAME, --username USERNAME
Nom d'utilisateur Neo4j (par défaut : neo4j)
-p PASSWORD, --password PASSWORD
Mot de passe Neo4j (par défaut : bloodhoundcommunityedition)
-e EXTRACT_DATE, --extract_date EXTRACT_DATE
Date d'extraction (ex. : 20220131). Par défaut : date de dernière connexion
-r RENEWAL_PASSWORD, --renewal_password RENEWAL_PASSWORD
Politique de renouvellement des mots de passe en jours. Par défaut : 90
-c, --cache Utiliser un fichier local pour les données Neo4j
-l LEVEL, --level LEVEL
Niveau récursif pour les requêtes de chemins
-cf CACHE_PREFIX, --cache_prefix CACHE_PREFIX
Fichier de cache à utiliser (en cas de plusieurs fichiers de cache pour différentes sociétés)
--gpo_low Effectue une requête plus rapide mais incomplète pour les GPO (plus rapide que la requête standard)
-ch NB_CHUNKS, --nb_chunks NB_CHUNKS
Nombre de morceaux pour les requêtes Neo4j parallèles. Par défaut : 20 * nombre de CPU
-co NB_CORES, --nb_cores NB_CORES
Nombre de cœurs pour les requêtes Neo4j parallèles. Par défaut : nombre de CPU
--rdp Inclure l'arête CanRDP dans les graphiques
--evolution EVOLUTION
Évolution dans le temps : emplacement des fichiers de données json. ex : '../../tests/'
--cluster CLUSTER Nœuds du cluster pour exécuter des requêtes Neo4j parallèles. ex : hôte1:port1:nCœur1,hôte2:port2:nCœur2,...
Dans les pages de graphiques, vous pouvez faire un clic droit sur les nœuds du graphique pour les regrouper ou ouvrir le groupe.
Si vous disposez de plusieurs rapports AD-Miner dans le temps, vous pouvez facilement suivre l'évolution avec l'argument --evolution : chaque rapport AD-Miner génère un fichier de données JSON en plus du fichier index.html. Il vous suffit de rassembler ces différents fichiers JSON dans un seul dossier et de spécifier le chemin de ce dossier après l'argument --evolution.
AD-miner -c -cf Mon_Rapport -b bolt://serveur:7687 -u neo4j -p mypassword -r 180 --evolution dossier_evolution/
Un onglet 'Évolution dans le temps' apparaît sur la page principale, fournissant des graphiques d'évolution pour chaque catégorie (Permissions, Mots de passe, Kerberos et Divers).
L'évolution détaillée pour chaque contrôle est également disponible et accessible via le bouton « Afficher l'évolution » pour chaque catégorie. Une échelle logarithmique est disponible pour mieux mettre en évidence les variations subtiles dans le temps.
AD Miner peut calculer des chemins en fonction de leur exploitabilité réelle. En effet, parfois le chemin le plus court est difficile à exploiter (ici à cause de ExecuteDCOM avant HasSession).
Alors qu'un chemin plus long mais plus simple existe (ici avec MemberOf et AdminTo au lieu de ExecuteDCOM).
AD Miner passe automatiquement en mode chemin le plus intelligent lorsque votre base de données Neo4j dispose du plugin Graph Data Science installé (https://neo4j.com/docs/graph-data-science/current/).
La manière la plus simple d'installer ce plugin est de définir une variable d'environnement dans votre Docker Neo4j : NEO4J_PLUGINS=["graph-data-science"] (il est installé par défaut avec BloodHound Automation).
Actuellement, 10 contrôles utilisent une couverture complète du graphe et optimisent les chemins les plus intelligents pour l'analyse.
La liste suivante répertorie les contrôles déjà implémentés dans AD Miner :
Consultez comment contribuer ici.
| Catégorie | Description | Catégorie | Description |
|---|
| Kerberos | Comptes AS-REP Roastables | Divers | Ordinateurs avec OS obsolète | |
| Kerberos | Comptes Kerberoastables | Divers | Comptes dormants | |
| Kerberos | Délégation contrainte Kerberos | Divers | Niveau fonctionnel du domaine | |
| Kerberos | RBCD Kerberos contre des ordinateurs | Divers | Ordinateurs fantômes | |
| Kerberos | Délégations non contraintes Kerberos | Divers | Groupes sans aucun membre | |
| Kerberos | Ancien mot de passe KRBTGT | Divers | UO sans aucun membre | |
| Kerberos | Shadow Credentials sur comptes privilégiés | Divers | Shadow Credentials sur contrôleurs de domaine | |
| Kerberos | Shadow Credentials sur comptes normaux | Divers | PrimaryGroupID inattendu | |
| Mots de passe | Accès aux mots de passe LAPS | Divers | FGPP des utilisateurs | |
| Mots de passe | Ordinateurs sans LAPS | Permissions | Anomalies ACL | |
| Mots de passe | Objets pouvant lire les mots de passe GMSA des administrateurs | Permissions | Points d'étranglement des chemins d'attaque | |
| Mots de passe | Contournement de l'exigence de mot de passe | Permissions | Ordinateurs administrateurs d'autres ordinateurs | |
| Mots de passe | Utilisateurs avec mots de passe en clair | Permissions | Chemins inter-domaines vers Admin de domaine | |
| Mots de passe | Utilisateurs avec mots de passe anciens | Permissions | Comptes invités | |
| Mots de passe | Utilisateurs sans expiration de mot de passe | Permissions | Accès inadéquat aux privilèges DCSync | |
| Permissions | Paramètres AdminCount inadéquats | Permissions | Privilèges de modification GPO inadéquats | |
| Permissions | Nombre inadéquat d'administrateurs de domaine | Permissions | Comptes machines avec privilèges inadéquats | |
| Permissions | Comptes machines avec privilèges inadéquats | Permissions | Privilèges admin local non tier-0 sur ADCS | |
| Permissions | Objets avec historique SID | Permissions | Chemins vers les administrateurs DNS | |
| Permissions | Chemins vers les administrateurs de domaine | Permissions | Chemins vers les groupes d'opérateurs | |
| Permissions | Chemins vers les unités d'organisation (UO) | Permissions | Chemins vers les serveurs | |
| Permissions | Chemins vers le conteneur AdminSDHolder | Permissions | Groupe « Pre-Windows 2000 Compatible Access » | |
| Permissions | Comptes privilégiés en dehors du groupe Protected Users | Permissions | Accès RDP (ordinateurs) | |
| Permissions | Accès RDP (utilisateurs) | Permissions | Violation Tier-0 (sessions) | |
| Permissions | Utilisateurs ayant des privilèges inter-domaines puissants | Permissions | Utilisateurs avec privilèges d'administrateur local |
| Catégorie | Description | Catégorie | Description |
|---|
| Entra ID Divers | Comptes dormants Azure | Entra ID MS Graph | Contrôleurs directs de MS Graph | |
| Entra ID Mots de passe | Privilèges de réinitialisation de mot de passe Entra ID | Entra ID MS Graph | Comptes Entra ID non synchronisés sur site | |
| Entra ID Mots de passe | Changement de mot de passe incohérent | Entra ID MS Graph | Comptes synchronisés avec compte jumeau désactivé | |
| Entra ID Permissions | Accès aux rôles Entra ID privilégiés | Entra ID Permissions | Comptes privilégiés à la fois sur site et Azure | |
| Entra ID Permissions | Chemin croisé sur site/Entra ID vers tier-0 | Entra ID Permissions | Utilisateurs possiblement liés à AADConnect | |
| Entra ID Permissions | Utilisateurs Entra ID avec chemin vers cibles de grande valeur |