miércoles, 2 de septiembre de 2009

Técnicas Pass-the-Hash

Con este nuevo post sobre técnicas de Pass-the-Hash que utilizamos en la resolución del Reto Hacking de antes del verano... Comenzamos! Con las pilas bien cargadas!!!

La verdad es que cuando descubrí esto de las técnicas de Pass-the-Hash me pregunté como algo así podía existir sin que me hubiera dado cuenta antes. Las descubrí investigando si podía saltar del contexto de un usuario SYSTEM en Windows al contexto de otro usuario del equipo para poder acceder a los recursos de otra máquina con esas credenciales. Al final, como solución, pensé en como tenía que funcionar Windows para hacer esta autenticación de forma automática, y... BINGO, técnicas de Pass-the-Hash.

Este tipo de técnicas están fundamentadas en la ausencia del uso de un Salt que añade un factor aleatorio en la generación de los Hashes, lo cual quiere decir que la misma contraseña, en usuarios diferentes e incluso en equipos diferentes, les va a corresponder el mismo Hash.

Esto abre la posibilidad de dos tipos de ataques, por un lado permite la realización de Crackeo de contraseñas mediante Rainbow Tables (con Salt el tamaño de las tablas y el tiempo se hace practicamente inusable), y por otro lado, nos abre la posibilidad de usar técnicas de Pass-the-Hash.

Estas técnicas consisten en la posibilidad de autenticarse entre máquinas Windows sin necesidad de nada más que de poseer el Hash, con lo que podemos conseguir acceso a los recursos de un usuario sin conocer realmente la contraseña ni emplear ningún tiempo de crackeo, simplemente obteniendo el Hash de la SAM o de la caché del sistema.

Para utilizar estas técnicas, existen un Toolkit de herramientas llamadas Pass-the-Hash Toolkit (desarrollado por Hernán Ochoa mientras trabajaba en Core Security, los desarrolladores del conocido Framework de Explotación Core Impact) que viene con una serie de ficheros. Entre ellos se encuentra el fichero IAM.EXE, al que se puede llamar con la siguiente sintaxis:

> iam.exe usuario dominio HashLM HashNT

Nota: El Hash se encuentra en la SAM como HashLM:HashNT, hay que separar estas dos partes en la llamada a iam.exe


Este binario lo que consigue es cambiar en memoria nuestras credenciales en la máquina windows que estemos y con el usuario que estemos utilizando por estas credenciales que le pasamos, por lo que a todos los efectos, en uan red Microsoft, seremos ese usuario y podremos conectar a todos los recursos que pueda ver ese usuario con sus privilegios de forma transparente, y todo ello sin necesidad de conocer la clave, no importa que sea una buena clave, con mayusculas, minúsculas, numeros, signos, etc, si conseguimos obtener el Hash de algún sitio, podemos usarlo para acceder a recursos sin necesidad de emplear ningún tiempo de crackeo.

Existen también otras aplicaciones que premiten autenticarse mediante al utilización del Hash en lugar de la contraseña (lo único que hace es saltarse el paso de "me das la contraseña y calculo el Hash"), como puede ser un parche para Samba (para los amantes de Linux, como yo) que permite establecer una variable de entorno SMBHASH con el Hash y a partir de ahí usar los comandos típicos de Samba para acceder a los recursos. Otra de las interesantes es el módulo psexec (original de Sysinternals) que existe en la Metasploit Framework, que también permite pasarle el Hash en lugar de la contraseña, con lo cual podemos ejecutar comandos de forma remota en una máquina Windows siempre que el usuario del que hemos obtenido el Hash tenga privilegios de Administrador. Sin embargo, de todas estas opciones, yo sigo prefiriendo el Pass-the-Hash Toolkit, puesto que me parece más flexible.

No obstante, que podamos usar este tipo de técnicas no quiere decir que no necesitemos para nada el crackeo de este Hash, ya que no solo de Microsoft viven las empresas, y a veces crackear y obtener la contraseña de un usuario nos puede ayudar a obtener acceso a otros sistemas no-Microsoft pero en los que el usuario esté usando la misma contraseña (y en los que no vale el mismo hash, evidentemente) como puedan ser sistemas Unix, páginas web, accesos VPN, etc.

7 comentarios:

Antonio Sánchez dijo...

buena vuelta de vacaciones!

a mi todavía me quedan 20 días, es lo que tiene ser estudiante ;)

salu2

Jose Selvi dijo...

Hola Antonio, gracias por el comentario y disfruta de esos 20 días que te quedan ;)

Yago Jesus dijo...

Directo a mi delicious !

Raul dijo...

Muy buen artículo.
¿una segunda parte con capturas o video?

Me gusta mucho esta línea que llevais.

Jose Selvi dijo...

Hola Raúl, estoy pensando en preparar una ponencia sobre esto con demostración en vivo y presentarla para unas conferencias a ver si me la aceptan.

Voy a esperarme un poco a ver si me lo aceptan o no, si me lo aceptan lo presentaré y luego lo colgaré, y sino lo colgaré directamente ;)

Gracias por el cumplido!

Anónimo dijo...

Hace 7 años que uso esta tecnica en active directory. Me soprende que exista gente que recien se entera

Jose Selvi dijo...

@Anónimo: Desconozco cuanto tiempo hacía que esta técnica se conocía antes de descubrirla yo, pero por supuesto existía desde hace muchísimos años (casi tantos como el Windows, diría yo).

En cualquier caso, en el momento en el que se escribió este artículo (2009) no era muy conocida aún. Si la conocías hace 7 años... debiste publicarla! xD