Introducción

Muchos pentesters cuando se menciona el password cracking hacen una mueca de desagrado como si estuviéramos hablando de un trabajo ingrato, tipo embadurnarse el cuerpo con filetes de ternera y tirarse al mar para hacer de cebo para tiburones.

El porque de esta reticencia nunca lo he tenido muy claro, he recibido diversas explicaciones al fenómeno, desde el clásico “no le veo muchas posibilidades” al innovador “si ya tienes los hashes, es que ya tienes acceso”.

En mi opinión, el password cracking es una disciplina que bien aplicada, puede ayudarnos en contextos donde de ninguna otra forma obtendríamos un acceso. Las interpretaciones anteriores son puntos de vista que normalmente no recogen la enorme variedad de escenarios donde el cracking de contraseñas es un arma verdaderamente útil.

El objetivo de este articulo es mostrar una visión general de los distintos contextos donde puede ser utilizado con éxito y sentar unas bases para comenzar a mejorar las técnicas aplicadas. Normalmente la gente que tiene unas expectativas tan bajas es debido principalmente a que sus éxitos con la disciplina son pobres o nulos, de ahí la importancia de saber distinguir cada escenario para poder aplicar la metodología apropiada.

Pasos previos

Para entrar en materia, separaremos los distintos escenarios y los requisitos necesarios para que estos sean aplicables. Para ello comenzaremos matizando lo que en mi opinión es la parte más relevante del password cracking: el tiempo.

Aunque la relatividad general diga que el tiempo es relativo, no hay nada menos relativo que el tiempo de proceso de un diccionario y un conjunto de reglas para un hash cuyo algoritmo tenga un tiempo de computación extremadamente lento. Esto puede implicar que las horas necesarias se multipliquen exponencialmente varias ordenes de magnitud hasta convertirse en algo totalmente impracticable.

La forma más sencilla de entender el tiempo es conocer las métricas de ese hash, las cuales pueden obtenerse con un comando muy sencillo de hashcat:

hashcat -b

Esto procesará todos los tipos de hashes que la herramienta puede computar, dándonos los valores individualmente. Como podéis ver en mi captura de ejemplo, no es lo mismo procesar NTLM (39016.3 MH/s) que WPA-EAPOL (369.7 kh/s) ya que hay tanta diferencia entre ellos que el ataque aplicado a uno, forzosamente no puede servirnos para el otro. Esto es algo que normalmente no veo mencionado cuando alguien habla de la materia, y su relevancia es absoluta.

¿Qué conclusión debemos sacar de esto? Que en función del escenario y el hash obtenido, deben aplicarse unas técnicas u otras. Es algo sencillo de comprender, un diccionario que tarde en pasarse 1 hora en NTLM tardará 41 días en WPA-EAPOL aproximadamente, todo esto en condiciones ideales.

password cracking

Una vez entendido esto, aquellos que hayáis tenido escaso éxito en el password cracking, podréis empezar a vislumbrar donde esta parte del problema.

Otro concepto que debe entenderse previamente es la política y el contexto del entorno de cada hash. No son el mismo tipo de passwords las que se usan para acceder a un servicio online (para lo cual es necesario un ataque online, perdiendo todas las ventajas posibles del uso de paralelización de GPU y siendo este el más lento) que las que alguien pone en el inicio de Windows, aquellas con las que cifra un documento Excel o la que pone en la red inalámbrica de su casa. Son contextos distintos y deben tratarse de distinta manera. Usar los mismos ataques solo nos hará perder el tiempo.

Pondré varios ejemplos reales de passwords obtenidas en distintos contextos:

Tipo Password
Inicio de Windows (NTLM) Carlos1974!
Wifi (WPA) Familiagomezpiso3b
Excel (Office 2013) contrasena

 

Debo remarcar que estas passwords no son inventadas, están extraídas del mundo real y ejemplifican correctamente aquello de lo que os hablo: los contextos de entorno.

En una empresa con una infraestructura basada en un dominio, normalmente las reglas que imperan suelen ser: cambio de password regular cada 90-180 dias, recordatorio de las ultimas passwords utilizadas para evitar su repetición y cierta complejidad. No obstante, el usuario medio de una empresa tiene una imaginación limitada, y la rotación continua no le ayuda en absoluto, ya que a nadie le gusta tener que memorizar algo complejo cada vez que toca cambiarla. El hastio juega a favor del password cracker, ya que implica PATRONES.

Tarde o temprano, un gran porcentaje de los usuarios forzados a cambiarse la password con regularidad desarrollan un patrón. A todo el mundo le gusta sentirse especial y creer que somos como copos de nieve únicos e inimitables, pero la realidad es que somos todos muy similares a la hora de desarrollar maneras de crear passwords viables. Como ejemplos os citaré varios de los patrones que yo me he encontrado:

(Mes)(año) (Ej: Marzo2020): En lugares con requisitos mas laxos es posible poner este tipo de passwords sin problema. El usuario suele elegir el mes y el año en el que le obligaron a hacer la rotación de contraseña (lo que suele provocar que a veces se encuentren varias contraseñas iguales) y también se encuentra alguna permutación de este patrón como (Estaciondelaño)(año) estilo Primavera2021.

(Nombrepropio)(año)(símbolo) (Ej: Maribel2012%): Un patrón que cumple la mayoría de requisitos de complejidad de contraseña en un dominio Microsoft. Suelen rotar el nombre entre el suyo, pareja e hijos y cuando finalizan la rotación ya ha cambiado el año. Aparentemente es una buena password: tiene mayúsculas, minúsculas, símbolos y números, así como 12 caracteres…pero que cumpla los requisitos de complejidad no significa que criptográficamente hablando sea segura. Lo primero que se hace en criptoanálisis es buscar patrones, en nuestro caso analizar el mensaje cifrado no nos proporciona información al ser un algoritmo de un único sentido pero si podemos hacer ataques de diccionario basados en reglas para obtener todas las posibles permutaciones de ese patrón en concreto y tendremos éxito en aquellos usuarios que lo utilicen.

(Ciudad)(año)(símbolo) (Ej: Sansebastian1994.): Similar al anterior, muchos optan por ciudades o incluso países pero básicamente el patrón es el mismo.

(palabraenleetspeak) (Ej: r3n7@b1l1d@d): Parece más complejo pero no lo es. Estamos más acostumbrados a interpretar letras que números y símbolos, pero el Leetspeak para los que no lo sepan es una sustitución simple de las letras de una palabra por símbolos o números que sean visualmente similares a ellas, tal como “a” por “@” o “i” por “1”.

Como veis, realmente el trabajo consiste en ir distinguiendo patrones y diseñando un sistema adaptado a cada contexto que los pruebe de una forma automatizada. Como ya deduciréis viendo las contraseñas de ejemplo de los distintos contextos, los patrones suelen ser distintos e investigarse de forma independiente.

No era objeto de este articulo el analizar con detenimiento todos los distintos contextos y patrones, únicamente servir como punto de introducción y base a toda esa información que desarrollaré en próximos artículos sin la cual, sería compleja de interpretar.

Básicamente, si únicamente debéis quedaros con una idea de este articulo esta puede resumirse en: El password cracking no es pasar un diccionario.