
PACK (Kit de Análisis y Descifrado de Contraseñas)
PACK (Password Analysis and Cracking Toolkit) es una colección de utilidades desarrolladas para ayudar en el análisis de listas de contraseñas con el fin de mejorar el descifrado de contraseñas mediante la detección de patrones de máscaras, reglas, conjuntos de caracteres y otras características de las contraseñas. El kit genera archivos de entrada válidos para la familia de descifradores de contraseñas Hashcat.
NOTA: El kit en sí mismo no puede descifrar contraseñas, sino que está diseñado para hacer más eficiente el funcionamiento de los descifradores de contraseñas.
Antes de comenzar a utilizar el kit, debemos establecer un criterio de selección de listas de contraseñas. Dado que buscamos analizar la forma en que las personas crean sus contraseñas, debemos obtener la muestra más grande posible de contraseñas filtradas. Una de esas excelentes listas se basa en el compromiso de RockYou.com. Esta lista proporciona una colección lo suficientemente grande y diversa que ofrece buenos resultados para contraseñas comunes utilizadas en sitios similares (por ejemplo, redes sociales). El análisis obtenido de esta lista puede no funcionar para organizaciones con políticas de contraseñas específicas. Por lo tanto, seleccionar una entrada de muestra debe ser lo más cercana posible a tu objetivo. Además, trata de evitar obtener listas basadas en contraseñas ya descifradas, ya que generará un sesgo estadístico de las reglas y máscaras utilizadas por el/los individuo(s) que descifraron la lista y no por los usuarios reales.
El análisis más básico que puedes realizar es simplemente obtener la longitud más común, el conjunto de caracteres y otras características de las contraseñas en la lista proporcionada. En el siguiente ejemplo, usaremos 'rockyou.txt' que contiene aproximadamente 14 millones de contraseñas. Ejecuta statsgen.py con la siguiente línea de comandos:
$ python statsgen.py rockyou.txt
A continuación se muestra la salida del comando anterior:
_
StatsGen #.#.# | |
_ __ __ _ ___| | _
| '_ \ / _` |/ __| |/ /
| |_) | (_| | (__| <
| .__/ \__,_|\___|_|\_\
| |
|_| [email protected]
[*] Analizando contraseñas en [rockyou.txt]
[+] Analizando 100% (14344390/14344390) de las contraseñas
NOTA: Las estadísticas a continuación son relativas al número de contraseñas analizadas, no al número total de contraseñas
[*] Longitud:
[+] 8: 20% (2966037)
[+] 7: 17% (2506271)
[+] 9: 15% (2191039)
[+] 10: 14% (2013695)
[+] 6: 13% (1947798)
...
[*] Conjunto de caracteres:
[+] loweralphanum: 42% (6074867)
[+] loweralpha: 25% (3726129)
[+] numeric: 16% (2346744)
[+] loweralphaspecialnum: 02% (426353)
[+] upperalphanum: 02% (407431)
...
[*] Complejidad de contraseña:
[+] digit: min(0) max(255)
[+] lower: min(0) max(255)
[+] upper: min(0) max(187)
[+] special: min(0) max(255)
[*] Máscaras simples:
[+] stringdigit: 37% (5339556)
[+] string: 28% (4115314)
[+] digit: 16% (2346744)
[+] digitstring: 04% (663951)
[+] othermask: 04% (576324)
...
[*] Máscaras avanzadas:
[+] ?l?l?l?l?l?l?l?l: 04% (687991)
[+] ?l?l?l?l?l?l: 04% (601152)
[+] ?l?l?l?l?l?l?l: 04% (585013)
[+] ?l?l?l?l?l?l?l?l?l: 03% (516830)
[+] ?d?d?d?d?d?d?d: 03% (487429)
...
NOTA: Puedes reducir el número de valores atípicos mostrados incluyendo el indicador --hiderare, que no mostrará ningún elemento con una ocurrencia inferior al 1%.
Esto es lo que podemos aprender inmediatamente de la lista anterior:
La última sección, "Máscaras avanzadas", contiene las máscaras que ocurren con más frecuencia en el formato de Hashcat. Los símbolos individuales se pueden interpretar de la siguiente manera:
?l - un solo carácter en minúscula
?u - un solo carácter en mayúscula
?d - un solo dígito
?s - un solo carácter especial
Por ejemplo, la primera máscara, "?l?l?l?l?l?l?l?l", coincidirá con todas las contraseñas alfabéticas en minúsculas. Dado el tamaño de la muestra, podrás descifrar aproximadamente el 4% de las contraseñas. Sin embargo, después de generar la salida inicial, es posible que te interese usar filtros para reducir los datos de las contraseñas.
Veamos cómo los usuarios de RockYou tienden a seleccionar sus contraseñas usando la máscara simple "stringdigit" (una cadena seguida de números):
$ python statsgen.py ../PACK-0.0.3/archive/rockyou.txt --simplemask stringdigit -q --hiderare
[*] Analizando contraseñas en [rockyou.txt]
[+] Analizando 37% (5339556/14344390) de las contraseñas
NOTA: Las estadísticas a continuación son relativas al número de contraseñas analizadas, no al número total de contraseñas
[*] Longitud:
[+] 8: 23% (1267260)
[+] 7: 18% (981432)
[+] 9: 17% (939971)
[+] 10: 14% (750938)
[+] 6: 11% (618983)
[+] 11: 05% (294869)
[+] 12: 03% (175875)
[+] 13: 01% (103047)
[+] 14: 01% (65958)
[*] Conjunto de caracteres:
[+] loweralphanum: 88% (4720184)
[+] upperalphanum: 06% (325941)
[+] mixedalphanum: 05% (293431)
[*] Complejidad de contraseña:
[+] digit: min(1) max(252)
[+] lower: min(0) max(46)
[+] upper: min(0) max(31)
[+] special: min(0) max(0)
[*] Máscaras simples:
[+] stringdigit: 100% (5339556)
[*] Máscaras avanzadas:
[+] ?l?l?l?l?l?l?d?d: 07% (420318)
[+] ?l?l?l?l?l?d?d: 05% (292306)
[+] ?l?l?l?l?l?l?l?d?d: 05% (273624)
[+] ?l?l?l?l?d?d?d?d: 04% (235360)
[+] ?l?l?l?l?d?d: 04% (215074)
...
La parte superior de la salida especifica qué porcentaje del total de contraseñas se analizó. En este caso, al descifrar solo las contraseñas que coinciden con la máscara "stringdigit", solo es posible recuperar alrededor del 37% del conjunto total, tal como se mostró en la salida original. A continuación, parece que solo el 11% de este tipo de contraseña utiliza algo que no sean minúsculas. Por lo tanto, sería inteligente concentrarse solo en cadenas en minúsculas que coincidan con esta máscara. Finalmente, en la sección "Máscara avanzada", podemos ver que la mayoría de las contraseñas "stringdigit" consisten en una cadena con dos o cuatro dígitos al final. Con la información obtenida de la salida anterior, podemos comenzar a crear una imagen mental de los patrones de generación de contraseñas de los usuarios objetivo.