Zip 炸弹是什么?
September 17, 2023
经典的 Zip 炸弹是一个微小的存档文件,其大部分以千字节为单位计算。当解压缩此文件时,其内容将超出系统所能处理的范围。通常情况下,这些数据量可达数百GB,而更先进的可能达到PB(百万GB)甚至EB(数十亿GB)。因此,确切地说,我们在填充千字节内的 exabytes。
对于 Zip 炸弹的第一次提及是在1996年。当时受欢迎的消息服务 Fidonet 的一个用户在公告板上发布了一个恶意存档文件,这个无意中打开的文件导致管理员的计算机崩溃。
当您打开一个文件时,它会开始解压缩所有数据,这会导致程序或整个系统崩溃,因为根本没有足够的空间来解压缩这么多数据。
42.zip - 一个经典的 Zip 炸弹
互联网上最常见的 Zip 炸弹是 “42.zip”,它的压缩体积仅为42 Kb。
这是通过递归嵌套的 zip 文件系统实现的,其中最低的 zip 文件层级被解压缩为 4.3 GB。此构造使用了最常见的解压缩算法,与大多数 zip 解析器兼容。
Zip Bomb 定义:它是如何工作的?
Zip 炸弹的原理是创建一个文本文件,该文件要么为空,要么包含相同的符号并被归档。因为文件包含相同的信息,所以它会归档自己并且比其他文件要小得多。然后创建另外 16 个相同的归档文件,但由于它们在哈希值上完全相同,它们就像单个文件一样重量轻。然后再创建 16 个副本,再创建 16 个副本,如此 6 次。最终,我们有了 6 层 16 个相同归档文件的归档文件。
什么是压缩?
压缩是将表示数据所需的比特数减少。让我们详细了解一下:
| xxxyyyyxxxyxxxyxxx
这个字符串长度为 18 个字符。xxx 可以被找到很多次。这就是所谓的统计冗余。我们将数据中最长的公共序列用尽可能少的比特来表示。现在,压缩这个字符串意味着我们必须用少于 18 个字符来表示这些信息。将每个 ‘xxx’ 出现的地方替换为一个符号,比如 ‘$’,看看会发生什么。
现在我们使用一个中间(压缩)字符串形式以及一些指示如何获得原始字符串的指令:
| $yyyy$y$y$
| $=xxx
第一行是我们的压缩数据,第二行是指令。我们创建的词典告诉我们,如果我们需要解压缩数据,我们应该将 $ 的每个出现替换为 xxx 以获得原始数据。现在让我们计算总字符数。
现在我们需要 10 + 5 = 15 来表示相同的信息。
Zip Bomb 有什么用途?
由于压缩炸弹并不直接损害系统,因此通常用于导致尝试访问它的程序失败或失效。它还可以用于禁用杀毒软件,为其他典型恶意软件创建后门。
压缩炸弹不会窃取程序的正常操作,但存档被精心设计,以便解压缩它(例如,杀毒软件扫描病毒)需要过多的时间、磁盘空间或内存(或全部都需要)。在这个时候,攻击者可能会尝试使用真正的病毒感染系统。虽然有时杀毒软件在尝试扫描附件时会占用PC的所有资源,从而使系统负载过重,使设备进一步使用变得不可能。
压缩炸弹的起源
现在很难意外地捕获这种病毒。大多数现代防病毒软件已经学会了识别和消除压缩炸弹,实际上,这种攻击的有效性很小。