Metodología Active Directory
Last updated
Last updated
Antes de poder enumerar/atacar un Active Directory tenemos que conocer cómo funciona la infraestructura.
Un Active Directory esta estructurado por 3 capas: dominio, trees (arboles), forests (bosques), un dominio abarca una colección de objetos, cómo usuarios o dispositivos. Los trees son grupos de estos dominios unidos por una estructura compartida, y por último los forests, que representan la colección de múltiples arboles, interconectados a través de relaciones de confianza, formando la capa más alta de la estructura de la organización.
Para más información: https://book.hacktricks.xyz/windows-hardening/active-directory-methodology#basic-overview
Antes de empezar a enumerar, tenemos que entender y saber cómo funciona Kerberos y su autenticación.
Kerberos es un protocolo de autenticación, no de autorización, es decir que permite identificar cada usuario el cuál proporcione una contraseña, sin embargo no valida qué recursos o servicios puede acceder ese usuario.
Este funciona en el puerto TCP/88 y UDP/88, este tiene 3 diferentes agentes que trabajan juntos para proporcionar autenticación a Kerberos:
Cliente o Usuario: El que quiere acceder al servicio.
AP (Application Server): el cual ofrece el servicio requerido por el usuario.
KDC (Key Distribution Center): el servicio principal de Kerberos, responsable de realizar los tickets, instalado en el DC (Domain Controller). Esta soportado por AS (Authentication Service) el cual emite los TGS (Ticket Granting Service).
La estructura de Kerberos funciona mediante tickets, estos tickets se entregan a los usuarios para que los utilicen los usuarios para realizar diferentes acciones en el ámbito Kerberos, hay estos 2 tipos:
TGS (Ticket Granting Service): Este es el ticket el cual los usuarios pueden utilizar para autenticarse contra el servicio, está cifrado con una clave de servicio.
TGT (Ticket Granting Ticket): Este es el ticket presentado al KDC () para realizar una petición al TGSs, esta cifrado con una KDC Key.
Un KDC o krbtgt es una clave que se deriva del hash NTLM de la cuenta krbtgt.
Ahora que hemos entendido los conceptos básicos, podemos ya empezar con la enumeración, igualmente si queréis saber más os dejo abajo un artículo muy bueno donde explica todo en más detalle.
Antes de empezar con le metodología, quiero poner por aquí los ataques que podemos encontrarnos cuando nos enfrentamos a un AD, y si le dais click en ellos os llevará a un tutorial de los mismos para cómo se llega a encontrar el ataque, enumerándolo y después efectuando el ataque.
Esta metodología la vamos a impartir de 2 modos, primero enumeración/reconocimiento del Active Directory sin credenciales/sesiones, y después otra enumeración teniendo credenciales/sesiones.
Si no tenemos credenciales ni sesiones podemos efectuar una enumeración de la red, voy a dividirlo en varios puntos.
Escanear la network y detectar que puertos están abiertos, si alguna de las versiones tienen alguna vulnerabilidad.
Después un aspecto muy importante es descubrir el nombre del DC (jackie.local por ejemplo.), y entonces enumerar posibles recursos compartidos, DNS, archivos, impresoras etc...
También encontrar posibles subdominios ffuf -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomain-top2000.txt:FUZZ -u https://FUZZ.jackie.local/
Comprobar si funcionan las NULL sessions o Guest access en el SMB
enum4linux -a -u "" -p "" <DC IP> && enum4linux -a -u "guest" -p "" <DC IP>
smbmap -u "" -p "" -P 445 -H <DC IP> && smbmap -u "guest" -p "" -P 445 -H <DC IP>
smbclient -U '%' -L //<DC IP> && smbclient -U 'guest%' -L //
Podemos enumerar el servicio LDAP (389, 636, 3268, 3269), sobretodo comprobar si tenemos acceso sin credenciales/null session
Abajo os dejo un artículo mucho más extenso.
Lo siguiente ya sería intentar envenenar la red, mediante ataques como Samba Relay, LLMNR/NBT-NS Poisoning, NTLM Relay:
Ya que no tenemos usuarios, podemos utilizar varias técnicas para enumerar usuarios.
Una vez hayas conseguido algún usuario o un listado entonces puedes probar de realizar los siguientes ataques:
ASREP Roast: Si los usuarios en cuestión no tienen el atributo "DONT_REQ_PREATUH" podemos solicitar un mensaje AS_REP para ese usuario que contendrá algunos datos cifrados mediante una derivación de la contraseña del usuario.
Password Spraying: Con una lista de passwords comunes tipo (rockyou.txt)
(Artículo en progreso de extensión)
Si tenemos credenciales validas podemos utilizar la herramienta LDAP Domain Dump, que sirve para enumerar el servicio LDAP sacando la información que recopila en archivos html, json para leerlo en web, es decir necesitaremos por ejemplo apache2 para verlo, lo haríamos de la siguiente manera:
Activamos el apache2 (sudo service apache2 start)
y vamos a la carpeta /var/www/html
Seguidamente ejecutamos el siguiente comando -> sudo python3 /home/j4ckie0x17/Tools/ldapdomaindump/ldapdomaindump.py -u 's4vicorp.local\allimos' -p 'Password1' 192.168.218.142
Si hacemos ls -la veremos que se han creado varios archivos con toda la información obtenida
Vamos a localhost en Firefox o el navegador que tengáis y veremos que están todos los archivos, por ejemplo entramos en domain_users_by_group.html y vemos toda la información en tablas y con varias categorías, es una herramienta muy útil.
También otra manera de hacer este proceso, es utilizando la herramienta rcpclient.
Si conseguimos unas credenciales, podemos realizar una comprobación de las descripciones de los usuarios, ya que a veces puede pasar que se creen usuarios por ejemplo de "test" con las credenciales en la descripción, por ejemplo ese usuario puede tener permisos de administrador.
Puedes realizar este proceso de manera manual o con un pequeño script que automatice el proceso.
Cómo se vería el resultado del automatizado:
Siempre que hayamos comprometido el sistema, hay varias cosas que tenemos que podemos hacer, por ejemplo:
Con crackmapexec podemos habilitar en todos los equipos el RDP: crackmapexec smb 192.168.218.0/24 -u 'Administrador' -p '123456%pass' -M rdp -o ACTION=enable
También algo importante, podemos dumpearnos los hashes del ntds: crackmapexec smb 192.168.218.142 -u 'Administrador' -p '123456%pass' --ntds vss
Una vez obtenidos los hashes ntds podemos hacer un Pass The Hass que es iniciar una sesión con cierto usuario sin proporcionar contraseña: wmiexec.py j4ckie.local/allimos@192.168.218.143 -hashes aad3b435b51404eeaad3b435b51404ee:64f12cddaa88057e06a81b54e73b949b
Varias técnicas que hemos visto en anterioridad, se puede utilizar persistencia para si por ejemplo cambian la contraseña podríamos seguir entrando:
Hacer vulnerable a los usuarios a Kerberoasting
Hacer que los usuarios sean vulnerable a ASREPRoast:
Dar permisos de DCSync a un usuario normal:
También si hemos efecutado el ataque Golden Ticket, podemos obtener persistencia mediante el siguiente proceso Persistence Golden Ticket.
Esta cheatsheet va genial: https://wadcoms.github.io/
Aquí traigo otra cheat sheet que he encontrado que es muy completa, de hecho la más extensa que he encontrado: https://raw.githubusercontent.com/Orange-Cyberdefense/ocd-mindmaps/main/img/pentest_ad_dark_2023_02.svg