
Identifica i percorsi di attacco in BloodHound che rompono la tua gerarchia AD
Identifica i percorsi di attacco in BloodHound che violano la tua suddivisione in livelli di Active Directory
ImproHound è un eseguibile standalone .NET x64 per Windows con interfaccia grafica. Per utilizzare ImproHound, devi eseguire SharpHound per raccogliere i dati necessari da AD. Caricherai poi i dati nella tua installazione di BloodHound. ImproHound si collegherà al database Neo4j sottostante di BloodHound. In ImproHound, categorizzerai gli oggetti AD in livelli tramite la struttura delle OU, e ImproHound identificherà le relazioni AD che permettono a oggetti AD di compromettere un oggetto di un livello superiore (più vicino allo zero) e salverà le violazioni della suddivisione in livelli in un file CSV.
Articolo del blog su ImproHound
Video dimostrativo di ImproHound
Presentazione di ImproHound al DEF CON Adversary Village
1. Configura il tuo database BloodHound
Raccogli i dati di BloodHound con SharpHound nel tuo AD
Nota: questo genererà rumore nel tuo antivirus, SIEM, ecc.
Esempio: Esegui SharpHound.exe da cmd, raccogli tutto (sì, GPOLocalGroup non è incluso in All):
SharpHound.exe --CollectionMethods All,GPOLocalGroup
Suggerimento 1: Usa il parametro
Domainper raccogliere dati da altri domini nel forest.
Suggerimento 2: Per ottenere ancora più dati, utilizza The Session Loop Collection Method
Carica i tuoi dati BloodHound nell'interfaccia grafica di BloodHound
C'è un bug in BloodHound che a volte causa la mancata importazione del file JSON del dominio quando si carica un archivio zip di dati BloodHound. Controlla le statistiche del database in BloodHound dopo il caricamento dei dati e assicurati che gli oggetti del dominio esistano.
2. Installa il plugin APOC per Neo4j (abilita le operazioni avanzate sui grafi di cui abbiamo bisogno)
Scarica la versione di APOC corrispondente alla tua versione di Neo4j (apoc-x.x.x.x-all.jar).
Trova la versione di APOC corrispondente alla tua versione di Neo4j nella matrice di compatibilità delle versioni.
Cerca di ricordare dove hai installato Neo4j e posiziona il file jar di APOC sotto: $NEO4J_HOME/plugins/
/var/lib/neo4j/Modifica neo4j.conf nel tuo editor di testo preferito per consentire l'accesso APOC senza restrizioni sostituendo la riga:
#dbms.security.procedures.unrestricted=my.extensions.example,my.procedures.*
con
dbms.security.procedures.unrestricted=apoc.*
/etc/neo4j/neo4j.conf$NEO4J_HOME/conf/neo4j.confSe vuoi eseguire ImproHound su un host e BloodHound su un altro, devi consentire connessioni remote al database Neo4j sull'host di BloodHound. Per farlo, rimuovi il # dalla riga
#dbms.default_listen_address=0.0.0.0in .
3. Scarica ed esegui l'ultima versione di ImproHound.exe in Windows (x64)
Conferma di poter accedere al database BloodHound con le stesse credenziali che usi nell'interfaccia grafica di BloodHound.

Inserisci le credenziali del database e stabilisci una connessione. Sono le stesse credenziali che usi nell'interfaccia grafica di BloodHound.

ImproHound crea un'etichetta 'TierX' sui nodi nel database BloodHound. Se hai già usato ImproHound con questo database BloodHound, ti verrà chiesto se vuoi continuare con la suddivisione in livelli già creata o se vuoi ricominciare da capo.

ImproHound ti dà l'opzione di impostare la 'Suddivisione predefinita' che imposta Domain Admins in Tier 0, Domain Users in Tier 2, ecc., o di impostare tutti gli oggetti in Tier 2.

Questa è la pagina in cui categorizzerai gli oggetti AD nei livelli. La finestra mostra la struttura delle OU. Ogni oggetto AD ha un valore di livello che può essere aumentato e diminuito con le frecce.
Imposta i figli al livello
Se selezioni un dominio o un contenitore AD, puoi cliccare su 'Imposta i figli al livello' per impostare tutti i figli (ricorsivamente) al livello del dominio/contenitore specificato.
Imposta i membri al livello
Se selezioni un gruppo, puoi cliccare su 'Imposta i membri al livello' per impostare tutti i membri (ricorsivamente) al livello del gruppo specificato.
Imposta il livello per i GPO
Se clicchi su 'Imposta il livello per i GPO', ogni GPO vedrà il proprio livello impostato al livello dell'OU di livello più alto (più vicino allo zero) a cui il GPO è collegato. I GPO non collegati a una OU non vedranno modificato il loro livello.
Ottieni violazioni della suddivisione in livelli
Trova tutte le relazioni nel database BloodHound in cui un oggetto AD ha il controllo su un oggetto AD di un livello superiore (più vicino allo zero).
Vengono generati due file CSV come output:
adobjects-[timestamp].csv: Tutti gli oggetti AD e il livello in cui si trovano.
tiering-violations-[timestamp].csv: Le violazioni della suddivisione in livelli.
Esempio di record nel CSV delle violazioni:
Il primo record è un account di servizio di Tier 1 con permesso di cambiare la password di un account utente di Tier 0. La relazione è ereditata. Sfortunatamente, non è sempre possibile vedere da dove viene ereditata la relazione nei dati di BloodHound, ma puoi verificarlo manualmente controllando i permessi sull'oggetto AD di destinazione in Utenti e Computer. Il secondo record è un gruppo con permesso di modificare un GPO, che è probabilmente collegato a una OU contenente server di Tier 0, dato che è un GPO di Tier 0.
Puoi consultare tutti i tipi di relazione e come vengono sfruttati qui.
Se scopri che un oggetto si trova in un livello troppo alto (più vicino allo zero), dovresti correggerlo in ImproHound e poi verificare le violazioni con questo oggetto come SORGENTE. Se un oggetto si trova in un livello troppo basso (più vicino all'infinito), dovresti correggerlo in ImproHound e verificare le violazioni con l'oggetto come DESTINAZIONE.
Elimina la suddivisione in livelli
Tutte le etichette di livello e i nodi creati da ImproHound nel database BloodHound verranno eliminati.
È importante suddividere correttamente in livelli gli oggetti AD. Se imposti un DC e un utente normale con pochi privilegi come oggetti di Tier 0, ImproHound non troverà che l'accesso amministrativo dell'utente al DC è una violazione della suddivisione. Lo stesso vale se aggiungi entrambi a Tier 2.
I computer vengono suddivisi in livelli in base a quanto critico sarebbe se il computer venisse compromesso.
Gli utenti vengono suddivisi in livelli in base ai computer a cui possono accedere e agli oggetti AD su cui hanno controllo. Un esempio di permesso di controllo potrebbe essere un utente con diritti per modificare GPO collegati a server di Tier 1, il che renderebbe l'utente un oggetto di Tier 1.
Un gruppo appartiene al livello più basso (più vicino all'infinito) dei suoi membri, a meno che il gruppo non abbia membri dannosi, ad esempio un utente normale come membro di Domain Admins.
Esempi: Domain Users è un gruppo di Tier 2 anche se i tuoi utenti di Tier 0 sono membri del gruppo, perché non è l'appartenenza a Domain Users a dare privilegi agli utenti. D'altra parte, il gruppo Domain Admins è un gruppo di Tier 0 perché l'appartenenza a questo gruppo rende gli utenti molto privilegiati. Cloneable Domain Controllers non ha alcun privilegio AD a mia conoscenza, ma dovrebbe contenere solo oggetti di Tier 0, cioè DC, quindi è un gruppo di Tier 0.
Un contenitore appartiene al livello più alto (più vicino allo zero) dei suoi oggetti figlio, o superiore.
Esempio: Hai tutti gli utenti di Tier 0, Tier 1 e Tier 2 nel contenitore Users. Un utente con autorizzazione di Controllo completo sul contenitore Users sarebbe in grado di compromettere tutti gli utenti, inclusi quelli di Tier 0 (tranne alcuni protetti, ma questo non è importante per l'esempio), quindi il contenitore Users deve essere un oggetto di Tier 0.
Il livello di un GPO è determinato dal livello delle OU a cui è collegato. Il GPO appartiene al livello più alto (più vicino allo zero) delle OU a cui è collegato. Usa il pulsante 'Imposta il livello per i GPO' per assicurarti che tutti i GPO seguano questo principio.
Esempio: Un utente con permesso di modificare un GPO collegato a una OU di Tier 1 potrebbe controllare l'appartenenza al gruppo Administrators su tutti i server sotto la OU di Tier 1 modificando il GPO.
neo4j.confRiavvia Neo4j
systemctl restart neo4jnet stop neo4j && net start neo4j (PowerShell: net stop neo4j; net start neo4j)| SourceTier | SourceType | SourceName | SourceDistinguishedname | Relation | IsInherited | TargetTier | TargetType | TargetName | TargetDistinguishedname |
|---|
| Tier1 | User | [email protected] | CN=svc-monitor,CN=Users,DC=hot,DC=local | ForceChangePassword | True | Tier0 | User | [email protected] | CN=T0_JBK,CN=Users,DC=hot,DC=local |
| Tier2 | Group | [email protected] | CN=Wrk-Admins,CN=Groups,DC=hot,DC=local | GenericWrite | Tier0 | GPO | [email protected] | CN={6AC1786C-016F-11D2-945F-00C04fB984F9},CN=Policies,CN=System,DC=hot,DC=local |