Zum Inhalt

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:

  1. SharpHound: Der Datensammler, der Informationen aus Active Directory sammelt
  2. **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

  1. BloodHound
  2. Verbindung mit der Datenbank Neo4j
  3. Ziehen Sie die ZIP-Datei mit SharpHound-Daten
  4. 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 oder systemctl 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