Técnicas de descifrado de contraseñas

Publicado: mayo 28, 2022

Cómo bloquear sitios peligrosos o dañinos de muchas formas

Understanding Internet Security

Password Cracking Techniques

Técnicas de descifrado de contraseñas

¿Cómo roban nuestras contraseñas?
¿Cómo pueden los ciberdelincuentes robar nuestras contraseñas?
Existen diferentes maneras, pero en la mayoría de los casos actúan sobre el error humano. Aquí señalaremos las dos técnicas que se utilizan con mayor frecuencia para obtener – con el mínimo esfuerzo – una contraseña que no está adecuadamente protegida.

  • Ingeniería social: mediante correos electrónicos o mensajes de phishing se convence al usuario de que comunique su propia contraseña.
  • Credential stuffing: se hackea la base de datos de un servicio que contiene una gran cantidad de contraseñas de usuarios y las contraseñas se prueban en otros sitios web. El caso de LinkedIn es famoso: se robaron alrededor de 164 millones de credenciales (esto ocurrió en 2012, pero las contraseñas se pusieron a la venta en 2016), entre ellas también estaba la de Mark Zuckerberg, quien usaba la misma contraseña para LinkedIn (que era “dadada”) también para sus cuentas de Twitter y Pinterest.

La técnica utilizada es efectivamente el credential stuffing, una práctica que explota la enorme cantidad de filtraciones de datos que se han producido a lo largo de los años y que han generado numerosas bases de datos de credenciales robadas, fáciles de encontrar en la dark web. Esta mina de información es utilizada por los ciberdelincuentes para atacar otros servicios web donde los usuarios han reutilizado las mismas contraseñas.

Y todo esto se lleva a cabo de manera totalmente automatizada, utilizando un software como SHARD (que es de código abierto y está disponible en GitHub).
De esta manera, es posible probar las mismas combinaciones de nombre de usuario y contraseña en sitios web y servicios que aún no han sido hackeados. Son los llamados ataques de “baja intensidad”, que no hacen ruido, por lo que no generan ningún tipo de alarma en el sistema atacado (porque no son repetitivos, como sí lo son los ataques de “fuerza bruta”).
Pero, dado que el terrible hábito de usar la misma contraseña en diferentes servicios está tan extendido (como se recordó anteriormente para Zuckerberg y no solo para él…), este ataque tiene muchas posibilidades de éxito.

No debería ser necesario volver a insistir en lo importante que se ha vuelto hoy en día proteger las propias contraseñas: a estas alturas, debería considerarse una norma elemental de “higiene cibernética” – para todos los usuarios de computadoras y de internet.
Las contraseñas son las “llaves” de nuestra vida digital: según el Verizon Data Breach Investigation Report 2017 (VDBIR, 10ª edición), “el 81% de las filtraciones de cuentas se realizan a través de contraseñas robadas y/o débiles”.
El problema de mantener las propias credenciales seguras se está volviendo bastante complicado: es sabido que cada usuario debe gestionar alrededor de 100 contraseñas. Y si todas deben ser diferentes, esto no se puede lograr solo con reglas mnemotécnicas.
Aquí es donde entran en juego los gestores de contraseñas, es decir, aplicaciones que tienen como objetivo guardar todas nuestras contraseñas de forma segura y – obviamente – cifrada.

Protección DNS de nueva generación: totalmente basada en la nube, potenciada por IA y de fácil activación

Ilustración conceptual de un hacker robando contraseñas y credenciales de usuario

Hash y contraseña

Analicemos ahora cómo se gestionan las contraseñas, con el objetivo de comprender el funcionamiento de las técnicas de descifrado de contraseñas.
Para ello, es importante saber qué son los Hash y cómo se utilizan para gestionar las contraseñas.

Los HASH son algoritmos de cifrado que convierten un dato arbitrariamente largo (mensaje) en una cadena binaria (huella digital) de longitud fija (una longitud que varía según el algoritmo utilizado). La cadena binaria se convierte luego y se representa en hexadecimal (por lo que su longitud se reduce cuatro veces).
La característica del Hash es que es unidireccional, es decir, no reversible: a partir del hash no es posible volver al valor inicial.
Esta es una diferencia sustancial respecto a los algoritmos de cifrado (AES, RSA, etc.), que en cambio son reversibles si se conoce la clave (contraseña).

Los algoritmos de Hash más utilizados son:

  • MD5 (“Message Digest” – 1991): genera una huella digital de 128 bits (32 símbolos alfanuméricos hexadecimales). Desarrollado por Ronald Rivest, ya no se considera seguro.
  • SHA-1 (“Secure Hash Algorithm 1” – 1995): genera una huella digital de 160 bits (40 hexadecimales). Ya no se considera seguro, después de que Google demostrara la posibilidad de colisión.
  • SHA-2 (“Secure Hash Algorithm 2” – 2001): es una variante más segura de SHA-1, con dimensiones de hash mayores, de 256 (64 hexadecimales) a 512 bits (128 hexadecimales).
  • SHA-3: ha sido definido por el NIST a través del FIPS PUB 202 (agosto de 2015) y está destinado a convertirse en el nuevo estándar.

Las otras características peculiares que debe tener el hash son:

  • Coherencia: debe generar un resultado unívoco. Por lo tanto, la entrada A siempre producirá el hash B, que representa la huella digital de A.
  • Aleatoriedad: debe ser imposible de interpretar. A partir del hash, es imposible entender cuál es el mensaje original, solo se puede tener la certeza de que – si el hash es el mismo – el original también debe ser el mismo. Esta función es útil cuando se hace el “checksum” de un archivo: si el archivo que se transfiere o copia mantiene el mismo hash (antes y después), significa que no ha sido alterado ni corrompido.
  • Unicidad: la probabilidad de que dos mensajes diferentes generen el mismo hash debe ser cero. Esta característica se define como “resistencia a las colisiones”.

En términos de cifrado, una colisión se produce cuando un algoritmo de hashing genera el mismo hash a partir de dos entradas diferentes. Pero dado que todos los algoritmos de hashing pueden generar un número finito de resultados, la resistencia a la colisión es directamente proporcional a su complejidad.

Por ejemplo, MD5 siempre produce una cadena de 128 bits. Por lo tanto, los posibles hash MD5 son 2^128, un valor enorme, pero aun así un número finito.
Para aumentar la resistencia a las colisiones – dado que también ha aumentado la potencia de cálculo – es necesario utilizar algoritmos de hashing más potentes, es decir, con un número de bits mayor: SHA-2 genera una cadena de 256 o 512 bits; por lo tanto, las combinaciones posibles son respectivamente 2^256 y 2^512 (que corresponde a 1,3*10^154), números que son exponencialmente mucho más grandes que los generados por MD5 y SHA-1.

Por qué son útiles los hash: por sus peculiaridades, los hash se utilizan para muchos fines.
Uno de los más importantes está relacionado con la autenticación y la seguridad de las contraseñas.
Hoy en día, en todos los sitios web “serios” las contraseñas de los usuarios se guardan en la base de datos como hash y no en texto plano. Esta es la razón por la que, en caso de olvidar la contraseña, el sitio web no podrá devolvernos nuestra contraseña (porque no la tiene), sino que nos enviará un enlace para configurar una nueva.
Desafortunadamente, algunos sitios web todavía guardan las contraseñas en texto plano, pero cada vez son menos frecuentes.

Por lo tanto, cuando te registras en un sitio web, este calcula el hash de la contraseña que estableces y guarda el hash en su base de datos.
Durante el siguiente inicio de sesión, la contraseña que introducimos se convertirá al hash (usando uno de los algoritmos disponibles) y se comparará con el que está presente en la base de datos.

Si los dos hash coinciden, se permite el inicio de sesión; de lo contrario, significa que la contraseña escrita es incorrecta.
La ventaja de usar hash es clara: si un atacante logra acceder a la base de datos de contraseñas, solo encontrará los hash y no las contraseñas en texto plano. Dado que los hash no son reversibles, debería ser imposible rastrear las contraseñas.

Debería ser imposible… pero en realidad no lo es del todo. Con el hashing de contraseñas ciertamente hemos dificultado más el trabajo del atacante, pero con las herramientas que mostraremos ahora, este podría, sin embargo, ser capaz de obtener nuestra contraseña.

Tipos de ataques a contraseñas mediante password cracking

Cuando el atacante no logra robar la contraseña gracias a un error humano, como explicamos en la introducción, puede recurrir a técnicas más sofisticadas, como el “password cracking”.
Descifrar una contraseña es un procedimiento complejo, requiere conocimientos y herramientas informáticas adecuadas, como computadoras potentes y softwares dedicados. Pero en algunos casos puede ser efectivo.

Se puede realizar de dos maneras diferentes:

  • Ataque ONLINE: es obviamente lento e ineficiente, ya que requiere la respuesta en línea del sitio web “consultado”. Además, es bastante frecuente que un sitio web imponga un límite en el número de intentos fallidos de inicio de sesión. Por lo tanto, puede ser útil en ataques de baja intensidad, como el mencionado “credential stuffing”. También se utiliza en ataques RDP (Remote Desktop Protocol): en muchos casos, de hecho, quienes usan RDP no se preocupan por limitar el número de intentos de acceso y establecen contraseñas inadecuadas. Para el atacante, poder acceder al puerto RDP es solo cuestión de tiempo. Y con frecuencia, este acceso tiene como objetivo introducir ransomware, que bloquea el sistema hackeado.
  • Ataque OFFLINE: este es el verdadero ataque de password cracking.
    Para que se produzca, el atacante ya debe haber logrado obtener acceso a la base de datos de hash de las contraseñas.

Esto se puede lograr de varias maneras:

  • Comprometiendo el sistema: en los sistemas UNIX modernos, las contraseñas se memorizan de forma cifrada en el archivo /shadow/etc, que es accesible solo para quien tiene privilegios administrativos (permisos de root).
  • Comprometiendo la base de datos de una aplicación.
  • Usando la herramienta Mimikatz: es una herramienta diseñada para recuperar todas las contraseñas gestionadas por Windows. La herramienta fue creada por Benjamin Delpy cuando trabajaba para una agencia gubernamental francesa y está disponible como software de código abierto en GitHub.
  • Hackeando la red WiFi.

Una vez que entra en posesión del hash de la contraseña, el atacante tendrá todo el tiempo que necesite para intentar rastrear el hash hasta la contraseña, ya que el password cracking se convierte en un proceso offline, que no requiere conexión de red.
Por supuesto, tendrá que hacerlo por ensayo y error, ya que el hash – como se explicó anteriormente – no es reversible.

Una primera manera de hacerlo es creando “Rainbow Tables”: son tablas donde se insertan todas las posibles entradas para calcular el hash respectivo. Fueron inventadas por Martin Hellman, el creador (junto con Whitfield Diffie) del algoritmo Diffie-Hellman para el intercambio de claves, que ha permitido el desarrollo del cifrado desde una perspectiva pública.
Las rainbow tables son archivos de dimensiones enormes, incluso superiores a 100 GB, que se pueden encontrar en internet.

Para contrarrestar las rainbow tables y dificultar más su uso, es una buena costumbre aumentar la longitud de la contraseña: de esta manera, las dimensiones de las rainbow tables necesarias también tendrán que aumentar exponencialmente.

Otra contramedida utilizada hoy en día es la llamada sal (salt): cuando un usuario establece una contraseña, el sistema crea un valor casual adicional, la sal. Este valor se añade a la contraseña como hash y, de esta manera, produce otro valor, diferente del generado por la contraseña.
Esta medida adicional es eficaz precisamente contra las tablas rainbow, pero podría no ser suficiente para defendernos de otros tipos de ataques, como los ataques de “fuerza bruta” y de “diccionario”.

Protección DNS de nueva generación: totalmente basada en la nube, potenciada por IA y de fácil activación

Script de descifrado de contraseñas y concepto de intrusión cibernética

Técnicas de cracking de contraseñas

Fuerza bruta

Este es el ataque estándar realizado sin conexión, sin necesidad de mantener una conexión con el sistema de la víctima, siempre que ya se haya obtenido la base de datos de hashes de contraseñas (con los procedimientos descritos anteriormente). Consiste en probar todas las contraseñas posibles, una tras otra, empezando por las combinaciones más simples o más plausibles, y creciendo hasta la longitud máxima establecida.
Para llevar a cabo estos ataques, se utilizan programas de cracking de contraseñas, que son fáciles de encontrar en línea y que automatizan el ataque.
Los más populares son: John the Ripper y Hashcat. También existen varios otros, incluyendo Elzapop, Cain&Abel, etc.
Además, existen servicios de cracking gratuitos en línea (¡todo se puede encontrar en la web!), como crackstation.net.

Aunque se trata de un ataque rudimentario, ya que opera por “fuerza bruta”, puede ser eficaz gracias a la creciente potencia de los ordenadores actuales: hoy en día, aprovechando la potencia de cálculo de las unidades de procesamiento gráfico (GPU) dispuestas en paralelo, es posible construir, por un costo razonable, ordenadores capaces de realizar hasta 100 GH/s, es decir, 100 mil millones de hashes por segundo.
De hecho, se puede afirmar que el ataque de fuerza bruta tiene un éxito garantizado, siempre que disponga de un marco temporal ilimitado.
Pero como el tiempo no es -en la práctica- un aspecto insignificante (a nadie le importa tardar años o siglos en vulnerar un sistema…), veamos cuáles son las variables que afectan el tiempo que necesita el ataque para tener éxito:

  • Longitud de la contraseña.
  • Complejidad de la contraseña y tipo de símbolos alfanuméricos utilizados.

Un ejemplo aclarará estos aspectos:

  • Una contraseña de 8 caracteres formada únicamente por números tendrá un número de combinaciones igual a 108=100.000.000. Con una potencia de análisis de 100 GH/s se descubrirá en mucho menos de un segundo.
  • Si la contraseña, en cambio, tiene 14 caracteres y utiliza todos los tipos de caracteres posibles del teclado (por lo tanto, números, letras minúsculas y mayúsculas, caracteres especiales, en total 95), el número de combinaciones posibles será 9514=4,8*1027. Considerando 100 GH/s, se necesitarán alrededor de 1.546 millones de años. Por lo tanto, la complejidad de la contraseña hace inviable un ataque de fuerza bruta.

Por esta razón se inventó el concepto de Entropía, que nos da una medida de la fortaleza de la contraseña. Lo trataremos más adelante.

Ataque de “diccionario”

Como se ha mostrado anteriormente, los ataques de fuerza bruta son altamente ineficientes. Por eso los atacantes recurren a métodos más eficaces e inteligentes que, aprovechando los malos hábitos de los usuarios, logran restringir el campo de búsqueda.

Uno de los métodos utilizados es el ataque de “diccionario”: dado que las personas usan palabras con significado para sus contraseñas, estas son las primeras que probarán los atacantes. El software de cracking de contraseñas carga uno o más archivos de diccionario, que consultará al buscar la contraseña.

Estos diccionarios están disponibles en la web: el diccionario de la lengua italiana cuenta con alrededor de 300.000 palabras y es un archivo de texto de algunos MB. Además, la lista del millón de palabras más utilizadas en el mundo es un archivo de aproximadamente 8 MB. Por supuesto, hay disponibles diccionarios en varios idiomas, que se pueden descargar y utilizar.
Esta es una forma mucho más rápida en comparación con la fuerza bruta (menos intentos pero más dirigidos) y permite descubrir fácilmente las contraseñas más débiles.

Ataque “con reglas”

Se basa en el hecho de que las personas tienden a reutilizar las mismas contraseñas, modificando simplemente algunos caracteres, con la ilusión de hacerlas más fuertes mientras siguen siendo fáciles de recordar. Son las llamadas “modificaciones obvias de contraseñas”.
Es bien sabido, por ejemplo, que la palabra “password” se modifica habitualmente en:
P@ssword, PASSWORD, passw0rd, P@$$w0rd, etc.

Los programas de cracking de contraseñas ya implementan estos algoritmos de sustitución, haciendo que el ataque de diccionario normal sea más eficaz.
El ataque que utiliza estas reglas es el que -estadísticamente- tiene la mayor eficacia en términos de tiempo/resultado.

Ataque de “patrón (máscara)”

En este caso, nos centramos únicamente en patrones reales, que sabemos son los que las personas realmente suelen utilizar.
Cuando se requiere una contraseña que incluya al menos una letra mayúscula, un número y un símbolo especial, el patrón que, estadísticamente, se utiliza con más frecuencia es: letra mayúscula al principio, números y símbolos especiales al final.
De esta manera, podemos limitar el número de intentos, enfocando el ataque de fuerza bruta en las contraseñas que son estadísticamente más probables.

Técnicas combinadas de cracking de contraseñas

Para aumentar la eficiencia del ataque de cracking de contraseñas, las diversas técnicas mencionadas anteriormente se combinan entre sí. De esta manera, el atacante aumenta considerablemente sus posibilidades de descubrir la contraseña a partir de su hash.

Entropía de la contraseña

Concluimos este artículo ilustrando el concepto de ENTROPÍA, utilizado en criptografía para proporcionar una medida matemática de la complejidad de una contraseña. Una contraseña con una entropía más alta es más difícil de descubrir.
El concepto de “Entropía” fue introducido en 1948 por Claude Shannon, un ingeniero y matemático estadounidense, definido como el “padre de la teoría de la información”. En 1948 publicó un ensayo titulado “Una teoría matemática de la comunicación”, un ensayo científico en el que expuso las bases teóricas para el estudio de los sistemas de codificación y transmisión de información. Fue en esta investigación donde Shannon eligió el bit como unidad elemental para medir la información.

Y, de hecho, el bit se utiliza como unidad de medida para la entropía de una contraseña. Veamos qué queremos decir: si la contraseña se elige con la misma probabilidad para cada símbolo, hay NL contraseñas posibles (donde N = número de símbolos posibles; L = longitud de la contraseña).
La entropía S de una contraseña se ha definido, por tanto, como:
S=log2(NL) donde log2= logaritmo en base 2.
Para un nivel de seguridad correcto, la contraseña debería tener una entropía de al menos 64 bits.
Por encima de 128 bits ya no es necesario aumentar la fortaleza de la contraseña, ya que el aumento adicional de seguridad sería inútil.

Veamos algunos ejemplos:

  • Contraseña de 8 caracteres (solo letras + números): S=log2(628)=47,63 bits → Inadecuada.
  • Contraseña de 12 caracteres (letras + números + símbolos especiales): S=log2(9512)=78,838 bits → Suficiente.
  • Contraseña de 20 caracteres (letras + números + símbolos especiales): S=log2(9520)=131,397 bits → Adecuada.

Esto nos permite concluir que una contraseña de 20 caracteres de longitud que utilice todos los tipos de caracteres (números, letras minúsculas y mayúsculas, símbolos especiales) es ampliamente suficiente para garantizar un alto nivel de seguridad.

Protección DNS de nueva generación: totalmente basada en la nube, potenciada por IA y de fácil activación

Concepto sobre la entropía de las contraseñas y sus niveles de seguridad

¿Cómo podemos defendernos?

Para concluir, hemos visto cómo las técnicas de descifrado de contraseñas descritas aquí subordinan su probabilidad de éxito a los errores de los usuarios.
Además de los “malos hábitos” ya descritos, hay un factor que puede hacer que el descifrado de contraseñas sea casi ineficiente: crear una contraseña larga, formada por una combinación totalmente casual de letras, números y símbolos especiales.

¿Qué longitud?

Como hemos destacado, considerando la entropía y la potencia de cálculo disponible con los ordenadores actuales (esta consideración perderá su valor cuando estén disponibles los ordenadores cuánticos), es una buena medida de seguridad establecer una contraseña de al menos 12 caracteres de longitud y hasta un máximo de 20 caracteres (¡no hace falta ir más allá!) y que use todos los tipos de caracteres (números, letras minúsculas y mayúsculas, símbolos especiales).
Obviamente, esta contraseña es segura siempre que no esté escrita en una nota adhesiva pegada al teclado o a la pantalla del ordenador.
Y esto demuestra una vez más que:

“El factor humano es realmente el eslabón más débil de la seguridad”
(“The art of Deception”, Kevin Mitnick – 2002)

El autor

Giorgio Sbaraglia, ingeniero, es consultor y formador en temas de ciberseguridad y privacidad.

Imparte cursos de formación sobre estos temas para numerosas empresas italianas importantes, entre ellas ABIFormazione y la 24Ore Business School.
Es el coordinador científico del Máster “Cybersecurity and Data Protection” de la 24Ore Business School.
Es miembro del Comité Científico CLUSIT (Asociación Italiana para la Ciberseguridad) e Innovation Manager certificado por RINA.
Ocupa cargos de DPO (Delegado de Protección de Datos) en empresas y Colegios Profesionales.
Es autor de los siguientes libros:

  • GDPR kit di sopravvivenza” – “Kit de supervivencia GDPR” (Editado por goWare).
  • Cybersecurity kit di sopravvivenza. Il web è un luogo pericoloso. Dobbiamo difenderci!” – “Kit de supervivencia de ciberseguridad. La web es un lugar peligroso. ¡Debemos defendernos!” (Editado por goWare).
  • iPhone. Come usarlo al meglio. Scopriamo insieme tutte le funzioni e le app migliori” – “iPhone. Cómo usarlo al máximo. Descubramos juntos todas las funciones y las mejores apps” (Editado por goWare).

Colabora con CYBERSECURITY360, una revista online especializada del grupo Digital360 centrada en Ciberseguridad.

También escribe para ICT Security Magazine, para Agenda Digitale y para la revista CLASS.

Puedes activar la protección FlashStart® Cloud en cualquier tipo de Router y Firewall para proteger dispositivos de escritorio, móviles y dispositivos IoT en redes locales.

Giorgio Sbaraglia

Information & Cyber Security Advisor