Double Loaded ZIP File 绕过手法
0x00 概述
大多数通过邮件传播的恶意软件都是打包为 ZIP、RAR、7z 等方式进行传播的。近日,研究人员发现了一个新型的恶意文件压缩方式,即 Double Loaded Zip File 双加载 ZIP 文件。
就本例而言,他包含有两个 ZIP 文件结构(2 个 EOCD)。第一个 ZIP 结构中包含有一个无恶意的 PNG 格式的图像文件 order.jpg(不是扩展名显示的 jpeg 格式),order.jpg 实际上一个诱饵文件,用来隐藏另一个 ZIP 结构的内容。第二个 ZIP 结构中包含 SHIPPING_MX00034900_PL_INV_pdf.exe,其实是一个远程木马 NanoCore RAT。
很明显,攻击者想尝试使用这种 dual archive 的方式来绕过安全扫描。
0x01 文件特征
- ZIP 文件的文件大小明显大于其压缩前的内容;
- ZIP 文件的压缩方式都为 0008(deflate);
- ZIP 文件中有两个 End of Central Directory (EOCD) 标志,这表明存在两个独立的 ZIP 结构;
- ZIP 文件 EOCD 标志后的 “核心目录结构总数” 都为 0001。
0x02 利用条件
只有在用户使用某些特定的压缩工具时才会成功,比如 PowerArchiver、WinRAR 和 7-Zip 的某些版本。

检测方法
正常情况下 ZIP 压缩文件有且只有一个 EOCD 标志,存在于整个压缩包的结尾。因此,可以根据 ZIP 文件中是否存在两个及两个以上的目录结束标志(EOCD,End of Central Directory),来检测是否存在 Double Loaded Zip File。
EOCD:504B0506
附录:ZIP 文件格式分析
通常情况下,我们所用 ZIP 文件格式包含有三个部分:压缩源文件数据区、压缩源文件目录区、压缩源文件目录结束标志。当 ZIP 压缩的文件不止一个时,压缩源文件数据区将会有多组 **[文件头+文件数据+数据描述符]**,ZIP 对每个文件都进行了独立压缩,故每个压缩的文件都将对应一条记录。
Local file header 文件头
文件头主要用于表示此文件的开始,记录了此文件压缩的信息,具体字段的含义如下表。(注:偏移量为十进制)
偏移量 | 占用字节数 | 含义 |
---|---|---|
0 | 4 | 文件头标识,固定值为0x04034b50 |
4 | 2 | 解压文件所需的pkware最低版本 |
6 | 2 | Genera purpose bit flag 通用比特标志位 |
8 | 2 | Compression method 压缩方式 |
10 | 2 | 文件最后修改时间 |
12 | 2 | 文件最后修改日期 |
14 | 4 | crc32校验码 |
18 | 4 | 压缩后的大小 |
22 | 4 | 未压缩的大小 |
26 | 4 | 文件名长度 |
28 | 2 | 扩展区长度 |
30 | n | 文件名 |
30+n | m | 扩展区 |
Centra directory 压缩源文件目录区
核心目录主要是记录压缩文件的目录信息,每个压缩源文件数据区的记录对应此压缩源文件目录去的一条记录。
偏移量 | 占用字节数 | 字段说明 |
---|---|---|
0 | 4 | 核心目录文件头标志,固定值为0x02014B50 |
4 | 2 | 压缩所用的PKWare版本 |
6 | 2 | 解压所需的PKWare最低版本 |
8 | 2 | Genera purpose bit flag 通用比特标志位 |
10 | 2 | Compression method 压缩方式 |
12 | 2 | 文件最后修改时间 |
14 | 2 | 文件最后修改日期 |
16 | 4 | CRC32校验码 |
20 | 4 | 压缩后的大小 |
24 | 4 | 未压缩的大小 |
28 | 2 | 文件名长度 |
30 | 2 | 扩展域长度 |
32 | 2 | 文件注释长度 |
34 | 2 | 文件开始位置的磁盘编号 |
36 | 2 | 内部文件属性 |
38 | 4 | 外部文件属性 |
42 | 4 | 本地文件头的相对偏移 |
46 | n | 目录文件名 |
46+n | m | 扩展域 |
46+n+m | k | 文件注释内容 |
End of Central directory recored 压缩源文件目录结束标志
目录结束标志用于标记压缩的目录数据的结束,每个压缩文件对应在此数据区有一记录。
偏移量 | 占用字节数 | 字段说明 |
---|---|---|
0 | 4 | 核心目录结束标记,固定值0x06054B50 |
4 | 2 | 当前目录结束标记 |
6 | 2 | 核心目录开始位置的磁盘编号 |
8 | 2 | 磁盘上所记录的核心目录数量 |
10 | 2 | 核心目录结构总数 |
12 | 4 | 核心目录的大小 |
16 | 4 | 核心目录开始位置相对于archive开始位置的位移 |
20 | 2 | 注释长度 |
22 | n | 注释内容 |
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!