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_