# Archivbombe

Eine Archivbombe (auch Dekomprimierungsbombe oder Zip-Bomb) ist eine Datei mit per Datenkompression gepacktem Inhalt, deren schadhafter Zweck darin besteht, beim Entpacken ein unerwartet hohes Vielfaches ihrer Größe anzunehmen oder Software zum Entpacken in eine Endlosschleife zu bringen. Die gepackten Inhalte können beispielsweise Grafikdateien mit dem immer gleichen Muster oder Textdateien mit sich wiederholenden Zeichenfolgen sein. Solche Regelmäßigkeiten können außerordentlich stark komprimiert werden. Ebenso können sie Fehler in der Entpacksoftware ausnutzen, um Rekursionen zu erzeugen.

## Angriffsweg

Der vorwiegende Angriffsweg der Archivbomben sind E-Mails, denen sie als Anhang beigefügt sind. Eine solche E-Mail ist nicht sehr groß und stellt keinerlei auf den ersten Blick erkennbare Gefahr dar.
Archivbomben sind nicht primär dafür gedacht, von dem Benutzer entpackt zu werden, sondern zielen vorwiegend auf Antivirenprogramme ab: Diese scannen Dateien – auch solche innerhalb von Archiven – häufig schon beim Dateieingang. Dafür müssen die Archive in einen temporären Speicherbereich entpackt werden. Dabei besteht die Gefahr, dass die entpackten Dateien den Arbeitsspeicher oder die Festplatte füllen und das System gänzlich zum Stillstand bringen. Außerdem benötigt der Scanvorgang viel Rechenzeit. Bei rekursiven Archivbomben hingegen bleibt das System i. d. R. funktionsfähig, lediglich der Virenscanner kann seine Aufgabe (nämlich das Scannen des Archivs) niemals vollenden. Dieser Art von Archivbomben kann entgegengewirkt werden, indem die Antivirensoftware eingehende Archive nur bis zu einer bestimmten Tiefe überprüft. Der Angriff ist also der Versuch eines Denial of Service.
Die Größeninformation in den Attributen des Archivs abzufragen, hat keinen zusätzlichen Nutzen, da diese beispielsweise per Hex-Editor manipuliert sein können.

## Beispiele
### 42.zip

Eine bekannte Archivbombe ist 42.zip. Fünfmal rekursiv gepackt, beträgt ihre Größe lediglich 42 Kilobyte. Beim Entpacken wächst das Datenvolumen allerdings um das Hundertmilliardenfache auf 4,5 Petabyte:
| Struktur | Gesamtzahl Dateien$^{1)}$ | enthält jeweils | unkomprimierte Gesamtgröße (Byte) |
| 42.zip$^{2)}$ | 1.048.576 | 16 Ordner | 4.503.599.626.321.920 (4,5 PB) |
| → lib0.zip … libf.zip$^{3)}$ | 1.048.576 | 16 Ordner | 4.503.599.626.321.920 (4,5 PB) |
| → book0.zip … bookf.zip | 65.536 | 16 Ordner | 281.474.976.645.120 (281 TB) |
| → chapter0.zip … chapterf.zip | 4.096 | 16 Ordner | 17.592.186.040.320 (17 TB) |
| → doc0.zip … docf.zip | 256 | 16 Ordner | 1.099.511.627.520 (1 TB) |
| → page0.zip … pagef.zip | 16 | 01 Datei | 68.719.476.720 (68 GB) |
| → 0.dll$^{4)}$ | | 01 | 4.294.967.295 (4,3 GB) |
Anmerkungen:
* $^{1)}$ Ausschließlich die unterste Hierarchiestufe – also die Dateien page0.zip … pagef.zip – enthält Dateien; die darüber Liegenden dienen nur als Multiplikatoren für die Anzahl der Dateien in der untersten Hierarchiestufe. Die Angaben sind nicht kumuliert und dienen vornehmlich der Anschauung – so berücksichtigt die Gesamtzahl der Dateien nur die Anzahl der insgesamt enthaltenen komprimierten Dubletten von 0.dll und nicht die ebenfalls mit eingebetteten Containerdateien (deren Anteil an der Gesamtmenge allerdings auch vernachlässigbar gering ausfällt).
* $^{2)}$ Die Datei 42.zip fasst lediglich die 16 Containerdateien der nächst-unteren Hierarchiestufe zu einer einzigen Datei zusammen, daher ändert sich an Gesamtgröße und Anzahl im Vergleich zur nächst-unteren Stufe nichts.
* $^{3)}$ Die o.a. Notierung der Dateinamen erfolgt nach dem Schema Präfix# — „#“ ist dabei der Platzhalter für eine einstellige Hexadezimalzahl, kann also insgesamt 16 Werte (0, 1, 2, […], 9, A, B, C, D, E, F) annehmen. „lib0.zip … libf.zip“ steht also für 16 durchnummerierte einzelne Dateien.
* $^{4)}$ Die Datei 0.dll besitzt durchgehend ein 0xAA-Bytemuster über die gesamten 4.294.967.295 Bytes hinweg und ist durch die damit einhergehende Redundanz sehr gut verlustfrei komprimierbar.

## Weitere

Eine „Zip Files All The Way Down“ genannte Methode ähnelt der 42.zip – hierbei wird allerdings eine zip-, gzip- oder tar-Datei erstellt, die sich rekursiv selbst enthält.