Docly Child

Obtención y desciframiento de ficheros de usuarios en Sistemas Operativos

Tabla de contenidos:

Fichero SAM en Windows

Nota: Para seguir este anexo es conveniente haber leído previamente la información sobre el fichero de usuarios SAM en Windows, en el epígrafe de Reconocimiento Sistemas Operativos Windows.

Extracción del fichero SAM: PWDUMP e Impacket-Secretsdump

A parte de poder usar el módulo de Meterpreter windows/gather/hashdump para obtener un volcado de la información de los usuarios y hashes del SAM, también es posible con otras herramientas y técnicas. Es importante verificar que estos métodos que se explican siguen siendo eficaces en las versiones más modernas de Windows y en sus posteriores evoluciones (10, 11…). En el momento de escribir esto no ha habido ningún problema. Además, hay que considerar que para efectuar estas prácticas, ya sea con una shell de Meterpreter o Netcat, es necesario disponer de un usuario que tenga privilegios altos, que se haya deshabilitado los sistemas de seguridad del dispositivo objetivo y tener opciones para trasladar la información i/o archivos entre el atacante y el target.

PWDUMP

Pwdump es un programa informático utilizado para extraer contraseñas SAM en formato de texto plano desde el sistema operativo Windows. Existen diferentes versiones de esta herramienta, que ha ido evolucionando para adaptarse a las nuevas versiones de Windows. Se puede encontrar la herramienta en: https://www.openwall.com/passwords/windows-pwdump

PWDUMP descarga

Como las prácticas se han hecho contra un Windows 10, la versión descargada ha sido la de pwdump8. El contenido viene con un binario (.exe) que podría llegar a descargarse y ejecutar en el  target, con las diferentes opciones que puedan tener las shells de Meterpreter o Netcat. Es muy importante destacar que se necesitan altos privilegios para poder ejecutar pwdump. Además es necesario desactivar los sistemas de seguridad pues en caso contrario estos van a reconocer pwdump como un archivo potencialmente peligroso y lo eliminaran al momento. 

Una vez se hayan sorteado estos problemas, la obtención de los hashes sería tan fácil como ejecutar el binario pwdump8.exe desde la consola y trasladar la información a Kali Linux o al dispositivo del atacante para intentar descifrar estos hashes NTLM.

PWDUMP extracción de SAM

Extracción del Registro de Windows y Kali Linux: Impacket

Otra forma de obtener la información del SAM es usando las instrucciones de la CMD para consultar y editar el Registro de Windows. Además, también se va a obtener información del fichero SYSTEM. Con las siguientes instrucciones, se obtendrían los ficheros directamente (siempre con privilegios altos). Después es necesario trasladar estos ficheros a Kali Linux para poder extraer la información de los hashes en formato de texto plano:

				
					reg save hklm\sam C:\sam
reg save hklm\system C:\system

				
			
Extracción de SAM y SYSTEM con comando reg en Windows

Una vez trasladados los ficheros SAM y SISTEM al dispositivo atacante (Kali Linux), existen diferentes herramientas para obtener los hashes. Como ya se ha comentado arriba, conviene asegurar que la herramienta está actualizada respecto las versiones más recientes de Windows si los ficheros provienen de una versión actual. Una de estas herramientas es impacket (escrita en Python3), cuya información está en: https://github.com/fortra/impacket/tree/master. Se puede instalar como se indica en las instrucción de GitHub o bien con el comando pip3 install impacket. Para obtener los hashes en formato de texto plano, simplemente hay que indicar lo siguiente en la consola de línea de comandos de Kali Linux:

				
					impacket-secretsdump -sam <fichero_sam> -system <fichero_system> LOCAL
				
			
Obtención de hashes NTLM del SAM con Impacket

Desciframiento de los hashes NTLM (Fuerza Bruta vs Rainbow Tables)

Una vez obtenidos los hashes NTLM del SAM toca descifrarlos para obtener las contraseñas en formato de texto plano. Existen principalmente dos formas de hacerlo. Mediante fuerza bruta o con el sistema de las Rainbow Tables. Aunque cada una tiene sus ventajas y desventajas, para ambos métodos es preciso disponer de un equipo con una gran capacidad de almacenamiento disponible y una potencia considerable de computación. Estos métodos puede aplicarse tanto para hashes NTLM de Windows como para otros métodos de encriptación: SHA1, MD5, SHA256, etc.

Método de Fuerza Bruta: John The Ripper

El método de la fuerza bruta se basa en crear u obtener un listado de contraseñas en formato de texto plano. Estas contraseñas se pueden guardar en fichero de formato txt. La herramienta para la fuerza bruta lo que hace es transformar una a una las contraseñas con la función hash y ver si en algún caso coincide con los hashes que se le ha proporcionado, así de simple.

Esquema romper contraseñas con fuerza bruta

El éxito de este método dependerá de que en el listado esté la contraseña que se busca. Suele ser un sistema muy lento porqué en cada iteración se tiene que aplicar la función hash y comparar con el hash objetivo. Puede tener éxito si la contraseña es débil o de uso frecuente (admin, 12345…). Para obtener listados de contraseñas se puede recurrir a crearlas mediante alguna herramienta en Kali Linux o por Internet, en donde existen varias webs dedicadas a ello y se pueden descargar libremente (o pagando, en algunos  casos). 

Para realizar esta técnica en Kali Linux se puede emplear John The Ripper y algunas de las listas de contraseñas (wordlists) que se encuentran disponibles en esta distribución. John The Ripper se encuentra disponible en Kali Linux por defecto y puede emplearse para obtener contraseñas en formato de texto plano para diferentes funciones de HASH así como también para crear diccionarios de contraseñas a partir de ciertos inputs. Una de las listas de contraseñas más conocidas es rockyou. Puede encontrarse en el directorio /usr/share/wordlists junto a otros listados. Los comandos para listar, descomprimir en otro directorio el listado y ver las primeras líneas serían:

				
					ls -l /usr/share/wordlists
sudo zcat /usr/share/wordlists/rockyou.txt.gz > <directorio_donde_descomprimir>/rockyou.txt
head –n <numero_lineas> rockyou.text

				
			
Listado contraseñas en Kali Linux

Disponiendo de un fichero con un listado de contraseñas y otro fichero con los hashes (NTLM) en formato de texto plano extraídos del SAM, para realizar la técnica de fuerza bruta con John The Ripper se utiliza el siguiente comando:

				
					john --wordlist=<password_list> --rules --format=<tipo_hash> <hash_list.txt>
				
			

En el ejemplo mostrado en la siguiente pantalla se ha utilizado un listado de contraseñas corto, sabiendo que algunas de ellas se corresponderían con los hashes del fichero con el contenido del SAM en texto plano y para acelerar el proceso. No obstante, si se hubiese realizado la misma práctica con un listado de contraseñas largo como rockyou, la comprobación podría haber tardado horas y días y aun así no obtener la contraseña si no estaba en la lista.

Utilización de John The Ripper para fuerza bruta

Rainbow Tables

El método de las Rainbow Tables o Tablas Arcoíris consiste en emplear unas tablas especiales que contienen pares de contraseñas y hashes precalculados que se denominan cadenas arcoíris. El sistema consiste en comprobar si el hash objetivo forma parte de alguna de estas cadenas, es decir, comprobar si el hash está en la tabla. Este método podría parecer muy simple si no fuera porqué el formato de las tablas rainbow no es en texto plano, y tanto para su creación como para su sistema de búsqueda (optimizado) se emplean algoritmos especiales que nada tienen que ver con el método de fuerza bruta. Los ficheros de las Rainbow Tables tienen extensión .rt. Para conocer más sobre su contenido así como para ver  la explicación del algoritmo se recomienda las siguientes páginas: 

Esquema Rainbow Tables

Las Rainbow Tables están optimizadas, es decir, permiten almacenar información de hashes (cadenas hashes) de forma masiva, ampliando el rango de posibilidades de encontrar la contraseña respecto al método de la fuerza bruta. Además, como la comprobación se efectúa directamente hash objetivo contra hash de la tabla la velocidad es muchísimo mayor que con la fuerza bruta. Si el hash de la contraseña objetivo se halla en la tabla arcoíris es posible obtener el resultado en unos pocos minutos u horas. 

Debido a esta optimización, las tablas rainbow permiten tener éxito con contraseñas más largas y difíciles que con la fuerza bruta. Las tablas arcoíris se pueden generar en Kali Linux con una herramienta especial (rtgen), aunque lo recomendando es buscarlas y descargarlas de Internet. Por ejemplo la web del proyecto proporciona varias de ellas: http://project-rainbowcrack.com/table.htm indicando para que función hash se emplean, el número de caracteres y tipo de las contraseñas que pueden encontrar, la probabilidad de éxito, etc. Como puede apreciarse el tamaño de estas tablas es incluso superior a las empleadas en fuerza bruta, y es que al final resultan de aplicar una alta probabilidad de éxito gracias a la mayor combinatoria posible de hashes con la aplicación de los algoritmos. 

Tablas Rainbow disponibles para descargar

La herramienta por antonomasia para hacer tareas con las Rainbow Tables es Rainbowcrack, aunque en realidad se compone de varias herramientas que se explicarán a continuación. Para descargar la herramienta, que no suele venir por defecto en Kali Linux se puede emplear el siguiente comando:

				
					sudo apt update && sudo apt rainbowcrack
				
			

Los principales componentes de esta herramienta son: 

  • rtgen: Es el componente para generar tablas arcoíris. Aunque más arriba se ha indicado que es más útil descargar tablas en Internet que ya han sido debidamente probadas. Aun así se pueden generar con los comandos que se indican a continuación con un ejemplo. Las tablas generadas se almacenan en el directorio /usr/share/rainbowcrack.

Ampliar información de argumentos (en inglés): https://null-byte.wonderhowto.com/how-to/create-rainbow-tables-for-hashing-algorithms-like-md5-sha1-ntlm-0193022/

				
					sudo rtgen [ 
<algoritmo_hash> 
<tipo_caracteres> 
<longitud_minima_cadenas_texto_sin_formato_passwords> 
<longitud_maxima_cadenas_texto_sin_formato_passwords> 
<funcion_de_reduccion_optimizacion_combinaciones>
<longitud_de_cada_tabla>
<cadenas_a_generar>
<índice_rendimiento_equipo> ]

#Ejemplo
 rtgen ntlm loweralpha-numeric 1 7 0 1000 33554432 0

				
			
rtgen para generar tablas rainbow
  • rtsort: Sirve para optimizar las tablas generadas.  Recomendado hacerlo siempre después de generar una tabla.
				
					rtsort  <rainbowtable.rc>
				
			
  • rcrack: Es la herramienta para obtener las contraseñas en formato de texto plano a partir de una tabla rainbow y un hash objetivo o lista de hashes. El comando tipo es:
				
					rcrack <directorio_tablas> [-h HASH | -l <lista_haches.txt>]
				
			
rcrack para obtener contraseñas con Rainbow Tables

Comparativa Fuerza Bruta vs Rainbow Tables

A continuación se ofrece un cuadro comparativo respecto a los dos métodos de obtención de contraseñas a partir de un hash:

Comparación Rainbow Tables vs Fuerza Bruta

Se ha indicado en el cuadro que actualmente existe un sistema de seguridad adicional contra los ataques a contraseñas de fuerza bruta y Rainbow Tables denominado salt system. Cuando un usuario crea una contraseña y la registra en un sistema, en lugar de guardar la contraseña tal y como está en la base de datos, el sistema genera un valor de salt aleatorio y lo concatena con la contraseña del usuario antes de aplicar el algoritmo de la función hash. La contraseña concatenada con el salt se convierte en el valor que finalmente se almacena en la base de datos. El salt complica los ataques de diccionario y fuerza bruta, ya que se debe calcular hashes para cada posible combinación de contraseña y salt, lo que consume mucho tiempo y recursos.

Fichero SHADOW en Linux

En el bloque de Reconocimiento de entornos Linux se ha mostrado como obtener los datos del fichero Shadow. Este fichero contiene los hashes, que son las contraseñas de los usuarios encriptadas con una función hash. Los métodos para obtener las contraseñas en formato de texto plano a partir de los hashes son los mismos que para desencriptar los hashes NTLM del fichero SAM en Windows.  Estos métodos son la fuerza bruta y las Rainbow Tables y las explicaciones sobre estos métodos dadas en el apartado de Windows son las mismas, empleando para ello las mismas herramientas: John The Ripper y Rainbowcrack

Respecto a los hashes que se pueden encontrar en el fichero Shadow en las diferentes distros de Linux, se debe tener en cuenta que la función de hash o algoritmo de encriptado puede variar en función de la versión. Para saber el tipo de encriptado hay que fijarse en el dígito o número que está entre los dos símbolos $ en el inicio del hash. En el siguiente ejemplo se tiene la información de Shadow para un Kali Linux y otro para Red Hat (RHEL). Se puede ver en el inicio del hash que en uno los tres primeros es $6$ (RHEL) y en el otro $y$ (Kali Linux):

Información de tipo de encriptado en Shadow para distros Linux

Este formalismo en un estándar de Linux y la relación entre estos tres primeros dígitos y la función de algoritmo hash es la siguiente:

ID

HASH

$1$

MD5

$2a$

Blowfish

$2y$

Blowfish

$5$

SHA-256

$6$

SHA-512

$y$

Yescrypt

Método de obtención por fuerza bruta Shadow: John The Ripper

El método de obtención de contraseñas en formato de texto plano de los hashes en Shadow con John The Ripper es el mismo que con los hashes NTLM en Windows. Incluso es recomendable no añadir el argumento –format pues John The Ripper sabrá el tipo de hash por su cuenta. Solo en algunos casos como por ejemplo cuando la función de hash es Yescrypt se recomienda incluir el valor de formato. A continuación los ejemplos de obtención con un listado de contraseñas predefinido:

				
					#Por defecto
john --wordlist=<password_list> <hash_list.txt>
#Formato $y$
john --wordlist=<password_list> --format=crypt <hash_list.txt>

				
			
Obtención de contraseñas con John The Ripper para Shadow

Rainbow Tables para descifrar Shadow

El funcionamiento para la obtención de contraseñas a partir de los hashes con el método de las Rainbow Tables es el mismo que en Windows. Consiste en crear un fichero de tablas (con rtgen, ver arriba) u obtenerlo a través de Internet (por ejemplo: http://project-rainbowcrack.com/table.htm) en función del algoritmo (SHA1, MD5, SHA-256…). 

El principal hándicap para el buen funcionamiento de este método es que los hashes no tengan el mecanismo de salt y la capacidad de computación y almacenamiento de la máquina que se vaya a usar. Para los cifrados SHA-256 y SHA-512, debido al mayor tamaño del hash, es posible que el tamaño en gigabytes de la tabla a obtener sea de un tamaño considerable (aunque sea para contraseñas de pocos dígitos).