En capítulos anteriores…
En el artículo anterior, exploramos las venturas y desventuras habituales al empezar en el mundo del password cracking, así como los posibles dolores de cabeza resultantes de una mala metodología que pueden desembocar en un irrefrenable deseo de tirarnos llorosos a las ruedas de un coche.
Para evitar todo ello desarrollamos una serie de conceptos básicos que siempre deben tenerse en cuenta a la hora de abordar esta disciplina. Por recapitular de forma rápida, actualmente deberíamos siempre tomarnos un tiempo antes de empezar, para evaluar el tipo de hash, la política y el contexto.
Esta triada, detallada en el texto previo nos permitirá calcular la viabilidad de un ataque concreto antes siquiera de empezar.
A partir de aquí, podemos comenzar el laborioso trabajo de la extracción de patrones, los cuales también se mencionaron anteriormente.
Hoy trabajaremos algo más en profundidad en este tema.
Descubrimiento de patrones
El descubrimiento de patrones es toda una ciencia y necesitamos de una serie de ingredientes imprescindibles para aumentar nuestra tasa de éxito.
Muchos patrones podemos deducirlos simplemente pensando, como aquellos que se mencionaron en el articulo anterior, pero otros sencillamente no se nos van a ocurrir.
¿De que forma podemos dar con un patrón desconocido? Únicamente conociendo la palabra patronizada. ¿Y cómo podemos descubrir esta sin conocer su patrón? Ah, ahí habéis dado con la clave de esto: es un maravilloso bucle infinito, como la escalera de Penrose. Yo suelo llamarlo el bucle de password cracking. El objeto de este articulo es aprender a romperlo.
Primera llave: Fuerza bruta
Decía Asimov que la violencia es el ultimo recurso del incompetente, pero seguro que el no contaba con una RTX 3080 Ti con 10240 nucleos CUDA listos para machacar a esos entrometidos hashes que se empeñan en seguir intactos.
Si compañeros, la paralelización es nuestra amiga en la fuerza bruta, especialmente con longitudes de 1 a 7 caracteres. Debo señalar que la relevancia aquí no es crackear unos cuantos hashes más que se nos resisten, si no encontrar aquellos patrones que los gobiernan. Un hash es para hoy, pero un patrón es para siempre.
Esto se realiza en hashcat con este simple comando:
hashcat -a 3 -m [TIPO DE HASH] -w 3 -p : -O –hwmon-disable –outfile-format=2 -i –increment-min=1 –increment-max=7 -1 ?d?l?u?s [ARCHIVO DE HASHES] ?1?1?1?1?1?1?1
De esta manera, en escasos minutos calcularemos todas las permutaciones hasta 7 caracteres de mayúsculas, minúsculas, dígitos y símbolos. Si alguien tiene patrones de esta longitud, serán nuestros…y recordad que podremos extrapolarlos a longitudes mayores una vez obtenidos.
Segunda llave: Diccionario con reglas aleatorias
Hashcat nos permite aplicar reglas a los diccionarios que utilicemos. ¿Qué es una regla? Es una forma de modificar la palabra original aplicandole un patrón predeterminado. Por ejemplo, poner la primera letra en mayúscula y agregarle una admiración al final.
Esto es maravilloso cuando conocemos los patrones, pero inútil si son desconocidos. No obstante, también posee una opción completamente apropiada en este escenario: la generación aleatoria. Yo uso esta opción para que el propio azar genere patrones que yo he podido pasar por alto, una vez obtenidas estas passwords podemos incorporar lo averiguado a nuestro conocimiento de patrones y utilizarlo para extrapolar otras passwords aun sin descubrir.
hashcat -a 0 -m 1000 -w 2 –force -p : –hwmon-disable –outfile-format=2 -g 1000000 [ARCHIVO DE HASHES] [ARCHIVO DE DICCIONARIO]
Este método puede ser aún más potente si hacemos uso de otra opción poco conocida, el debug-mode. Esto nos permite comprobar que reglas han sido exitosas y guardarlas en un archivo para su posterior análisis. Todas estas reglas se redirigen haciendo uso de la siguiente sintaxis.
–debug-mode=1 –debug-file=[ARCHIVO DONDE GUARDAR LAS REGLAS]
De esta manera, con el tiempo suficiente, podremos diseñar un conjunto de reglas de forma totalmente automatizada basada en nuestros descubrimientos.
Conclusiones
Como hemos visto, para romper el bucle del password cracking tenemos que encontrar maneras de obtener aquellos patrones que rigen las contraseñas que aun no hemos conseguido. Esto podemos intentar hacerlo simplemente pensando patrones no descubiertos, pero no es la más eficiente, y por eso hemos mencionado dos claves que nos pueden aportar una valiosa ayuda en estos escenarios.
En las próximas entregas veremos como convertir esos patrones obtenidos en valiosos archivos de reglas que podremos utilizar en conjunción a nuestros diccionarios para aumentar su efectividad. Hasta entonces, paciencia.
Consultor de Ciberseguridad y Responsable del Departamento de Auditoría y Pentesting en Global Technology