
grandes rulesets de hashcat generados a partir de contraseñas comprometidas del mundo real
Advertencia de mantenimiento del proyecto: Este proyecto se considera completado. No se realizarán solicitudes de extracción ni cambios en este proyecto en el futuro a menos que sean errores reales o migraciones para permitir que estas reglas funcionen con versiones más recientes de hashcat.
Pantagrule es una serie de reglas para el crackeador de contraseñas hashcat generadas a partir de grandes cantidades de datos reales de compromiso de contraseñas. Si bien los archivos de reglas de Pantagrule pueden ser grandes, las reglas son ajustables y funcionan mejor que muchos conjuntos de reglas existentes.
Pantagrule se generó utilizando el algoritmo de ruta inversa de Levenshtein de PACK para la generación automatizada de reglas (Kacherginsky, 2013). Luego, la salida de PACK se ordenó según el número de veces que PACK generó la regla para crear el conjunto de reglas base. Este proceso es similar a las reglas generadas por _NSAKEY para las competiciones de descifrado de contraseñas en 2014 (_NSAKEY, 2014), sin embargo, Pantagrule se generó a partir de un conjunto de contraseñas significativamente más grande.
La versión 2 de Pantagrule se desarrolló a partir del corpus público "founds" de hashes.org, una lista de palabras pública de primera clase. Esto produce resultados más transparentes que la variante original, que utilizaba un corpus propietario que contenía 842,643,513 contraseñas únicas.
Cuando se introducen conjuntos de reglas tan grandes en PACK, se obtienen millones de reglas. Sin embargo, dado que la mayoría de las reglas generadas aparecen solo unas pocas veces, la mayoría de las reglas útiles son las que el algoritmo genera con mayor frecuencia. Este repositorio contiene un subconjunto de reglas generadas por PACK mientras se iteraba a través del corpus existente.
Para generar una optimización de segunda pasada de las reglas contra datos del mundo real, las mejores un millón de reglas generadas se ejecutaron contra la lista NTLM de Pwned Passwords utilizando la lista de palabras rockyou. Cualquier regla que descifró una contraseña se agregó a su propia lista y las reglas con peor rendimiento se descartaron.
Se crearon cuatro tipos de optimización:
popular.rule: pantagrule.1m ejecutado contra los 25,000,000 principales de contraseñas del conjunto HIBP.random.rule: pantagrule.1m ejecutado contra 25,000,000 contraseñas seleccionadas aleatoriamente del conjunto HIBP.hybrid.rule: Una lista ordenada de una combinación de las reglas popular y random más exitosas, luego reducida a la mitad, en un intento de crear un conjunto de reglas más ligero y "equilibrado" que funcione en un conjunto de muestra más grande.one.rule: Una versión de OneRuleToRuleThemAll en la que se agregan las reglas hybrid de mejor rendimiento, y la lista se trunca al tamaño del conjunto de reglas dive. Curiosamente, solo hay una superposición de un par de miles de reglas con OneRuleToRuleThemAll y las reglas de Pantagrule, lo que hace que las dos estrategias sean complementarias. La regla one de Pantagrule funciona mejor que otras listas conocidas de este tamaño, y se recomienda comenzar con este conjunto de reglas antes de intentar una de las variantes más grandes.Después del éxito de estos grandes conjuntos de reglas, se intentó hacer lo inverso de la variante royce, en la que se utilizó la metodología original de Pantagrule pero ambos conjuntos de datos eran diferentes. Pantagrule ahora utiliza la lista pública "founds" de hashes.org como base de lista de palabras para la generación de reglas, y luego se realizó una pasada de optimización contra la lista NTLM V6 de Have I Been Pwned. Dada la naturaleza completamente pública de los datos utilizados, también permite la publicación de datos de reproducibilidad brutos, incluido pantagrule.v2.1m.rule, que son el millón de reglas principales generadas por esta metodología. Los datos para V5 y V6 son los mismos para los 25 millones de contraseñas principales.
Para esta versión, la forma en que se genera one ha cambiado. Para generar one, la lista completa de 1 millón se agregó a OneRuleToRuleThemAll.rule y luego todo el conjunto se calibró en Pwned V6, en lugar de solo agregar reglas y truncar.
Las convenciones de nomenclatura de las reglas ahora han cambiado al formato pantagrule.${corpus}.${trainingversion}.${extension}. Esto facilita la comprensión de para qué fue optimizada la regla. Por ejemplo, para pantagrule.hashorg.v6.random, utilizamos la metodología random con hashes.org como base para la generación de reglas, optimizada en Pwned Passwords V6.
Las reglas originales se entrenaron utilizando la lista de palabras propietaria junto con el conjunto Pwned Passwords NTLM v5 usando rockyou.txt como base. Dado que los "datos de entrenamiento" y los datos de validación son los mismos, tendría sentido verlos optimizados para el conjunto de datos V5.
royceA petición del colaborador de hashcat Royce Williams, también se ejecutaron optimizaciones del millón de reglas principales con la lista founds de hashes.org. Esto se debe a que el corpus HIBP está relativamente sucio, y es probable que la lista founds de hashes.org produzca un conjunto de reglas más práctico para el descifrado en el mundo real. Estas se han agregado como las variantes royce. Las optimizaciones royce parecen consistir en un número marginalmente menor de reglas en general, y random.royce es sustancialmente más efectiva en una larga cola de contraseñas que la random original. El rendimiento no aumentó con respecto a las reglas existentes en algunas variantes, pero dado que los datos de entrenamiento y validación del Pantagrule original provienen ambos del conjunto de datos Pwned Passwords, esto no parece sorprendente. Las variantes Pantagrule royce existen en la carpeta rules/royce.
Para probar cualquier éxito de la estrategia Pantagrule frente a otros conjuntos de reglas, ejecutaremos datos de validación en los 25 millones principales de contraseñas de Pwned Passwords V5 y los 100 millones principales de contraseñas de Pwned Passwords V5 para comprender la efectividad de las reglas para descifrar la "larga cola" con cada conjunto de reglas. El rockyou.txt canónico será nuestro diccionario y nuestra línea base.
La generación de la variante original se realizó en un equipo con 8x 1070Ti ejecutando hashcat v5.1.0. Las variantes Pantagrule royce se crearon en un equipo con 4x Radeon VII ejecutando la compilación git de hashcat v5.1.0-1774-gf96594ef. Las variantes hashorg.v6 se crearon y validaron (muy lentamente) en una sola NVIDIA Tesla M4, una sola 1070Ti y hashcat v6.1.0.
Para observar el rendimiento de las reglas contra contraseñas muy comunes, 0-25M se separa en su propia columna. La columna RPP son las reglas por porcentaje en el conjunto de datos de 100M. Esto se calcula usando la fórmula rpp = Math.round(num_rules / (0_100m_percent - 6.450)). Cuanto mayor sea este número, más reglas se ejecutan por porcentaje descifrado. Esto ayuda a comprender los rendimientos decrecientes en los conjuntos de reglas y da una idea del costo amplificado de ejecutar las reglas en hashes más lentos.
Este trabajo confirma las limitaciones del algoritmo LRP de PACK observadas originalmente por _NSAKEY en conjuntos de datos modernos cuando se usa el diccionario rockyou. Si bien el algoritmo LRP genera reglas que aumentan el porcentaje de descifrado, lo hace con un gran aumento en el espacio de búsqueda. Por esta razón, Pantagrule es más útil en casos donde el descifrado difícil requiere reglas exóticas.
Es importante señalar que si puedes usar PACK para generar reglas basadas en un corpus específico y luego apuntar tus hashes restantes con él, es probable que obtengas un mayor porcentaje de descifrado que usando uno de estos grandes conjuntos de reglas. Por ejemplo, Pantagrule V2 no funciona tan bien en PPv5 como el conjunto de reglas calibrado para v5.
Desde el lanzamiento original de Pantagrule, estas reglas han demostrado su valía en múltiples compromisos de equipos rojos en grandes empresas de tecnología y consultorías por igual. La lista original pantagrule.1m descifró el 8% de los hashes HIBP restantes que habían resistido el corpus utilizado para generar Pantagrule, los conjuntos de reglas comunes anteriores, una fuerza bruta alfanumérica de 7 caracteres y las topologías PathWell de KoreLogic.
Como incluso el autor de la meta-regla One Rule to Rule Them All (Hunt, 2017) afirma, no existe una regla que funcione mejor que otras. Cada caso de uso es diferente, y cada fuente de reglas puede ser una que te ayude más que otra en un volcado de hashes específico o con una lista de palabras específica. Tenga en cuenta que estos datos no muestran qué se ha descifrado; algunas reglas han descifrado hashes que otras reglas no han descifrado.
Las reglas de Pantagrule se publican bajo la licencia MIT. Siéntete libre de integrarlas en tus propias herramientas.
| Reglas | Número de reglas | V5 25M | V5 100M | RPP |
|---|
| Sin reglas (solo rockyou.txt) | 0 | 16.549% | 6.450% | N/A |
| pantagrule.private.v5.one | 99,092 | 79.814% | 69.417% | 1,574 |
| pantagrule.private.v5.hybrid | 355,205 | 81.346% | 73.372% | 5,308 |
| pantagrule.private.v5.popular | 478,736 | 81.792% | 73.544% | 7,135 |
| pantagrule.private.v5.random | 616,236 | 81.687% | 69.805% | 8,828 |
| pantagrule.hashorg.v6.one | 99,092 | 74.500% | 60.573% | 1,831 |
| pantagrule.hashorg.v6.hybrid | 339,953 | 77.649% | 68.341% | 5,493 |
| pantagrule.hashorg.v6.popular | 514,416 | 80.668% | 72.377% | 6,931 |
| pantagrule.hashorg.v6.random | 638,773 | 80.603% | 72.713% | 8,614 |
| pantagrule.private.hashorg.one.royce | 99,092 | 79.618% | 69.092% | 1,582 |
| pantagrule.private.hashorg.hybrid.royce | 314,268 | 81.068% | 73.082% | 4,716 |
| pantagrule.private.hashorg.popular.royce | 420,984 | 81.386% | 73.102% | 6,316 |
| pantagrule.private.hashorg.random.royce | 592,235 | 81.659% | 74.010% | 8,766 |
| best64 | 64 | 45.117% | 24.985% | 3 |
| hob064 | 68 | 37.786% | 19.773% | 5 |
| OneRuleToRuleThemAll | 52,014 | 78.058% | 64.541% | 895 |
| d3adhob0 | 57,548 | 51.274% | 34.800% | 2,030 |
| dive | 99,092 | 77.111% | 63.314% | 1,743 |
| _NSAKEY V1 | 123,289 | 76.42% | 64.121% | 2,138 |
| _NSAKEY V2 | 123,289 | 76.882% | 64.472% | 2,124 |