Zum Inhalt springen

BloodHound Cheat Sheet

Überblick

BloodHound ist ein Open-Source-Tool, das Graphentheorie nutzt, um verborgene und oft unbeabsichtigte Beziehungen in einer Active Directory (AD)-Umgebung aufzudecken. Es hilft Sicherheitsprofis, komplexe Angriffspfade zu identifizieren, die manuell sonst unmöglich zu finden wären. BloodHound besteht aus zwei Hauptkomponenten:

# Download Neo4j from https://neo4j.com/download/
# Extract the ZIP file
# Open command prompt as administrator
cd C:\path\to\neo4j\bin
neo4j.bat install-service
neo4j.bat start
```**SharpHound**: Der Datensammler, der Informationen aus Active Directory sammelt```powershell
# Download BloodHound from https://github.com/BloodHoundAD/BloodHound/releases
# Extract the ZIP file
# Run BloodHound.exe
```**BloodHound GUI**: Die grafische Benutzeroberfläche, die die gesammelten Daten visualisiert und analysiert

Would you like me to continue translating the rest of the document? The translation will follow the same principles you outlined: preserving markdown, keeping technical terms in English, and maintaining structure.```bash
sudo apt update
sudo apt install bloodhound neo4j

# Start Neo4j service
sudo neo4j start

# Launch BloodHound
bloodhound

macOS

# Install Homebrew if not already installed
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Install Neo4j and BloodHound
brew install neo4j bloodhound

# Start Neo4j service
brew services start neo4j

# Launch BloodHound
bloodhound

BloodHound Community Edition (Docker)

# Install BloodHound CLI
curl -L https://github.com/SpecterOps/BloodHound/releases/latest/download/bloodhound-cli-linux-amd64 -o bloodhound-cli
chmod +x bloodhound-cli
sudo mv bloodhound-cli /usr/local/bin/

# Deploy BloodHound CE
bloodhound-cli deploy

Data Collection

SharpHound (Windows Executable)

Basic Collection

# Download SharpHound
Invoke-WebRequest -Uri https://github.com/BloodHoundAD/SharpHound/releases/latest/download/SharpHound.exe -OutFile SharpHound.exe

# Run SharpHound with default collection methods
.\SharpHound.exe --CollectionMethods All

Collection Methods

MethodeBeschreibung
AllSammle alle Daten
GroupGruppengruppenmitgliedschaftsinformationen sammeln
LocalGroupLokale Admin-Informationen sammeln
GPOLocalGroupLokale Admin-Informationen über GPO sammeln
SessionSession-Informationen sammeln
LoggedOnAnmeldeinformationen des Benutzers sammeln
TrustsDomain Trust-Informationen sammeln
ACLACL-Informationen sammeln
ContainerContainer-Informationen sammeln
RDPRemote Desktop Users Informationen sammeln
ObjectPropsObjekteigenschaften sammeln
DCOMDCOM-Informationen sammeln
SPNTargetsSammeln von Service Principal Name-Informationen
PSRemotePowerShell Remoting Informationen sammeln

Advanced Collection Options

# Collect specific data types
.\SharpHound.exe --CollectionMethods Group,LocalGroup,Session,ACL

# Collect data with stealth options (slower but less noisy)
.\SharpHound.exe --CollectionMethods All --Stealth

# Collect data from specific domain
.\SharpHound.exe --CollectionMethods All --Domain example.com

# Collect data with LDAP filtering
.\SharpHound.exe --CollectionMethods All --LdapFilter "(objectClass=user)"

# Collect data from specific OU
.\SharpHound.exe --CollectionMethods All --SearchBase "OU=Servers,DC=example,DC=com"

# Collect data with specific naming context
.\SharpHound.exe --CollectionMethods All --DomainController dc01.example.com

SharpHound PowerShell Module

Basic Collection

# Import SharpHound module
Import-Module .\SharpHound.ps1

# Run SharpHound with default collection methods
Invoke-BloodHound -CollectionMethod All

Advanced Collection Options

# Collect specific data types
Invoke-BloodHound -CollectionMethod Group,LocalGroup,Session,ACL

# Collect data with stealth options
Invoke-BloodHound -CollectionMethod All -Stealth

# Collect data from specific domain
Invoke-BloodHound -CollectionMethod All -Domain example.com

# Collect data with LDAP filtering
Invoke-BloodHound -CollectionMethod All -LdapFilter "(objectClass=user)"

# Collect data from specific OU
Invoke-BloodHound -CollectionMethod All -SearchBase "OU=Servers,DC=example,DC=com"

BloodHound.py (Linux/macOS)

Installation

pip install bloodhound

Basic Collection

bloodhound-python -u username -p password -d domain.local -ns 10.10.10.10 -c All

Advanced Collection Options

# Collect specific data types
bloodhound-python -u username -p password -d domain.local -ns 10.10.10.10 -c Group,LocalAdmin,Session,ACL

# Collect data with Kerberos authentication
bloodhound-python -u username -p password -d domain.local -ns 10.10.10.10 -c All --kerberos

# Collect data with specific domain controller
bloodhound-python -u username -p password -d domain.local -ns 10.10.10.10 -c All --dns-tcp

# Collect data with LDAP SSL
bloodhound-python -u username -p password -d domain.local -ns 10.10.10.10 -c All --secure

AzureHound (Azure AD)

Installation

# Download AzureHound
Invoke-WebRequest -Uri https://github.com/BloodHoundAD/AzureHound/releases/latest/download/azurehound-windows-amd64.zip -OutFile azurehound.zip
Expand-Archive -Path azurehound.zip -DestinationPath .

Basic Collection

# Authenticate to Azure
Connect-AzAccount

# Run AzureHound
.\azurehound.exe -o azure_data.zip

Using BloodHound

Neo4j Database Connection

  • Default URL: bolt://localhost:7687
  • Default credentials: neo4j/neo4j (first login requires password change)

Data Import

  1. Launch BloodHound
  2. Connect to Neo4j database
  3. Drag and drop the ZIP file containing SharpHound data
  4. Wait for import to complete

Pre-Built Queries

BloodHound comes with several pre-built queries accessible from the “Queries” tab:

Finding Privileged Users

  • Find all Domain Admins
  • Find all Enterprise Admins
  • Find Shortest Paths to Domain Admins
  • Find Shortest Paths to High Value Targets

Finding Attack Paths

  • Find Shortest Paths to Domain Admins
  • Find Shortest Paths to High Value Targets
  • Find Shortest Paths to Unconstrained Delegation Systems

Finding Vulnerable Configurations

  • Find Kerberoastable Users
  • Find AS-REP Roastable Users
  • Find Computers with Unconstrained Delegation
  • Find Computers with Constrained Delegation
  • Find Domain Trusts

Custom Cypher Queries

Find Shortest Paths to Domain Admins

MATCH (n:User),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=shortestPath((n)-[*1..]->(m)) RETURN p

Find Kerberoastable Users with Path to Domain Admins

MATCH (n:User \\\\{hasspn:true\\\\}),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=shortestPath((n)-[*1..]->(m)) RETURN p

Find Computers with Local Admin Rights

MATCH (u:User),(c:Computer),p=(u)-[:AdminTo]->(c) RETURN p

Find Users with DCSync Rights

MATCH (u:User),(d:Domain),p=(u)-[:DCSync]->(d) RETURN p

Find Computers with Constrained Delegation

MATCH (c:Computer \\\\{trustedtoauth:true\\\\}) RETURN c
```#### Angriffspfade von bestimmtem Benutzer finden
```cypher
MATCH (n:User \\\\{name:'USER@DOMAIN.LOCAL'\\\\}),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=shortestPath((n)-[*1..]->(m)) RETURN p
```#### Alle Benutzer mit Pfad zu Zielen mit hohem Wert finden
```cypher
MATCH (u:User),(g:Group),p=shortestPath((u)-[*1..]->(g)) WHERE g.highvalue=true RETURN p
```#### Computer finden, auf denen Domänenbenutzer lokale Administratorrechte haben
```cypher
MATCH (g:Group \\\\{name:'DOMAIN USERS@DOMAIN.LOCAL'\\\\}),(c:Computer),p=(g)-[:AdminTo]->(c) RETURN p
```#### Computer mit RDP-Rechten finden
```cypher
MATCH (u:User),(c:Computer),p=(u)-[:CanRDP]->(c) RETURN p
```#### Benutzer mit "Passwort läuft nie ab" finden
```cypher
MATCH (u:User \\\\{pwdneverexpires:true\\\\}) RETURN u
```## Angriffstechniken

### Kerberoasting
Zielt auf Dienstkonten mit SPNs ab, um Service-Ticket-Hashes für Offline-Cracking zu extrahieren.

#### Kerberoastable Benutzer finden
```cypher
MATCH (u:User \\\\{hasspn:true\\\\}) RETURN u
```#### Kerberoastable Benutzer mit Pfad zu Domänenadministratoren finden
```cypher
MATCH (n:User \\\\{hasspn:true\\\\}),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=shortestPath((n)-[*1..]->(m)) RETURN p
```### AS-REP Roasting
Zielt auf Benutzerkonten ab, bei denen die Einstellung "Kerberos-Vorauthentifizierung nicht erforderlich" aktiviert ist.

#### AS-REP Roastable Benutzer finden
```cypher
MATCH (u:User \\\\{dontreqpreauth:true\\\\}) RETURN u
```### ACL-Missbrauch
Nutzt falsch konfigurierte Zugriffssteuerungslisten aus, um erhöhte Berechtigungen zu erlangen.

#### WriteDacl-Berechtigungen finden
```cypher
MATCH (n:User),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=(n)-[:WriteDacl]->(m) RETURN p
```#### GenericAll-Berechtigungen finden
```cypher
MATCH (n:User),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=(n)-[:GenericAll]->(m) RETURN p
```### Uneingeschränkte Delegation
Nutzt Computer mit uneingeschränkter Delegation aus, um Benutzer-Tickets zu stehlen.

#### Computer mit uneingeschränkter Delegation finden
```cypher
MATCH (c:Computer \\\\{unconstraineddelegation:true\\\\}) RETURN c
```### Eingeschränkte Delegation
Nutzt falsch konfigurierte eingeschränkte Delegation aus, um Benutzer zu bestimmten Diensten zu imitieren.

#### Computer mit eingeschränkter Delegation finden
```cypher
MATCH (c:Computer \\\\{trustedtoauth:true\\\\}) RETURN c
```### Ressourcenbasierte eingeschränkte Delegation
Nutzt falsch konfigurierte ressourcenbasierte eingeschränkte Delegation aus, um Zugriff auf Ressourcen zu erlangen.

#### Computer mit ressourcenbasierter eingeschränkter Delegation finden
```cypher
MATCH (c:Computer)-[:AllowedToAct]->(t:Computer) RETURN c,t
```### DCSync
Nutzt Replikationsrechte aus, um eine Domänencontroller-Synchronisation durchzuführen und Passwort-Hashes zu extrahieren.

#### Benutzer mit DCSync-Rechten finden
```cypher
MATCH (u:User),(d:Domain),p=(u)-[:DCSync]->(d) RETURN p
```## BloodHound-Kantentypen

| Edge-Typ | Beschreibung |
|-----------|-------------|
| MemberOf | Benutzer/Gruppe ist Mitglied einer Gruppe |
| AdminTo | Benutzer/Gruppe hat lokale Administratorrechte auf einem Computer |
| HasSession | Benutzer hat eine Sitzung auf einem Computer |
| CanRDP | Benutzer kann per RDP auf einen Computer zugreifen |
| ExecuteDCOM | Benutzer kann DCOM auf einem Computer ausführen |
| AllowedToDelegate | Computer darf an einen Dienst delegieren |
| AddAllowedToAct | Computer können im Namen eines anderen Principals handeln |
| AllowedToAct | Principal ist berechtigt, im Namen eines anderen Principal zu handeln |
| Contains | OU/Container enthält ein Objekt |
| GpLink | GPO ist mit einer OU/Domäne/Site verknüpft |
| HasSIDHistory | Objekt hat SID-Verlauf eines anderen Objekts |
| TrustedBy | Domain wird von einer anderen Domain vertraut |
| DCSync | Benutzer hat Rechte zum Ausführen der DCSync-Operation |
| GenericAll | Benutzer hat volle Kontrolle über ein Objekt |
| GenericWrite | Benutzer kann bestimmte Eigenschaften eines Objekts schreiben |
| WriteDacl | Benutzer kann den Sicherheitsdeskriptor eines Objekts ändern |
| WriteOwner | Benutzer kann die Eigentümerschaft eines Objekts übernehmen |
| AddMember | Benutzer können Mitglieder zu einer Gruppe hinzufügen |
| ForceChangePassword | Benutzer kann das Passwort eines anderen Benutzers ändern |## Betriebssicherheitsüberlegungen

### Minimierung des Entdeckungsrisikos
- Verwenden Sie den `--Stealth`Parameter, um Rauschen zu reduzieren
- Sammeln Sie Daten während der Geschäftszeiten, wenn die Netzwerkaktivität hoch ist
- Vermeiden Sie es, alle Daten auf einmal zu sammeln; verteilen Sie die Sammlung über die Zeit
- Verwenden Sie LDAP-Filterung, um den Umfang der Sammlung zu begrenzen
- Erwägen Sie die Verwendung von BloodHound.py anstelle von SharpHound in sensiblen Umgebungen

### Aufräumen
- Löschen Sie SharpHound-Binärdateien und Ausgabedateien nach der Verwendung
- PowerShell-Verlauf löschen: `Clear-History`
- SharpHound-Modul aus dem Speicher entfernen: `Remove-Module SharpHound`
- Neo4j-Datenbank löschen, wenn die Analyse abgeschlossen ist

## Fehlerbehebung

### Häufige Probleme

#### Neo4j-Verbindungsprobleme
- Stellen Sie sicher, dass der Neo4j-Dienst läuft: `neo4j.bat status`oder 

Would you like me to complete the translations for the remaining empty entries?`systemctl status neo4j`
- Überprüfen Sie, ob die korrekte Bolt-URL verwendet wird (Standard: bolt://localhost:7687)
- Überprüfen Sie die Anmeldedaten (Standard: neo4j/neo4j)
- Prüfen Sie, ob ein anderer Prozess Port 7687 verwendet

#### SharpHound Collection Issues
- Stellen Sie sicher, dass Sie ausreichende Berechtigungen haben (mindestens Domänenbenutzer)
- Versuchen Sie, mit erhöhten Berechtigungen auszuführen
- Überprüfen Sie die Netzwerkverbindung zu Domänencontrollern
- Verifizieren Sie LDAP/LDAPS-Konnektivität
- Versuchen Sie, einen Domänencontroller zu spezifizieren mit
`--DomainController`

#### Datenimport-Probleme
- Stellen Sie sicher, dass die ZIP-Datei gültige JSON-Dateien enthält
- Überprüfen Sie, ob die Neo4j-Datenbank ausreichend Festplattenspeicher hat
- Versuchen Sie, die Datenbank vor dem Import zu leeren:
`MATCH (n) DETACH DELETE n`
- Stellen Sie sicher, dass die ZIP-Datei nicht beschädigt ist

## Ressourcen
- [BloodHound-Dokumentation](https://bloodhound.readthedocs.io/)
- [BloodHound GitHub Repository](https://github.com/BloodHoundAD/BloodHound)
- [SharpHound GitHub Repository](https://github.com/BloodHoundAD/SharpHound)
- [BloodHound Community Edition](https://bloodhound.specterops.io/)
- [SpecterOps Blog](https://posts.specterops.io/)
- [Cypher Query Language Referenz](https://neo4j.com/docs/cypher-manual/current/)