Das klassische Denial-of-Service-Archiv war die rekursive Zip-Bombe: 42.zip verschachtelt sechs Ebenen von Zip-Dateien und erreicht 4,5 PB nur dann, wenn der Entpacker immer weiter verschachtelte Archive auspackt. Die meisten realen Parser entpacken einmal, sodass die oberste Ebene nur dürftige 0,6 MB liefert, und Scanner verteidigten sich, indem sie die Rekursionstiefe und die entpackte Größe begrenzten. Der Angriff, den alle kannten, hatte die Form eines Baums.
David Fifields Schritt bestand darin, die Rekursion zu entfernen. Er komprimiert einen einzigen Kern aus wiederholten Bytes und richtet dann Zehntausende von Einträgen im zentralen Verzeichnis auf überlappende Bereiche dieser Bytes, wobei er jeden dazwischenliegenden lokalen Dateiheader in nicht komprimierte DEFLATE-Blöcke einbettet, sodass gewöhnliche Parser weiterhin eigenständige, wohlgeformte Dateien sehen. Jedes Byte des Kerns wird einmal pro Datei entpackt, sodass die Ausgabe quadratisch mit der Eingabe wächst und die Bombe in einem einzigen Entpackvorgang detoniert.
Die Zahlen übertrafen jede frühere Konstruktion: Bei 42.374 Bytes, der Größe der äußeren Ebene von 42.zip, expandiert das Archiv auf 5,5 GB (ein Verhältnis von 129.000); die 10-MB-Version expandiert auf 281 TB, ein Verhältnis von über 28 Millionen und 99,97 % des theoretischen Maximums des Zip-Formats; mit der Zip64-Erweiterung expandieren 46 MB auf 4,5 PB. USENIX nahm die Ausarbeitung für seinen WOOT-2019-Workshop an und zeichnete sie mit dem Best Paper Award aus.
Die Veröffentlichung wurde zu einem Live-Test der Abwehrmaßnahmen der Branche. VirusTotal-Scans der 10-MB-Probe liefen bei vielen Engines in Zeitüberschreitungen; ClamAV verbrannte CPU, bis seine Erkennung gepatcht und dann erneut gepatcht wurde; Mark Adler schrieb einen Detektor für überlappende Dateien für UnZip, den Debian auslieferte, während SUSE ablehnte (CVE-2019-13232); Chromium fügte Metriken für anomale Kompressionsverhältnisse hinzu; und Apple entschärfte die Erschöpfung des iOS-Quick-Look-Caches in iOS 14.
Viele Dateien auf einen einzigen komprimierten Kern überlappen, sodass jedes gespeicherte Byte N-mal expandiert
Es greift die Annahme an, die der Standardverteidigung zugrunde liegt: Scanner begrenzten die Rekursionstiefe, sodass eine Bombe, die sich in einem Durchgang vollständig entfaltet, gewöhnlich aussieht, bis sie die Festplatte überflutet.
Durch die Überlappung wird das Verhältnis superlinear, weil jedes gespeicherte Byte zu jeder Ausgabedatei beiträgt, sodass das Archiv mit zunehmender Größe tödlicher wird, statt pro Ebene einen festen Faktor hinzuzufügen.
Die Kompatibilität wurde durch passende Namen, korrekte CRCs und einfaches DEFLATE gezielt hergestellt, sodass die Demo auf Info-ZIP-, Python-, Go- und Android-Parsern lief statt nur in einem Sonderfall.
Fifield lieferte funktionierende Beispiele aus und verband den Angriff mit der Behebung, der Erkennung von Überlappungen und der Sandbox-Isolierung von Parsern, wodurch aus einer Kuriosität Patches wurden, die Hersteller übernehmen konnten.
Wenn Verteidiger eine Angriffsform patchen, ändere die Form: Überlappende Dateien machten die Rekursion optional und Tiefenbegrenzungen nutzlos. Begrenze Zeit und Speicherplatz innerhalb des Parsers, statt Signaturen aufzuzählen.
Mark Adlers Überlappungsdetektor gelangte in UnZip und Debian, ClamAV prüfte zunächst nur benachbarte Paare und verhängte dann eine Zeitbegrenzung, Ds std.zip lernte, Überlappungen abzulehnen, Chromium fügte Metriken für anomale Verhältnisse hinzu, und Apple entschärfte die Quick-Look-Erschöpfung in iOS 12/13 in iOS 14. VirusTotal dokumentierte Engines, die in Zeitüberschreitungen liefen, und Antivirenhersteller aktualisierten ihre Erkennung bis 2019. Google Safe Browsing kennzeichnete von Ende Juli bis Mitte August 2019 die gesamte Domain bamsoftware.com, wodurch kurzzeitig der Snowflake-Broker von Tor ausfiel, und Xfinity blockierte die Seite im November 2019. Fifield gewann den Best Paper Award bei USENIX WOOT 2019.
DEN BELEGEN FOLGEN
Die Quellen
- A better zip bomb David Fifield · bamsoftware.com
- A better zip bomb (Best Paper), USENIX WOOT 19 USENIX Association · usenix.org
- A better zip bomb — Hacker News discussion Hacker News · news.ycombinator.com ·