Bluthochdruck Cheat Sheet
Überblick
BloodHound ist ein Open-Source-Tool, das Graph-Theorie verwendet, um versteckte und oft unbeabsichtigte Beziehungen innerhalb einer Active Directory (AD) Umgebung zu offenbaren. Es hilft Sicherheitsexperten, komplexe Angriffspfade zu identifizieren, die sonst nicht manuell zu finden wären. BloodHound besteht aus zwei Hauptkomponenten:
- SharpHound: Der Datensammler, der Informationen aus Active Directory sammelt
- *BloodHound GUI: Die grafische Schnittstelle, die die gesammelten Daten visualisiert und analysiert
Installation
Windows
Neo4j Installation
```powershell
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 ```_
BlutHound Installation
```powershell
Download BloodHound from https://github.com/BloodHoundAD/BloodHound/releases
Extract the ZIP file
Run BloodHound.exe
```_
Linux (Kali)
```bash sudo apt update sudo apt install bloodhound neo4j
Start Neo4j service
sudo neo4j start
Launch BloodHound
bloodhound ```_
macOS
```bash
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)
```bash
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 ```_
Datenerhebung
SharpHound (Windows Ausführbar)
Grunderhebung
```powershell
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 ```_
Erhebungsmethoden
| | Method | Description | |
| --- | --- |
| | All
| Collect all data | |
| | Group
| Collect group membership information | |
| | LocalGroup
| Collect local admin information | |
| | GPOLocalGroup
| Collect local admin information via GPO | |
| | Session
| Collect session information | |
| | LoggedOn
| Collect logged-on user information | |
| | Trusts
| Collect domain trust information | |
| | ACL
| Collect ACL information | |
| | Container
| Collect container information | |
| | RDP
| Collect Remote Desktop Users information | |
| | ObjectProps
| Collect object properties | |
| | DCOM
| Collect DCOM information | |
| | SPNTargets
| Collect Service Principal Name information | |
| | PSRemote
| Collect PowerShell Remoting information | |
Erweiterte Auswahloptionen
```powershell
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 Modul
Grunderhebung
```powershell
Import SharpHound module
Import-Module .\SharpHound.ps1
Run SharpHound with default collection methods
Invoke-BloodHound -CollectionMethod All ```_
Erweiterte Auswahloptionen
```powershell
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
bash
pip install bloodhound
_
Grunderhebung
bash
bloodhound-python -u username -p password -d domain.local -ns 10.10.10.10 -c All
_
Erweiterte Auswahloptionen
```bash
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
```powershell
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 . ```_
Grunderhebung
```powershell
Authenticate to Azure
Connect-AzAccount
Run AzureHound
.\azurehound.exe -o azure_data.zip ```_
Verwenden von BloodHound
Neo4j Datenbankanschluss
- Standard-URL: Bolzen://localhost:7687
- Standard Anmeldeinformationen: neo4j/neo4j (erste Anmeldung erfordert Passwortänderung)
Datenimport
- BloodHound
- Verbindung mit der Datenbank Neo4j
- Ziehen Sie die ZIP-Datei mit SharpHound-Daten
- Warten Sie auf Import komplett
Zurück zur Übersicht
BloodHound kommt mit mehreren vorgefertigten Abfragen aus der Registerkarte "Queries" zugänglich:
Suche Vorrechte Benutzer
- Alle Domain Admins finden
- Alle Enterprise Admins finden
- Finden Sie kürzeste Pfade zu Domain Admins
- Finden Sie kürzeste Wege zu hohen Wertzielen
Angriffswege finden
- Finden Sie kürzeste Pfade zu Domain Admins
- Finden Sie kürzeste Wege zu hohen Wertzielen
- Finden Sie kürzeste Pfade zu Untrainierten Delegationssystemen
Vulnerable Konfigurationen finden
- Finden Sie Kerberoastable Benutzer
- AS-REP finden Roastable Users
- Finden Sie Computer mit Unconstrained Delegation
- Computer mit eingeschränkter Delegation suchen
- Domain Trusts finden
Benutzerdefinierte Cypher Quers
Finden Sie kürzeste Pfade zu Domain Admins
cypher
MATCH (n:User),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=shortestPath((n)-[*1..]->(m)) RETURN p
_
Finden Sie Kerberoastable Benutzer mit Pfad zu Domain Admins
cypher
MATCH (n:User \\\\{hasspn:true\\\\}),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=shortestPath((n)-[*1..]->(m)) RETURN p
_
Finden Sie Computer mit lokalen Admin-Rechten
cypher
MATCH (u:User),(c:Computer),p=(u)-[:AdminTo]->(c) RETURN p
_
Finden Sie Benutzer mit DCSync Rights
cypher
MATCH (u:User),(d:Domain),p=(u)-[:DCSync]->(d) RETURN p
_
Computer mit eingeschränkter Delegation suchen
cypher
MATCH (c:Computer \\\\{trustedtoauth:true\\\\}) RETURN c
_
Finden Sie Angriffspfade von bestimmten Benutzern
cypher
MATCH (n:User \\\\{name:'USER@DOMAIN.LOCAL'\\\\}),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=shortestPath((n)-[*1..]->(m)) RETURN p
_
Finden Sie alle Benutzer mit Pfad zu High Value Targets
cypher
MATCH (u:User),(g:Group),p=shortestPath((u)-[*1..]->(g)) WHERE g.highvalue=true RETURN p
_
Computer suchen Wo Domain Benutzer lokale Admin-Rechte haben
cypher
MATCH (g:Group \\\\{name:'DOMAIN USERS@DOMAIN.LOCAL'\\\\}),(c:Computer),p=(g)-[:AdminTo]->(c) RETURN p
_
Computer mit RDP-Rechten suchen
cypher
MATCH (u:User),(c:Computer),p=(u)-[:CanRDP]->(c) RETURN p
_
Finden Sie Benutzer mit Passwort Nie mehr
cypher
MATCH (u:User \\\\{pwdneverexpires:true\\\\}) RETURN u
_
Angriffstechniken
Kerberoasen
Targets Service Konten mit SPNs zu extrahieren Service Ticket hashes für Offline-Cracking.
Finden von Kerberoastable Benutzer
cypher
MATCH (u:User \\\\{hasspn:true\\\\}) RETURN u
_
Finden von Kerberoastable Benutzer mit Pfad zu Domain Admins
cypher
MATCH (n:User \\\\{hasspn:true\\\\}),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=shortestPath((n)-[*1..]->(m)) RETURN p
_
AS-REP Roasing
Ziele Benutzerkonten mit "Benötigen Sie keine Kerberos Preauthentication" Einstellung aktiviert.
AS-REP finden Roastable Users
cypher
MATCH (u:User \\\\{dontreqpreauth:true\\\\}) RETURN u
_
ACL Missbrauch
Erkunden Sie falsche Zugangskontrolllisten, um erhöhte Privilegien zu gewinnen.
Schreib-Dacl-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
_
Unzuständige Delegation
Erforscht Computer mit nicht eingeschränkter Delegation, um Benutzerkarten zu stehlen.
Computer mit nicht eingeschränkter Delegation finden
cypher
MATCH (c:Computer \\\\{unconstraineddelegation:true\\\\}) RETURN c
_
Zuständige Delegation
Exploits misconfigured constrained delegation to impersonate user to specific services.
Computer mit eingeschränkter Delegation finden
cypher
MATCH (c:Computer \\\\{trustedtoauth:true\\\\}) RETURN c
_
Resource-Based Constrained Delegation
Exploits misskonfigurierte ressourcenbasierte eingeschränkte Delegation, um Zugang zu Ressourcen zu erhalten.
Computer mit Ressourcen-basierter eingeschränkter Delegation suchen
cypher
MATCH (c:Computer)-[:AllowedToAct]->(t:Computer) RETURN c,t
_
DCSync
Erkunden Sie die Replikationsrechte, um Domain-Controller-Synchronisation durchzuführen und Passwort hashes zu extrahieren.
Nutzer mit DCSync-Rechten finden
cypher
MATCH (u:User),(d:Domain),p=(u)-[:DCSync]->(d) RETURN p
_
BloodHound Edge Arten
| | Edge Type | Description | | | --- | --- | | | MemberOf | User/Group is a member of a group | | | | AdminTo | User/Group has local admin rights on a computer | | | | HasSession | User has a session on a computer | | | | CanRDP | User can RDP to a computer | | | | ExecuteDCOM | User can execute DCOM on a computer | | | | AllowedToDelegate | Computer is allowed to delegate to a service | | | | AddAllowedToAct | Computer can act on behalf of another principal | | | | AllowedToAct | Principal is allowed to act on behalf of another principal | | | | Contains | OU/Container contains an object | | | | GpLink | GPO is linked to an OU/Domain/Site | | | | HasSIDHistory | Object has SID history of another object | | | | TrustedBy | Domain is trusted by another domain | | | | DCSync | User has rights to perform DCSync operation | | | | GenericAll | User has full control over an object | | | | GenericWrite | User can write to certain properties of an object | | | | WriteDacl | User can modify the security descriptor of an object | | | | WriteOwner | User can take ownership of an object | | | | AddMember | User can add members to a group | | | | ForceChangePassword | User can change another user's password | |
Operationelle Sicherheitsüberlegungen
Minimierung des Erkennungsrisikos
- Verwenden Sie den
--Stealth
Parameter, um Geräusche zu reduzieren - Daten während der Geschäftszeiten sammeln, wenn die Netzwerkaktivität hoch ist
- Vermeiden Sie das Sammeln aller Daten auf einmal; Verbreitung der Sammlung über die Zeit
- Verwenden Sie LDAP-Filterung, um den Erfassungsbereich zu begrenzen
- Verwenden Sie BloodHound.py anstelle von SharpHound in sensiblen Umgebungen
Reinigung
- Löschen Sie SharpHound Binaries und Ausgabedateien nach Gebrauch
- Klare Leistung Shell History:
Clear-History
_ - Entfernen Sharp Hound Modul aus dem Speicher:
Remove-Module SharpHound
_ - Löschen Sie Neo4j Datenbank, wenn die Analyse abgeschlossen ist
Fehlerbehebung
Gemeinsame Themen
Neo4j Verbindungsprobleme
- Stellen Sie sicher, dass Neo4j-Service läuft:
neo4j.bat status
odersystemctl status neo4j
_ - Überprüfen Sie, ob die richtige Bolzen-URL verwendet wird (Standard: Bolzen://localhost:7687)
- Beglaubigung (Standard: neo4j/neo4j)
- Überprüfen Sie, ob ein anderer Prozess den Port 7687 verwendet
SharpHound Collection Issues
- Stellen Sie sicher, dass Sie ausreichende Privilegien haben (domain user at minimum)
- Versuchen Sie mit erhöhten Privilegien zu laufen
- Überprüfen Sie die Netzwerkverbindung zu Domänencontrollern
- Verifizieren Sie LDAP/LDAPS-Konnektivität
- Geben Sie einen Domänencontroller an
--DomainController
_
Probleme der Datenimporte
- Stellen Sie sicher, dass die ZIP-Datei gültige JSON-Dateien enthält
- Überprüfen Sie, ob die Datenbank Neo4j ausreichend Speicherplatz hat
- Versuchen Sie, die Datenbank vor dem Import zu löschen:
MATCH (n) DETACH DELETE n
_ - Überprüfen Sie, dass die ZIP-Datei nicht beschädigt ist
Ressourcen
- BloodHound Dokumentation
- BloodHound GitHub Repository
- SharpHound GitHub Repository
- [BloodHound Community Edition](_LINK_6___
- [SpecterOps Blog](_LINK_6___
- [Cypher Query Language Reference](__LINK_6___