Gestión de rutas de ataque con BloodHound para defensores
Use BloodHound con fines defensivos: etiquete bien el Tier Zero, encuentre puntos de estrangulamiento, corrija rutas en el orden adecuado y mida la exposición.
La mayoría de los compromisos de Active Directory siguen una ruta, no una única vulnerabilidad. Un grupo del soporte técnico puede restablecer la contraseña de un administrador de servidores. Ese administrador tiene una sesión en un servidor en el que también inició sesión un Domain Admin. Una cuenta de servicio tiene GenericWrite sobre un grupo anidado en otro grupo que controla un GPO vinculado a la OU Domain Controllers. Cada paso es un permiso normal que alguien concedió a propósito. Juntos forman un camino hacia el control del dominio, y los atacantes los encuentran con las mismas herramientas de grafos que tienen los defensores.
BloodHound convierte los datos del directorio en ese grafo. La guía principal sobre ACL lo presenta como herramienta de auditoría. Esta guía explica cómo usarlo en un programa continuo de gestión de rutas de ataque: recopilar con seguridad, definir con precisión el Tier Zero, encontrar los puntos de estrangulamiento, corregir en el orden que elimina más rutas por cambio y medir el progreso.
Recopilar con seguridad
BloodHound Community Edition ingiere datos de SharpHound (AD local) y AzureHound (Entra ID). BloodHound Enterprise añade recopilación continua y puntuación de puntos de estrangulamiento. Entre las alternativas con modelos similares están Semperis Forest Druid (centrada en Tier 0) y Adalanche. El método que sigue se aplica a todas ellas.
Reglas de recopilación para un programa defensivo:
- Cuenta dedicada. Para los datos LDAP basta con un usuario normal del dominio sin derechos adicionales. La recopilación de grupos locales y sesiones funciona mejor con derechos sobre los equipos miembro, pero no use un Domain Admin para obtenerlos. Asigne a la cuenta una contraseña larga y aleatoria, deniéguele el inicio de sesión interactivo y supervise su uso.
- Host dedicado. Ejecute el recopilador desde un host de administración de Tier 0 o una máquina virtual de evaluación bastionada, nunca desde la estación de trabajo de un usuario.
- Avise al SOC. El tráfico de SharpHound (consultas LDAP masivas, enumeración SAMR y de sesiones en muchos hosts) es exactamente lo que sus detecciones deberían alertar. Incluya el host y la cuenta en la lista de permitidos durante la ventana de recopilación, en lugar de ajustar la detección para que deje de verlo.
- Proteja la salida. Los archivos ZIP y la base de datos de BloodHound son un mapa de cómo hacerse con su dominio. Almacénelos cifrados, restrinja el acceso al Tier 0 y al equipo de evaluación, y defina un periodo de retención.
- Recopile sesiones repetidamente. Una única instantánea de sesiones pasa por alto la mayor parte de la exposición. Recopile varias veces a lo largo de una semana o use un recopilador continuo.
Definir el Tier Zero antes de mirar las rutas
Una ruta solo es una ruta de ataque si termina en algo que importa. BloodHound etiqueta de antemano los objetos de Tier Zero evidentes (Domain Admins, Enterprise Admins, controladores de dominio, el objeto de dominio y similares). En las versiones recientes esto se ha convertido en Privilege Zones, con una zona Tier Zero. El etiquetado predeterminado es un punto de partida, no su Tier Zero. Añada todo lo que tenga control sobre el plano de control:
- Los servidores de Entra Connect y su cuenta del conector AD DS, y los servidores ADFS.
- Las CA empresariales de AD CS y las plantillas de certificado que permiten autenticarse como cualquiera (configuraciones incorrectas de tipo ESC1).
- Los servidores y cuentas de copia de seguridad que pueden restaurar o leer copias de seguridad de los DC.
- La administración de hipervisores y almacenamiento que aloja DC virtuales.
- Los sistemas de gestión de configuración y PAM que ejecutan código en los DC o guardan credenciales de Tier 0.
- Los GPO vinculados a la OU Domain Controllers o a la raíz del dominio, y las OU que contienen objetos de Tier 0.
- Las cuentas con derechos de replicación, identificadas en la auditoría de derechos de DCSync.
La lista procede de su inventario de Tier 0. Si el grafo y el inventario no coinciden, uno de los dos está mal, y ambos errores son hallazgos. Todo lo que sea alcanzable desde el Tier Zero con una arista de control es también Tier Zero, lo pretendiera usted o no.
Medir: las consultas que importan
La búsqueda de rutas integrada es útil para explorar. Los programas se basan en un conjunto fijo de consultas guardadas cuyos resultados pueden contarse. Estos ejemplos de Cypher funcionan en la vista de consultas de BloodHound CE. Ajuste el destino a su propio etiquetado de Tier Zero:
// Principals with a direct control edge onto Domain Admins or the domain object.
// Expect built-in admin groups and DCs; everything else needs an owner.
MATCH (n)-[r:GenericAll|GenericWrite|WriteDacl|WriteOwner|Owns|AddMember|AllExtendedRights|DCSync|GetChangesAll]->(t)
WHERE t:Domain OR (t:Group AND t.objectid ENDS WITH '-512')
RETURN n.name, type(r), t.name// Domain Admins with sessions on computers that are not domain controllers
MATCH (c:Computer)-[:HasSession]->(u:User)-[:MemberOf*1..]->(g:Group)
WHERE g.objectid ENDS WITH '-512'
AND NOT (c)-[:MemberOf]->(:Group {name: 'DOMAIN CONTROLLERS@CORP.EXAMPLE.COM'})
RETURN DISTINCT c.name, u.name// Shortest paths from Domain Users to Domain Admins
MATCH p = shortestPath((s:Group)-[*1..]->(t:Group))
WHERE s.objectid ENDS WITH '-513' AND t.objectid ENDS WITH '-512'
RETURN pHaga además un seguimiento semanal de: el número de entidades con alguna ruta hacia el Tier Zero, el porcentaje de usuarios habilitados con una ruta así y el número de aristas distintas de primer grado que entran en el Tier Zero. Esas tres cifras son los KPI de su programa.
Encontrar los puntos de estrangulamiento
Un punto de estrangulamiento es una arista o un nodo por el que pasan muchas rutas. Eliminar una arista de estrangulamiento puede romper cientos de rutas. Eliminar la arista del inicio de una ruta suele romper solo esa. BloodHound Enterprise lo calcula. En CE puede aproximarlo:
- Exporte todas las rutas más cortas desde los grupos de origen grandes (Domain Users, Authenticated Users, Domain Computers) hasta sus objetivos de Tier Zero.
- Cuente cuántas veces aparece cada arista en esas rutas.
- Ordene por recuento y, después, por la proximidad de la arista al Tier Zero.
Pondere el recuento por el tamaño del origen. Una ruta que empieza en Domain Users deja a todas las cuentas de empleados a un correo de phishing del Tier Zero. Una ruta que empieza en una única cuenta de servicio deshabilitada es mucho menos urgente, aunque sea más corta. Anote también qué aristas son estructurales (pertenencia a grupos, ACL, vínculos de GPO) y cuáles son transitorias (sesiones). Las estructurales se corrigen una vez. Las transitorias exigen cambiar la forma de trabajar de las personas y las herramientas.
Las aristas a un salto del Tier Zero casi siempre ganan. Están en todas las rutas que llegan al objetivo a través de ellas, y eliminarlas suele requerir un único cambio de ACL o de pertenencia en un objeto bien conocido.
Orden de corrección
Trabaje en este orden. Cada paso elimina más exposición por cambio que el siguiente.
- Aristas de control hacia el Tier Zero desde fuera de él.
GenericAll,WriteDacl,WriteOwner,Owns,AddMembery derechos de replicación en poder de entidades ajenas al Tier Zero sobre objetos de Tier Zero. Elimínelas o acepte la entidad en el Tier Zero y protéjala en consecuencia. Revise primero AdminSDHolder y la raíz del dominio. - Exposición de credenciales de Tier Zero. Aristas
HasSessionde usuarios de Tier Zero sobre equipos de niveles inferiores. La corrección es operativa: PAW, restricciones de inicio de sesión y directivas de autenticación, no cambios de ACL. - Entidades amplias con control. Cualquier arista que empiece en Everyone, Authenticated Users, Domain Users o Domain Computers. Estas convierten cada cuenta en un punto de partida.
- Control de GPO y OU sobre el Tier Zero. Derechos de escritura sobre los GPO vinculados por encima de objetos de Tier Zero, y escritura de
gPLinksobre esas OU. - Proliferación de administradores locales. La expansión de
AdminToa través de contraseñas de administrador local compartidas o de grupos amplios en el grupo Administrators local. Despliegue Windows LAPS y quite los grupos del dominio de la administración local. - Aristas de delegación y de certificados.
AllowedToDelegate,AllowedToAct,AddKeyCredentialLinky las aristas ESC de AD CS, que se tratan con las guías de cada área.
Para las aristas de ACL, elimine la ACE concreta en lugar de todo el acceso de la entidad. Haga una copia de seguridad del SDDL del objeto antes de cambiarlo:
$dn = 'CN=Tier0-Servers,OU=Groups,OU=Tier0,DC=corp,DC=example,DC=com'
$acl = Get-Acl "AD:\$dn"
$acl.Sddl | Out-File "C:\Tier0\Backup\$(Get-Date -f yyyyMMdd)-Tier0-Servers.sddl"
$acl.Access | Where-Object {
$_.IdentityReference -eq 'CORP\Helpdesk-L2' -and -not $_.IsInherited -and
$_.ActiveDirectoryRights -match 'GenericAll|GenericWrite|WriteDacl|WriteOwner|WriteProperty'
} | ForEach-Object { [void]$acl.RemoveAccessRule($_) }
Set-Acl "AD:\$dn" -AclObject $aclSi la arista es heredada, corríjala en la OU principal donde se define. Compruebe también si el objeto tiene la herencia bloqueada, algo típico de las cuentas afectadas por SDProp.
Verificar
Cada sprint de corrección termina con una recopilación nueva, no con una casilla marcada:
- Vuelva a ejecutar las consultas guardadas. Las aristas concretas que eliminó deben haber desaparecido y el recuento de rutas debe bajar.
- Compruebe que no han aparecido aristas nuevas de primer grado hacia el Tier Zero. Las regresiones suelen proceder de instalaciones de aplicaciones nuevas o de asistentes de delegación.
- Observe la evolución de los KPI. Un recuento decreciente de «entidades con ruta hacia el Tier Zero» es la prueba más clara de que el programa funciona.
Entre recopilaciones, detecte esos mismos cambios en tiempo real. El evento 5136 sobre objetos de Tier Zero (cambios de ACL y de member) y los eventos 4728/4732/4756 de pertenencia a grupos deben alimentar la misma canalización de alertas que el resto de sus detecciones de Tier 0.
Qué se rompe
- Delegaciones de las que la gente había olvidado que dependía. Los equipos del soporte técnico o de aplicaciones pierden los derechos que hay detrás de una ruta. Acuerde la responsabilidad y una vuelta atrás (el SDDL guardado) antes de cada cambio, y elimine en lotes pequeños.
- Hábitos de administración. Eliminar las sesiones de Tier Zero de los servidores miembro implica que los administradores dejen de usar cuentas de Domain Admin para el trabajo con servidores. Proporcione antes cuentas de administración por niveles y PAW, o las sesiones volverán.
- Herramientas de fabricantes con derechos amplios. Los productos de copia de seguridad, IAM y supervisión suelen pedir
GenericAllsobre OU grandes. Acótelos con el fabricante o incorpore el producto al Tier Zero y protéjalo. - El volumen de alertas del SOC durante las ventanas de recopilación, si no se coordina.
Lecturas relacionadas: la guía principal sobre ACL, Tier 0 y acceso privilegiado, y realizar una evaluación con PingCastle para una visión complementaria basada en puntuaciones.
Preguntas frecuentes
¿Es seguro ejecutar SharpHound en producción?
La recopilación consiste en consultas LDAP de solo lectura y, opcionalmente, consultas SMB y RPC a los equipos miembro para obtener sesiones y grupos locales. No cambia nada, pero genera mucho ruido y se parece exactamente al reconocimiento de un atacante. Avise a su SOC, use una cuenta de recopilación dedicada, ejecútela desde un host de Tier 0 o de evaluación dedicado, y proteja los archivos de salida y la base de datos como datos confidenciales, porque son un mapa completo de sus debilidades.
¿Qué diferencia hay entre una ruta de ataque y un hallazgo de configuración incorrecta?
Un hallazgo es un hecho aislado, como que un grupo tenga GenericWrite sobre un usuario. Una ruta de ataque es una cadena de esos hechos que termina en el Tier Zero. Muchos hallazgos son inofensivos por separado, y unos pocos de apariencia inocua se combinan en una ruta desde Domain Users hasta Domain Admins. La gestión de rutas de ataque prioriza según lo que alcanza la cadena y cuántas entidades pueden iniciarla, no según la gravedad de cada eslabón.
¿Con qué frecuencia hay que volver a recopilar las rutas de ataque?
Los datos de ACL y de grupos cambian despacio, así que una recopilación semanal es un buen punto de partida y es lo que da sentido a las métricas de tendencia. Los datos de sesión cambian cada minuto, por lo que una única instantánea subestima la exposición. Recopile sesiones varias veces a lo largo de una semana laborable, o use un recopilador continuo, y vuelva a recopilar siempre después de un sprint de corrección para confirmar que las rutas han desaparecido de verdad.
Gestión de rutas de ataque con BloodHound para defensores