BloodHound
Última actualización
¿Te fue útil?
Última actualización
¿Te fue útil?
BloodHound es una herramienta fundamental en auditorías de Active Directory, diseñada para identificar relaciones de confianza y posibles vectores de ataque dentro de un dominio. Permite analizar cómo un atacante podría moverse lateralmente o escalar privilegios aprovechando relaciones ya existentes entre objetos del dominio.
En esta sección vamos a centrarnos en explicar los distintos métodos de recolección de datos disponibles (collectors), comparando su uso y aplicabilidad según el entorno. Además, detallaremos la instalación y diferencias clave entre BloodHound clásico y BloodHound Community Edition (CE).
A lo largo del blog veremos:
Cómo utilizar los diferentes collectors:
SharpHound.exe
: el ejecutable clásico.
SharpHound.ps1
: ideal para entornos con PowerShell habilitado.
bloodhound-python
: pensado para ejecución desde sistemas Linux.
RustHound-CE
: el collector moderno optimizado para BH-CE.
NetExec
: permite extraer relaciones básicas directamente desde Linux.
certipy-ad
: enfocado en la detección de relaciones dentro de entornos con AD CS, exportando en formato compatible con BloodHound CE
Cuándo conviene usar cada uno.
Instalación paso a paso tanto de BloodHound clásico como de BloodHound CE.
Casos prácticos de uso en auditorías reales o entornos simulados.
El objetivo es dejar documentado de forma clara y funcional cómo trabajar con BloodHound, integrarlo en una auditoría y aprovechar al máximo sus capacidades.
Para que BloodHound pueda generar un grafo útil y preciso del dominio, primero es necesario realizar una fase de recolección de información. Esta tarea recae sobre los collectors, que son los encargados de extraer los datos estructurales del entorno Active Directory: relaciones entre usuarios y grupos, sesiones activas, delegaciones, permisos sobre objetos, entre otros.
Actualmente existen varios collectors disponibles, cada uno diseñado para adaptarse a distintos escenarios operativos, niveles de privilegios o restricciones del entorno. Elegir el collector adecuado depende tanto del contexto técnico como de los objetivos del análisis.
En este apartado documentamos los principales collectors utilizados en auditorías de AD, incluyendo su instalación, ejecución y particularidades:
SharpHound.exe
: el ejecutable clásico para entornos Windows.
SharpHound.ps1
: alternativa en PowerShell útil en entornos con políticas más restrictivas.
bloodhound-python
: collector multiplataforma, ideal para recolección desde sistemas Linux.
RustHound-CE
: pensado para BloodHound Community Edition, con un enfoque más modular y eficiente.
Esta sección tiene como objetivo servir de referencia práctica para seleccionar y utilizar el collector más adecuado en función del entorno y los objetivos de la auditoría.
¡MUY IMPORTANTE!
Siempre que consigamos un nuevo usuario, se recomienda lanzar de nuevo el recolector de BloodHound con esas credenciales. Es posible que el primer usuario tuviera permisos limitados para enumerar el dominio, y con el nuevo podamos obtener más relaciones o privilegios que antes no eran visibles.
Por eso, con cada cuenta nueva, lo ideal es ejecutar otro collector y generar un nuevo .zip
con la información actualizada del entorno.
Use
# Autenticación usuario y contraseña
# Autenticación a través de Pass-the-Hash (PtH)
# Autenticación mediante Kerberos (.ccache)
Tenemos que disponer de rust instalado en Kali, podemos seguir el siguiente blog para instalarlo.
Una vez instalado rust en nuestro equipo, instalaremos RustHound-CE a través del siguiente comando.
Use
# Autenticación usuario y contraseña
# Autenticación mediante Kerberos (.ccache)
# Importar SharpHound.ps1 a través de un servidor web que tiene alojado el script PS!, puede ser el nuestro propio de atacante.
# Teniendo el script de PowerShell en la máquina vícitma podemos importarlo de la siguiente manera
Pasaremos el binario al equipo víctima y lo ejecutaremos para recolectar la información.
# Autenticación a través de usuario y contraseña
# Autenticación a través de Pass-the-Hash (PtH)
# Autenticación a través de Kerberos (.ccache)
# Autenticación a través de usuario y contraseña
# Autenticación a través de Pass-the-Hash (PtH)
# Autenticación a través de Kerberos (.ccache)
# Autenticación a través de usuario y contraseña
# Autenticación a través de Pass-the-Hash (PtH)
# Autenticación a través de Kerberos (.ccache)
Actualizaremos los repositorios e instalaremos docker-compose en nuestro equipo.
Nos descargaremos el archivo del docker-compose.yml
con cURL
y comprobaremos que se ha descargado correctamente.
También podemos crear directamente el contenido del docker-compose.yml
.
Iniciaremos los contenedores definidos en el archivo docker-compose.yml
.
Verificaremos que los contenedores se encuentran en ejecución y no ha habido ningún fallo.
Comprobaremos la contraseña inicial en los logs.
Username: admin
Password: Contraseña Inicial obtenida en el punto anterior
Indicaremos la contraseña inicial en el primer campo, y la nueva contraseña que deberá cumplir los requisitos establecidos.
Ya dispondremos de nuestro BloodHound CE
instalado correctamente en nuestro equipo a través de Docker.
En mi caso tengo el archivo docker-compose.yml
en el directorio /opt/BloodHound-CE
. De esta manera sin importar en el directorio donde me encuentre lo levanto directamente con el siguiente comando.
Para iniciar el BloodHound-CE deberemos tener los contenedores ya instalados tal y como se indica en los puntos anteriores.
El comando sudo docker-compose -f /opt/BloodHound-CE/docker-compose.yml up -d
nos sirve para iniciar de cero los contenedores, esto es útil si hay alguna modificación en el docker-compose.yml. En nuestro caso no lo modificaremos, por lo tanto deberemos utilizar el start
para iniciarlo.
Para parar BloodHound-CE
ejecutaremos el siguiente comando, así liberamos los puertos que utiliza, etc. Luego podemos levantarlo con el comando anterior o con sudo docker-compose -f /opt/BloodHound-CE/docker-compose.yml start
Ingresar al apartado de "Administration"
Acceder a la pestaña de "File Ingest"
Click en "Upload File(s)"
Haremos click dentro de la casilla o también podremos arrastrar directamente nuestor .zip o los archivos JSON sueltos.
Seleccioanaremos nuestro archivo comprimido.
Una vez seleccionado nuestro archivo, le daremos a la opción de Upload.
Confirmaremos que nso aparece el siguiente mensaje indicando que se han subido correctamente. Le daremos a Close.
Verificaremos que después de que se integre correctamente los datos recopilados, nos aparece como Complete. En caso de que aparezca otro estado como Cancelled, volver a subir el archivo. Si el problema persiste, es altamente posible que el problema se encuentre en la compatibilidad del Collector utilizado, probar con otro.
Una vez todo subido, podemos hacer uso de BloodHound-CE y navegar en la interfaz.
Cuando necesitemos borrar la "base de datos" que tiene BloodHound-CE de los datos subidos anteriormente, deberemos de eliminar los datos. Podemos hacer una "limpieza profunda" para no dejar rastro de los datos subidos. Para ello, realizaremos los siguientes pasos.
Accederemos al apartado "Administration"
Ingresaremos al apartado de "Database Management"
Marcaremos todas las casillas, para la "limpieza profunda"
Haremos click en la opción de "Proceed"
Ingresaremos la palabra clave para confirmar la eliminación "Please delete my data"
Una vez ingresada la palabra de confirmación, le daremos a "Confirm".
Una vez tengamos subido nuestros datos en BloodHound-CE, podremos navegar en la interfaz accediendo al apartado de "Explore".
Search
En el apartado de SEARCH
podemos buscar por un nodo/objeto que queramos consultar, si no aparece significa que no existe o bien a la hora de recolectar la información no ha aparecido (seguramente por tema de permisos).
Click node info
Al hacer click sobre un nodo/objecto, nos aparecerá en la zona lateral derecha el siguiente menú con distintos submenús del nodo/objeto que investigaremos a continuación.
Disponemos de varios sub apartados, aunque los más relevantes de momento son los siguientes.
En el apartado de Object Information, nos aparecerá toda la información del nodo/objeto. Entre la información que podemos destacar se encuentra la de:
Distinguished Name
Si el usuario dispone de DONT_REQ_PREAUTH (Es decir, susceptible a AS-REP Roast)
Si se encuentra habilitado
Pathfinding
La funcionalidad de Pathfinding en BloodHound CE permite buscar rutas de ataque desde un nodo de inicio hasta un objetivo, evaluando los privilegios y relaciones entre usuarios y grupos.
En este ejemplo, partimos desde OLIVIA@ADMINISTRATOR.HTB
, que tiene un GenericAll
sobre MICHAEL@ADMINISTRATOR.HTB
, lo que permite control total sobre esa cuenta. A su vez, MICHAEL
puede forzar el cambio de contraseña de BENJAMIN@ADMINISTRATOR.HTB
, lo que completa la cadena de ataque.
Este tipo de vista es clave para identificar caminos reales de escalada de privilegios o movimientos laterales dentro del dominio.
Edges
En BloodHound CE, los edges representan las relaciones entre objetos del dominio. Estas relaciones pueden ser de distintos tipos: pertenencia a grupos (MemberOf
), delegaciones (GetChanges
, GenericAll
, etc.), sesiones activas, ACLs y muchas otras.
Cuando hacemos clic en un edge, se abre un panel con más detalle sobre esa relación. Este panel incluye diferentes secciones:
Muestra una descripción técnica de la relación detectada.
Marking Objects as Owned/High Value
BloodHound CE permite marcar manualmente objetos del dominio como Owned (comprometidos) o High Value (objetivos prioritarios). Esto nos ayuda a visualizar mejor el progreso de una auditoría y enfocar los análisis de ruta hacia activos críticos.
Estas marcas se aplican desde el clic derecho sobre el nodo. Una vez marcado, el nodo se resalta visualmente en el grafo con un ícono correspondiente.
Marcamos un nodo como comprometido cuando ya tenemos control sobre él (por ejemplo, si conseguimos credenciales o ejecución remota).
En el panel Group Management podemos gestionar de forma organizada los objetos marcados como Owned
o High Value
. Su uso se resume en los siguientes pasos:
Accedemos al apartado Group Management desde el ícono de personas (barra lateral izquierda).
Seleccionamos el grupo que queremos revisar Owned/High Value
.
Elegimos el entorno, normalmente All Active Directory Domains
.
Aplicamos filtros si queremos ver solo ciertos tipos de nodos (User
, Group
o Computer, etc
).
Se muestra el listado de objetos que pertenecen a ese grupo, junto con su tipo y estado.
Al hacer clic sobre un nodo, se despliega su información detallada en la parte derecha: nombre, SID, SO, último logon, delegaciones, etc.
Esta sección permite llevar control visual de los objetivos comprometidos y planificar próximos movimientos dentro del dominio.
Querys Cypher
En esta sección podemos lanzar queries en lenguaje Cypher para consultar relaciones dentro del grafo de BloodHound. Es muy útil para buscar rutas de ataque o listar objetos críticos de forma más precisa.
BloodHound CE ya trae varias queries predefinidas, como:
Usuarios Kerberoastables
Rutas más cortas hacia Domain Admins
Listado de todos los Domain Admins
Principales con privilegios peligrosos (DCSync, GenericAll, etc.)
También podemos modificar estas queries o crear las nuestras según lo que necesitemos buscar en el entorno.
Custom Querys
BloodHound CE permite crear y guardar nuestras propias queries en Cypher. Esto nos da flexibilidad para buscar relaciones específicas en el grafo y reutilizar esas búsquedas en futuras auditorías.
En el siguiente repositorio de GitHub, disponemos de algunas Querys ya creadas que podemos añadir.
En este caso, ponemos la QUERY que queremos consultar, le daremos a "Save Query".
Le asignaremos un nombre a la QUERY.
Y verificaremos que se nos guarda, al darle click nos realizará la consulta asignada.
Actualizaremos los repositorios e instalaremos BloodHound y Neo4j para que funcione correctamente BH.
Username: neo4j
Password: neo4j
Nos pedirá cambiar la contraseña.
Una vez modificada la contraseña del Neo4j, abriremos BloodHound en segundo plano en una nueva terminal.
Indicaremos al usuario neo4j y las nuevas credenciales modificadas. Podemos guardar las credenciales para que se nos conecte automáticamente.
Una vez inicie sesión, se iniciará correctamente BloodHound y ya podremos navegar dentro de él.
Para iniciar BloodHound una vez ya realizada la instalación es ejecutar los siguientes comandos.
Abriremos BloodHound en segundo plano, si tenemos las credenciales almacenadas con el check, iniciará sesión automáticamente.
Se recomienda antes sincronizar la hora con el DC para evitar problemas de .
Accederemos a y asignaremos las siguientes credenciales:
Para subir nuestra información recolectada a través de los Collectors, deberemos de ingresar a . Una vez nos encontremos en el panel de BloodHound-CE realizaremos los siguientes pasos.
Abriremos en una terminal aparte Neo4j, se nos iniciará la interfaz web en
Accederemos a e ingresaremos las siguientes credenciales por defecto.
En una terminal aparte, abriremos Neo4j. Deberemos dejar que nos aparezca la línea del output en el cual indica que la interfaz web está habilitada en