miércoles, 21 de abril de 2010

Pass-the-hash Toolkit & IDA Pro

Hace unas semanas publicamos un post sobre la presentación que hicimos en las Conferencias FIST de Barcelona, en las que explicamos técnicas de post-explotación en sistemas Windows, entre ellas las técnicas conocidas como Pass-the-Hash.

En ese post, se nos hizo un comentario sobre los argumentos con los que llamábamos a las diferentes herramientas que forman parte del Pass-the-Hash Toolkit. A pesar de que la pregunta fue respondida brevemente en otro comentario, hemos considerado oportuno escribir otro post centrándonos en este Toolkit, sus diferentes herramientas, y de que forma podemos llamarlo para obtener de él los resultados esperados.

Entramos al trapo!:

El Pass-the-Hash Toolkit consta principalmente de 2 binarios/herramientas:
  • WHOSTHERE.EXE: Consulta en la memoria los hashes de los usuarios autenticados en el sistema. Muy útil para saber si estamos utilizando las direcciones de memoria correctas o si hemos cambiado el hash correctamente.
  • IAM.EXE: Sobreescribe en la memoria el hash de nuestro usuario actual por el hash al que queremos suplantar, lo cual nos convierte a todos los efectos en ese usuario de cara al resto de elementos de la red.
Ambas herramientas acceden a la memoria, concretamente a la librería LSASRV.DLL, para leer o escribir (respectivamente) la información relacionada con los usuarios autenticados y sus respectivos hashes. Esta información, sin embargo, no siempre está disponible en la misma dirección de memoria, ya que puede variar en función de la versión de Windows, Service Pack, etc.

Para contrarrestar esta dificultad, el Pass-the-Hash Toolkit implementa un método heurístico con el que intenta buscar en la memoria estos elementos por si mismo. Sin embargo, se ha podido comprobar que dicha heurística no encuentra siempre correctamente estas direcciones. Por ello, Hernán Ochoa, desarrollador de la herramienta, pone a nuestra disposición la opción "-h", con la que podemos pasarla a la herramienta de forma manual las direcciones de memoria adecuadas, con los que la herramienta nos proporciona la flexibilidad necesaria como para que pueda funcionar en cualquier tipo de sistema.

Durante la demo que hicimos en las Conferencias FIST de Barcelona, disponíamos de un dichero XPSpanish.txt en el que teníamos guardadas estas direcciones de memoria, que habíamos obtenido previamente:

75403BA0:753EFDEC:75480C98:75480CA0:7547FC60:7547FE54

Estas mismas direcciones deberían ser válidas para cualquier sistema Windows XP SP3 en Español, pero por si queréis probarlas con otros idiomas, otro Service Pack, o cualquier caso, vamos a detallar como hemos obtenido estas direcciones.

En realidad, al contrario de lo que se pueda pensar, no vamos a tener que pegarnos con el ensamblador ni ser unos gurús del reversing para obtener estas direcciones, ya que Hernán Ochoa ha creado para nosotros un "script" para IDA Pro (podéis descargaros la versión Free) que nos va a permitir obtener dichas direcciones de forma totalmente automática.

Dicho "script" lo podemos obtener únicamente de la versión "source code" de la herramienta, por lo que deberemos descargarla a pesar de que no vayamos a modificar código fuente. Tras descomprimir el TGZ entraremos en el directorio "iam", y dentro de él en el directorio "idc", dentro del cual veremos que existe un dichero "passthehash.idc". Los ficheros IDC contienen un código de scripting para IDA que nos permite automatizar algunas tareas.

Ejecutamos la herramienta IDA Pro Free y lo primero que tenemos que hacer es cargar la librería LSASRV.DLL para análisis. Para ello seleccionamos "New" en la primera ventana que nos aparece y elegimos la opción "PE Dynamic Library", ya que lo que queremos desensamblar es una librería:


Una vez hecho esto tendremos que elegir que librería queremos desensamblar. La librería que queremos nosotros está en C:\WINDOWS\SYSTEM32\lsasrv.dll :


Tras seleccionar la librería, IDA nos dará varias opciones para afinar como queremos que haga el análisis. En realidad, es indiferente que elijamos para esta ocasión, podemos dejarlas todas por defecto o podemos desmarcarlas todas hasta llegar a una ventana en la que se nos pregunta si queremos cargar los símbolos del sistema. En esta ventana es importante que seleccionemos SI, ya que sino el IDC no va a funcionar correctamente. El binario se cargará en unos segundo y nos mostrará una ventana como esta:


Ahora que ya tenemos la librería desensamblada solo tenemos que cargar el IDC dándole al menú "File" y eligiendo la opción "IDC File", con la que podremos buscar el fichero IDC que previamente habíamos obtenido (passthehash.idc). Instantáneamente tras cargar el script nos salen en la ventana inferior del IDA unas lineas que comienzan por "#define" de las que podemos sacar las direcciones que necesitamos:


Bueno, ya hemos obtenido las direcciones con las que podremos utilizar el Pass-the-Hash Toolkit sobre el sistema sobre el que hemos utilizado IDA o, en general, en cualquier sistema en general, aunque en cualquier caso se recomienda utilizar siempre primero whosthere.exe para comprobar que estamos usando las direcciones correctas, ya que iam.exe altera la memoria del proceso y podría provocar inestabilidad en el mismo si dichas direcciones no son correctas.

Para más información sobre como utilizar Pass-The-Hash Toolkit os remitimos al post que pusimos sobre las Conferencias FIST.

2 comentarios :

hernan dijo...

Hola,

Les queria comentar que mantengo una lista de direcciones para aquellos que no quieran bajarse el IDA y el script IDC:

http://www.hexale.org/pth/pth_addrs.txt

Solo tienen que sacar el sha1 de su LSASRV.DLL (usando sha1sum por ejemplo), buscarlo en la lista y ahi encontratan las direcciones necesarias para su LSASRV.DLL

Gracias!,
Hernan

Jose Selvi dijo...

Gracias Hernán, yo lo hice con el IDC porque el sistema sobre el que hice las pruebas era un sistema en Español y no vi en la lista que publicaste sistemas en Español.

Tengo pendiente aún probar el otro ataque aquel que hablamos! Pero no se me olvida!

Ya te contaré.
Un saludo y gracias por participar en el blog ;)