Bomba Zip qué es y cómo funciona
Bomba Zip qué es y cómo funciona

Bomba Zip: El Archivo que Puede Destruir tu PC al Descomprimirse

Una bomba zip, también conocida como bomba de descompresión (o “Zip de la Muerte” para los más dramáticos), es un archivo malicioso diseñado para bloquear o inutilizar el programa que intenta acceder a él. También podría emplearse para desactivar el software antivirus con el fin de crear una apertura para otros virus típicos. En lugar de secuestrar el funcionamiento normal del programa, una bomba zip permite que el programa funcione según lo previsto, pero el archivo está cuidadosamente diseñado para que su descompresión (por ejemplo, por un antivirus para buscar virus) requiera una cantidad excesiva de tiempo, espacio en disco o memoria (o todo ello).

La clásica bomba zip es un diminuto archivo comprimido zip, la mayoría se miden en kilobytes. Sin embargo, cuando este archivo se descomprime su contenido es más de lo que el sistema puede manejar. Un archivo bomba zip típico puede descomprimirse fácilmente en cientos de gigabytes de datos basura y los más avanzados pueden llegar hasta petabytes (millones de gigabytes) o incluso exabytes (miles de millones de gigabytes). Sí, para que quede perfectamente claro, estamos hablando de meter exabytes de datos en kilobytes.

Para entender cómo funciona, tenemos que dar un pequeño rodeo para ver cómo funciona la compresión de datos (WinZip, WinRAR, 7-zip, etc.)

¿Qué es la Compresión de Datos?

La compresión es una reducción del número de bits necesarios para representar datos. Consideremos la siguiente cadena

aaabbbbaaabaaabaaa

La cadena anterior tiene 18 caracteres. Observa que la subcadena aaa se encuentra muchas veces. Esto es lo que se conoce como redundancia estadística. Tomamos las secuencias comunes más largas de los datos e intentamos representarlas utilizando el menor número de bits posible. Ahora bien, comprimir esta cadena significa que tenemos que representar esta información en menos de 18 caracteres. Sustituyamos cada aparición de “aaa” por un símbolo, digamos “$“, y veamos qué ocurre.

En lugar de utilizar la cadena directamente, utilizamos una forma intermedia (comprimida) de la cadena junto con algunas instrucciones sobre cómo obtener la cadena original:

$bbbb$b$b$
$=aaa

La primera línea se supone que son nuestros datos comprimidos y la segunda línea es la instrucción, un diccionario que hemos creado que nos dice que cuando queramos descomprimir los datos debemos sustituir cada aparición de $ por aaa para recuperar los datos originales. Ahora, si contamos el número total de caracteres, sólo necesitamos 10 + 5 = 15 para representar la misma información. Acaba de producirse la compresión.

Ahora bien, éste era un ejemplo muy burdo y nuestro pequeño “algoritmo” ignoraba muchas cosas que necesita un algoritmo de compresión práctico (como la codificación Huffman o LZW). Pero servirá para nuestros propósitos.

Si utilizas a menudo aplicaciones de compresión como WinZip o WinRar, te darás cuenta de que a veces los datos se comprimen muy bien, mientras que otras veces la compresión apenas reduce el tamaño de los datos. La verdadera conclusión es que la compresión prospera cuando los datos tienen algunos patrones que se repiten (es decir, redundancia estadística). Como ejemplo, al comprimir texto podemos utilizar el conocimiento de que la letra e es la más común en el español moderno (y en el inglés también). Así que valdría la pena intentar representar la e con el menor número de bits posible.

Ahora volvamos a las bombas zip.

42.zip: Ejemplo de Bomba Zip

Ninguna discusión sobre bombas zip está completa sin el infame 42.zip. Se trata de un archivo zip de 42 kilobytes de datos comprimidos, que contiene cinco capas de archivos zip anidados en conjuntos de 16, cada capa inferior contiene un archivo de 4,3 gigabytes (4,3×109 bytes) para un total de 4,5 petabytes (4,5×1015 bytes) de datos sin comprimir.

El 42.zip es sólo un ejemplo, hay muchos más como éste y puedes crear los tuyos propios. El principio de las bombas zip se extiende a muchos otros ámbitos. Un archivo similar es una bomba de descompresión basada en XML llamada “billion laughs” (o XML Bomb). Básicamente, bloquea un navegador web haciendo que el analizador XML se quede sin memoria. La mayoría de los navegadores actuales se defienden de esto limitando la memoria asignada al analizador.

4,5 petabytes es bastante impresionante, pero lo que estamos a punto de hacer va a hacer que esto salte por los aires. Vamos a construir una bomba zip de exabytes.

Cómo Hacer una Bomba Zip

Veamos cómo crear tu propia bomba zip. Es muy fácil.

  • Abre un editor de texto
  • Empieza a escribir ceros (0). Muchos ceros. En serio, mantén el botón pulsado. Y luego algunos más.
  • Ahora selecciona todo y copia y pega. Y pega. Y pega.
  • Una y otra vez. Tienes que hacer lo anterior hasta que tu archivo de texto tenga literalmente millones de ceros. Es probable que tu inocente editor de texto empiece a fallar en torno a los cien mil ceros, así que ten cuidado y sigue adelante.
Ejemplo de creación Bomba Zip
Ejemplo de creación Bomba Zip

¿Quién te ha dicho que pares? ¡Sigue pegando!

P.D: Hay un atajo más fácil. Digamos que haces un archivo de texto inicial con unos 10 MB de ceros. Guárdalo y cierra el editor de texto. Ve a la carpeta donde está guardado tu archivo de texto, haz unas diez copias del archivo de texto en la misma carpeta. Ahora abre un símbolo del sistema donde está almacenado tu archivo de texto y escribe:

copy /b *.txt combinado.txt

Lo que hace es combinar todas las copias de los archivos de texto en una sola. Y lo que es mejor, lo hace rápidamente y sin retrasos. Los editores de texto se congelan por tener que lidiar con la interfaz de usuario. Usando la línea de comandos (CMD: Estos son Comandos que no Conocías y Deberías Usar), todo sucede como un proceso en segundo plano sin ningún contratiempo. Combinando diez archivos de 10MB obtendrás un archivo de 100MB, combina diez copias de ese y tendrás un archivo de texto de 1GB lleno de ceros en sólo unos segundos.

En un archivo de texto estándar, cada carácter necesita 1 byte (8 bits) de almacenamiento.Por tanto,

  • Mil caracteres = 1.000 bytes (algo menos de un kilobyte; recuerda que un kilobyte son 1024 bytes, no 1.000).
  • Un millón de caracteres = 1.000.000 bytes (algo menos de un megabyte)
  • Mil millones de caracteres = 1.000.000.000 bytes (poco menos de un gigabyte)

El tamaño exacto no importa. Un archivo de texto de 1 GB es suficiente.

  • Ahora, abre tu aplicación de compresión (cualquiera sirve, WinZip, WinRar, 7-zip, etc.) y comprime el archivo de texto.
  • No te quedes boquiabierto, ya que es probable que veas una tasa de compresión de alrededor del 99,9% (1000 veces la reducción en el tamaño del archivo), el archivo de 1 GB sería de alrededor de 1 MB comprimido.
  • Ahora queda un poco de copia-pega final. Haz una docena de copias del archivo zip. Ahora comprímelas.
  • Haz unas cuantas copias de este nuevo archivo zip y comprime todas las copias.
  • Sigue añadiendo más y más capas y ¡viola! nuestra bomba zip está lista. Con 9 capas (cada una con 10 archivos comprimidos de la capa inferior), con un archivo de texto de 1GB en la parte inferior, tendrías un total de 1 exabyte ( = 109*1GB = 1018 bytes) y la bomba zip sería de unos pocos kilobytes.

Y ya está.

¿Cómo se Utiliza una Bomba Zip?

Ahora que hemos empaquetado una cantidad ridícula de datos en un archivo minúsculo, ¿qué se puede hacer con él? ¿Es sólo un truco estrafalario, interesante pero inútil? Sí y no.

Concepto de bomba zip
Concepto de bomba zip

Las antiguas aplicaciones de compresión solían incluir una “función” llamada descompresión recursiva. Podías optar por descomprimir completamente un archivo del que sabías que contenía más archivos. La bomba zip era en realidad una bomba para estas aplicaciones. Incluso hoy en día, los dispositivos de almacenamiento más comunes (como el disco duro de tu ordenador) son bastante lentos. Así que se tardaría un buen rato en escribir una gran cantidad de datos en el dispositivo de almacenamiento. Cualquiera que estuviera desempaquetando lentamente una bomba zip se daría cuenta rápidamente de esto y simplemente detendría el proceso, desactivando nuestra bomba. La mayoría de las aplicaciones modernas no utilizan la descompresión recursiva debido a las bombas zip.

En la misma línea, la mayoría de los programas antivirus modernos pueden detectar si un archivo es una bomba zip y evitar desempaquetarlo. En muchos escáneres antivirus, sólo se realizan unas pocas capas de recursividad en los archivos comprimidos para ayudar a prevenir ataques que causarían un desbordamiento del búfer, una condición de falta de memoria o excederían una cantidad aceptable de tiempo de ejecución del programa. Las bombas Zip a menudo (si no siempre) se basan en la repetición de archivos idénticos para lograr sus ratios de compresión extremos. Se pueden emplear métodos de programación dinámica para limitar el recorrido de estos archivos, de modo que sólo se siga recursivamente un archivo en cada nivel, convirtiendo así su crecimiento exponencial en lineal. Y así se desactiva la bomba una vez más.

Si no fuera así, las bombas zip seguirían siendo un ataque viable contra los antivirus, o al menos una técnica de bloqueo. Es bastante sencillo. El santo grial de un hacker malicioso es poder ejecutar un archivo ejecutable en el ordenador de la víctima sin la mirada indiscreta de los antivirus. Los antivirus vigilan de cerca los nuevos archivos potencialmente peligrosos. Así que para ejecutar un archivo potencialmente peligroso, ¿por qué no distraer al antivirus con otra cosa? Esto es exactamente lo que las bombas zip podían hacer en otros tiempos. Mientras el antivirus se está ahogando, un ejecutable malicioso podría fácilmente robar datos o instalar puertas traseras o casi cualquier cosa e incluso poner estas instalaciones en la lista blanca del antivirus, adueñándose completamente del sistema.

Pero esta técnica ya no es viable. Esto es bueno para nosotros (como usuarios) y malo para nosotros (como “pentesters“). Pero la seguridad es una carrera sin meta. Nunca se puede estar seguro de que un sistema sea completamente seguro. Incluso si encuentras el último agujero de seguridad en un sistema, nunca podrás saber si era realmente el último agujero de seguridad. Lo único que podemos hacer es seguir buscando, lo que deja abierta la posibilidad de que un día se encuentre una nueva vulnerabilidad y las bombas zip vuelvan con fuerza.

Palabras Finales

Y aquí termina la historia de la bomba zip. En realidad entran dentro de la clase de las bombas lógicas, que también contiene la bomba fork que hicimos en Linux. Las bombas zip nos muestran que el campo de la piratería informática está lleno de creatividad e ingenio. Incluso la memoria limitada puede considerarse un “fallo”, un agujero de seguridad presente en todos los ordenadores.

Cuando los viejos métodos dejan de funcionar, pronto aparecen otros nuevos que ocupan su lugar. En ciberseguridad, si no puedes ganar jugando limpio, el engaño y la astucia pueden darte la ventaja. Y eso nos lleva al terreno de la ingeniería social.

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda