😎 60% Descuento:  Curso de Hacking Redes Inalámbricas >> Ver Más

Un archivo ZIP cifrado puede tener dos contraseñas correctas – este es el motivo

Los archivos ZIP protegidos con contraseña son medios comunes para comprimir y compartir conjuntos de archivos, desde documentos confidenciales hasta muestras de malware e incluso archivos maliciosos. Por ejemplo, “facturas” de phishing en correos electrónicos.

Pero, ¿Sabías que es posible que un archivo ZIP cifrado tenga dos contraseñas correctas y que ambas produzcan el mismo resultado cuando se extrae el ZIP?

Un archivo ZIP con dos contraseñas

Arseniy Sharoglazov, investigador de seguridad cibernética de Positive Technologies, compartió durante el fin de semana un experimento simple en el que produjo un archivo ZIP protegido con contraseña llamado x.zip-

La contraseña que eligió Sharoglazov para cifrar su ZIP fue un juego de palabras con el éxito de 1987 que se ha convertido en un popular meme tecnológico:

Nev1r-G0nna-G2ve-Y8u-Up-N5v1r-G1nna-Let-Y4u-D1wn-N8v4r-G5nna-D0sert-You

Pero el investigador demostró que al extraer x.zip con una contraseña completamente diferente, no recibió mensajes de error.

De hecho, el uso de una contraseña diferente resultó en una extracción exitosa del ZIP, con el contenido original intacto:

pkH8a0AqNbHcdw8GrmSp

Dos contraseñas diferentes para el mismo archivo ZIP dan como resultado una extracción exitosa (Sharoglazov)

Pudimos reproducir con éxito el experimento usando diferentes programas ZIP. Usamos p7zip (equivalente a 7-Zip para macOS) y otra utilidad ZIP llamada  Keka .

Al igual que el archivo ZIP del investigador, el nuestro se creó con la contraseña más larga antes mencionada y con el modo de cifrado AES-256 habilitado.

Si bien el ZIP se cifró con la contraseña larga, el uso de cualquiera de las contraseñas extrajo el archivo con éxito.

¿Cómo es esto posible?

Respondiendo a la demostración de Sharoglazov, un lector curioso, Rafa planteó una pregunta importante: “¿Cómo?”

El usuario de Twitter Unblvr parece haber descubierto el misterio:

Al producir archivos ZIP protegidos con contraseña con el modo AES-256 habilitado, el formato ZIP usa el algoritmo  PBKDF2 y procesa la contraseña  proporcionada por el usuario, si la contraseña es demasiado larga. Por demasiado largo, nos referimos a más de 64 bytes (caracteres), explica el investigador.

En lugar de la contraseña elegida por el usuario (en este caso, “Nev1r-G0nna-G2ve-…” ), este hash recién calculado se convierte en la contraseña real del archivo.

Cuando el usuario intenta extraer el archivo e ingresa una contraseña de más de 64 bytes (“Nev1r-G0nna-G2ve-…”), la aplicación ZIP volverá a codificar la entrada del usuario y la comparará con la contraseña correcta (que ahora es en sí misma un hash). Una coincidencia llevaría a una extracción de archivos exitosa.

La contraseña alternativa utilizada en este ejemplo (“pkH8a0AqNbHcdw8GrmSp“) es, de hecho, una representación ASCII del hash SHA-1 de la contraseña más larga .

Suma de verificación SHA-1 de “Nev1r-G0nna-G2ve-..." = 706b4838613041714e62486364773847726d5370.

Esta suma de verificación cuando se convierte a ASCII produce: pkH8a0AqNbHcdw8GrmSp

Ten en cuenta, sin embargo, que al cifrar o descifrar un archivo, el proceso de hash solo se produce si la longitud de la contraseña es superior a 64 caracteres.

En otras palabras, las contraseñas más cortas no se codificarán en ninguna de las etapas de compresión o descompresión del ZIP.

Esta es la razón por la cual, al elegir la cadena larga “Nev1r-G0nna-G2ve-…” como contraseña en la etapa de cifrado, la contraseña real que establece el programa ZIP es efectivamente el hash (SHA1) de esta cadena.

SHA1

En la etapa de descifrado, si ingresas “Nev1r-G0nna-G2ve-...”, se generará un hash y se comparará con la contraseña previamente almacenada (que es el hash SHA1). Sin embargo, al ingresar la contraseña más corta “pkH8a0AqNbHcdw8GrmSp” en la etapa de descifrado, la aplicación comparará directamente este valor con la contraseña almacenada (que es, nuevamente, el hash SHA1).

La  subsección de colisiones HMAC de PBKDF2 en Wikipedia brinda más información técnica a los lectores interesados.

“PBKDF2 tiene una propiedad interesante cuando usa HMAC como su función pseudoaleatoria. Es posible construir de forma trivial cualquier número de pares de contraseñas diferentes con colisiones dentro de cada par”. 

“Si una contraseña proporcionada es más larga que el tamaño de bloque de la función hash HMAC subyacente, la contraseña se convierte primero en un resumen y ese resumen se usa como contraseña”.

Sin embargo, el hecho de que ahora haya dos contraseñas posibles para el mismo ZIP no representa una vulnerabilidad de seguridad. Esto porque “todavía se debe conocer la contraseña original para generar el hash de la contraseña”. 

Creando una contraseña perfecta

Un aspecto clave interesante a tener en cuenta aquí es que las representaciones ASCII de cada hash SHA-1 no necesitan ser alfanuméricas.

En otras palabras, supongamos que elegimos la siguiente contraseña para nuestro archivo ZIP durante este experimento. La contraseña tiene más de 64 bytes:

Bl33pingC0mputer-Sh0w-M3-H0W-t0-pR0Duc3-an-eNcRyPT3D-ZIP-File-in-the-simplest-way

Su suma de verificación SHA-1 resulta ser: bd0b8c7ab2bf5934574474fb403e3c0a7e789b61

Y la representación ASCII de esta suma de verificación parece un conjunto de bytes incomprensibles, no tan elegante como la contraseña alternativa generada por el investigador para su experimento:

Representación ASCII del hash SHA-1 de Bl33pingC0mputer…

Le preguntamos a Sharoglazov cómo pudo elegir una contraseña cuya suma de verificación SHA-1 fuera tal que su representación ASCII produjera una cadena alfanumérica limpia.

“Es por eso que usé hashcat“, afirmó el investigador. 

Mediante el uso de una versión ligeramente modificada de la herramienta de recuperación de contraseñas de código abierto, hashcat , el investigador generó variaciones de la cadena “Never Gonna Give You Up…” usando caracteres alfanuméricos hasta que llegó a una contraseña perfecta.

“Probé Nev0r , Nev1r , Nev2r y así sucesivamente… Y encontré la contraseña que necesito”.

Y así es como Sharoglazov llegó a una contraseña que dice más o menos “Never Gonna Give You Up…”, pero la representación ASCII de su suma de verificación SHA-1 es una cadena alfanumérica ordenada.

Para la mayoría de los usuarios, la creación de un archivo ZIP protegido por contraseña con una opción de su contraseña debería ser suficiente y eso es todo lo que necesitan saber.

Pero si decides ser aventurero, este experimento proporciona un vistazo a uno de los muchos misterios que rodean a los ZIP cifrados, como tener dos contraseñas para tu secreto guardado.

Deja un comentario

Adquiere tu Membresía Anual Wiser

Adquiere tu Membresía Anual Wiser y adquiere grandes beneficios

Más información