LLMNR/NBT-NS Poisoning - from Linux
Last updated
Last updated
En este punto, hemos completado la enumeración inicial del dominio. Obtuvimos información básica de usuarios y grupos, enumeramos los hosts buscando servicios y roles críticos, como un controlador de dominio, y determinamos algunos detalles, como el esquema de nombres utilizado para el dominio. En esta fase, trabajaremos conjuntamente con dos técnicas diferentes: envenenamiento de red y rociado de contraseñas. Realizaremos estas acciones con el objetivo de obtener credenciales de texto sin cifrar válidas para una cuenta de usuario del dominio, lo que nos permitirá establecer una base en el dominio para comenzar la siguiente fase de enumeración desde una perspectiva de credenciales.
Esta sección y la siguiente abordarán una forma común de recopilar credenciales y obtener una base inicial durante una evaluación: un ataque de intermediario (Man-in-the-Middle) contra las transmisiones de Resolución de Nombres de Multidifusión Local de Enlace (LLMNR) y Servicio de Nombres NetBIOS (NBT-NS). Dependiendo de la red, este ataque puede proporcionar hashes de contraseñas de bajo privilegio o de nivel administrativo que se pueden descifrar sin conexión, o incluso credenciales de texto plano. Aunque no se aborda en este módulo, estos hashes también se pueden usar para realizar un ataque de Retransmisión SMB para autenticarse en uno o varios hosts del dominio con privilegios administrativos sin tener que descifrar el hash de la contraseña sin conexión. ¡Comencemos!
(LLMNR) y (NBT-NS) son componentes de Microsoft Windows que sirven como métodos alternativos de identificación de host cuando falla el DNS. Si una máquina intenta resolver un host, pero la resolución DNS falla, normalmente intentará solicitar a todas las demás máquinas de la red local la dirección de host correcta mediante LLMNR. LLMNR se basa en el formato del Sistema de Nombres de Dominio (DNS) y permite que los hosts en el mismo enlace local realicen la resolución de nombres para otros hosts. Utiliza puerto 5355
sobre UDP de forma nativa. Si LLMNR falla, se utilizará NBT-NS. NBT-NS identifica los sistemas en una red local por su nombre NetBIOS. NBT-NS utiliza puerto 137
sobre UDP.
La clave está en que, al usar LLMNR/NBT-NS para la resolución de nombres, cualquier host de la red puede responder. Aquí es donde entramos nosotros Responder
para envenenar estas solicitudes. Con acceso a la red, podemos suplantar una fuente de resolución de nombres autorizada (en este caso, un host que supuestamente pertenece al segmento de red) en el dominio de difusión respondiendo al tráfico LLMNR y NBT-NS como si tuvieran una respuesta para el host solicitante. Este envenenamiento se realiza para que las víctimas se comuniquen con nuestro sistema, simulando que nuestro sistema malicioso conoce la ubicación del host solicitado. Si el host solicitado requiere resolución de nombres o autenticación, podemos capturar el hash NetNTLM y someterlo a un ataque de fuerza bruta sin conexión para intentar recuperar la contraseña en texto plano. La solicitud de autenticación capturada también puede retransmitirse para acceder a otro host o utilizarse contra un protocolo diferente (como LDAP) en el mismo host. La suplantación de LLMNR/NBNS, combinada con la falta de firma SMB, a menudo puede provocar acceso administrativo a hosts dentro de un dominio. Los ataques de retransmisión SMB se tratarán en un módulo posterior sobre movimiento lateral.
Veamos un ejemplo rápido del flujo de ataque a un nivel muy alto:
Un host intenta conectarse al servidor de impresión en \\print01.inlanefreight.local, pero accidentalmente escribe \\printer01.inlanefreight.local.
El servidor DNS responde indicando que este host es desconocido.
Luego, el host transmite a toda la red local preguntando si alguien conoce la ubicación de \\printer01.inlanefreight.local.
El atacante (nosotros en Responder
ejecución) responde al host indicando que lo que está buscando es \\printer01.inlanefreight.local.
El host cree en esta respuesta y envía una solicitud de autenticación al atacante con un nombre de usuario y un hash de contraseña NTLMv2.
Luego, este hash se puede descifrar sin conexión o utilizar en un ataque de retransmisión SMB si existen las condiciones adecuadas.
Se pueden utilizar varias herramientas para intentar el envenenamiento por LLMNR y NBT-NS:
Herramienta
Descripción
Responder es una herramienta diseñada específicamente para envenenar LLMNR, NBT-NS y MDNS, con muchas funciones diferentes.
Inveigh es una plataforma MITM multiplataforma que puede utilizarse para ataques de suplantación y envenenamiento.
Metasploit tiene varios escáneres integrados y módulos de suplantación diseñados para lidiar con ataques de envenenamiento.
Esta sección y la siguiente mostrarán ejemplos del uso de Responder e Inveigh para capturar hashes de contraseñas e intentar descifrarlos sin conexión. Normalmente, iniciamos una prueba de penetración interna desde una posición anónima en la red interna del cliente con un host de ataque Linux. Herramientas como Responder son excelentes para establecer una base que posteriormente podemos expandir mediante enumeraciones y ataques adicionales. Responder está escrito en Python y se suele usar en un host de ataque Linux, aunque existe una versión .exe que funciona en Windows. Inveigh está escrito en C# y PowerShell (considerado heredado). Ambas herramientas pueden usarse para atacar los siguientes protocolos:
LLMNR
DNS
MDNS
NBNS
DHCP
ICMP
HTTP
HTTPS
PYME
LDAP
WebDAV
Autenticación de proxy
Responder también tiene soporte para:
MSSQL
DCE-RPC
Autenticación FTP, POP3, IMAP y SMTP
Responder es una herramienta relativamente sencilla, pero extremadamente potente y con muchas funciones diferentes. En la Initial Enumeration
sección anterior, utilizamos Responder en modo de análisis (pasivo). Esto significa que escuchó las solicitudes de resolución, pero no las respondió ni envió paquetes envenenados. Estábamos actuando como si estuviéramos en la pared, simplemente escuchando. Ahora, iremos un paso más allá y dejaremos que Responder haga lo que mejor sabe hacer. Veamos algunas opciones disponibles escribiendo responder -h
en nuestra consola.
Con la configuración mostrada arriba, Responder escuchará y responderá cualquier solicitud que detecte en la red. Si logra capturar un hash, Responder lo imprimirá en pantalla y lo guardará en un archivo de registro por host ubicado en el /usr/share/responder/logs
directorio. Los hashes se guardan en el formato (MODULE_NAME)-(HASH_TYPE)-(CLIENT_IP).txt
, y un hash se imprime en la consola y se almacena en su archivo de registro asociado, a menos que -v
el modo esté habilitado. Por ejemplo, un archivo de registro podría tener este aspecto SMB-NTLMv2-SSP-172.16.5.25
. Los hashes también se almacenan en una base de datos SQLite que se puede configurar en el Responder.conf
archivo de configuración, generalmente ubicado en , /usr/share/responder
a menos que clonemos el repositorio de Responder directamente desde GitHub.
Debemos ejecutar la herramienta con privilegios de sudo o como root y asegurarnos de que los siguientes puertos estén disponibles en nuestro host de ataque para que funcione mejor:
Cualquiera de los servidores fraudulentos (es decir, SMB) se puede deshabilitar en el Responder.conf
archivo.
Si Responder capturó los hashes correctamente, como se muestra arriba, podemos encontrar los hashes asociados a cada host/protocolo en su propio archivo de texto. La animación a continuación muestra un ejemplo de Responder ejecutándose y capturando hashes en la red.
Podemos iniciar una sesión de Responder con bastante rapidez:
Una vez que tengamos suficientes, necesitamos convertir estos hashes en un formato utilizable de inmediato. Los hashes NetNTLMv2 son muy útiles una vez descifrados, pero no se pueden usar para técnicas como el pass-the-hash, lo que significa que debemos intentar descifrarlos sin conexión. Podemos hacerlo con herramientas como Hashcat y John.
Al observar los resultados anteriores, podemos ver que hemos descifrado el hash NET-NTLMv2 del usuario FOREND
, cuya contraseña es Klmcargo2
. Afortunadamente, nuestro dominio objetivo permite contraseñas débiles de 8 caracteres. Este tipo de hash puede ser lento de descifrar incluso en un equipo de descifrado con GPU, por lo que las contraseñas largas y complejas pueden ser más difíciles o imposibles de descifrar en un tiempo razonable.
Realizamos estas acciones para recopilar la información de autenticación enviada a través de la red en forma de hashes de contraseña NTLMv1 y NTLMv2. Como se explicó en el módulo , NTLMv1 y NTLMv2 son protocolos de autenticación que utilizan el hash LM o NT. A continuación, tomaremos el hash e intentaremos descifrarlo sin conexión mediante herramientas como o con el objetivo de obtener la contraseña en texto plano de la cuenta para obtener acceso inicial o ampliar nuestro acceso dentro del dominio si capturamos el hash de la contraseña de una cuenta con más privilegios que la que ya poseemos.
Como se mostró anteriormente en el módulo, la -A
bandera nos activa el modo de análisis, lo que nos permite ver las solicitudes NBT-NS, BROWSER y LLMNR en el entorno sin contaminar las respuestas. Siempre debemos proporcionar una interfaz o una IP. Algunas opciones comunes que solemos usar son -wf
: esto iniciará el servidor proxy WPAD no autorizado, mientras que -f
intentará identificar el sistema operativo y la versión del host remoto. Podemos usar la -v
bandera para mayor detalle si surgen problemas, pero esto generará una gran cantidad de datos adicionales impresos en la consola. Otras opciones, como -F
y, -P
se pueden usar para forzar la autenticación NTLM o básica, así como la autenticación de proxy, pero pueden generar una solicitud de inicio de sesión, por lo que se recomienda usarlas con moderación. El uso de la -w
bandera utiliza el servidor proxy WPAD integrado. Esto puede ser muy efectivo, especialmente en grandes organizaciones, ya que capturará todas las solicitudes HTTP de cualquier usuario que inicie Internet Explorer si el navegador tiene habilitada .
Normalmente, deberíamos iniciar Responder y dejarlo ejecutarse un rato en una ventana de tmux mientras realizamos otras tareas de enumeración para maximizar la cantidad de hashes que podemos obtener. Una vez listos, podemos pasar estos hashes a Hashcat usando el modo hash 5600
para hashes NTLMv2 que solemos obtener con Responder. En ocasiones, podemos obtener hashes NTLMv1 y otros tipos de hashes; podemos consultar la página para identificarlos y encontrar el modo hash adecuado. Si alguna vez obtenemos un hash extraño o desconocido, este sitio es una excelente referencia para identificarlo. Consulta el módulo para un estudio a fondo de los diversos modos de Hashcat y cómo atacar una amplia variedad de tipos de hashes.