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 文件特征

  1. ZIP 文件的文件大小明显大于其压缩前的内容;
  2. ZIP 文件的压缩方式都为 0008(deflate);
  3. ZIP 文件中有两个 End of Central Directory (EOCD) 标志,这表明存在两个独立的 ZIP 结构;
  4. ZIP 文件 EOCD 标志后的 “核心目录结构总数” 都为 0001。

ZIP_attachment

0x02 利用条件

只有在用户使用某些特定的压缩工具时才会成功,比如 PowerArchiver、WinRAR 和 7-Zip 的某些版本。

![The ZIP content as per the archiving tools](/img/Double Loaded ZIP File绕过手法/6a0133f264aa62970b0240a4e62353200b-700wi.jpg)

检测方法

正常情况下 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 注释内容

参考文章:
Double Loaded Zip File Delivers Nanocore
有关 ZIP 压缩包的破解