Saltar al contenido

Hashcat y GPU cracking: por qué tu contraseña se rompe (o no) en segundos

    Hashcat y GPU cracking:

    por qué tu contraseña se rompe (o no) en segundos

    Herramientas de Kali Linux  |  unfantasmaenelsistema.com

    Cuando una base de datos se filtra, las contraseñas casi nunca aparecen en texto claro: aparecen como hashes, cadenas de longitud fija que resultan de pasar la contraseña por una función matemática de un solo sentido. La promesa es que, a partir del hash, no se puede volver a la contraseña. La realidad es que sí se puede, probando candidatos uno a uno y comparando: eso es el descifrado de contraseñas, y Hashcat es la herramienta de referencia para hacerlo.

    Ya hablamos de John the Ripper en un artículo anterior. Aquí el ángulo es distinto: qué cambia cuando el trabajo lo hace una tarjeta gráfica en lugar del procesador, por qué eso convierte ataques de días en ataques de minutos, y —lo más importante— qué defensas concretas dejan ese cálculo en inútil. Este artículo es, en el fondo, la justificación técnica de por qué usamos contraseñas largas, gestores de contraseñas y MFA.

    Qué aprenderás en este artículo

    Por qué una GPU es órdenes de magnitud más rápida que una CPU para esto · Los modos de ataque de Hashcat: diccionario, reglas, máscara, híbrido y combinador · Cómo se identifica un tipo de hash y qué significa el parámetro -m · Qué es un KDF lento (bcrypt, scrypt, Argon2) y por qué arruina el ataque · Las defensas que hacen que el GPU cracking deje de importar

    Uso legal y responsable

    Descifrar hashes de contraseñas solo es legítimo sobre material propio, en un laboratorio aislado, o dentro de una auditoría con autorización expresa y por escrito del titular del sistema · Hacerlo contra credenciales de terceros sin permiso constituye acceso ilícito a sistemas informáticos (en España, art. 197 bis y 264 del Código Penal) y descubrimiento y revelación de secretos · Todos los ejemplos de este artículo asumen hashes generados por ti mismo en tu propia máquina con fines de aprendizaje

    1. Por qué la GPU lo cambia todo

    Un procesador (CPU) moderno tiene un puñado de núcleos muy rápidos y muy flexibles, pensados para tareas variadas que dependen unas de otras. Una tarjeta gráfica (GPU) tiene miles de núcleos mucho más simples, diseñados para hacer la misma operación sobre muchos datos a la vez. Calcular hashes es exactamente ese tipo de problema: la misma función, aplicada a millones de contraseñas candidatas independientes entre sí.

    El resultado es una diferencia brutal de rendimiento. Para un hash rápido y sin sal robusta como MD5 o NTLM (el que usa Windows internamente), una CPU de gama alta ronda los cientos de millones de intentos por segundo; una sola GPU de consumo actual supera con holgura la decena de miles de millones. Con varias GPUs en paralelo, el orden de magnitud vuelve a subir.

    Tipo de hashVelocidad orientativa en una GPU de consumoLectura
    MD5Decenas de miles de millones/sPrácticamente instantáneo para contraseñas cortas
    NTLM (Windows)Decenas de miles de millones/sIgual de frágil; por eso importa la longitud
    SHA-256 simpleMiles de millones/sRápido: no fue diseñado para almacenar contraseñas
    bcrypt (coste 10-12)Decenas de miles/sMillones de veces más lento: ese es el objetivo
    Argon2idMiles/s o menosDiseñado para resistir GPU y hardware dedicado

    La conclusión ya se ve en la tabla: el factor decisivo no es la herramienta, es el algoritmo con que se guardó la contraseña. Contra MD5 o NTLM, casi cualquier contraseña humana cae. Contra Argon2id bien configurado, el mismo ataque se vuelve económicamente absurdo.

    2. Anatomía de un ataque con Hashcat

    Hashcat recibe tres cosas: un archivo con los hashes a atacar, un número de modo (-m) que le dice qué algoritmo son, y un modo de ataque (-a) que define cómo genera los candidatos. A partir de ahí recorre el espacio de candidatos, hashea cada uno con el algoritmo indicado y compara con la lista.

    # Estructura general de una ejecucion de hashcat
    hashcat -m <modo_hash> -a <modo_ataque> hashes.txt <fuente_de_candidatos> [opciones]
     
    # Ver la referencia de modos de hash (hay cientos)
    hashcat --help | less
     
    # Ejemplo de laboratorio: hash MD5 propio generado por ti
    echo -n 'Contrasena-de-prueba-2026' | md5sum | cut -d' ' -f1 > hashes.txt

    2.1 El parámetro -m: identificar el hash

    Antes de atacar hay que saber qué se está atacando. Herramientas como hashid o name-that-hash proponen candidatos a partir del formato, pero el contexto manda: un hash de 32 caracteres hexadecimales puede ser MD5 (-m 0) o NTLM (-m 1000), y solo saber de dónde salió lo aclara. Algunos modos habituales en laboratorio:

    Modo -mAlgoritmoDónde aparece
    0MD5Sistemas antiguos, retos de CTF
    100SHA1Bases de datos heredadas
    1000NTLMHashes de contraseña locales de Windows
    1800sha512crypt/etc/shadow en Linux moderno
    3200bcryptFrameworks web bien configurados
    22000WPA-PBKDF2-PMKID/EAPOLHandshakes de wifi WPA2 propios

    2.2 Los modos de ataque -a

    • Diccionario (-a 0): prueba palabra por palabra una lista de contraseñas conocidas (rockyou.txt y similares). Es el primero que se lanza porque la mayoría de contraseñas humanas ya están en alguna lista
    • Reglas (-a 0 con -r): aplica transformaciones a cada palabra del diccionario — añadir un número al final, cambiar ‘a’ por ‘@’, capitalizar. Multiplica la cobertura sin multiplicar el tamaño de la lista
    • Máscara / fuerza bruta (-a 3): genera candidatos según un patrón de posiciones, por ejemplo ‘?u?l?l?l?l?d?d’ (mayúscula, cuatro minúsculas, dos dígitos). Es fuerza bruta dirigida
    • Híbrido (-a 6 y -a 7): combina diccionario y máscara — palabra del diccionario más un sufijo generado, o al revés
    • Combinador (-a 1): concatena cada palabra de una lista con cada palabra de otra, para atacar contraseñas del estilo ‘dos palabras juntas’
    # 1) Diccionario simple contra tus hashes de laboratorio
    hashcat -m 0 -a 0 hashes.txt rockyou.txt
     
    # 2) Diccionario + reglas (best64 es el ruleset clasico de arranque)
    hashcat -m 0 -a 0 hashes.txt rockyou.txt -r rules/best64.rule
     
    # 3) Mascara: exactamente 8 caracteres, letra inicial + minusculas + 2 digitos
    hashcat -m 0 -a 3 hashes.txt '?u?l?l?l?l?l?d?d'
     
    # 4) Hibrido: palabra del diccionario + 3 digitos al final
    hashcat -m 0 -a 6 hashes.txt rockyou.txt '?d?d?d'

    3. Rendimiento: benchmarking y ajustes

    Antes de lanzar un ataque largo conviene medir. hashcat -b ejecuta un benchmark de todos los modos y te dice cuántos intentos por segundo alcanza tu hardware con cada algoritmo. Con ese dato y el tamaño del espacio de candidatos se estima si el ataque tardará minutos, semanas o siglos.

    # Benchmark completo del equipo
    hashcat -b
     
    # Benchmark de un solo modo
    hashcat -b -m 22000
     
    # Ataque con perfil de trabajo agresivo y optimizacion de kernel
    hashcat -m 0 -a 0 hashes.txt rockyou.txt -O -w 3
    • -O (optimized kernel): más rápido, pero limita la longitud máxima de contraseña candidata (típicamente a 27-32 caracteres según el modo). Suele compensar
    • -w (workload profile): de 1 (bajo, el equipo sigue usable) a 4 (pesado, la máquina se dedica solo a esto). En un portátil, vigilar la temperatura
    • –status –status-timer 10: informe de progreso periódico con velocidad, avance y ETA
    • Potfile: Hashcat guarda en hashcat.potfile todo hash ya resuelto y no lo vuelve a atacar. –show consulta esa caché sin relanzar nada

    Sobre las listas de palabras y las reglas

    rockyou.txt viene de una filtración real de 2009 y se usa como material de referencia estándar en formación; hay listas más grandes y modernas derivadas de filtraciones posteriores · La eficacia de un ataque de diccionario depende más de la calidad de la lista y de las reglas que de la potencia bruta de la GPU · Descargar ‘listas de contraseñas’ de foros aleatorios es una vía habitual de colar malware: usa las que vienen con Kali o repositorios reconocidos

    4. El otro lado: qué hace que este ataque fracase

    Todo lo anterior existe para llegar a esta sección. Un atacante con hashes en la mano tiene dos límites: el algoritmo con que se guardaron y la entropía de la propia contraseña. Las defensas trabajan sobre ambos.

    4.1 KDF lentos: bcrypt, scrypt y Argon2

    Una función de derivación de clave (KDF) para contraseñas está diseñada para ser deliberadamente lenta y costosa en memoria. Donde MD5 hace una operación, bcrypt hace miles de iteraciones encadenadas; scrypt y Argon2 además exigen mucha RAM por intento, lo que anula la ventaja de tener miles de núcleos GPU que comparten un ancho de banda de memoria limitado.

    FunciónCoste ajustableResistencia a GPU
    MD5 / SHA-1 / SHA-256NingunoNula: no son para esto
    PBKDF2IteracionesBaja-media: la GPU sigue siendo eficaz
    bcryptFactor de coste (work factor)Alta: poco uso de memoria pero muy lento
    scryptCPU y memoriaMuy alta
    Argon2idTiempo, memoria y paralelismoMuy alta: ganador del Password Hashing Competition

    4.2 Sal y pimienta

    La sal es un valor aleatorio único por usuario que se añade a la contraseña antes de hashear. No hace más lento un intento individual, pero obliga a atacar cada hash por separado en lugar de todos a la vez, y deja inservibles las rainbow tables (tablas precalculadas). La pimienta es un secreto adicional guardado aparte de la base de datos —por ejemplo en la configuración de la aplicación o en un HSM— de modo que filtrar solo la base de datos no basta para atacar.

    4.3 Entropía: longitud por encima de complejidad

    • Cada carácter adicional multiplica el espacio de búsqueda; añadir un símbolo raro solo lo suma. Una frase de contraseña de cuatro o cinco palabras aleatorias supera a ‘P@ssw0rd!’ por varios órdenes de magnitud
    • Un gestor de contraseñas permite tener credenciales largas, únicas y aleatorias en cada servicio sin memorizarlas: es la defensa más rentable frente al relleno de credenciales tras una filtración
    • El MFA hace que un hash descifrado no baste para entrar: el segundo factor sigue faltando
    • Del lado del servidor: limitar intentos, detectar y alertar sobre fugas, y migrar hashes antiguos a un KDF moderno en el siguiente inicio de sesión válido del usuario

    Checklist rápido para quien almacena contraseñas

    Usa Argon2id (o bcrypt si Argon2 no está disponible), nunca un hash rápido a secas · Sal única por usuario, generada con un CSPRNG, almacenada junto al hash · Considera una pimienta fuera de la base de datos · Revisa el factor de coste cada pocos años: debe seguir tardando ~250-500 ms por verificación · Fuerza longitud mínima generosa y comprueba las contraseñas contra listas de filtraciones conocidas

    5. Montar un laboratorio para practicar

    La forma correcta de aprender esto es generar tus propios hashes y atacarlos, sin tocar nada ajeno. Un ciclo de práctica típico:

    • Genera hashes de contraseñas que tú elijas con distintos algoritmos (md5sum, openssl passwd, htpasswd -B para bcrypt)
    • Identifica el modo -m correcto y confírmalo con un ataque de diccionario que sepas que va a acertar
    • Compara tiempos: la misma contraseña en MD5 frente a bcrypt frente a Argon2 — la diferencia se ve en el propio benchmark
    • Practica máscaras e híbridos sobre contraseñas ‘realistas’ que tú mismo definas
    • Plataformas legales para ir más allá: retos de CTF, máquinas de HackTheBox o TryHackMe, y los conjuntos de ejemplo del repositorio de Hashcat

    Recordatorio final

    El wifi WPA2 (modo 22000) solo se ataca sobre tu propia red y tu propio handshake · Los hashes de /etc/shadow solo se atacan en tu propia máquina · Cualquier hash obtenido de un sistema que no te pertenece necesita una autorización escrita previa; sin ella, el simple hecho de intentarlo ya es delito

    Conclusión

    Hashcat con GPU no es magia: es la misma comparación de siempre, hecha muchísimas veces por segundo. Su verdadera lección no es ofensiva sino defensiva — deja meridianamente claro que un hash rápido como MD5 o NTLM no protege nada, y que la seguridad real de una contraseña almacenada depende de tres decisiones de diseño: un KDF lento y con coste de memoria, sal única por usuario, y contraseñas con suficiente longitud.

    Si guardas contraseñas de otras personas, trata este artículo como una lista de comprobación. Si solo tienes las tuyas, la conclusión es igual de directa: gestor de contraseñas, frases largas y MFA en todo lo que importe. Eso es lo que convierte una GPU de miles de núcleos en un montón de calor desperdiciado.

    Referencias

    hashcat.net/wiki — Documentación oficial, tabla de modos y ejemplos de hashes · OWASP Password Storage Cheat Sheet — Recomendaciones actualizadas de KDF y parámetros · RFC 9106 — Especificación de Argon2 · haveibeenpwned.com/Passwords — API de comprobación de contraseñas filtradas (k-anonymity) · Nuestro artículo sobre John the Ripper, para el enfoque en CPU y formatos de hash

    unfantasmaenelsistema.com | Seguridad, sistemas y todo lo que no debería funcionar (pero funciona)

    Resumen de privacidad

    Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.