
AD Miner è uno strumento di audit per Active Directory che sfrutta query cypher per elaborare dati dal database di grafi #Bloodhound per scoprire debolezze di sicurezza.
Caratteristiche dei report basati sul web:
Una valutazione basata sul rischio delle debolezze di Active Directory, insieme a percorsi di mitigazione completi.
Barra di ricerca e controlli attentamente progettati per identificare le configurazioni errate più rischiose.
Puoi anche osservare gli indicatori nel tempo per aiutare a misurare l'efficacia della mitigazione.
AD Miner è stato inizialmente creato da Forvis Mazars ed è mantenuto dal team di Cybersecurity Audit & Advisory di Grant Thornton.
Per eseguire AD Miner, è necessario prima un database neo4j che contenga gli oggetti di Active Directory:
[!CAUTION] Raccomandiamo vivamente di utilizzare BloodHound Automation, poiché installa il plugin Graph Data Science di Neo4j, che:
- migliora notevolmente il tempo di calcolo e le prestazioni generali.
- abilita l'uso di Smartest Path invece della funzione built-in shortestPath() di Neo4j (cioè, Percorsi più facili da sfruttare piuttosto che con il minimo numero di nodi).
Per configurare il tuo ambiente BloodHound (inclusi GUI e database Neo4j), BloodHound Automation è altamente raccomandato per la sua integrazione perfetta con il plugin Graph Data Science. Anche se è perfettamente possibile utilizzare l'installazione predefinita di BloodHound CE, tieni presente che perderai i vantaggi di GDS (ad esempio, pathfinding più intelligente, velocità di esecuzione migliorata, ecc.).
Per impostazione predefinita, BloodHound crea un database neo4j accessibile sulla porta 7687.
Il modo più semplice è eseguire il seguente comando usando pipx:
pipx install 'git+https://github.com/AD-Security/AD_Miner.git'
ADMiner è disponibile anche su alcune distribuzioni Linux:
pacman -S ad-minernix-env -iA nixos.ad-minerUn'immagine Docker è disponibile per la creazione. Costruisci l'immagine con il seguente comando:
docker build -t ad-miner .
Per eseguirlo su Windows con i dati di BloodHound Community Edition, utilizza i comandi seguenti:
docker run -v ${PWD}:/tmp ad-miner AD-miner -b bolt://host.docker.internal:7687 -u neo4j -p mypassword -cf YOUR_PREFIX
Per eseguirlo su Linux con i dati di BloodHound Community Edition, utilizza i comandi seguenti:
docker run -v ${PWD}:/tmp --network host ad-miner AD-miner -b bolt://localhost:7687 -u neo4j -p mypassword -cf YOUR_PREFIX
Nota che montare il volume con -v è fondamentale per ottenere l'output dei dati. Questo presuppone che il server BHCE sia in esecuzione sull'host Docker con le impostazioni predefinite.
Esegui lo strumento:
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]
Esempio:
AD-miner -cf My_Report -u neo4j -p mypassword
I file cache vengono generati al completamento di ogni richiesta Neo4j. Questa funzionalità permette di mettere in pausa o fermare AD Miner in qualsiasi punto del processo senza perdere i risultati precedentemente calcolati. Per sfruttare la cache, utilizza il parametro -c. I file cache sono memorizzati nella cartella cache_neo4j nella tua directory corrente. Affinché la cache venga utilizzata, il nome del report deve corrispondere al prefisso del nome del file cache:
AD-miner -c -cf My_Report -u neo4j -p mypassword
Per gestire meglio set di dati di grandi dimensioni, è possibile abilitare il multi-threading e anche utilizzare un cluster di database neo4j, come mostrato nell'esempio seguente (dove server1 gestisce 32 thread e server2 ne gestisce 16):
AD-miner -c -cf My_Report -b bolt://server1:7687 -u neo4j -p mypassword --cluster server1:7687:32,server2:7687:16
Se la politica di rinnovo della password è nota, è possibile specificarla utilizzando il parametro -r per garantire che i controlli di rinnovo della password siano allineati con le impostazioni del tuo ambiente (il valore predefinito è 90 giorni). Ad esempio, se la politica password è impostata a 180 giorni, puoi utilizzare il seguente comando:
AD-miner -c -cf My_Report -b bolt://server:7687 -u neo4j -p mypassword -r 180
[!TIP] La password predefinita del database neo4j di Bloodhound CE è
bloodhoundcommunityeditiononeo5jse usi BloodHound Automation
Opzioni:
-h, --help mostra questo messaggio di aiuto ed esci
-b BOLT, --bolt BOLT Connessione bolt Neo4j (predefinito: bolt://127.0.0.1:7687)
-u USERNAME, --username USERNAME
Nome utente Neo4j (predefinito: neo4j)
-p PASSWORD, --password PASSWORD
Password Neo4j (predefinito: bloodhoundcommunityedition)
-e EXTRACT_DATE, --extract_date EXTRACT_DATE
Data di estrazione (es., 20220131). Predefinito: data dell'ultimo accesso
-r RENEWAL_PASSWORD, --renewal_password RENEWAL_PASSWORD
Politica di rinnovo della password in giorni. Predefinito: 90
-c, --cache Usa file locale per i dati neo4j
-l LEVEL, --level LEVEL
Livello ricorsivo per le query di path
-cf CACHE_PREFIX, --cache_prefix CACHE_PREFIX
File cache da utilizzare (in caso di più file cache per azienda)
--gpo_low Esegue una query più veloce ma incompleta per GPO (più veloce della query regolare)
-ch NB_CHUNKS, --nb_chunks NB_CHUNKS
Numero di chunk per richieste neo4j parallele. Predefinito: 20 * numero di CPU
-co NB_CORES, --nb_cores NB_CORES
Numero di core per richieste neo4j parallele. Predefinito: numero di CPU
--rdp Include il bordo CanRDP nei grafici
--evolution EVOLUTION
Evoluzione nel tempo: posizione dei file json dei dati. es.: '../../tests/'
--cluster CLUSTER Nodi del cluster per eseguire query neo4j parallele. es.: host1:port1:nCore1,host2:port2:nCore2,...
Nelle pagine dei grafici, puoi fare clic con il tasto destro sui nodi del grafico per raggrupparli o per aprire il cluster.
Se hai più report AD-Miner nel tempo, puoi facilmente tracciare l'evoluzione con l'argomento --evolution: ogni report AD-Miner genera un file JSON di dati insieme al file index.html. Devi solo raccogliere questi diversi file JSON in un'unica cartella e specificare il percorso di quella cartella dopo l'argomento --evolution.
AD-miner -c -cf My_Report -b bolt://server:7687 -u neo4j -p mypassword -r 180 --evolution evolution_folder/
Una scheda 'Evoluzione nel tempo' appare sulla pagina principale, fornendo grafici di evoluzione per ogni categoria (Permessi, Password, Kerberos e Varie).
È disponibile anche l'evoluzione dettagliata per ogni controllo, accessibile tramite il pulsante "Mostra evoluzione" per ogni categoria. Una scala logaritmica è disponibile per evidenziare meglio le sottili variazioni nel tempo.
AD Miner può calcolare percorsi basati sulla loro effettiva sfruttabilità. Infatti, a volte il percorso più breve è difficile da sfruttare (qui a causa di ExecuteDCOM prima di HasSession).
Mentre esiste un percorso più lungo ma più semplice (qui con MemberOf e AdminTo invece di ExecuteDCOM).
AD Miner passa automaticamente alla modalità smartest path quando il tuo database neo4j ha installato il plugin Graph Data Science (https://neo4j.com/docs/graph-data-science/current/).
Il modo più semplice per installare questo plugin è definire una variabile d'ambiente nel tuo docker neo4j: NEO4J_PLUGINS=["graph-data-science"] (è installato per impostazione predefinita con BloodHound Automation).
Attualmente, 10 controlli utilizzano la copertura completa del grafico e ottimizzano i percorsi più intelligenti per l'analisi.
La seguente è una lista di controlli già implementati in AD Miner:
Scopri come contribuire qui.
| Categoria | Descrizione | Categoria | Descrizione |
|---|
| Kerberos | Account AS-REP Roastable | Varie | Computer con SO obsoleto | |
| Kerberos | Account Kerberoastable | Varie | Account dormienti | |
| Kerberos | Delegazione vincolata Kerberos | Varie | Livello funzionale del dominio | |
| Kerberos | Kerberos RBCD contro computer | Varie | Computer fantasma | |
| Kerberos | Delegazioni non vincolate Kerberos | Varie | Gruppi senza membri | |
| Kerberos | Password KRBTGT vecchia | Varie | OU senza membri | |
| Kerberos | Shadow Credentials su account privilegiati | Varie | Shadow credentials su controller di dominio | |
| Kerberos | Shadow Credentials su account regolari | Varie | PrimaryGroupID inaspettato | |
| Password | Accesso alle password LAPS | Permessi | Anomalie ACL | |
| Password | Computer senza LAPS | Permessi | Punti di strozzatura nei percorsi di attacco | |
| Password | Oggetti possono leggere password GMSA degli amministratori | Permessi | Computer amministratori di altri computer | |
| Password | Bypass dei requisiti password | Permessi | Percorsi cross-dominio verso Domain Admin | |
| Password | Utenti con password in chiaro | Permessi | Account ospiti | |
| Password | Utenti con password vecchie | Permessi | Accesso inadeguato ai privilegi DCSync | |
| Password | Utenti senza scadenza password | Permessi | Privilegi inadeguati per modifiche GPO | |
| Permessi | Impostazioni AdminCount inadeguate | Permessi | Account macchina con privilegi inadeguati | |
| Permessi | Numero inadeguato di amministratori di dominio | Permessi | Account macchina con privilegi inadeguati | |
| Permessi | Account macchina con privilegi inadeguati | Permessi | Privilegi di admin locale non Tier-0 su ADCS | |
| Permessi | Oggetti con cronologia SID | Permessi | Percorsi verso DNS Admins | |
| Permessi | Percorsi verso Domain Admins | Permessi | Percorsi verso Gruppi Operatori | |
| Permessi | Percorsi verso Unità Organizzative (OU) | Permessi | Percorsi verso server | |
| Permessi | Percorsi verso il contenitore AdminSDHolder | Permessi | Gruppo "Accesso compatibile Pre-Windows 2000" | |
| Permessi | Account privilegiati fuori dal gruppo utenti protetti | Permessi | Accesso RDP (computer) | |
| Permessi | Accesso RDP (utenti) | Permessi | Violazione Tier-0 (sessioni) | |
| Permessi | Utenti con potenti privilegi cross-dominio | Permessi | Utenti con privilegi di amministratore locale |
| Categoria | Descrizione | Categoria | Descrizione |
|---|
| Varie Entra ID | Account dormienti Azure | Entra ID MS Graph | Controllori diretti di MS Graph | |
| Password Entra ID | Privilegi di reimpostazione password Entra ID | Entra ID MS Graph | Account Entra ID non sincronizzati on-prem | |
| Password Entra ID | Cambio password ultimo incoerente | Entra ID MS Graph | Account sincronizzati con account gemello disabilitato | |
| Permessi Entra ID | Accesso a ruoli Entra ID privilegiati | Permessi Entra ID | Account privilegiati sia su on-prem che su Azure | |
| Permessi Entra ID | Percorso cross on-prem/Entra ID verso tier-0 | Permessi Entra ID | Utenti possibilmente correlati a AADConnect | |
| Permessi Entra ID | Utenti Entra ID con percorsi verso target di alto valore |