
Offensives GPO-Dumping- und Analyse-Tool, das BloodHound-Daten nutzt und anreichert
# GPOHound
`GPOHound` ist ein Tool zum Dumpen und Analysieren von Group Policy Objects (GPOs), die aus der SYSVOL-Freigabe extrahiert wurden.
Es bietet ein strukturiertes, formalisiertes Format, um Fehlkonfigurationen, unsichere Einstellungen und Privilegieneskalationspfade in Active Directory-Umgebungen aufzudecken.
Das Tool integriert sich in die Neo4j-Datenbank von BloodHound, nutzt diese als LDAP-ähnliche Quelle für Active Directory-Informationen und reichert sie durch Hinzufügen neuer Beziehungen (Kanten) und Knoteneigenschaften basierend auf der Analyse an.
## Funktionen
### Dump
- [x] Dump von GPOs in einem strukturierten JSON- oder Baumformat
- [x] Unterstützt mehrere Domänen
- [x] Löst GPO-Namen mit GPO-GUIDs auf
- [x] Filtert Ausgabe nach GPO-Dateien, GPO-GUIDs und Domänen
- [x] Durchsucht Schlüssel/Wert-Paare mit Regex
### Analyse
- [x] Gruppiert Einstellungen nach betroffenem Objekt (z.B. Lokale Gruppen, Registry)
- [x] Erkennt Mitglieder, die zu lokalen privilegierten Gruppen hinzugefügt wurden
- [x] Erkennt unsichere Registrierungseinstellungen, gespeicherte Anmeldedaten und Privilegienrechte
- [x] Unterstützt Entschlüsselung von VNC-Anmeldedaten und GPP-Passwörtern
- [x] Findet von GPOs betroffene Domänen, Container und OUs
- [x] Ermittelt auf einen bestimmten Benutzer, Computer, OU, Container oder Domäne angewandte GPOs
- [x] Reichert BloodHound-Daten mit Beziehungen und Eigenschaften an
## Installation
### Installieren mit pip
```
git clone "https://github.com/cogiceo/GPOHound"
cd GPOHound
pip install .
```
### Installieren mit pipx
```
pipx install "git+https://github.com/cogiceo/GPOHound"
```
### APOC für Neo4j einrichten
Sie müssen Neo4j APOC für die Anreicherung der BloodHound-Daten einrichten:
- Wenn Sie die Standard-Neo4j-Installation verwenden, können Sie APOC aktivieren, indem Sie die APOC-`jar`-Datei in den Plugin-Ordner kopieren und dann Neo4j neu starten:
```bash
cp /var/lib/neo4j/labs/apoc-* /var/lib/neo4j/plugins/
neo4j restart
```
- Wenn Sie Neo4j mit "Docker Compose" installieren, fügen Sie die Umgebungsvariable `NEO4J_PLUGINS=["apoc"]` hinzu:
```yaml
neo4j:
image: neo4j:latest
environment:
- NEO4J_PLUGINS=["apoc"]
```
> Weitere Details oder alternative Installationsmethoden finden Sie in der offiziellen [APOC-Dokumentation](https://neo4j.com/docs/apoc/current/installation/).
### BloodHound-Abfragen hinzufügen
Um die von `GPOHound` hinzugefügten Beziehungen und Eigenschaften zu visualisieren, können Sie die benutzerdefinierten Abfragen aus der Datei `customqueries.json` in BloodHound importieren. Standardmäßig befindet sich diese Datei unter `~/.config/bloodhound/customqueries.json`.
## Voraussetzungen
### Auslesen von SYSVOL
Laden Sie zunächst die `SYSVOL`-Inhalte vom Domänencontroller herunter.
- Laden Sie das vollständige `SYSVOL` herunter:
```bash
gpohound sysvol --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD
```
- Laden Sie nur die GPOs herunter:
```bash
gpohound sysvol --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD --gpos
```
- Laden Sie mit Ausschlüssen herunter:
```bash
gpohound sysvol --dc $DC_HOST -u $USER -p $PASSWORD --exclude '/Policydefinitions/','/scripts/' --max-size 100
```
### Auslesen von LDAP
Rufen Sie alle erforderlichen Daten von LDAP ab:
```bash
gpohound ldap --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD
```
### BloodHound
Für die BloodHound-Datenanreicherung müssen Sie BloodHound-Daten mit einem Collector wie `bloodhound.py` oder `SharpHound.exe` sammeln und die gesammelten Daten in die BloodHound-Oberfläche importieren.
## Verwendung
Beispiel-GPOHound-Dateien sind in `example.zip` verfügbar. Entpacken Sie sie mit `unzip example.zip`.
Siehe [CONFIG.md](https://github.com/cogiceo/gpohound/blob/main/CONFIG.md) für Anweisungen zum Anpassen von Standardwerten und Konfigurationen.
```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
```
### Analyse
```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
```
## Aktuelle Analyse und Anreicherung
> [!IMPORTANT]
> - Bedingungen wie Sicherheitsfilter, WMI-Filter und Item-Level-Targeting werden nicht interpretiert.
> - GPO-Konflikte werden nicht simuliert, um gültige Einstellungen nicht zu übersehen.
### Lokale Gruppen
- Erkennung von Benutzern, die bei der Anmeldung privilegierten lokalen Gruppen zugewiesen wurden
- Erkennung umbenannter integrierter privilegierter lokaler Gruppen.
- Erkennung von Treuhändern, die privilegierten lokalen Gruppen mithilfe von "Präferenz-Prozessvariablen" (z.B. %ComputerName%, %DomainName%) hinzugefügt wurden
- Erkennung von missbrauchbaren Treuhändern durch `sAMAccountName`-Entführung
- Erkennung aller Treuhänder, die privilegierten lokalen Gruppen hinzugefügt wurden:
| Gruppe | Kante |
|--------------------------------|--------------|
| Administratoren | `AdminTo` |
| Remotedesktopbenutzer | `CanRDP` |
| Verteilte COM-Benutzer | `ExecuteDCOM`|
| Remoteverwaltungsbenutzer | `CanPSRemote`|
| Sicherungsoperatoren | `CanPrivEsc` |
| Druckoperatoren | `CanPrivEsc` |
| Netzwerkkonfigurationsoperatoren| `CanPrivEsc` |
### Registry
| Analyse | Eigenschaft |
|--------------------------------------------------------------------------|---------------------------|
| „Everyone“-Gruppe enthält „Anonyme Anmeldung“ | — |
| SMB-Serversitzungssignierung ist nicht aktiviert | `smbSigningEnabled: false`|
| SMB-Serversitzungssignierung ist nicht erforderlich | `smbSigningRequired: false`|
| NTLMv1-Authentifizierung wird unterstützt | `NTLMv1Support: true` |
| Standardkennwort für automatische Windows-Anmeldung | — |
| VNC-Anmeldedaten (Generisch: RealVNC, TightVNC, TigerVNC, etc.) | `*VNC*PASS*` (verschiedene) |
| In FileZilla gespeicherte Passwörter | — |
| PuTTY-Proxy-Passwort | — |
| Gespeicherte TeamViewer-Anmeldedaten | — |
| WinSCP-gespeicherte Sitzungen | — |
| Gespeichertes Picasa-Passwort | — |
### Privilegienrechte
Standardmäßige privilegierte Treuhänder sowie Dienstkonten mit SIDs, die mit `S-1-5-8` beginnen, werden von der Analyse ausgeschlossen.
| Privileg | Beschreibung | Kante |
| ----------------------------- | -------------------------------------------------------------- | ------------ |
| SeDebugPrivilege | Erlaubt dem Benutzer, jeden Prozess zu debuggen und zu interagieren | `CanPrivEsc` |
| SeBackupPrivilege | Gewährt Zugriff auf vertrauliche Dateien | `CanPrivEsc` |
| SeRestorePrivilege | Umgeht Objektberechtigungen während der Wiederherstellung | `CanPrivEsc` |
| SeAssignPrimaryTokenPrivilege | Ermöglicht Token-Impersonation zur SYSTEM-Eskalation | `CanPrivEsc` |
| SeImpersonatePrivilege | Erlaubt die Erstellung eines Prozesses im Kontext eines anderen Benutzers | `CanPrivEsc` |
| SeTakeOwnershipPrivilege | Erlaubt Benutzern, den Besitz von Systemobjekten zu übernehmen | `CanPrivEsc` |
| SeTcbPrivilege | Gewährt die Fähigkeit, als Teil des Betriebssystems zu agieren | `CanPrivEsc` |
| SeCreateTokenPrivilege | Erlaubt die Erstellung von Authentifizierungstokens | `CanPrivEsc` |
| SeLoadDriverPrivilege | Autorisieret das Laden/Entladen von Treibern | `CanPrivEsc` |
| SeManageVolumePrivilege | Gewährt Volumen- oder Datenträgerverwaltungsberechtigungen | `CanPrivEsc` |
| SeEnableDelegationPrivilege | Aktiviert Computer- und Benutzerkonten, um für die Delegierung vertrauenswürdig zu sein | |
# Verbesserung
- [x] Verbessertes Logging
- [x] Integration von LDAP
- [x] Integration von SMB
- [ ] Parsen der verbleibenden Erweiterungen
- [ ] Weboberfläche
- [ ] Hervorhebung potenzieller Konflikte zwischen GPOs
## GPO-Dokumentation
### SYSVOL und LDAP
- [x] [\[MS-GPAC\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPAC/) Erweiterung zur Überwachungskonfiguration
- [x] [\[MS-GPCAP\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPCAP/) Erweiterung für zentrale Zugriffsrichtlinien
- [x] [\[MS-GPEF\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPEF/) Erweiterung für verschlüsselnde Dateisysteme
- [x] [\[MS-GPFAS\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPFAS/) Datenstruktur für Firewall und erweiterte Sicherheit
- [x] [\[MS-GPFR\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPFR/) Erweiterung für Ordnerumleitung
- [ ] [\[MS-GPIE\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPIE/) Erweiterung für Internet Explorer-Wartung
- [x] [\[MS-GPNAP\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPNAP/) Erweiterung für Netzwerkzugriffsschutz (NAP)
- [x] [\[MS-GPNRPT\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPNRPT/) Datenerweiterung für Namensauflösungsrichtlinientabelle (NRPT)
- [x] [\[MS-GPOL\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPOL/) Kernprotokoll
- [x] [\[MS-GPPREF\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPPREF/) Datenstruktur für Präferenzerweiterungen
- [x] [\[MS-GPREG\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPREG/) Codierung der Registrierungserweiterung
- [x] [\[MS-GPSB\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPSB/) Erweiterung für Sicherheitsprotokoll
- [x] [\[MS-GPSCR\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPSCR/) Codierung der Skripterweiterung
- [x] [\[MS-GPSI\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPSI/) Erweiterung für Softwareinstallation
### LDAP Only
- [x] [\[MS-GPDPC\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPDPC/) Erweiterung für bereitgestellte Druckerverbindungen
- [ ] [\[MS-GPWL\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPWL/) Erweiterung für drahtlose/drahtgebundene Protokolle