El Directorio Activo (Active Directory) es un componente crítico en la infraestructura de muchas organizaciones, utilizado para gestionar recursos y usuarios en entornos Windows. La auditoría de Directorio Activo es esencial para garantizar la seguridad de la red y la integridad de los datos. A continuación, partiendo del compromiso asumido de que un usuario de dominio ha sido vulnerado, exploraremos los principales vectores de ataque que debemos identificar:
1. Escalada de Privilegios
Local
Aunque no
siempre es necesario, es altamente recomendable partir de permisos de
administración en la máquina atacante. De esta manera el uso de herramientas
será mucho más cómodo. Para ello se pueden utilizar herramientas como PowerUp,
WinPeas o SeatBelt entre otras, para identificar caminos que permitan una
escalada a administrador local.
2. Políticas de Contraseñas
Una política
de contraseñas débil puede ser útil para realizar ataques de tipo passwordspraying
(esto debe realizarse cuidadosamente para no bloquear cuentas) o para el
posterior crackeo de hashes identificados. Además, en caso de que no exista
política de bloqueo tras intentos fallidos, sería posible hacer fuerza bruta
contra todo el dominio sin temor a bloquear las cuentas de usuario.
3. Identificar secretos en
carpetas compartidas.
Una vez se
dispone de un usuario de dominio, es recomendable enumerar las carpetas
compartidas a las que se tiene acceso (por ejemplo, con smbclient). En
ocasiones, se pueden identificar documentos que recogen algún tipo de
credencial, la cual puede ser válida o servir como punto de partida para
adivinar otras contraseñas.
4. Identificación de sistemas
operativos obsoletos
Se debe
verificar que no se estén utilizando sistemas operativos fuera de soporte y/o
desactualizados. Este tipo de equipos pueden ser muy útiles, ya que es
altamente probable que tengan vulnerabilidades explotables con exploits
públicos. Aunque no se traten de objetivos relevantes, acceder a ellos puede
ser interesante para obtener las credenciales que tengan almacenadas. Es muy
importante avisar al responsable de IT de que se va a hacer uso de exploits,
por si estos pudiesen causar una caída en el servicio de la empresa.
5. Identificación de cuentas
privilegiadas
Es muy
interesante realizar un proceso inicial de enumeración en el que se
identifiquen las cuentas objetivo que permitan comprometer la totalidad del
dominio. Durante esta fase de enumeración no solo se buscan las cuentas de
Domain admin, si no que también es importante identificar cuentas con permisos
especiales que permitan llevar a cabo movimientos en el dominio. En puntos
siguientes veremos por qué esto es importante.
6. Identificación y Abuso de
cuentas con Constrained Delegation
En un punto
anterior se indicaba que era necesario identificar cuentas con permisos
elevados, pues este es un tipo concreto de cuenta privilegiada. Estas pueden
tener delegado en ellas el poder de impersonar a cualquier usuario del dominio
para una serie de servicios determinados. Gracias a esto, si se consigue
comprometer una cuenta con constrained delegation, es posible suplantar
a cualquier usuario para servicios de Windows como host, RPCSS, http, wsman, cifs,
ldap, krbtgt o winrm.
8. Identificación y Abuso de Unconstrained
Delegation
Este es otro
tipo de cuenta privilegiada de alto interés. Estas cuentas están autorizadas
para recibir y almacenar los TGT (Ticket Granting Ticket) de kerberos de
cualquier cuenta. Es por ello, que al acceder a ellas sería posible extraer los
tickets almacenados en las mismas. Por otro lado, también es posible realizar
ataques de autenticación forzada sobre esta máquina, es decir, forzar a
cualquier máquina del domino a autenticarse contra la máquina unconstrained
comprometida. De esta manera, la nueva víctima (el controlador de dominio, por
ejemplo) enviaría una copia de su TGT a la máquina unconstrained, siendo
posible su interceptación.
9. Identificar y Abusar
Permisos de DCSync
Seguimos con cuentas privilegiadas interesantes. En este caso es necesario identificar cuentas con permisos de DCSync, es decir, cuentas que tengan los permisos DS-Replication-Get-Changes-All y DS-Replication-Get-Changes. Si conseguimos comprometer una credencial con estos permisos, podremos realizar un ataque de DCSync, o lo que es lo mismo, simular que somos un controlador de dominio que quiere sincronizar su base de datos (ntds.dit) con la del controlador de dominio real. De esta manera se obtendrían todos los hashes del dominio, incluyendo los del Domain Admin.
10. Identificar y Abusar Resource-Based
Constrained Delegation
Si como atacantes podemos identificar una cuenta con permisos de “GenericWrite” o “GenericAll” sobre “ActiveDirectoryRights”, significará que esta cuenta tiene la capacidad de otorgar permisos de constrained delegation a cualquier cuenta del dominio. Esto quiere decir que, si comprometemos esta cuenta, podremos indicar que cualquier cuenta del dominio pueda pedir TGSs (Ticket Garanting Service) para servicios de cualquier máquina del dominio, incluyendo nuestro objetivo principal: el controlador de dominio.
11. Identificar y Abusar
Plantillas de Certificados Vulnerables
Este tipo de ataque se basa en utilizar herramientas como certify o certipy para identificar plantillas de certificados vulnerables en la CA (certificate authority) corporativa. Existen una serie de escenarios vulnerables posibles, que permiten a un atacante solicitar certificados en nombre de otros usuarios, por ejemplo, de un Domain Admin o de cualquier cuenta privilegiada.
12. Identificar Servicios
Vulnerables
Es posible que
en los directorios activos se encuentren máquinas con servicios diferentes a
los propios del directorio activo desplegados (aunque no es una buena práctica),
por ejemplo, Jenkins o servicios SQL. Es importante identificar estos servicios
para comprobar si son vulnerables, ya que en muchas ocasiones pueden servir
como punto de acceso a la máquina en la que se están ejecutando. La situación
ideal para un atacante sería identificar un servicio que poder explotar, y que
este estuviese siendo ejecutado con un usuario administrador local de la
máquina. De esta manera, al conseguir ejecución remota de código mediante el
servicio explotable, sería posible comprometer toda la máquina.
13. Kerberoasting
Kerberoasting
es un ataque que se basa en la explotación de cuentas de servicio que tienen
asociados Service Principal Names (SPNs). Estos SPNs son registros que
asocian un servicio o aplicación específica con una cuenta de servicio en el
Directorio Activo.
El objetivo de
hacer kerberoasting es solicitar tickets de estas cuentas de servicio para,
posteriormente, descifrarlos offline y obtener las contraseñas originales. Esto
es posible ya que parte del ticket solicitado está cifrado utilizando una clave
derivada de la contraseña original.
14. Extracción de Credenciales
Una vez comprometida cualquier máquina, el procedimiento a seguir es extraer de la misma cualquier contraseña almacenada. Para ello se pueden utilizar herramientas como Mimikatz. Estas credenciales pueden ser útiles para realizar movimientos laterales a través del dominio, comprometiendo máquinas en las que los usuarios que se van recolectando sean administradores locales.
Conclusión
Acabamos de ver solo algunas de
las técnicas mas utilizadas durante una auditoría, pero los atacantes descubren
técnicas nuevas todos los días, cada cual más innovadora. Por ello os invitamos
a que investiguéis y descubráis vuestros propios caminos hacia controladores de
dominio.
Ignacio Sánchez, Analista de Ciberseguridad en Zerolynx.
No hay comentarios:
Publicar un comentario