18 junio 2014

Durante los tests de intrusión internos, uno de los hitos más importantes es aquel en el que, si todo va como la seda, consigues el listado de hashes de los usuarios del dominio o locales de algún sistema comprometido.

Desde hace años, la gran ventaja cuando se habla de la explotación y post-explotación en sistemas Windows es la utilización de una técnica llamada "Pass-The-Hash", la cual nos permite realizar autenticación en sistemas Windows utilizando el usuario y el hash obtenido, sin necesidad de su crackeo previo para averiguar la contraseña. Metasploit, el framework por excelencia para la realización de tests de intrusión, permite la introducción de hashes como autenticación (en lugar de la contraseña) tanto para módulos como para exploits que así lo requieran. Un lujo para no tener que dedicar horas a la obtención de contraseñas mediante crackeo que nos harían perder tiempo en situaciones en las que suele ser muy limitado.

Obviamente, la desventaja es si necesitamos acceder a un servicio que tenga integrada la autenticación con el directorio activo, ya que al no disponer de la contraseña y únicamente el hash, no podremos acceder a él. Esta autenticación NTLM nos la podremos encontrar por ejemplo para acceder a sistemas de administración de dispositivos (los cuales disponen de consola HTTP o HTTPS).

Pues bien, echando un vistazo a las slides de la charla que dieron Alva ‘Skip’ Duckwall y Chris Campbell en la BlackHat USA 2012, llamada Still Passing the Hash 15 Years Later… (video disponible en este enlace de Youtube), podremos hacernos con un conjunto de herramientas las cuales han sido parcheadas para que puedan realizar autenticaciones NTLM con usuario y hash una vez lo requieran, como por ejemplo, Samba, WMI, etc.

También publicaron (tanto para Windows como para Linux) una versión del navegador Mozilla Firefox que permite introducir hashes en lugar de contraseñas para realizar autenticación NTLM en servicios que así lo requieran, únicamente activando una opción de la configuración. La slide en la que lo presentan es la siguiente (número 46):



La opción de configuración se puede encontrar, accediendo al about:config y buscando la directiva network.auth.force-generic-ntlm para establecerla de su valor por defecto, false, a true:

Valor por defecto para la directiva network.auth.force-generic-ntlm

Estableciendo a true la opción network.auth.force-generic-ntlm
Sin duda, algo que nos ayudará a no utilizar esta técnica indispensable únicamente en Metasploit. En el mismo repositorio, los autores de la charla han parcheado algunas otras aplicaciones para permitir introducir hashes como contraseñas en caso de requerir autenticación NTLM, como por ejemplo, el cliente web por consola curl o la propia libreria libcurl, además de WMI y WinEXE, clon de psexec. 

En Kali se pueden encontrar un buen conjunto de binarios parcheados para permitir la autenticación NTLM a partir de hashes. En su mayor medida, el parcheo consiste en añadir una opción más de autenticación para que, si se incluye una cadena de texto de longitud NTLM se realice un Pass-The-Hash en vez de autenticación regular. Estos binarios los tenéis ya disponibles, comenzando todos por "pth-":


[+] Blog de passing-the-hash
[+] Repositorio Google Code de la Pass-The-Hash Toolkit

2 comments :

RiverStone dijo...

Fenomenal el articulo, hace no mucho tuve que bloquear un ataque parecido pero era distribuido y cada ip solo escaneaba un rango de puertos, para un ataque distribuido que recomiendas? Gracias de antemano

Lorenzo_Martinez dijo...

En ese caso, siempre puedes añadir en la configuración de portsentry, en la opción TCP_PORTS, todos aquellos en los que no haya servicio escuchando o redirigido, y hacer que por cualquiera de ellos genere un bloqueo. En ese caso, la política de firewall es mucho más abierta: permito TODO el tráfico TCP en la cadena INPUT, y bloqueo en aquellos puertos que NO tengas servicio. Al que te haga un escaneo, le aparecerá que tienes servicio en todos tus puertos, aunque en el siguiente intento para ver qué hay, el iptables ya habrá bloqueado la IP atacante...