Seguridad

Auditoría básica de ciberseguridad a un dominio de Microsoft


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.


Powered by WPeMatico

Gustavo Genez

Informático de corazón y apasionado por la tecnología. La misión de este blog es llegar a los usuarios y profesionales con información y trucos acerca de la Seguridad Informática.