Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

martes, 30 de mayo de 2017

Cómo extraer una contraseña Windows de la memoria RAM con Volatility y Hashcat en Linux

Anteriormente hice un pequeño artículo explicando cómo poder consultar información de la RAM con GNU/Linux, usando LiME para extraer un volcado de ésta, y Volatility para analizar dicho volcado, pero lo cierto es que si bien dicha combinación es útil, solamente se mostró un atisbo de lo que Volatility puede hacer... Volatility es una herramienta forense de gran potencia que tiene una enorme cantidad de opciones y si bien es obvio que dominar, e incluso conocer, todas es muy complicado, sí que hay una serie de opciones que son, en mi opinión, realmente interesantes. Una de ellas es nada más y nada menos que la extracción de una contraseña.

RAM_portada

Supongamos que nos han dado un volcado de memoria RAM en mano, llamado /root/volcado.dmp, y que no tenemos información alguna de dicho volcado más allá de que procede de un Windows... Es decir que no sabemos siquiera de qué sistema operativo procede... ¿Qué hacer con dicho volcado? Doy por supuesto que Volatility está instalado (en caso contrario recomiendo leer primero el artículo citado arriba); aún así, simplemente para recordar la estructura de esta herramienta, ésta sería:

volatility -f volcado_a_analizar --profile perfil_del_volcado acción

A sabiendas de ésto, lo primero que tendríamos que hacer sería un análisis global de dicho volcado, aunque sea para tener una idea general de lo que tenemos en nuestras manos... En este caso sabemos que el volcado viene de un sistema Windows, pero no sabemos que versión de éste, con lo que lo primero que haremos será una extracción global de la información de la imagen, lo cual se hace gracias a la acción imageinfo, que no requiere de perfil alguno:

volatility -f /tmp/volcado.dmp imageinfo

Volatility_imageinfo
Información global volcado RAM volatility

De aquí el dato más importante para nosotros sería el de "Suggested Profile(s)" ya que éste nos diría qué perfil nos recomienda usar Volatility... En este caso el perfil que usaremos será el de Win7SP1x86... Lo bueno que tiene Volatility es que ya tiene varios perfiles creados que podemos usar a nuestro gusto, si bien la desventaja que tiene es que los perfiles de sistemas Linux tienen que ser creados por nosotros... En este caso no tenemos la necesidad de crear el perfil, con lo que ya podemos extraer la información que queremos con el perfil sugerido.

En este caso en concreto queremos extraer la contraseña, cosa que es más sencillo de lo que parece, ya que solo requiere de un comando:

volatility -f volcado.dmp --profile Win7SP1x86 hashdump > /tmp/hashes.txt

Este comando nos volcará los hashes de las contraseñas de los diferentes usuarios en un fichero llamado hashes.txt alojado en /tmp/; Hashes que obviamente, son completamente ilegibles, al menos en un principio. En mi caso el contenido del fichero hashes.txt sería el siguiente:

hash

O para verlo mejor:

Ivan:1000:aad3b435b51404eeaad3b435b51404ee:b9f917853e3dbf6e6831ecce60725930:::

Con los hashes en nuestro poder, tenemos dos opciones: Instalar Hashcat en nuestra distribución de Linux o usar un equipo/máquina virtual con Kali que tiene dicha herramienta instalada. Por experiencia propia recomiendo la segunda opción, al instalar Hashcat en nuestra distribución habitual (Debian, Ubuntu o derivados...) suelen haber problemas a la hora de ejecutarlo.

Hashcat usaría la siguiente estructura:

hashcat --force -m tipo_hash -a tipo_ataque -o fichero_salida fichero_hash ruta_diccionario --show

Aquí hay dos puntos que hay que tener en cuenta:

El primero es el tipo de hash... Aquí no basta con poner el tipo en modo texto, sino que se asigna mediante un numero que la herramienta asocia a un tipo de hash hay decenas y decenas de tipos de hash, pero aquí basta saber con que el valor numérico que nos vale a nosotros en este caso en concreto es el 1000: NTLM. En caso de querer conocer más tipos de hashes y su respectivos números, recomiendo visitar la wiki oficial: https://hashcat.net/wiki/doku.php?id=hashcat

El segundo es el tipo de ataque... Aquí también se le dice un número para decirle qué tipo de ataque queremos... 0 diccionario, 1 sería híbrido (fuerza bruta y diccionario) y 3 sería por fuerza bruta... El tipo más común sería el híbrido (1), si bien requiere de un diccionario, diccionario que Kali ya tiene incorporado de por sí por defecto. El diccionario que nosotros usaremos se llamará wordlist.txt y en Kali se encuentra en: /usr/share/sqlmap/txt.

Con toda esta información el descifrado de éste hash sería tan sencillo como hacer:

hashcat --force -m 1000 -a 1 -o /tmp/crackeado.txt hashes.txt /usr/share/sqlmap/txt/wordlist.txt --show

Dependiendo de la fortaleza de la contraseña, el resultado tomará más o menos tiempo... En mi caso, al haber puesto una contraseña muy débil el resultado ha sido casi instantáneo... Para comprobar el resultado simplemente habría que consultar el fichero /tmp/crackeado.txt cuyo contenido, en este caso sería:

b9f917853e3dbf6e6831ecce60725930:passw0rd

Lo cual significaría que la contraseña del usuario Ivan sería passw0rd. Ahora bien, tras ver todo este proceso hay varios puntos a tener en cuenta.

El primero es que el proceso de extracción de hash, solamente es aplicable a un volcado de memoria RAM procedente de un sistema operativo Windows, ya que los sistemas GNU/Linux tienen otra forma de trabajar y almacenan los hashes de forma diferente.

Como segundo punto, habría que tener en cuenta que la extracción de un hash puede realizarse de diferentes formas... Aquí se ha mostrado con Volatility con el objetivo de mostrar que la memoria RAM tiene mucha más información de lo que en un principio nos puede parecer.

Otro punto importante es que Hashcat no está limitado a hashes de Windows, puede ser usado para hashes MD5,SHA-216... Es decir que si bien aquí se ha usado con un hash de Windows, con el fin de combinarlo con Volatility, puede ser usado con muchísimos más.

Por último, es importante ser conscientes de que el fin de este procedimiento es ser conscientes de la información almacenada en la memoria RAM y además tener la conciencia de que una contraseña insegura o un cifrado débil, puede tener consecuencias desastrosas...

Espero que este artículo os haya sido útil.

Saludos.

1 comentario :