Ya ha
pasado casi un año desde la 2ª edición de la Security
High School y pronto tendremos la tercera. En el artículo de hoy
veremos un tema que tratamos mis compañeros Alfonso Luque, Rafael Santiago y yo en la charla Cracking Windows Password. Os animo a
acudir a este tipo de eventos para compartir información donde además de
aprender se conoce mucha gente.
¿Cómo se almacenan
las claves?
Normalmente cuando se trata de almacenar una contraseñas se
almacena en una base de datos cómo MySQL o SQLite, y digo normalmente porque no
es raro encontrar programas que almacenen contraseñas en texto plano y lo más
importante, sin guardar el hash de la clave en lugar de la misma clave.
¿Qué es un hash?
Un hash es el resultado de aplicarle una operación
matemática irreversible a unos datos de entrada (en este caso una contraseña) dando
como resultado una cadena de longitud fija.
Por ejemplo:
El resultado de realizar una función hash a la cadena “1234”
sería “81dc9bdb52d04dc20036dbd8313ed055”
y el resultado de realizar la misma función a la cadena “pepito” sería “c482af336ae81e4634dc84f94e67eed8”.
Como podemos observar las cadenas entrantes son de diferente
longitud y como resultado se consiguen cadenas totalmente diferentes salvo por
su longitud que es la misma.
Tipos de hash
Existen muchos tipos de hash y cada uno realiza de forma
diferente la función matemática que genera la cadena de salida, para una misma
cadena de entrada.
Por ejemplo:
El hash MD5 de “Admin” sería “21232f297a57a5a743894a0e4a801fc3”
mientras que el hash SHA-256 de
“Admin” sería “8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918”
Hay tipos de hash más antiguos como el MD5 que ya han sido
vulnerados y por lo cual no son seguros, y otros más nuevos como SHA-3 que por
el momento son más seguros. Pero en este artículo nos centraremos en dos tipos
de hash en concreto, LM y NTLM, que son los que utiliza Microsoft para
almacenar las contraseñas de los usuarios de Windows.
LM (LAN Manager)
Es el primer hash que utilizaron los sistemas Windows, sus
características y método para realizar el hash son ya muy conocidas, esto
sumado a que los métodos que utiliza no son muy buenos lo convierten en carne
de cañón vulnerable. Ha sido utilizado por Windows desde el Windows 3.1
hasta el famoso XP, pero a partir de Windows Vista, las contraseñas dejaron de
almacenarse con LM como medida de
seguridad y fue sustituida por su sucesor NTLM,
aunque, esta medida se puede revertir mediante configuración y volverse a
activar ya que Windows no la quitó por completo por motivos de retro
compatibilidad.
Estas son sus características y los patrones que seguiría
si le hiciésemos la función hash a la cadena “Admin1234":- - Rellena de “0” hasta llegar a 14 caracteres (admin123400000)
- - Convierte todas las letras a mayúscula (ADMIN123400000)
- - Parte la contraseña en dos (ADMIN12 – 3400000)
- - Utiliza el cifrado DES en las dos partes.
Dado que el propio algoritmo parte en 2 la contraseña antes
de realizar la función hash, resulta más fácil aún romper la contraseña ya que
es más fácil descifrar 2 cadenas de 7 dígitos en paralelo que 1 de 14 dígitos.
¿Por qué la contraseña debe de ser de más de 7 caracteres?
Por defecto el algoritmo rellena con "0" hasta
llegar a 14 caracteres, entonces al aplicar esta operación en una cadena de 7
caracteres, los otros 7 restantes sería "0000000", teniendo en cuenta
que el algoritmo también parte en 2 la contraseña, es fácil identificar
contraseñas de menos de 8 caracteres ya que siempre terminan igual (con el
resultado de hacerle el hash a 0000000).
NTLMv1 y NTLMv2 (NT
LAN Manager)
Versión mejorada de LM que incluye algunas mejoras de
seguridad con respecto a su antecesor. El proceso de ataque a este tipo de hash
conlleva un aumento exponencial de tiempo sobre todo si se utilizan más de 8
caracteres, mezclando mayúsculas, minúsculas, números y caracteres especiales.
- - Diferencia entre mayúscula y minúscula
- - Más simple que LM
- - Más robusto a su vez
- - Utiliza cifrado MD4
¿Dónde guarda Windows
los hash de las contraseñas?
Por defecto Windows guarda los hash de las contraseñas en la
ruta %systemdrive%\Windows\System32\config
, en un archivo llamado SAM
cuyo contenido está cifrado. Pero como Windows no sabe hacer nada a derechas,
almacena la “clave” que descifra el contenido del fichero SAM en otro fichero sin cifrar llamado SYSTEM que está en la misma carpeta...
En las versiones Windows Server con Active directory los hashes se almacenan en la ruta %systemdrive%\Windows\NTDS
en un archivo llamado ntds.dit, pero no entraremos en detalles ya que
nos centraremos en las versiones antes mencionadas de Windows.
Proceso para obtener
los hashes de los usuarios
Ahora pasaré explicar cómo obtener los hash de los usuarios
del equipo a auditar. Para ello utilizaremos Kali Linux para exportar los hash
a un fichero de texto plano. Por si os preguntáis qué es Kali Linux, es una
distribución Linux diseñada para hacer auditorias de análisis forense que
incluye multitud de herramientas para ello.
En primer lugar tendremos
que bootear con una versión live de Linux como por ejemplo Kali.
Utilizaremos el modo forense, que lo que hace es impedir
al sistema montar automáticamente cualquier dispositivo de almacenamiento, más
adelante veremos el porqué.
Una vez inicie el sistema procederemos a identificar el
disco en el que está Windows.
Utilizaremos
para ello el comando fdisk, y del resultado de este nos interesa saber cual es
el dispositivo donde está Windows, en este caso /dev/sda1 y su formato para
posteriormente montarlo.
Ahora
que tenemos identificada la partición de Windows la montamos, previamente
tendremos que crear una carpeta donde lo montaremos, después utilizamos el
comando mount con la opción –t para especificar el formato de la partición y –r
para montarlo en modo “solo lectura”, ya que estamos realizando un análisis
forense y no podemos modificar nada del disco (de ahí el utilizar el forensic
mode al principio).
Como
he explicado anteriormente, el fichero SAM es donde se almacenan los hash, y
para obtenerlos necesitaremos además de ese fichero, también necesitaremos el
archivo SYSTEM para poder descifrar el contenido del SAM.
Para ello nos iremos primero a la ruta Windows/system32/config y nos los copiamos a nuestra carpeta
personal. Una vez copiemos ambos ficheros, usaremos la herramienta samdump2 con
la sintaxis samdump 2 –o ruta_salida
SYSTEM SAM
Como
resultado de utilizar samdump2 obtendremos un fichero con este formato,que como
podemos observar hay dos hash por cada cuenta.
El de la izquierda es LM y el
de la derecha NTLM
Si nos
bien fijamos nos daremos cuenta de que el hash de la izquierda se repite en
diversas ocasiones, y no, no es porque sean la mísma contraseña. En esta prueba
hemos utilizado un windows 7, recordemos que a partir de windows vista el hash
LM estaba desactivado como medida de seguridad. Entonces os preguntareis ¿que
leches es ese hash? aa3b435b51404eeaa3b435b51404ee es el resultado de aplicarle
la función hash a un valor NULO, y como una de las características de LM es
partir la contraseña en dos partes el resultado es una cadena con los
caracteres “aa3b435b51404ee” repetidos 2 veces (null-null).
¿Como
crackear los hash?
Existen
diferentes modos para obtener la contraseña de los hash, podemos optar por el
método online que es el más fácil, y el método offline que es un poco más
complejo, ya que tenemos que interactuar con diferentes herramientas.
Método online
Es
simple, utilizando BBDD online de las cuales hay miles y con solo escribir el
hash nos dirá la contraseña si la tienen en su base de datos.
Ejemplos
de páginas que podemos utilizar:
www.somd5.com/ (si sabemos un poquito de japones XD)
Método offline 1: Fuerza bruta
Es el
método más simple y a la vez más complicado para obtener resultados ya que
consiste en probar TODAS las
combinaciones posibles dentro de un charset determinado que nosotros le
indiquemos al programa.
Teniendo
en cuenta que una contraseña puede tener mayúsculas, minúsculas , números y
caracteres especiales abcdfghijklmnñopqrstuvwxyz -
ABCDFGHIJKLMNÑOPQRSTUVWXYZ - 1234567890 - (simbolos) el
numero de posibles combinaciones asciende a miles o incluso millones todo dependiendo
de la longitud de la contraseña, esto traducido en tiempo... demasiado si somos
impacientes.
Así te puedes quedar esperando a que saque la pass... |
Método offline 2: Ataque por diccionarios
Este método es parecido al anterior con la diferencia de
que en vez de probar TODAS las posibles combinaciones, probará todas las
combinaciones que le pasemos a través de un diccionario de palabras
clave, el cual podemos crear nosotros mismos o bajarlo desde internet donde hay
infinidad de diccionarios, incluso hay webs que ofrecen diccionarios basados en
temas concretos, como por ejemplo videojuegos, películas, grupos de música,
etc...
Método offline 3: Ataque por tablas RAINBOW
Este será el método que utilicemos en este articulo las
tablas rainbow, que resumiendo un poco cómo funcionan lo que hacen, son tablas que
almacenan 2 cadenas de caracteres, una palabra inicial y otra final, la palabra
inicial es una completamente aleatoria, y la palabra final es el resultado de
hacerle la función hash a la palabra inicial y después al resultado de esta operación
realizarle una función de reducción, que a su vez se le vuelve a realizar la
función hash y después otra función de reducción, así consecutivamente hasta un
determinado numero de veces. Al pasarle nosotros el hash, comprobará si la
palabra final que da este hash coincide con alguno de los que tiene la tabla.
Para realizar esto utilizaremos un programa llamado
OPHCrack, el cual es bastante fácil de utilizar, además tiene una versión live
para bootearlo en una memoria USB y realizar todo el proceso anterior de
obtención del hash y de forma completamente automática empezar a crackear los
hashes que tenga el equipo (todo bien mascadito). Nosotros utilizaremos el
programa para windows y lo haremos de forma manual.
Proceso
de crackeo con OPHCRACK
El proceso es simple ya que se divide en tres sencillos
pasos:
1º: Cargamos los ficheros que hemos obtenido previamente
en formato txt con samdump2
2º: Cargamos las tablas RAINBOW
Simplemente tendremos que seleccionar la tabla que
queremos cargar y indicarle la ruta de donde está. El programa viene por
defecto con 4 tablas de diferentes tamaños y para diversos sistemas como son
Windows XP y Vista.
3º: Pulsar crack y esperar...
El
resultado después de 1 hora de espera es este.
Una lista con todos las contraseñas encontradas salvo
una… la del usuario SHS2016, y es porque a la hora de crear la contraseña tuvimos en cuenta las recomendaciones típicas.
El objetivo de este articulo era haceros ver lo fácil que
resulta vulnerar las contraseñas en el sistema operativo Windows, así que
utilizad contraseñas con las recomendaciones de seguridad que ya conocemos.
Ahora os dejaré una POC en video para que veáis todo el proceso paso a paso.
Esto ha sido todo, espero que hayan aprendido tanto como
yo aprendí en su día con Eduardo Sánchez "mi profe de seguridad" y
que les haya servido de ayuda.
Un saludo :)