Top10 de ataques al Directorio Activo

El pentesting del Directorio Activo es una mina de oro para un red teamer ya que es un sistema crítico en la mayoría de las organizaciones. Cualquier compromiso de credenciales puede ayudar a un atacante a obtener acceso al dominio de la organización. De hecho, los ataques al DA son tan populares que hasta las certificaciones profesionales ya los incluyen en sus planes de estudios.

Harpreet Singh en articulo de Pentest Magazine hablaba del top 10 de los ataques más comunes al Directorio Activo, algo que todo "hijo de vecino" prueba una vez que ha conseguido traspasar el perímetro y posicionarse en algún segmento de la red interna.

* Los escenarios de ataque 1 a 4 no requieren ninguna credencial, mientras que los escenarios de ataque 5 a 10 requieren un conjunto de credenciales con privilegios bajos. Después de obtener las credenciales de los ataques 1 a 4, el atacante puede cambiar a los ataques mencionados en 5 a 10.

1: Envenenamiento LLMNR

LLMNR es el acrónimo de Link Local Multicast Name Resolution y se utiliza para identificar hosts cuando el DNS interno falla. El ataque consiste en levantar un listener y esperar a que un usuario en la red inicie sesión en una unidad compartida o en cualquier otra red objetivo.

Paso 1: iniciar el sniffer cuando está conectado a la red

responder.py -I eth0

Si el usuario escribe mal el nombre, el DNS no podrá resolver el objetivo. En este caso, el atacante quien está escuchando en la red enviará una respuesta falsa y recopilará el nombre de usuario y el hash NTLMv2 para luego intentar crackearlo offline.
 
Paso 2: usar hashcat para intentar crackear los hashes

hashcat -m 5600 hashes.txt rockyou.txt

2: Ataque de relay SMB

En lugar de obtener los hashes y crackearlos offline como el ataque anterior, en este caso se reenvía el hash en la red para acceder a los dispositivos de destino. Si el usuario de dicho hash tiene acceso al objetivo, el atacante que envía las credenciales obtendrá una shell y podrá realizar las acciones post-explotación pertinentes como extraer los hashes de la SAM.

El requisito para que este ataque funcione es que la firma SMB debe estar deshabilitada en la red.

Paso 1: cambiar la configuración del responder para escuchar y no responder.

SMB=Off & HTTP = Off

Paso 2: Iniciar el responder como en el ataque anterior 

responder.py -I eth0

Paso 3: Iniciar el relay SMB

ntlmrelayx.py -tf targets.txt -smb2support


Una vez retransmitida e iniciada sesión, la herramienta descargará los hashes SAM de los usuarios locales en esa máquina.

3: DNS Takeover

En este ataque usaremos una herramienta llamada mitm6 para configurar un Man-in-the-Middle. mitm6 está diseñado para usarse con ntlmrelayx y debe ejecutarse paralelamente. mitm6 falsificará el DNS, causando que los usuarios objetivo se conecten a ntlmrelayx para conexiones HTTP y SMB.

PD: hay que asegurarse de ejecutar ntlmrelayx con la opción -6, lo que hará que escuche tanto en IPv4 como en IPv6.

En caso de que un administrador inicie sesión mientras se ejecuta, creará un usuario de dominio junto con un punto de restauración.

Paso 1: lanzar el MiTM usando la herramienta mitm6 y ejecutar ntlmrelay en paralelo

mitm6 -d <Dominio>
ntlmrelayx.py -6 -t ldaps://DC_IP -wh fakewpad.<Dominio> -l lootme

4: buscar credenciales en Internet

Esto es algo que se puede hacer de forma pasiva sin ser detectado. Un atacante puede buscar en Internet credenciales que se pueden utilizar para obtener acceso a una red objetivo. Podría parecer algo improbable, pero por ejemplo hay muchos scripts y fragmentos de código en github y otros sitios web en el que podemos encontrar credenciales.

Este ataque no está basado puramente en OSINT, pero también necesita cierta interacción para verificar la cuenta. Para verificarla simplemente intentar acceder a una aplicación o ejecutar algún comando enum4linux con las credenciales.

El atacante también puede comprobar si otro usuario del dominio reutiliza la misma contraseña. En caso de que el nombre de usuario sea numérico, intentar rotar el número e iniciar sesión con la misma contraseña.

5 y 6: Pass-the-Hash y Pass-the-Password

Cuando ya tenemos un conjunto de credenciales, podemos "pasar la contraseña" por la red si tenemos acceso a todos los objetivos. Esto se puede verificar por ejemplo con crackmapexec y podemos usar la misma herramienta para volcar los hashes en el servidor para usarlos más tarde. 

Paso 1: Identificación de los servidores a los que se puede acceder utilizando estas cuentas. En caso de que la salida muestre (Pwned), tenemos acceso administrativo en ese servidor. Podemos usar lo mismo para extraer hashes de ese servidor.

crackmapexec smb 10.0.0.0/24 -u <usuario> -d <Dominio> -p <Contraseña>

Paso 2: Obtener los hashes SAM de los servidores donde el usuario tiene acceso

crackmapexec smb 10.0.0.0/24 -u <usuario> -d <Dominio> -p <Contraseña> --sam

Los hashes recopilados se pueden crackear offline usando hashcat. En caso de que solo tengamos el hash NTLM y no la contraseña de texto claro, también podemos intentar usarla en la red para a ver si eso funciona en alguna parte.

Paso 1: reenviar el hash para verificar los servidores donde el usuario tiene acceso

crackmapexec smb 10.0.0.0/24 -u <usuario> -d <Dominio> -H <Hash>

Paso 2: usar el siguiente comando para obtener la shell interactiva en los servidores donde tenemos acceso
(confirmado a partir de los comandos anteriores)

psexec.py <dominio>/<usuario>:<Contraseña>@<IP del servidor>

7: Kerberoasting

Kerberoasting es un conocido ataque que apunta a cuentas de servicio en el dominio. Su belleza radica en que puede ser ejecutado por cualquier persona en la red con un conjunto de credenciales y es solo un ataque de dos pasos: básicamente consiste en tratar de usar los TGS para realizar cracking de las contraseñas de los usuarios offline.

Paso 1: generar tickets de Kerberos con el siguiente comando

GetUsersSPNs.py <Dominio>/<Usuario>:<Contraseña> -dc-ip <IP del controlador de dominio> -request


Paso 2: fuerza bruta en las contraseñas de la cuenta de servicio usando hashcat

hashcat -m 13100 hashes.txt rockyou.txt

8: Bloodhound

La relación entre computadoras, usuarios, privilegios y todos los demás objetos es compleja. Hay formas manuales para extraer la información como usuarios, grupos, sesiones, etc., pero dado el tamaño y la complejidad de la red, se vuelve difícil recopilar y correlacionar toda la información. Bloodhound es una herramienta que puede hacer toda la correlación y ayudar a un atacante a identificar las rutas de ataque.

El requisito para ejecutarlo es acceder a un sistema y ejecutar una herramienta de recopilación de PowerShell llamada sharphound. La salida generada se puede extraer y cargar en Bloodhound, que el atacante puede analizar mientras se toma un café. La herramienta ofrece varias consultas preconstruidas que el atacante puede usar para identificar información, como:

  • Información de la base de datos como Usuarios, Computadoras, Grupos, Sesiones, Relaciones, etc.
  • ¿Qué usuario está conectado dónde?
  • ¿Qué usuario tiene acceso de administrador?

Ruta más corta para llegar al controlador de dominio

Paso 1: recopilación de datos con sharphound.ps1

PS>PowerShell -ep bypass
PS>. .\SharpHound.ps1
PS>Invoke-BloodHound -CollectionMethod -All -Domain <Nombre del dominio> -ZipFileName file.zip


Paso 2: subir a bloodhound

Necesitamos analizar los resultados y normalmente apuntar a los objetivos donde el administrador del dominio ha iniciado sesión y luego intentar llegar allí y extraer los hashes. 

9: Ataque MS14-025

MS14-025 también se denomina ataque GPP, que se aprovecha de una vieja forma de guardar las contraseñas. Las GPP permiten a los administradores crear políticas utilizando las credenciales embebidas. La forma en que se almacenan estas credenciales utiliza una clave que puede verse comprometida y que se puede utilizar para extraer la contraseña independientemente de su complejidad.

El archivo en el que se almacena la contraseña se llama Groups.xml. La idea es buscarlo a través de SYSVOL (findstr /S /I cpassword \\<FQDN>\sysvol\<FQDN>\policies\*.xml) y, una vez localizado, usar la herramienta gppdecrypt para extraer la contraseña.

Si quieres probarlo sólo tienes que jugar con la máquina Active de HackThebox:

<?xml version="1.0" encoding="utf-8"?>
<Groups clsid="{3125E937-EB16-4b4c-9934-544FC6D24D26}">
  <User clsid="{DF5F1855-51E5-4d24-8B1A-D9BDE98BA1D1}" name="active.htb\SVC_TGS" image="2" changed="2018-07-18 20:46:06" uid="{EF57DA28-5F69-4530-A59E-AAB58578219D}">
    <Properties action="U" newName="" fullName="" description="" cpassword="edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ" changeLogon="0" noChange="1" neverExpires="1" acctDisabled="0" userName="active.htb\SVC_TGS"/>
  </User>
</Groups>
gpp-decrypt edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ
GPPstillStandingStrong2k18

10. Ataque Golden Ticket

En este ataque podemos explotar la funcionalidad de Kerberos para generar un ticket que nos permitirá acceder a todos los recursos de la red. Este ataque está estrechamente relacionado con Mimikatz (una herramienta utilizada para extraer las credenciales de la memoria entre otros).

En definitiva usaremos Mimikatz para generar un ticket dorado y luego pasarlo para acceder a cualquier recurso en la red.

Paso 1: abrir Mimikatz y ejecute el siguiente comando para extraer el hash "SID" y "NTLM"

lsadump::lsa /inject /name:krbtgt

Paso 2: generar el golden ticket

kerberos::golden /User:Administrator /domain:<Domain> /<sid> /krbtgt:<NTLM> /id:500 /ptt


Paso 3: obtener acceso

misc::cmd

Mitigaciones

• Mantener parcheados los sistemas y los controladores de dominio.
• Establecer políticas de contraseñas seguras (complejidad, historial, caducidad), incluso para cuentas de servicio y cuentas de invitados
• Asegurarse de no proporcionar la contraseña predeterminada a ningún usuario; la contraseña predeterminada también debe cambiarla
administradores al aprovisionar cuentas.
• Educar a los usuarios y administradores para que sigan la política de seguridad de contraseñas.
• No utilizar cuentas administrativas para actividades no privilegiadas.
• No utilizar cuentas de administrador de dominio para iniciar sesión en sistemas que no sean de confianza.
• Deshabilitar el uso de LLMNR, NBT-NS y GPP.
• Habilitar la firma SMB, siempre que sea posible.

Comentarios