Sangre Cheat Sheet
Sinopsis
BloodHound es una herramienta de código abierto que utiliza la teoría del gráfico para revelar relaciones ocultas y a menudo no deseadas dentro de un entorno Active Directory (AD). Ayuda a los profesionales de seguridad a identificar caminos complejos de ataque que de otro modo serían imposibles de encontrar manualmente. BloodHound consta de dos componentes principales:
- SharpHound El recopilador de datos que reúne información de Active Directory
- BloodHound GUI: La interfaz gráfica que visualiza y analiza los datos recogidos
Instalación
Windows
Instalación 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
Instalación de sangre
# Download BloodHound from https://github.com/BloodHoundAD/BloodHound/releases
# Extract the ZIP file
# Run BloodHound.exe
Linux (Kali)
sudo apt update
sudo apt install bloodhound neo4j
# Start Neo4j service
sudo neo4j start
# Launch BloodHound
bloodhound
macOS
# 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)
# 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
Data Collection
SharpHound (Windows Executable)
Colección básica
# 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étodos de recogida
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 |
Opciones de colección avanzada
# 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
Módulo SharpHound PowerShell
Colección básica
# Import SharpHound module
Import-Module .\SharpHound.ps1
# Run SharpHound with default collection methods
Invoke-BloodHound -CollectionMethod All
Opciones de colección avanzada
# 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)
Instalación
pip install bloodhound
Colección básica
bloodhound-python -u username -p password -d domain.local -ns 10.10.10.10 -c All
Opciones de colección avanzada
# 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)
Instalación
# 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 .
Colección básica
# Authenticate to Azure
Connect-AzAccount
# Run AzureHound
.\azurehound.exe -o azure_data.zip
Usando BloodHound
Conexión de base de datos Neo4j
- URL predeterminada: bolt://localhost:7687
- Credenciales predeterminados: neo4j/neo4j (primero login requiere cambio de contraseña)
Importación de datos
- Lanzamiento de sangre
- Conectar a la base de datos Neo4j
- Arrastre y suelte el archivo ZIP que contiene datos de SharpHound
- Espera a que la importación termine
Pre-Built Queries
BloodHound viene con varias consultas preconstruidas accesibles desde la pestaña "Preguntas":
Encontrar privilegios Usuarios
- Encuentra todos los administradores de dominio
- Encuentre todos los administradores de la empresa
- Encontrar caminos más cortos a los administradores de dominio
- Encontrar caminos más cortos a objetivos de alto valor
Encontrar caminos de ataque
- Encontrar caminos más cortos a los administradores de dominio
- Encontrar caminos más cortos a objetivos de alto valor
- Encontrar los caminos más cortos para los sistemas de delegación sin restricciones
Encontrar Configuraciones Vulnerables
- Encontrar Kerberoastable Usuarios
- Encuentre AS-REP Usuarios estables
- Buscar Computadoras con Delegación No Conseguida
- Buscar Computadoras con Delegación Constrained
- Encontrar Domain Trusts
Consultas de Cifras Aduanas
Encontrar caminos más cortos a los administradores de dominio
MATCH (n:User),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=shortestPath((n)-[*1..]->(m)) RETURN p
Encontrar Kerberoastable Usuarios con Path to Domain Admins
MATCH (n:User \\\\{hasspn:true\\\\}),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=shortestPath((n)-[*1..]->(m)) RETURN p
Buscar Computadoras con Derechos de Admin Local
MATCH (u:User),(c:Computer),p=(u)-[:AdminTo]->(c) RETURN p
Buscar Usuarios con Derechos de DCSync
MATCH (u:User),(d:Domain),p=(u)-[:DCSync]->(d) RETURN p
Buscar Computadoras con Delegación Constrained
MATCH (c:Computer \\\\{trustedtoauth:true\\\\}) RETURN c
Buscar Senderos de Ataque del Usuario Específico
MATCH (n:User \\\\{name:'USER@DOMAIN.LOCAL'\\\\}),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=shortestPath((n)-[*1..]->(m)) RETURN p
Encontrar todos los usuarios con destinos Path to High Value
MATCH (u:User),(g:Group),p=shortestPath((u)-[*1..]->(g)) WHERE g.highvalue=true RETURN p
Encontrar ordenadores Donde los usuarios de dominio tienen derechos de administrador locales
MATCH (g:Group \\\\{name:'DOMAIN USERS@DOMAIN.LOCAL'\\\\}),(c:Computer),p=(g)-[:AdminTo]->(c) RETURN p
Buscar ordenadores con derechos RDP
MATCH (u:User),(c:Computer),p=(u)-[:CanRDP]->(c) RETURN p
Buscar Usuarios con Contraseña Nunca Explora
MATCH (u:User \\\\{pwdneverexpires:true\\\\}) RETURN u
Técnicas de ataque
Kerberoasting
Las cuentas de servicio de Targets con SPNs para extraer los problemas de ticket de servicio para cracking offline.
Encontrar Kerberoastable Usuarios
MATCH (u:User \\\\{hasspn:true\\\\}) RETURN u
Encontrar Kerberoastable Usuarios con Path to Domain Admins
MATCH (n:User \\\\{hasspn:true\\\\}),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=shortestPath((n)-[*1..]->(m)) RETURN p
AS-REP Roasting
Las cuentas de usuario de objetivos con el ajuste "No requieren preauthentication Kerberos" habilitado.
Encontrar AS-REP Usuarios estables
MATCH (u:User \\\\{dontreqpreauth:true\\\\}) RETURN u
ACL Abuso
Explota listas de control de acceso mal configuradas para obtener privilegios elevados.
Encontrar permisos WriteDacl
MATCH (n:User),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=(n)-[:WriteDacl]->(m) RETURN p
Encontrar GenéricoTodas las Permisiones
MATCH (n:User),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=(n)-[:GenericAll]->(m) RETURN p
Delegación sin restricciones
Explota computadoras con delegación sin restricciones para robar entradas de usuario.
Finding Computers with Unconstrained Delegation
MATCH (c:Computer \\\\{unconstraineddelegation:true\\\\}) RETURN c
Constrained Delegation
Exploits misconfigured restricted delegation to impersonate users to specific services.
Finding Computers with Constrained Delegation
MATCH (c:Computer \\\\{trustedtoauth:true\\\\}) RETURN c
Resource-Based Constrained Delegation
Exploits misconfigured resource-based restricted delegation to gain access to resources.
Finding Computers with Resource-Based Constrained Delegation
MATCH (c:Computer)-[:AllowedToAct]->(t:Computer) RETURN c,t
DCSync
Explota derechos de replicación para realizar la sincronización del controlador de dominio y extraer los hashes de contraseña.
Encontrar usuarios con derechos DCSync
MATCH (u:User),(d:Domain),p=(u)-[:DCSync]->(d) RETURN p
Tipos de borde de sangre
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 |
Consideraciones de seguridad operacional
Reducción del riesgo de detección
- Utilice el parámetro
--Stealth
para reducir el ruido - Recoger datos durante horas de trabajo cuando la actividad de red es alta
- Evite recolectar todos los datos a la vez; difundir la colección con el tiempo
- Use filtrado LDAP para limitar el alcance de la colección
- Considere usar BloodHound.py en lugar de SharpHound en entornos sensibles
Limpieza arriba
- Eliminar los binarios SharpHound y los archivos de salida después del uso
- Clear Power Historia de Shell:
Clear-History
- Remove Sharp Módulo Hound de memoria:
Remove-Module SharpHound
- Eliminar la base de datos Neo4j cuando el análisis está completo
Solución de problemas
Cuestiones comunes
Cuestiones de conexión Neo4j
- Asegurar que el servicio Neo4j esté funcionando:
neo4j.bat status
_ osystemctl status neo4j
- Compruebe si se está utilizando la URL correcta del tornillo (por defecto: bolt://localhost:7687)
- Verificar las credenciales (por defecto: neo4j/neo4j)
- Compruebe si otro proceso está utilizando el puerto 7687
SharpHound Collection Issues
- Asegúrese de tener suficientes privilegios (usuario principal al mínimo)
- Intenta correr con privilegios elevados
- Comprobar conectividad de red a controladores de dominio
- Verificar la conectividad LDAP/LDAPS
- Intente especificar un controlador de dominio con
--DomainController
Cuestiones de importación de datos
- Asegúrese de que el archivo ZIP contiene archivos JSON válidos
- Compruebe si la base de datos Neo4j tiene suficiente espacio en disco
- Intente limpiar la base de datos antes de importar:
MATCH (n) DETACH DELETE n
- Verifique que el archivo ZIP no está dañado