C’è la convinzione che gli archivi compressi, come quelli in formato Zip, siano intrinsecamente sicuri. In altre parole, il contenuto di un file compresso può essere certamente pericoloso ma un doppio clic o la semplice estrazione del contenuto in una cartella su disco non possono essere causa di problemi. Un file Zip è di per sé un archivio contenente un numero variabile di elementi. Non è certo un file eseguibile. Le Zip bomb squassano queste certezze.
Di recente si è tornati a parlare di Zip bomb, una modalità di attacco che fa leva proprio sulle caratteristiche dei file compressi. Una Zip bomb (o “bomba a decompressione” in italiano) è un file compresso che, quando viene estratto, cresce talmente di dimensioni da sovraccaricare il sistema, il programma di estrazione o il software antivirus. Gli effetti più concreti sono l’esaurimento dello spazio disponibile su hard disk e SSD, comportamenti anomali e veri e propri crash.
Le Zip bomb possono essere annoverate dagli attacchi di tipo DoS (Denial of Service) perché il loro obiettivo è quello di appesantire la macchina dell’utente così da renderla inutilizzabile.
Il formato Zip in breve
Il formato Zip è ampiamente usato in ambiente Windows per salvare e trasferire file compressi. Phil Katz, fondatore della storica azienda PKWARE, mise a punto tale formato nel 1989. Egli ideò inoltre la nota utilità per MS-DOS chiamata PKZIP. Basata su riga di comando, resta nella memoria di molti di noi.
Zip supporta diversi algoritmi per la compressione dati anche se il più comune è rimasto DEFLATE: quest’ultimo, a sua volta, poggia su LZ77 e sul codice di Huffman.
LZ77 è una variante dell’algoritmo LZ (Lempel-Ziv) originariamente proposto dagli omonimi informatici israeliani. LZ è a sua volta un insieme di algoritmi di compressione senza perdita (lossless) che utilizzano la tecnica di sostituzione di sequenze ripetitive con riferimenti più brevi. LZ77 è una delle prime implementazioni dell’algoritmo LZ. Proposto da Lempel e Ziv nel 1977, ha guadagnato un’immensa popolarità.
Il funzionamento di LZ77 prevede che il testo in input sia suddiviso in token, singoli caratteri o sequenze di caratteri. Durante la compressione, viene cercata la più lunga sequenza di caratteri corrispondente già vista all’interno della finestra scorrevole. Quest’ultima è una porzione di testo precedente all’attuale posizione di lettura, e la corrispondenza viene identificata utilizzando un offset (distanza dalla posizione attuale alla posizione della corrispondenza) e una lunghezza. L’algoritmo ideato d a Lempel e Ziv sostituisce la sequenza ripetitiva con un riferimento a una sequenza già vista, riducendo l’occupazione di spazio.
La stessa tecnica di compressione è utilizzata in molte successive varianti degli algoritmi LZ, tra cui anche il già citato DEFLATE sfruttato per i file Zip.
Il concetto di entropia e la sua importanza nella compressione dei file
L’entropia è un concetto fondamentale nell’ambito della teoria dell’informazione e della compressione dei dati. Essa misura quanto i dati sono imprevedibili o disordinati. Se un insieme di dati ha bassa entropia, significa che è piuttosto ordinato e prevedibile. Di conseguenza, può essere compresso più efficacemente.
Come abbiamo visto, la compressione dei dati mira a rimuovere la ridondanza sfruttando la struttura statistica dei dati per ridurre le dimensioni del file senza perdita di informazioni. Nel caso della compressione del contenuto dei file non è infatti possibile permettersi l’attivazione di uno schema lossy, che è invece comune nel caso della compressione audio e video.
Gli algoritmi di compressione dati, come ad esempio DEFLATE, utilizzano l’entropia per identificare e sfruttare le ripetizioni, i modelli o le strutture nei file. I dati con elevata entropia, che presentano una maggiore casualità e meno ripetizioni, richiedono un maggiore spazio di archiviazione per rappresentarli in modo accurato con un approccio lossless.
Come funziona una Zip bomb
Abbiamo detto che, come i progenitori, anche l’algoritmo DEFLATE individua e sostituisce sequenze di dati ripetitive all’interno di un file con riferimenti più brevi. Il file che si ottiene in output risulta più compatto e meno pesante.
All’inizio degli anni 2000 iniziò a circolare un file chiamato 42.zip: il suo nome deriva dal fatto che l’archivio compresso occupa appena 42 KB su disco, un’inezia. Provando ad estrarre il contenuto del file Zip, invece, i dati arrivano a occupare una dimensione di 4,5 Petabyte ovvero 4,5 milioni di Gigabyte. Si pensi che molti di noi utilizzano supporti di memorizzazione che spesso non superano i 500 GB o 1 Terabyte (1.000 GB). Ecco, 4,5 Petabyte equivalgono a 4.500 Terabyte (TB).
Il file esemplificativo 42.zip contiene 16 file compressi, ciascuno contenenti ulteriori 16 file compressi, poi ancora ulteriori 16, altri 16 e altri 16, per poi concludere con un singolo file finale in ogni archivio. Estraendo tutto il contenuto, l’utente esaurisce lo spazio disponibile sul suo sistema. Questo lo schema utilizzato:
16 x 4294967295 = 68.719.476.720 byte (68 GB) 16 x 68719476720 = 1.099.511.627.520 byte (1 TB) 16 x 1099511627520 = 17.592.186.040.320 byte (17 TB) 16 x 17592186040320 = 281.474.976.645.120 byte (281 TB) 16 x 281474976645120 = 4.503.599.626.321.920 byte (4,5 PB)
Il problema è figlio del fatto che la struttura di compressione ricorsiva usata nella Zip bomb prevede che ogni file contenga una copia compressa di sé stesso. L’effetto combinato di questa compressione ricorsiva porta alla creazione di un’enorme quantità di dati quando il file ZIP viene estratto.
In generale, chi realizza Zip bomb utilizza strutture ottimizzate a bassa entropia che possono essere trasformate in file compressi di dimensioni estremamente contenute. Quando in realtà il contenuto dell’archivio, una volta decodificato, occupa un volume di spazio mastodontico.
Le principali tipologie di Zip bomb
Esistono vari tipi di Zip bomb (vedere anche la definizione di Kaspersky):
Multilivello: è il caso del file 42.zip, citato in precedenza. Questa tipologia di attacco utilizzi file Zip ricorsivi “incastonati” l’uno dento l’altro.
Single-layered: in questo caso gli aggressori utilizzano un unico livello di compressione, senza usare l’approccio ricorsivo. Gli autori della Zip bomb progettano attentamente il set di file di dati per ottenere il miglior rapporto di compressione. Esempi famosi sono le Zip bomb chiamate zbsm, zblg e zbxl.
Autoreplicante: l’esemplare di Zip bomb più complesso. Si tratta di un file Zip che si replica quando viene decompresso, creando un processo ricorsivo. Un esempio noto di tale categoria è il file r.zip.
Zip bomb: quanto sono pericolose ai giorni nostri
I primi esempi di Zip bomb risalgono agli anni ’90; l’idea di utilizzare una forma di compressione ricorsiva per creare un effetto di espansione esponenziale fu però teorizzata già negli anni ’80.
Una minaccia del genere resta rilevante anche ai giorni nostri? Diciamo che gli “effetti indesiderati” nei quali si può incorrere oggi sono ben lontani dalle problematiche che si potevano sperimentare anni fa. Una Zip bomb non provoca più l’apertura senza controllo e in modo ricorsivo di centinaia di migliaia di oggetti.
Come abbiamo avuto modo di verificare anche di recente, i principali software antivirus e lo stesso browser Web sono in grado di riconoscere e bloccare alcuni esemplari di Zip bomb (si pensi allo storico 42.zip). Tuttavia, non rilevano un ampio ventaglio di Zip bomb single-layered oppure autoreplicanti. Quando si prova ad estrarre il contenuto di una Zip bomb o comunque nel momento in cui l’antimalware prova a scansionarlo, può accadere che il livello di occupazione della CPU schizzi improvvisamente verso l’alto rendendo il sistema quasi inutilizzabile. Allo stesso modo, lo spazio disponibile può decrescere rapidamente.
I programmi di decompressione utilizzano diverse tecniche per rilevare e gestire le Zip bomb al fine di proteggere i sistemi dagli effetti negativi. Il controllo delle dimensioni dei file, della profondità di estrazione (così da bloccare le Zip bomb multilivello), il rilevamento dei loop infiniti, l’analisi dei pattern di compressione, la presenza di modelli noti o di vere e proprie “firme”, consentono di neutralizzare la minaccia. I software di decompressione, tuttavia, non sono tutti ugualmente abili e sono solo una parte della “catena”.
Obiettivo: consumare tutte le risorse di sistema
L’obiettivo degli aggressori, d’altra parte, è proprio questo: non tutti i software moderni integrano una protezione adeguata contro le Zip bomb. Può quindi accadere che antimalware, browser Web o scanner di vulnerabilità attivino un consumo anomalo delle risorse di sistema facendo il gioco dei malintenzionati. In molti casi si registrano crash dei processi sui quali il sistema operativo poggia il suo funzionamento. Talvolta Windows non permette neppure di cancellare i file estratti, per via del numero eccessivo di sottocartelle presenti.
In questi frangenti, è possibile rimuovere le cartelle da riga di comando usando un supporto di avvio basato su Windows o su Linux.
Utilizzando un programma come 7-Zip, cliccando con il tasto destro del mouse sul file in formato Zip, quindi su Apri, il consiglio è di dare un’occhiata ai dati in byte riportati nelle colonne dimensione e dimensione compressa. Se la dimensione compressa fosse di pochi byte mentre la dimensione reale fosse notevolmente più grande, ci sono elevatissime probabilità di trovarsi dinanzi a una Zip bomb.
Sul sistema di un utente privato è possibile prendersi un po’ di tempo per liberarsi degli effetti della Zip bomb. Pensate però a quali possono essere le conseguenze su un server aziendale: il sistema operativo e le applicazioni in esecuzione possono cessare di rispondere. Con i servizi erogati che spesso diventano indisponibili.