
Strumento offensivo di dump e analisi GPO che sfrutta e arricchisce i dati di BloodHound
# GPOHound
`GPOHound` è uno strumento per scaricare e analizzare oggetti Criteri di Gruppo (GPO) estratti dalla condivisione SYSVOL.
Fornisce un formato strutturato e formalizzato per aiutare a individuare configurazioni errate, impostazioni insicure e percorsi di escalation dei privilegi in ambienti Active Directory.
Lo strumento si integra con il database Neo4j di BloodHound, usandolo come una fonte simile a LDAP per le informazioni di Active Directory, arricchendolo allo stesso tempo aggiungendo nuove relazioni (archi) e proprietà dei nodi basate sull'analisi.
## Caratteristiche
### Dump
- [x] Scarica GPO in formato JSON strutturato o ad albero
- [x] Gestisce più domini
- [x] Risolve i nomi GPO con i GUID GPO
- [x] Filtra l'output per file GPO, GUID GPO e domini
- [x] Cerca coppie chiave/valore usando regex
### Analisi
- [x] Raggruppa le impostazioni per oggetto interessato (ad es., Gruppi locali, Registro)
- [x] Rileva membri aggiunti a gruppi locali privilegiati
- [x] Rileva impostazioni di registro insicure, credenziali memorizzate e diritti di privilegio
- [x] Supporta la decifratura delle credenziali VNC e delle password GPP
- [x] Trova domini, contenitori e OU interessati dai GPO
- [x] Ottiene GPO applicati a un utente, computer, OU, contenitore o dominio specifico
- [x] Arricchisce i dati di BloodHound con relazioni e proprietà
## Installazione
### Installare con pip
```
git clone "https://github.com/cogiceo/GPOHound"
cd GPOHound
pip install .
```
### Installare con pipx
```
pipx install "git+https://github.com/cogiceo/GPOHound"
```
### Configurare APOC per Neo4j
È necessario configurare Neo4j APOC per l'arricchimento dei dati di BloodHound:
- Se si utilizza l'installazione standard di Neo4j, è possibile abilitare APOC copiando il file `jar` di APOC nella cartella dei plugin e riavviando Neo4j:
```bash
cp /var/lib/neo4j/labs/apoc-* /var/lib/neo4j/plugins/
neo4j restart
```
- Se si installa Neo4j con "Docker Compose", aggiungere la variabile d'ambiente `NEO4J_PLUGINS=["apoc"]`:
```yaml
neo4j:
image: neo4j:latest
environment:
- NEO4J_PLUGINS=["apoc"]
```
> Per maggiori dettagli o metodi di installazione alternativi, fare riferimento alla [documentazione ufficiale di APOC](https://neo4j.com/docs/apoc/current/installation/).
### Aggiungere Query BloodHound
Per visualizzare le relazioni e le proprietà aggiunte da `GPOHound`, è possibile importare le query personalizzate dal file `customqueries.json` in BloodHound. Per impostazione predefinita, questo file si trova in `~/.config/bloodhound/customqueries.json`.
## Prerequisiti
### Scaricare SYSVOL
Iniziare scaricando i contenuti di `SYSVOL` dal controller di dominio.
- Scaricare l'intero `SYSVOL`:
```bash
gpohound sysvol --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD
```
- Scaricare solo i GPO:
```bash
gpohound sysvol --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD --gpos
```
- Scaricare con esclusioni:
```bash
gpohound sysvol --dc $DC_HOST -u $USER -p $PASSWORD --exclude '/Policydefinitions/','/scripts/' --max-size 100
```
### Scaricare LDAP
Recuperare tutti i dati necessari da LDAP:
```bash
gpohound ldap --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD
```
### BloodHound
Per l'arricchimento dei dati di BloodHound, è necessario raccogliere i dati di BloodHound utilizzando un collector come `bloodhound.py` o `SharpHound.exe` e importare i dati raccolti nell'interfaccia di BloodHound.
## Utilizzo
I file GPOHound di esempio sono disponibili in `example.zip`. Estraggili con `unzip example.zip`.
Vedere [CONFIG.md](https://github.com/cogiceo/gpohound/blob/main/CONFIG.md) per istruzioni sulla personalizzazione dei valori predefiniti e delle configurazioni.
```bash
gpohound --neo4j-user $USER --neo4j-pass $PASS dump
gpohound --neo4j-user $USER --neo4j-pass $PASS analysis
```
### Parse
```bash
gpohound parse "gpos/sysvols/$DOMAIN/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Registry.pol"
```
### Dump
```bash
gpohound dump
gpohound dump --list
gpohound dump --guid 31B2F340-016D-11D2-945F-00C04FB984F9
gpohound dump --policies scripts psscripts
gpohound dump --search 'VNC.*Server' --show
```
### Analysis
```bash
gpohound analysis
gpohound analysis --affected
gpohound analysis --trustee 'SRV01.SEVENKINGDOMS.LOCAL'
gpohound analysis --trustee 'SRV01.SEVENKINGDOMS.LOCAL' --list
gpohound analysis --trustee 'SRV01.SEVENKINGDOMS.LOCAL' --dump
gpohound analysis --enrich
gpohound analysis --enrich-ce
```
## Analisi e arricchimento correnti
> [!IMPORTANT]
> - Condizioni come filtri di sicurezza, filtri WMI e targeting a livello di elemento non vengono interpretate.
> - I conflitti tra GPO non vengono simulati, per evitare di perdere impostazioni valide.
### Gruppi locali
- Rilevamento di utenti assegnati a gruppi locali privilegiati durante l'accesso
- Rilevamento di gruppi locali privilegiati predefiniti rinominati
- Rilevamento di trustee aggiunti a gruppi locali privilegiati utilizzando "Variabili di processo preferenza" (ad es., %ComputerName%, %DomainName%)
- Rilevamento di trustee abusabili tramite hijacking di `sAMAccountName`
- Rilevamento di qualsiasi trustee aggiunto a gruppi locali privilegiati:
| Gruppo | Arco |
|--------------------------------|--------------|
| Administrators | `AdminTo` |
| Remote Desktop Users | `CanRDP` |
| Distributed COM Users | `ExecuteDCOM`|
| Remote Management Users | `CanPSRemote`|
| Backup Operators | `CanPrivEsc` |
| Print Operators | `CanPrivEsc` |
| Network Configuration Operators| `CanPrivEsc` |
### Registro
| Analisi | Proprietà |
|--------------------------------------------------------------------------|---------------------------|
| Il gruppo "Everyone" include "Anonymous Logon" | — |
| La firma della sessione del server SMB non è abilitata | `smbSigningEnabled: false`|
| La firma della sessione del server SMB non è richiesta | `smbSigningRequired: false`|
| L'autenticazione NTLMv1 è supportata | `NTLMv1Support: true` |
| Password predefinita per accesso automatico di Windows | — |
| Credenziali VNC (Generic: RealVNC, TightVNC, TigerVNC, ecc.) | `*VNC*PASS*` (vari) |
| Password memorizzate di FileZilla | — |
| Password proxy di PuTTY | — |
| Credenziali memorizzate di TeamViewer | — |
| Sessioni salvate di WinSCP | — |
| Password memorizzata di Picasa | — |
### Diritti di privilegio
I trustee privilegiati predefiniti, così come gli account di servizio con SID che iniziano con `S-1-5-8`, sono esclusi dall'analisi.
| Privilegio | Descrizione | Arco |
| ----------------------------- | -------------------------------------------------------------- | ------------ |
| SeDebugPrivilege | Consente all'utente di eseguire il debug e interagire con qualsiasi processo | `CanPrivEsc` |
| SeBackupPrivilege | Concede l'accesso a file sensibili | `CanPrivEsc` |
| SeRestorePrivilege | Ignora le autorizzazioni degli oggetti durante il ripristino | `CanPrivEsc` |
| SeAssignPrimaryTokenPrivilege | Abilita l'impersonificazione dei token per l'escalation a SYSTEM | `CanPrivEsc` |
| SeImpersonatePrivilege | Permette la creazione di processi nel contesto di un altro utente | `CanPrivEsc` |
| SeTakeOwnershipPrivilege | Consente di assumere la proprietà di oggetti di sistema | `CanPrivEsc` |
| SeTcbPrivilege | Concede la possibilità di agire come parte del sistema operativo | `CanPrivEsc` |
| SeCreateTokenPrivilege | Permette la creazione di token di autenticazione | `CanPrivEsc` |
| SeLoadDriverPrivilege | Autorizza il caricamento/scaricamento dei driver | `CanPrivEsc` |
| SeManageVolumePrivilege | Concede privilegi di gestione di volumi o dischi | `CanPrivEsc` |
| SeEnableDelegationPrivilege | Abilita gli account computer e utente a essere attendibili per la delega | |
# Miglioramento
- [x] Migliorare la registrazione
- [x] Integrare LDAP
- [x] Integrare SMB
- [ ] Analizzare le estensioni rimanenti
- [ ] Interfaccia web
- [ ] Evidenziare potenziali conflitti tra GPO
## Documentazione GPO
### SYSVOL e LDAP
- [x] [\[MS-GPAC\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPAC/) Estensione di configurazione del controllo
- [x] [\[MS-GPCAP\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPCAP/) Estensione del protocollo per i criteri di accesso centralizzato
- [x] [\[MS-GPEF\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPEF/) Estensione del file system di crittografia
- [x] [\[MS-GPFAS\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPFAS/) Struttura dei dati del firewall e della sicurezza avanzata
- [x] [\[MS-GPFR\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPFR/) Estensione del protocollo di reindirizzamento delle cartelle
- [ ] [\[MS-GPIE\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPIE/) Estensione di manutenzione di Internet Explorer
- [x] [\[MS-GPNAP\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPNAP/) Estensione per la protezione dell'accesso alla rete (NAP)
- [x] [\[MS-GPNRPT\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPNRPT/) Estensione dati della tabella dei criteri di risoluzione dei nomi (NRPT)
- [x] [\[MS-GPOL\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPOL/) Protocollo principale
- [x] [\[MS-GPPREF\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPPREF/) Struttura dati dell'estensione delle preferenze
- [x] [\[MS-GPREG\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPREG/) Codifica dell'estensione del registro
- [x] [\[MS-GPSB\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPSB/) Estensione del protocollo di sicurezza
- [x] [\[MS-GPSCR\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPSCR/) Codifica dell'estensione degli script
- [x] [\[MS-GPSI\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPSI/) Estensione del protocollo di installazione software
### Solo LDAP
- [x] [\[MS-GPDPC\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPDPC/) Estensione per le connessioni di stampante distribuite
- [ ] [\[MS-GPWL\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPWL/) Estensione del protocollo Wireless/Cablaggio