Password Cracking Tips & Tricks
Password Cracking Tips & Tricks
Como hemos visto, existen numerosas maneras en las que podemos obtener credenciales de un usuario, pero no siempre están en forma de una contraseña en texto plano. En cambio, es más común hoy en día recuperar varios hashes. Estos podrían ser NTLM, NetNTLM, SHA o incluso tickets de Kerberos.
Algunos hashes como NTLM pueden ser utilizados tal como están (por ejemplo, pass the hash), pero otros no son tan útiles a menos que podamos crackearlos para recuperar la contraseña original en texto plano. Independientemente del tipo de hash, existen metodologías genéricas para el cracking de contraseñas que cubriremos aquí.
Dos aplicaciones muy comunes para lograr esto son hashcat y John the Ripper.
Info
Si deseas copiar los hashes para intentar crackearlos por ti mismo, necesitarás hacerlo en tu propia computadora, ya que las máquinas virtuales del laboratorio no están optimizadas para cómputo.
Wordlists
Un ataque "wordlist" o "dictionary" es el modo más sencillo de cracking de contraseñas, en el que simplemente leemos una lista de posibles contraseñas e intentamos cada una línea por línea. Existen muchas listas populares, incluyendo la venerable lista rockyou. El repositorio SecLists también tiene una colección extensa para diferentes aplicaciones.
hashcat.exe -a 0 -m 1000 ntlm.txt rockyou.txt
58a478135a93ac3bf058a5ea0e8fdb71:Password123
Donde:
-a 0especifica el modo de ataque con wordlist.-m 1000especifica que el hash es NTLM.ntlm.txtes un archivo de texto que contiene el hash NTLM a crackear.rockyou.txtes la wordlist.
Info
Usa hashcat.exe --help para obtener una lista completa de modos de ataque y tipos de hash.
Este ataque se realiza prácticamente al instante porque 'Password123' está presente en la wordlist:
PS C:\> Select-String -Pattern "^Password123$" -Path rockyou.txt -CaseSensitive
rockyou.txt:33523:Password123
Aunque es rápido, no es muy flexible, ya que si la contraseña no está en la lista, no podremos crackearla.
Wordlists + Rules
Las reglas son un medio para extender o manipular las palabras "base" en una wordlist de maneras que son hábitos comunes entre los usuarios. Estas manipulaciones pueden incluir el cambio de mayúsculas/minúsculas (por ejemplo, a a A), reemplazo de caracteres (por ejemplo, a a @) y adición/eliminación de caracteres (por ejemplo, password a password!). Esto permite que nuestras wordlists sean más pequeñas en tamaño (porque no necesitamos almacenar cada permutación), pero con la desventaja de un tiempo de cracking ligeramente más lento.
hashcat.exe -a 0 -m 1000 ntlm.txt rockyou.txt -r rules\add-year.rule
acbfc03df96e93cf7294a01a6abbda33:Summer2020
Donde:
-r rules\add-year.rulees nuestro archivo de reglas personalizado.
La lista rockyou no contiene Summer2020, pero sí contiene la palabra base, Summer.
PS C:\> Select-String -Pattern "^Summer2020$" -Path rockyou.txt -CaseSensitive
PS C:\> Select-String -Pattern "^Summer$" -Path rockyou.txt -CaseSensitive
rockyou.txt:16573:Summer
La wiki de hashcat contiene toda la información necesaria para escribir una regla personalizada que agregue el año 2020 a cada palabra en rockyou. Podemos ver que para añadir un carácter, usamos $X. Por lo tanto, para agregar "2020", solo necesitamos $2$0$2$0.
PS C:\> cat hashcat\rules\add-year.rule
$2$0$2$0
Info
Hashcat también incluye muchos archivos de reglas en el directorio de reglas que puedes utilizar.
Masks
Un ataque de fuerza bruta es cuando probamos todas las combinaciones de un espacio de claves dado. Para caracteres alfanuméricos en minúsculas (de 3 caracteres), significaría probar aaa, aab, aac... hasta llegar a zzz. Esto consume mucho tiempo y no es muy eficiente.
Un ataque con máscara es una evolución sobre el ataque de fuerza bruta y nos permite ser más selectivos sobre el espacio de claves en ciertas posiciones.
Un patrón común sería una contraseña que comienza con una mayúscula, seguida de minúsculas y termina con un número (por ejemplo, Password1). Si usáramos fuerza bruta para descifrar esta combinación, tendríamos que usar un conjunto de caracteres que incluya mayúsculas, minúsculas y números (62 caracteres en total). Una contraseña de longitud 9 equivale a 62^9 (13,537,086,546,263,552) combinaciones.
Mi computadora de escritorio personal puede descifrar NTLM a una velocidad de ~30GH/s (30,000,000,000/s), lo que tardaría un poco más de 5 días en completar el espacio de claves (aunque encontraría la contraseña mucho antes de llegar al final).
Hashcat concuerda con este cálculo:
Time.Started.....: Mon Sep 14 17:35:17 2020 (5 mins, 11 secs)
Time.Estimated...: Sat Sep 19 23:47:27 2020 (5 days, 6 hours)
En contraste, una máscara nos permitiría atacar este patrón de contraseña de una manera mucho más eficiente. Por ejemplo, en lugar de usar el espacio de claves completo en el primer carácter, podemos limitarnos solo a mayúsculas y de manera similar con las otras posiciones.
Esto reduce las combinaciones a 262626262626262610 (2,088,270,645,760), que es varios miles de veces más pequeño. A la misma velocidad de descifrado, esto se completará en aproximadamente 1 minuto (y en realidad, la contraseña se encontrará casi al instante o en unos segundos).
¡Es una gran diferencia!
hashcat.exe -a 3 -m 1000 C:\Temp\ntlm.txt ?u?l?l?l?l?l?l?l?d
64f12cddaa88057e06a81b54e73b949b:Password1
Donde:
-a 3especifica el ataque con máscara.?u?l?l?l?l?l?l?l?des la máscara.
hashcat --help mostrará los conjuntos de caracteres, los cuales son los siguientes:
? | Charset
===+=========
l | abcdefghijklmnopqrstuvwxyz
u | ABCDEFGHIJKLMNOPQRSTUVWXYZ
d | 0123456789
h | 0123456789abcdef
H | 0123456789ABCDEF
s | !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
a | ?l?u?d?s
b | 0x00 - 0xff
Puedes combinar estos conjuntos de caracteres dentro de tu máscara para aún más flexibilidad. También es común que las contraseñas terminen con un carácter especial (como !) en lugar de un número, pero podemos especificar ambos en una máscara.
hashcat.exe -a 3 -m 1000 ntlm.txt -1 ?d?s ?u?l?l?l?l?l?l?l?1
fbdcd5041c96ddbd82224270b57f11fc:Password!
Donde:
-1 ?d?sdefine un conjunto de caracteres personalizado (dígitos y especiales).?u?l?l?l?l?l?l?l?1es la máscara, donde?1es el conjunto de caracteres personalizado.
Mask Length & Mask Files
Por defecto, este ataque con máscara establece una longitud de contraseña estática - ?u?l?l?l?l?l?l?l?1 define 9 caracteres, lo que significa que solo podemos descifrar una contraseña de 9 caracteres. Para descifrar contraseñas de diferentes longitudes, debemos ajustar manualmente la máscara según sea necesario.
Los archivos de máscara de Hashcat facilitan mucho este proceso para máscaras personalizadas que usas con frecuencia.
PS C:\> cat example.hcmask
?d?s,?u?l?l?l?l?1
?d?s,?u?l?l?l?l?l?1
?d?s,?u?l?l?l?l?l?l?1
?d?s,?u?l?l?l?l?l?l?l?1
?d?s,?u?l?l?l?l?l?l?l?l?1
hashcat.exe -a 3 -m 1000 ntlm.txt example.hcmask
hashcat (v6.1.1) starting...
Status...........: Exhausted
Guess.Mask.......: ?u?l?l?l?l?1 [6]
[...snip...]
Guess.Mask.......: ?u?l?l?l?l?l?1 [7]
820be3700dfcfc49e6eb6ef88d765d01:Chimney!
Las máscaras incluso pueden tener cadenas estáticas definidas, como un nombre de empresa u otra palabra clave que sospeches se esté utilizando en las contraseñas.
ZeroPointSecurity?d
ZeroPointSecurity?d?d
ZeroPointSecurity?d?d?d
ZeroPointSecurity?d?d?d?d
hashcat.exe -a 3 -m 1000 ntlm.txt example2.hcmask
f63ebb17e157149b6dfde5d0cc32803c:ZeroPointSecurity1234
Combinator
El ataque combinador combina las entradas de dos diccionarios en candidatos de palabra única. Toma las siguientes listas como ejemplo:
PS C:\> cat list1.txt
purple
PS C:\> cat list2.txt
monkey
dishwasher
El combinador producirá "purplemonkey" y "purpledishwasher" como candidatos. También puedes aplicar una regla a cada palabra en el lado izquierdo o derecho utilizando las opciones -j y -k. Por ejemplo, -j $- y -k $! producirían purple-monkey!.
hashcat.exe -a 1 -m 1000 ntlm.txt list1.txt list2.txt -j $- -k $!
ef81b5ffcbb0d030874022e8fb7e4229:purple-monkey!
Info
Si se ejecuta en Linux, los shells (sh, bash, zsh, fish, etc.) tendrán su propio comportamiento cuando se use el carácter $ en la línea de comandos. Es posible que necesiten ser citados.
Hybrid
Los modos 6 y 7 de Hashcat son híbridos basados en wordlists, masks y el combinator. Especificas tanto una wordlist como una mask en la línea de comandos, y la mask se agrega o antepone a las palabras dentro de la lista. Por ejemplo, si tu diccionario contiene la palabra Password, entonces -a 6 [...] list.txt ?d?d?d?d producirá Password0000 a Password9999.
hashcat.exe -a 6 -m 1000 ntlm.txt list.txt ?d?d?d?d
be4c5fb0b163f3cc57bd390cdc495bb9:Password5555
Dónde:
- -a 6 especifica el modo híbrido wordlist + mask.
- ?d?d?d?d es la mask.
El modo híbrido mask + wordlist (-a 7) es prácticamente idéntico, donde la mask va primero.
hashcat.exe -a 7 -m 1000 ntlm.txt ?d?d?d?d list.txt
28a3b8f54a6661f15007fca23beccc9c:5555Password
kwprocessor
Existen varias utilidades externas que están separadas de la aplicación principal de hashcat. Aquí revisaremos una llamada kwprocessor. Esta es una utilidad para generar contraseñas key-walk, las cuales están basadas en teclas adyacentes como qwerty, 1q2w3e4r, 6yHnMjU7, y similares. Para los humanos, estas pueden parecer bastante aleatorias y seguras (mayúsculas, minúsculas, números y caracteres especiales), pero en realidad son fáciles de generar programáticamente.
kwprocessor tiene tres componentes principales:
- Base characters - el alfabeto del idioma objetivo.
- Keymaps - la distribución del teclado.
- Routes - las direcciones en las que se camina.
Se proporcionan varios ejemplos en los directorios basechars, keymaps y routes en la descarga de kwprocessor.
kwp64.exe basechars\custom.base keymaps\uk.keymap routes\2-to-10-max-3-direction-changes.route -o keywalk.txt
PS C:\> Select-String -Pattern "^qwerty$" -Path keywalk.txt -CaseSensitive
D:\Tools\keywalk.txt:759:qwerty
D:\Tools\keywalk.txt:926:qwerty
D:\Tools\keywalk.txt:931:qwerty
D:\Tools\keywalk.txt:943:qwerty
D:\Tools\keywalk.txt:946:qwerty
Algunos candidatos se generarán múltiples veces, por lo que querrás deduplicar la lista antes de usarla para obtener la máxima eficiencia. Esta wordlist puede luego ser utilizada como cualquier otro diccionario en hashcat.
Info
Usa kwp64.exe --help para ver las opciones personalizables, como alternar la tecla shift.