Aller au contenu

Sang Feuille de chaleur

Aperçu général

BloodHound est un outil open-source qui utilise la théorie des graphiques pour révéler des relations cachées et souvent involontaires dans un environnement Active Directory (AD). Il aide les professionnels de la sécurité à identifier des voies d'attaque complexes qui seraient autrement impossibles à trouver manuellement. BloodHound se compose de deux composantes principales:

  1. SharpHound: Le collecteur de données qui recueille des informations de Active Directory
  2. BloodHound GUI: L'interface graphique qui visualise et analyse les données collectées

Installation

Fenêtres

Installation Neo4j

# 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

Installation de sang

# 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

Édition communautaire BloodHound (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

Collecte de données

Pince (Windows exécutable)

Recouvrement de base

# 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

Méthodes de collecte

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

Options avancées de collecte

# 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

Module de PowerShell SharpHound

Recouvrement de base

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

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

Options avancées de collecte

# 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

Recouvrement de base

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

Options avancées de collecte

# 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 .

Recouvrement de base

# Authenticate to Azure
Connect-AzAccount

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

Utilisation de BloodHound

Connexion de la base de données Neo4j

  • URL par défaut: boulon://localhost:7687
  • Identifiants par défaut: neo4j/neo4j (le premier identifiant nécessite un changement de mot de passe)

Importation de données

  1. Lancez BloodHound
  2. Connectez-vous à la base de données Neo4j
  3. Faites glisser et déposez le fichier ZIP contenant les données SharpHound
  4. Attendez que l'importation soit terminée

Demandes de renseignements avant la construction

BloodHound est livré avec plusieurs requêtes préconstruites accessibles depuis l'onglet « requêtes » :

Constatation privilégiée Utilisateur

  • Trouver tous les administrateurs de domaine
  • Trouver tous les administrateurs d'entreprise
  • Trouver les chemins les plus courts vers les administrateurs de domaine
  • Trouver les voies les plus courtes vers des cibles de grande valeur

Trouver des voies d'attaque

  • Trouver les chemins les plus courts vers les administrateurs de domaine
  • Trouver les voies les plus courtes vers des cibles de grande valeur
  • Trouver les voies les plus courtes vers des systèmes de délégation non restreints

Trouver des configurations vulnérables

  • Trouver Kerberoastable Utilisateur
  • Trouver AS-REP Utilisateurs vulnérables
  • Trouver des ordinateurs avec délégation sans contrainte
  • Trouver des ordinateurs avec délégation contrainte
  • Trouver des fiducies de domaine

Demandes de renseignements personnalisées sur le chiffre

Trouver les chemins les plus courts vers les administrateurs de domaine

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

Trouver Kerberoastable Utilisateurs avec chemin vers les administrateurs de domaine

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

Trouver des ordinateurs avec des droits administratifs locaux

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

Trouver des utilisateurs avec DCSync Rights

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

Trouver des ordinateurs avec délégation contrainte

MATCH (c:Computer \\\\{trustedtoauth:true\\\\}) RETURN c

Trouver les voies d'attaque de l'utilisateur spécifique

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

Trouver tous les utilisateurs avec le chemin vers des cibles de haute valeur

MATCH (u:User),(g:Group),p=shortestPath((u)-[*1..]->(g)) WHERE g.highvalue=true RETURN p

Trouver des ordinateurs Où les utilisateurs de domaine ont des droits administratifs locaux

MATCH (g:Group \\\\{name:'DOMAIN USERS@DOMAIN.LOCAL'\\\\}),(c:Computer),p=(g)-[:AdminTo]->(c) RETURN p

Trouver des ordinateurs avec les droits RDP

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

Trouver des utilisateurs avec un mot de passe n'expire jamais

MATCH (u:User \\\\{pwdneverexpires:true\\\\}) RETURN u

Techniques d'attaque

Kerberoasting

Cible les comptes de service avec les SPN pour extraire les hashes de ticket de service pour le cracking hors ligne.

Trouver Kerberoastable Utilisateur

MATCH (u:User \\\\{hasspn:true\\\\}) RETURN u

Trouver Kerberoastable Utilisateurs avec chemin vers les administrateurs de domaine

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

AS-REP Roasting

Cible les comptes utilisateurs avec le paramètre « Ne pas exiger Kerberos preauthentification » activé.

Trouver AS-REP Utilisateurs vulnérables

MATCH (u:User \\\\{dontreqpreauth:true\\\\}) RETURN u

ACL Abus

Exploiter des listes de contrôle d'accès mal configurées pour obtenir des privilèges élevés.

Trouver des autorisations d'écritureDacl

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

Trouver GenericToutes les permissions

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

Délégation sans contrainte

Exploiter des ordinateurs avec une délégation sans contrainte pour voler des billets d'utilisateur.

Trouver des ordinateurs avec délégation sans contrainte

MATCH (c:Computer \\\\{unconstraineddelegation:true\\\\}) RETURN c

Délégation contrainte

Exploit une mauvaise configuration de la délégation contrainte pour imiter les utilisateurs à des services spécifiques.

Trouver des ordinateurs avec délégation contrainte

MATCH (c:Computer \\\\{trustedtoauth:true\\\\}) RETURN c

Délégation contrainte fondée sur les ressources

Exploiter une délégation mal configurée fondée sur les ressources a limité l'accès aux ressources.

Trouver des ordinateurs avec une délégation contrainte basée sur les ressources

MATCH (c:Computer)-[:AllowedToAct]->(t:Computer) RETURN c,t

DCSync

Exploiter les droits de réplication pour effectuer la synchronisation du contrôleur de domaine et extraire les hachages de mot de passe.

Trouver des utilisateurs avec DCSync Rights

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

Types de bordures de sang

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

Considérations relatives à la sécurité opérationnelle

Minimiser le risque de détection

  • Utilisez le paramètre --Stealth_ pour réduire le bruit
  • Collecte de données pendant les heures d'ouverture lorsque l'activité du réseau est élevée
  • Éviter de recueillir toutes les données en même temps; répartir la collecte dans le temps
  • Utiliser le filtrage LDAP pour limiter le champ de collecte
  • Envisager d'utiliser BloodHound.py au lieu de SharpHound dans des environnements sensibles

Nettoyage

  • Supprimer les binaires SharpHound et les fichiers de sortie après utilisation
  • Puissance dégagée Historique de la coquille : Clear-History
  • Supprimer Sharp Module Hound depuis la mémoire: Remove-Module SharpHound
  • Supprimer la base de données Neo4j lorsque l'analyse est terminée

Dépannage

Questions communes

Problèmes de connexion Neo4j

  • Assurez-vous que le service Neo4j fonctionne : neo4j.bat status ou systemctl status neo4j
  • Vérifiez si l'URL de boulon correcte est utilisée (par défaut: boulon://localhost:7687)
  • Vérifier les identifiants (par défaut: neo4j/neo4j)
  • Vérifiez si un autre processus utilise le port 7687

Questions relatives à la collecte de données sur les impacts

  • Assurez-vous d'avoir suffisamment de privilèges (utilisateur du domaine au minimum)
  • Essayez de courir avec des privilèges élevés
  • Vérifier la connectivité réseau aux contrôleurs de domaine
  • Vérifier la connectivité LDAP/LDAPS
  • Essayez de spécifier un contrôleur de domaine avec --DomainController

Questions relatives à l'importation de données

  • S'assurer que le fichier ZIP contient des fichiers JSON valides
  • Vérifiez si la base de données Neo4j a suffisamment d'espace disque
  • Essayez de nettoyer la base de données avant d'importer: MATCH (n) DETACH DELETE n
  • Vérifier que le fichier ZIP n'est pas corrompu

Ressources

  • [Documentation relative à la soute] (LINK_6)
  • [Résistoire GitHub BloodHound] (LINK_6)
  • [Résistoire de GitHub SharpHound] (LINK_6)
  • [Édition communautaire BloodHound] (LINK_6)
  • [SpecterOps Blog] (LINK_6)
  • [Référence de la langue de requête] (LINK_6)