Saltar a contenido

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 0 especifica el modo de ataque con wordlist.
  • -m 1000 especifica que el hash es NTLM.
  • ntlm.txt es un archivo de texto que contiene el hash NTLM a crackear.
  • rockyou.txt es 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.rule es 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 3 especifica el ataque con máscara.
  • ?u?l?l?l?l?l?l?l?d es 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?s define un conjunto de caracteres personalizado (dígitos y especiales).
  • ?u?l?l?l?l?l?l?l?1 es la máscara, donde ?1 es 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 qwerty1q2w3e4r6yHnMjU7, 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:

  1. Base characters - el alfabeto del idioma objetivo.
  2. Keymaps - la distribución del teclado.
  3. Routes - las direcciones en las que se camina.

Se proporcionan varios ejemplos en los directorios basecharskeymaps 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.