En esta entrada de este blog se presenta algunos de los elementos más importante que tener en cuenta en la auditoria de redes empresariales que utilizan Active Directory (AD) de Microsoft. La amplitud y complejidad de estas redes hacen que los vectores de ataque sean numerosos, por lo que es imposible abordarlos todos.
Ataques NTLM Relay
Los ataques NTLM Relay consisten en interceptar los desafíos de autenticación de una maquina cuando trata de identificarse ante el controlador de dominio u otro recurso de la red. Durante el desafío de autenticación, la maquina envía los hashes Net-NTLM que sirven para tener acceso al recurso deseado. El ataque consiste en interceptar estas solicitudes y hacer de intermediario (MitM) entre la máquina atacada y el servidor, de modo que se controla la comunicación y se puede acceder a los mismos recursos que tiene esa máquina.
El mecanismo de autenticación que utilizan los hashes Net-NTLM es independiente del protocolo al que va dirigido, SMB, SMTP, HTTP, etc., por lo que se pueden realizar ataques de relay específicos para cada protocolo.
Esta herramienta escucha las peticiones de recursos que se realizan en la red. En el caso de recursos SMB, cuando el equipo desea acceder a uno de estos recursos utiliza los protocolos LLMNR (Link Local Multicast Name Resolution) y NBT-NS (NetBios TCP/IP Name Service) para resolver nombres de dominio o nombres de NetBios.
En entornos empresariales se realizan consultas SMB constantemente; un caso que sucede habitualmente es que en un momento dado un recurso compartido no está accesible en la red, bien por que el servidor no está disponible, bien por que se ha eliminado, o por cualquier otro motivo. El equipo que tiene la unidad compartida montada consultará constantemente a través de la red mediante LLMNR y NBT-NS si algún dispositivo conoce la IP de este recurso. Está herramienta captura y responde a estas peticiones haciéndose pasar por el recurso deseado para recibir los hashes Net-NTLM de autenticación. Está tecnica se la conoce como LLMNR Poisoning.
En un entorno real con muchos más servicios y equipos se pueden obtener numerosos hashes. Además, si los usuarios con roles de administrador hacen este tipo de tareas se obtendrían también estos hashes.
Se puede usar en conjunción con la herramienta ntlmrelayx.py, incluida en la librería impacket, para realizar un ataque NTLM Relay.
Existen otras herramientas en caso de que el ataque NTLM Relay no sea posible o no tenga éxito. Los hashes Net-NTMLv2 no sirven para nada si no se consiguen crackear y obtener las contraseñas originales de los usuarios. Por tanto, si la política de contraseñas y las contraseñas empleadas por todos los usuarios es adecuada, resultara imposible recuperar las contraseñas originales. Sin embargo, esto no suele ser lo habitual.
Si la política de contraseñas es adecuada y no es posible crackear los hashes Net-NTLM capturados, todavía quedan algunas opciones.
La primera opción es utilizar responder como servidor WPAD (Web Proxy Auto Discovery Protocol) y forzar la autenticación básica de los usuarios para obtener las contraseñas en texto plano. El protocolo WPAD, que suele estar activado por defecto en el dominio, permite a los navegadores web de los usuarios detectar automáticamente servidores proxy en la red para acceder a Internet de modo más eficiente. Cuando alguna de las búsquedas DNS falla (una URL mal escrita, por ejemplo), el equipo cliente tratará de resolver el dominio de forma local a través de peticiones LLMNR o NBT-NS, que un equipo atacante puede capturar y envenenar.
$ responder -I eth1 -wFb
Las opciones principales de responder son:
- -I: interfaz de red.
- -w: iniciar el servidor proxy WPAD.
- -F: Forzar la autenticación y que el usuario introduzca sus credenciales.
- -b: para que la autenticación sea de tipo básica.
Password Spraying y Pass the hash
Con las contraseñas obtenidas anteriormente se puede intentar el inicio de sesión en otros equipos del dominio utilizando el ataque conocido como password spraying, que consiste en probar si una contraseña es posible loguearse con diferentes usuarios o en diferentes equipos. Es habitual que este ataque tenga éxito debido a la reutilización de contraseñas que hacen los usuarios en los sistemas.
Si se obtienen los hashes LMHash y NTHash, que se almacenan en los ficheros SAM y NTDIS.dit, se puede realizar el ataque pass the hash. Con estos hashes no es necesario conocer la contraseña original del usuario, es decir, no es necesario crackearlos, ya que se pueden pasar directamente para obtener los tokens de autenticación en los diferentes servicios del dominio.
Está herramienta permite conocer que usuarios tienen acceso a que equipos del dominio con las mismas credenciales.
En el siguiente ejemplo enumeramos usuarios y descripciones:
$ crackmapexec smb 192.168.0.0/24 --users
Las opciones principales de crackmapexec son:
- -u, --username: Usuario o lista de usuarios.
- -p, --password: Contraseña o lista de contraseñas.
- -H, --hash: Hash NTLM (para pass-the-hash) .
- --local-auth: Autenticación local (no dominio).
- --shares: Enumera recursos compartidos (shares).
- --sessions: Enumera sesiones activas en el host.
- --users: Enumera usuarios (requiere privilegios).
- --groups: Enumera grupos de usuarios.
- --lsa: Volcado de credenciales LSA (requiere Admin).
- --sam: Volcado del SAM (requiere privilegios).
- --exec-method: Método de ejecución remota (smbexec, wmiexec, atexec).
- -x, --execute: Ejecuta un comando.
- --ntds: Volcado del archivo NTDS.dit (hashes de Active Directory).
- --kerberos: Fuerza uso de Kerberos.
- --no-bruteforce: Detiene el ataque si una cuenta válida es encontrada.
- --continue-on-success: Continúa probando credenciales aunque encuentre una válida.
- --ntds vss: para obtener el volcado del SAM a traves del Volume Shadow Copy.
Ataque a Kerberos
Fuerza bruta a Kerberos
Consiste en averiguar las contraseñas de los usuarios mediante fuerza bruta. Para ello, se utilizara el script kerbrute desarrollado por tarlogic y que utiliza impacket para realizar el ataque. También es posible utilizar nmap con el script kbr5-enum-users.
Impacket es una colección de scripts en python desarrollados originalmente por la empresa SecureAuth y que actualmente es mantenida por la empresa Fortra's Core Security. Con esta librería es posible construir paquetes a bajo nivel de un amplio espectro de protocolos (IP, TCP, UDP, ARP, ICMP, SMBv1, SMBv2, SMBv3, MSRCP, protocolos de autenticación de kerberos, etc...) y es una herramienta fundamental para pentesting en entornos Windows, ya que también permite poder ejecutar código de forma remota través de SMB y MSRCP, entre otras muchas opciones.
El siguiente comando sirve para enumerar usuarios con kerbrute:
$ kerbrute userenum --dc 192.168.0.120 -d dominio.local /ruta/users.txt -t 20
Las opciones principales de kerbrute son:
- -d, --domain: Dominio objetivo.
- --dc: IP o FQDN del Domain Controller
- -user: usuario al que se desea realizar la fuerza bruta.
- -users: fichero con una lista de usuario que se desea realizar la fuerza bruta.
- -P, --passwords: Lista de contraseñas
- -outputfile: nombre del fichero donde se guardarán las credenciales descubiertas (usuario:contraseña)
Overpass the hash / Pass the Key (PTK)
Este ataque es similar al ataque pass the hash, puesto que utilizamos los hashes NTHash para solicitar diferentes tickets a kerberos. Será util en los casos en los que la autenticación mediante el protocolo NTLM esté deshabilitado en el dominio.
Para realizar este ataque hay que conocer el SID del dominio. Si no se ha obtenido antes se puede usar el script de impacket lookupsid.py que se encuentra en la carpeta /usr/share/doc/python3-impacket/examples.
$ python3 lookupsid.py empresa.local/admin:Password123@192.168.1.10
$ python3 lookupsid.py empresa.local/admin@192.168.1.10 -hashes :<NTLM>
A continuación se utiliza el script ticketer.py de impacket situado en la misma carpeta que el anterior. Con este script se tratara de forjar un ticket TGT o TGS válido para nuestro usuario.
Para forjar el TGT debe conocerse el NTHash del usuario krbtgt, que es el servicio de kerberos encargado de forjar los tickets, con esto se estaría realizando el ataque Golden Ticket. Para forjar el TGS, realizando el ataque Silver Ticket se haría de forma similar, pero en este caso se necesitaría el NTHash del servicio que atacar. Por ejemplo, con el NTHash de una máquina se podría forjar un TGS para acceder con privilegios de administrador a esa máquina. Puede probarse con alguna de las maquinas de los usuarios del dominio.
Ejecutamos el script desde nuestra carpeta Home ya que en la carpeta de impacket no tenemos permisos de escritura y dará error al intentar guardar el fichero.
$ python3 ticketer.py -domain <DOMINIO> -domain-sid <SID_del_dominio> -nthash <NTLM_hash_krbtgt> <usuario>
Las opciones principales de ticketer.py son:
- -nthash: Hash NTLM de la cuenta krbtgt.
- -domain: Nombre del dominio (e.g., empresa.local).
- -domain-sid: SID del dominio (puedes obtenerlo con lookupsid.py).
- usuario: Nombre del usuario al que deseas otorgar el ticket (puede ser Administrator).
- -extra-sids: Añadir SID de grupo como Enterprise Admins.
- -groups: Lista de GIDs para definir los privilegios (Ej: 512 para Domain Admins).
Con este ticket y el comando psexec de impacket se pueden ejecutar comandos y tratar de obtener una shell remota. En primer lugar se exporta la variable de entorno KBR5CCNAME para que contenga el nombre del fichero con el ticket forjado. En el comando psexec se tomará este valor con la opción -k, la ruta al objetivo debe incluir el nombre de NetBios del controlador de dominio.
$ export KRB5CCNAME=ticket.ccache
$ python3 psexec.py -k -no-pass EMPRESA/Administrator@SRV-WIN10.empresa.local
Las opciones principales de psexec son:
- -k: usa Kerberos.
- -no-pass: no requiere contraseña porque usas un ticket.
En el siguiente
enlace podéis obtener más información sobre la metodología de Active Directory.