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:
- SharpHound: Le collecteur de données qui recueille des informations de Active Directory
- 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
- Lancez BloodHound
- Connectez-vous à la base de données Neo4j
- Faites glisser et déposez le fichier ZIP contenant les données SharpHound
- 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
ousystemctl 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)