BloodHound:
cómo se visualizan (y se cortan) las rutas de ataque en Active Directory
Serie Blue Team / Active Directory | unfantasmaenelsistema.com
En el artículo sobre el modelo de seguridad de Active Directory quedó una idea clave: un dominio no cae por un exploit espectacular, sino porque existe una cadena de permisos, pertenencias y sesiones que lleva, paso a paso, desde «un usuario cualquiera» hasta «Domain Admin». El problema es que esa cadena es invisible en las consolas de administración: hay que reconstruirla objeto por objeto, y nadie tiene tiempo para eso.
BloodHound es la herramienta que hizo ese problema visible. Convierte los datos de Active Directory en un grafo dirigido y responde a una pregunta que antes costaba semanas de auditoría: «desde esta cuenta, ¿qué camino más corto me lleva a controlar el dominio?». La usan los equipos ofensivos, pero está pensada tanto para atacar como para defender, y este artículo se centra en lo segundo: cómo leer el grafo, cómo interpretar las rutas y, sobre todo, cómo eliminarlas de tu propio dominio.
Qué aprenderás en este artículo
Por qué los permisos de Active Directory forman un grafo y qué significa eso para la seguridad · Qué recogen los colectores (SharpHound y equivalentes) y qué NO tocan · Los nodos y las aristas que de verdad importan al leer una ruta de ataque · Cómo se interpreta un «shortest path to Domain Admins» sin dramatizar ni minimizar · Uso defensivo: identificar rutas, priorizar cuáles cortar y medir la mejora · Qué aporta BloodHound Community Edition y el análisis continuo frente a la foto puntual
1. La idea de fondo: Active Directory es un grafo
Estamos acostumbrados a ver Active Directory como un árbol: dominios, unidades organizativas, carpetas dentro de carpetas. Esa vista jerárquica es útil para organizar, pero engaña para la seguridad, porque las relaciones que importan a un atacante no son jerárquicas. Son transversales: «este usuario pertenece a este grupo, que es administrador local de este servidor, donde ahora mismo hay una sesión de esta otra cuenta, que puede cambiar la contraseña de esta tercera, que…».
Matemáticamente, eso es un grafo dirigido: un conjunto de nodos (los objetos) unidos por aristas (las relaciones), donde cada arista tiene un sentido. Y si es un grafo, encontrar «la forma más rápida de llegar de A a B» es un problema resuelto desde hace décadas: es la búsqueda del camino más corto, lo mismo que calcula un GPS. BloodHound recoge los datos, los mete en una base de datos de grafos y aplica esas búsquedas. El cambio de perspectiva —de árbol a grafo— es toda la aportación conceptual, y es la que necesita el defensor.
2. Los colectores: qué datos alimentan el grafo
El grafo no sale de la nada. Un colector (el más conocido es SharpHound, y existen equivalentes multiplataforma y en Python) consulta el dominio con las mismas credenciales que tendría cualquier usuario y recopila información que ya es legible para casi todo el mundo:
| Categoría recogida | Ejemplos | De dónde sale |
|---|---|---|
| Objetos y propiedades | Usuarios, equipos, grupos, GPO, OU, dominios, confianzas | Consultas LDAP normales al DC |
| Pertenencias a grupos | Quién está en «Domain Admins», grupos anidados | Atributo memberOf / member en LDAP |
| Permisos (ACL) | Quién tiene GenericAll, WriteDacl, ForceChangePassword sobre qué | Descriptores de seguridad de cada objeto |
| Administradores locales y sesiones | Quién es admin local de un equipo; qué cuentas tienen sesión abierta | SAMR / consultas remotas a cada equipo |
| Configuración peligrosa | Delegación sin restricciones, cuentas sin preautenticación, SPN registrados | Atributos userAccountControl y servicePrincipalName |
Qué NO hace un colector
No explota nada, no cambia nada y no necesita privilegios de administrador: se limita a leer lo que el propio directorio expone a un usuario autenticado. Por eso la recogida es difícil de distinguir de la actividad legítima de administración, aunque genera un volumen anómalo de consultas LDAP y de conexiones SAMR a muchos equipos en poco tiempo, y eso sí se puede detectar (ver sección 6).
3. Nodos y aristas: el vocabulario del grafo
Para leer una ruta hay que entender sus dos ingredientes. Los nodos son los tipos de objeto: usuarios, equipos, grupos, GPO, OU, dominios y contenedores. Las aristas son las relaciones, y son las que cuentan la historia. Estas son las que aparecen una y otra vez en las rutas reales:
| Arista | Qué significa | Por qué es una ruta |
|---|---|---|
| MemberOf | El nodo pertenece a un grupo | Hereda todos los permisos y el poder de ese grupo (y de forma anidada) |
| AdminTo | La cuenta es administrador local de ese equipo | Puede ejecutar código y volcar credenciales de quien tenga sesión ahí |
| HasSession | Esa cuenta tiene una sesión abierta en ese equipo | Sus credenciales están en memoria y pueden ser reutilizadas si el equipo cae |
| GenericAll | Control total sobre el objeto | Puede resetear contraseñas, añadirse a grupos, tomar el control por completo |
| WriteDacl | Puede modificar la lista de control de acceso del objeto | Se concede a sí mismo cualquier permiso sobre ese objeto |
| ForceChangePassword | Puede cambiar la contraseña del usuario sin saber la actual | Se apodera de esa cuenta directamente |
| AddMember | Puede añadir miembros a un grupo | Se mete a sí mismo en un grupo con privilegios |
| AllowedToDelegate | La cuenta puede suplantar a otras vía delegación Kerberos | Actúa en nombre de cuentas más privilegiadas ante otros servicios |
| Owns / WriteOwner | Es propietario del objeto o puede serlo | El propietario siempre puede reescribir los permisos |
La clave defensiva: casi ninguna de estas aristas se ve en «Usuarios y equipos de Active Directory». Los permisos GenericAll o WriteDacl mal puestos —una delegación antigua, un script de aprovisionamiento que dejó permisos de más, un becario al que se le dio control «temporal»— son exactamente lo que BloodHound saca a la superficie y lo que una revisión manual casi nunca encuentra.
4. Consultas: de los botones a Cypher
La interfaz trae consultas predefinidas que cubren el 80% de los casos: «Find all Domain Admins», «Find Shortest Paths to Domain Admins», «Find Principals with DCSync Rights», «Shortest Path from Owned Principals». Se marcan nodos como «owned» (comprometidos, reales o hipotéticos) y se pide el camino desde ahí.
Por debajo, todo son consultas en Cypher, el lenguaje de la base de datos de grafos. No hace falta dominarlo para empezar, pero saber leerlo ayuda a hacer preguntas propias. Una consulta típica busca cuentas con un SPN (candidatas a Kerberoasting) que además tengan un camino hacia un grupo privilegiado:
// Usuarios con SPN (kerberoastables) que llegan a 'Domain Admins'
MATCH (u:User {hasspn:true})
MATCH (g:Group) WHERE g.name STARTS WITH 'DOMAIN ADMINS@'
MATCH p = shortestPath((u)-[*1..]->(g))
RETURN p
// Objetos sobre los que 'Authenticated Users' tiene control peligroso
MATCH p=(n:Group {name:'AUTHENTICATED USERS@LAB.LOCAL'})
-[:GenericAll|WriteDacl|WriteOwner|ForceChangePassword]->(m)
RETURN pEse segundo tipo de consulta —»¿qué puede hacer cualquiera?»— es oro para defender: revela permisos concedidos a grupos gigantes como «Authenticated Users» o «Everyone» que nunca deberían tener control sobre nada.
5. Leer un «shortest path to Domain Admins» sin dramatizar
Cuando aparece una ruta con cinco saltos de un usuario normal a «Domain Admins», el instinto es el pánico. Conviene leerla con calma, salto a salto, porque no todos los tramos tienen el mismo coste para un atacante:
- MemberOf es gratis e instantáneo: si la ruta pasa por pertenencias a grupos anidados, ese tramo ya está «hecho», no hay nada que ejecutar
- ForceChangePassword o AddMember son un único comando y son ruidosos: dejan eventos claros (un cambio de contraseña, una modificación de grupo) que un SIEM bien configurado detecta
- HasSession es oportunista y volátil: depende de que una cuenta privilegiada tenga sesión abierta en un equipo concreto justo ahora; si esa sesión se cierra, el tramo desaparece
- AdminTo hacia un equipo con sesiones de cuentas Tier 0 es el tramo realmente grave: es el punto donde se saltan las capas del modelo de tiering
La conclusión no es «hay una ruta, estamos perdidos», sino «hay una ruta, ¿cuál es el eslabón más barato de romper?». Muchas veces basta con eliminar un permiso ACL sobrante o mover una cuenta de servicio para que la ruta entera se corte.
6. Detectar la recogida de datos
Antes de que exista un grafo, alguien ha tenido que ejecutar un colector dentro del dominio. Esa actividad tiene firmas:
| Señal | Dónde se ve | Por qué es sospechosa |
|---|---|---|
| Consultas LDAP masivas y genéricas | Auditoría de LDAP en el DC, Event ID 1644, ETW | Un enumerado completo del directorio en segundos, no consultas puntuales |
| Conexiones SAMR a muchos equipos | Event ID 4799 (enumeración de grupo local) repetido en toda la flota | Un solo origen preguntando «¿quién es admin local?» a cientos de máquinas |
| Sesiones de red en cascada | Event ID 4624/4672 tipo 3 desde un host a todo el parque | Barrido de sesiones abiertas para trazar HasSession |
| Herramienta conocida en disco o memoria | EDR, reglas YARA, hash de SharpHound y variantes | Firmas públicas bien conocidas de los colectores más habituales |
Honeytokens que ayudan
Una cuenta trampa con un SPN atractivo (algo como «svc-sql-admin») y contraseña larguísima y aleatoria que nadie usa: si alguien pide un ticket para ella o intenta autenticarse, es actividad de reconocimiento por definición. Lo mismo con un objeto al que se le pone un permiso llamativo y una alerta al primer acceso. BloodHound los mostrará en el grafo, y ese es justo el cebo.
7. Uso defensivo: del grafo a un plan de remediación
La forma correcta de usar BloodHound en azul es como herramienta de auditoría periódica sobre tu propio dominio. El ciclo:
- Recoger con el colector desde una cuenta de auditoría y en una ventana acordada, para no confundir a tu propio SOC (o para probar si lo detecta)
- Marcar el Tier 0 real: identifica qué grupos y cuentas son de verdad «game over» (Domain Admins, Enterprise Admins, cuentas con DCSync, admins de la PKI, de la copia de seguridad, de los hipervisores)
- Listar rutas hacia ese Tier 0 desde grupos amplios: «Domain Users», «Authenticated Users», el grupo de todos los empleados
- Priorizar por impacto y esfuerzo: una arista GenericAll de «Domain Users» sobre una OU con cuentas privilegiadas se arregla en cinco minutos y elimina cientos de rutas; empieza por esas
- Corregir: quitar el permiso ACL sobrante, sacar la cuenta del grupo, cerrar la sesión de la cuenta privilegiada en el equipo de bajo nivel y prohibir que vuelva (Authentication Policies), convertir la cuenta de servicio débil en gMSA
- Volver a medir: recoger otra vez y comparar el número de rutas y la longitud del camino más corto. Es una métrica que se puede llevar a un comité
7.1 BloodHound Community Edition y el análisis continuo
La versión Community Edition (CE), gratuita y de código abierto, cambió el modelo: se despliega como un servicio web con su base de datos, ingiere datos de forma continua y ofrece un panel de exposición que puntúa el riesgo de cada activo del Tier 0 y muestra la evolución en el tiempo. Para un equipo defensivo, eso convierte a BloodHound de «foto que hago una vez al año» en «indicador que vigilo cada semana». Existe además una variante comercial con detección de rutas en vivo y recomendaciones guiadas, pero la CE ya cubre de sobra un laboratorio y buena parte de un entorno real.
8. Montarlo en el laboratorio
Para practicar necesitas un dominio de Active Directory de pruebas, aislado y sin salida a producción —por ejemplo, un par de máquinas virtuales (un DC y un cliente Windows) en un rango 192.168.56.x—. Sirve cualquier laboratorio de AD didáctico ya montado, o uno propio con dos o tres cuentas y algún permiso mal puesto a propósito para verlo aparecer en el grafo.
- Levanta BloodHound CE (la forma habitual es con contenedores: la base de datos de grafos, la de aplicación y la interfaz web)
- Ejecuta el colector desde el cliente con una cuenta de usuario normal del dominio de laboratorio
- Sube el resultado a la interfaz y lanza «Shortest Paths to Domain Admins»
- Introduce un fallo (da GenericAll a «Domain Users» sobre una cuenta admin), vuelve a recoger y observa cómo aparece la nueva ruta; corrígelo y confirma que desaparece
Uso legal y ético
BloodHound recopila de forma exhaustiva la configuración de un directorio activo. Ejecutar el colector, enumerar o analizar un Active Directory que no sea tuyo, o para el que no tengas autorización expresa y por escrito (un contrato de auditoría con su alcance definido), es ilegal, aunque la herramienta «solo lea» datos. · En España, el acceso no autorizado a un sistema de información y su mantenimiento contra la voluntad de quien tiene derecho a excluirlo está tipificado en el art. 197 bis del Código Penal; la obtención o facilitación de herramientas concebidas para ello, en el art. 197 ter; y los daños u obstaculización de sistemas ajenos, en el art. 264 y siguientes. · Practica únicamente en un dominio de laboratorio propio y aislado (rango 192.168.56.x sin salida a producción). Si lo usas en tu organización, hazlo con autorización interna, una cuenta de auditoría y una ventana comunicada al equipo de seguridad.
Referencias
SpecterOps — Documentación de BloodHound Community Edition (bloodhound.specterops.io) · SpecterOps — «The Dog Whisperer’s Handbook» y material introductorio de Cypher · Microsoft — Securing privileged access y Enterprise Access Model (aka.ms/privsec) · MITRE ATT&CK — T1069 (Permission Groups Discovery), T1482 (Domain Trust Discovery) · Nuestro artículo sobre el modelo de seguridad de Active Directory y el de Kerberoasting y AS-REP Roasting
Conclusión
BloodHound no descubre vulnerabilidades: descubre decisiones. Cada arista peligrosa del grafo es un permiso que alguien concedió, un grupo en el que alguien entró, una sesión que alguien dejó abierta. Verlas dibujadas como un mapa de carreteras hacia el controlador de dominio es incómodo, pero es la única forma de priorizar bien: no todas las rutas cuestan lo mismo de recorrer ni lo mismo de cortar.
Para un equipo defensivo, el valor está en la repetición: recoger, marcar el Tier 0, listar rutas desde los grupos grandes, cortar los eslabones más baratos y volver a medir. La longitud del camino más corto a «Domain Admins» es una métrica honesta de la salud de tu Active Directory, y subirla es un trabajo que casi nunca requiere comprar nada.
unfantasmaenelsistema.com | Seguridad, sistemas y todo lo que no debería funcionar (pero funciona)

