Hoja de Referencia de BloodHound
Descripción General
BloodHound es una herramienta de código abierto que utiliza la teoría de grafos para revelar relaciones ocultas y a menudo no intencionadas dentro de un entorno de Active Directory (AD). Ayuda a los profesionales de seguridad a identificar rutas de ataque complejas que de otro modo serían imposibles de encontrar manualmente. BloodHound consta de dos componentes principales:
# 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
```**SharpHound**: El recolector de datos que reúne información de Active Directory```powershell
# Download BloodHound from https://github.com/BloodHoundAD/BloodHound/releases
# Extract the ZIP file
# Run BloodHound.exe
```**BloodHound GUI**: La interfaz gráfica que visualiza y analiza los datos recopilados
Would you like me to continue translating the rest of the document? The translation follows the specified rules of keeping technical terms in English, preserving markdown formatting, and maintaining the same structure.```bash
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)
Basic Collection
# 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
Collection Methods
| Método | Descripción |
|---|---|
All | Recopilar todos los datos |
Group | Recopilar información de membresía de grupo |
LocalGroup | Recopilar información de administrador local |
GPOLocalGroup | Recopilar información de administrador local a través de GPO |
Session | Recopilar información de sesión |
LoggedOn | Recopilar información de usuario con sesión iniciada |
Trusts | Recopilar información de confianza de dominio |
ACL | Recopilar información de ACL |
Container | Recopilar información de contenedores |
RDP | Recopilar información de usuarios de Remote Desktop |
ObjectProps | Recopilar propiedades de objeto |
DCOM | Recopilar información de DCOM |
SPNTargets | Recopilar información de Service Principal Name |
PSRemote | Recopilar información de PowerShell Remoting |
Advanced Collection Options
# 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 Module
Basic Collection
# Import SharpHound module
Import-Module .\SharpHound.ps1
# Run SharpHound with default collection methods
Invoke-BloodHound -CollectionMethod All
Advanced Collection Options
# 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
Basic Collection
bloodhound-python -u username -p password -d domain.local -ns 10.10.10.10 -c All
Advanced Collection Options
# 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 .
Basic Collection
# Authenticate to Azure
Connect-AzAccount
# Run AzureHound
.\azurehound.exe -o azure_data.zip
Using BloodHound
Neo4j Database Connection
- Default URL: bolt://localhost:7687
- Default credentials: neo4j/neo4j (first login requires password change)
Data Import
- Launch BloodHound
- Connect to Neo4j database
- Drag and drop the ZIP file containing SharpHound data
- Wait for import to complete
Pre-Built Queries
BloodHound comes with several pre-built queries accessible from the “Queries” tab:
Finding Privileged Users
- Find all Domain Admins
- Find all Enterprise Admins
- Find Shortest Paths to Domain Admins
- Find Shortest Paths to High Value Targets
Finding Attack Paths
- Find Shortest Paths to Domain Admins
- Find Shortest Paths to High Value Targets
- Find Shortest Paths to Unconstrained Delegation Systems
Finding Vulnerable Configurations
- Find Kerberoastable Users
- Find AS-REP Roastable Users
- Find Computers with Unconstrained Delegation
- Find Computers with Constrained Delegation
- Find Domain Trusts
Custom Cypher Queries
Find Shortest Paths to Domain Admins
MATCH (n:User),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=shortestPath((n)-[*1..]->(m)) RETURN p
Find Kerberoastable Users with Path to Domain Admins
MATCH (n:User \\\\{hasspn:true\\\\}),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=shortestPath((n)-[*1..]->(m)) RETURN p
Find Computers with Local Admin Rights
MATCH (u:User),(c:Computer),p=(u)-[:AdminTo]->(c) RETURN p
Find Users with DCSync Rights
MATCH (u:User),(d:Domain),p=(u)-[:DCSync]->(d) RETURN p
Find Computers with Constrained Delegation
MATCH (c:Computer \\\\{trustedtoauth:true\\\\}) RETURN c
```#### Encontrar Rutas de Ataque desde Usuario Específico
```cypher
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 Ruta a Objetivos de Alto Valor
```cypher
MATCH (u:User),(g:Group),p=shortestPath((u)-[*1..]->(g)) WHERE g.highvalue=true RETURN p
```#### Encontrar Computadoras Donde Usuarios de Dominio Tienen Derechos de Administrador Local
```cypher
MATCH (g:Group \\\\{name:'DOMAIN USERS@DOMAIN.LOCAL'\\\\}),(c:Computer),p=(g)-[:AdminTo]->(c) RETURN p
```#### Encontrar Computadoras con Derechos RDP
```cypher
MATCH (u:User),(c:Computer),p=(u)-[:CanRDP]->(c) RETURN p
```#### Encontrar Usuarios con Contraseña que Nunca Expira
```cypher
MATCH (u:User \\\\{pwdneverexpires:true\\\\}) RETURN u
```## Técnicas de Ataque
### Kerberoasting
Apunta a cuentas de servicio con SPNs para extraer hashes de tickets de servicio para descifrado sin conexión.
#### Encontrar Usuarios Kerberoasteables
```cypher
MATCH (u:User \\\\{hasspn:true\\\\}) RETURN u
```#### Encontrar Usuarios Kerberoasteables con Ruta a Administradores de Dominio
```cypher
MATCH (n:User \\\\{hasspn:true\\\\}),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=shortestPath((n)-[*1..]->(m)) RETURN p
```### AS-REP Roasting
Apunta a cuentas de usuario con la configuración "No requerir preauthenticación de Kerberos" habilitada.
#### Encontrar Usuarios AS-REP Roasteables
```cypher
MATCH (u:User \\\\{dontreqpreauth:true\\\\}) RETURN u
```### Abuso de ACL
Explota listas de control de acceso mal configuradas para obtener privilegios elevados.
#### Encontrar Permisos WriteDacl
```cypher
MATCH (n:User),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=(n)-[:WriteDacl]->(m) RETURN p
```#### Encontrar Permisos GenericAll
```cypher
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 tickets de usuario.
#### Encontrar Computadoras con Delegación Sin Restricciones
```cypher
MATCH (c:Computer \\\\{unconstraineddelegation:true\\\\}) RETURN c
```### Delegación Restringida
Explota la delegación restringida mal configurada para suplantar usuarios a servicios específicos.
#### Encontrar Computadoras con Delegación Restringida
```cypher
MATCH (c:Computer \\\\{trustedtoauth:true\\\\}) RETURN c
```### Delegación de Recursos Restringidos
Explota la delegación de recursos restringidos mal configurada para obtener acceso a recursos.
#### Encontrar Computadoras con Delegación de Recursos Restringidos
```cypher
MATCH (c:Computer)-[:AllowedToAct]->(t:Computer) RETURN c,t
```### DCSync
Explota derechos de replicación para realizar sincronización de controlador de dominio y extraer hashes de contraseña.
#### Encontrar Usuarios con Derechos DCSync
```cypher
MATCH (u:User),(d:Domain),p=(u)-[:DCSync]->(d) RETURN p
```## Tipos de Bordes de BloodHound
| Tipo de Edge | Descripción |
|-----------|-------------|
| MemberOf | User/Group es miembro de un grupo |
| AdminTo | Usuario/Grupo tiene derechos de administrador local en un equipo |
| HasSession | El usuario tiene una sesión en un equipo |
| CanRDP | El usuario puede hacer RDP a un equipo |
| ExecuteDCOM | El usuario puede ejecutar DCOM en un equipo |
| AllowedToDelegate | Computer está permitido delegar a un servicio |
| AddAllowedToAct | Computer puede actuar en nombre de otro principal |
| AllowedToAct | El principal está autorizado a actuar en nombre de otro principal |
| Contains | OU/Container contiene un objeto |
| GpLink | GPO está vinculado a un OU/Dominio/Sitio |
| HasSIDHistory | El objeto tiene historial de SID de otro objeto |
| TrustedBy | El dominio es de confianza por otro dominio |
| DCSync | El usuario tiene derechos para realizar la operación DCSync |
| GenericAll | El usuario tiene control total sobre un objeto |
| GenericWrite | El usuario puede escribir en ciertas propiedades de un objeto |
| WriteDacl | El usuario puede modificar el descriptor de seguridad de un objeto |
| WriteOwner | El usuario puede tomar la propiedad de un objeto |
| AddMember | El usuario puede agregar miembros a un grupo |
| ForceChangePassword | El usuario puede cambiar la contraseña de otro usuario |## Consideraciones de Seguridad Operativa
### Minimizando el Riesgo de Detección
- Usar el parámetro para reducir el ruido
- Recopilar datos durante horas de trabajo cuando la actividad de red es alta
- Evitar recopilar todos los datos de una vez; distribuir la recopilación en el tiempo
- Usar filtrado LDAP para limitar el alcance de la recopilación
- Considerar usar BloodHound.py en lugar de SharpHound en entornos sensibles
### Limpiando
- Eliminar binarios y archivos de salida de SharpHound después de su uso
- Borrar historial de PowerShell:
`--Stealth`
- Eliminar módulo SharpHound de la memoria:
`Clear-History`
- Eliminar base de datos Neo4j cuando el análisis esté completo
## Resolución de Problemas
### Problemas Comunes
#### Problemas de Conexión Neo4j
- Asegurarse de que el servicio Neo4j esté ejecutándose:
`Remove-Module SharpHound`o
Would you like me to complete the remaining translations or clarify any part of the translation?`neo4j.bat status` or `systemctl status neo4j`
- Verificar si se está utilizando la URL de bolt correcta (predeterminado: bolt://localhost:7687)
- Verificar credenciales (predeterminado: neo4j/neo4j)
- Comprobar si otro proceso está utilizando el puerto 7687
#### Problemas de Recopilación de SharpHound
- Asegurarse de tener privilegios suficientes (usuario de dominio como mínimo)
- Intentar ejecutar con privilegios elevados
- Verificar la conectividad de red a los controladores de dominio
- Verificar la conectividad LDAP/LDAPS
- Intentar especificar un controlador de dominio con
`--DomainController`
#### Problemas de Importación de Datos
- Asegurarse de que el archivo ZIP contiene archivos JSON válidos
- Verificar si la base de datos Neo4j tiene suficiente espacio en disco
- Intentar limpiar la base de datos antes de la importación:
`MATCH (n) DETACH DELETE n`
- Verificar que el archivo ZIP no esté dañado
## Recursos
- [Documentación de BloodHound](https://bloodhound.readthedocs.io/)
- [Repositorio de GitHub de BloodHound](https://github.com/BloodHoundAD/BloodHound)
- [Repositorio de GitHub de SharpHound](https://github.com/BloodHoundAD/SharpHound)
- [Edición Comunitaria de BloodHound](https://bloodhound.specterops.io/)
- [Blog de SpecterOps](https://posts.specterops.io/)
- [Referencia del Lenguaje de Consultas Cypher](https://neo4j.com/docs/cypher-manual/current/)