Zloader 2:寂静之夜 – Avast

在本研究中,我们将探讨 Zeus 的继任者之一—— Zloader 2 。我们将展示它的运作方式及其代码特性。我们会呈现深入研究 ботнет
与攻击活动的结果,并显示 Zloader 与其他恶意软件家族之间的一些有趣联系。

介绍

Zloader 2 (也被称为 Silent Night
)是一种类功能多元的模组化银行恶意软件,旨在提供未经授权进入线上银行系统、支付系统和其他金融相关服务的能力。除了这些功能外,它还能下载和执行任意文件、窃取文件、向访问的
HTML 页面注入任意代码等等。

历史

根据 ,第一个版本的 Zeus 在 2006-2008年期间被观察到。后来,于 2011 年,它的源代码 。结果,出现了新版本和变种。其中一个名为 ZloaderZeus 继任者
2016 年至 2017 年之间。最后,另一个名为 Silent Night 的继任者 ,并在地下市场上销售。

我们找到的这个变种的最早版本的 SHA256 是:
384f3719ba4fbcf355cc206e27f3bfca94e7bf14dd928de62ab5f74de90df34a
时间戳为 2019 年 12 月 4 日,版本号为 1.0.2.0。2021 年 7 月中旬,我们发现了版本 2.0.0.0。

微软最近 一项多个安全公司和信息共享与分析中心(ISACs)共同进行的调查,目的是摧毁 Zloader
ботнет 并将该案件提交法庭。

虽然这个恶意软件的原始名称可能是 Silent Night ,而
叫它 Zloader 2 ,但我们将简单地使用名称
Zloader

技术分析

模组与组件

Zloader 由不同的模组和组件组成:

  • Downloader —— 初始感染者
  • Backdoor —— 主要模组,存在 x86 和 x64 版本
  • VNC 模组 (x86 和 x64)
  • 网站注入 —— 从 C&C 接收
  • 附加库(opensslsqlitezlib ,Mozilla 库)

后门模组、VNC 模组和附加库都有指定的模组 ID,其他组件用来引用它们。

分发方式

Zloader 是透过经典的电子邮件垃圾讯息进行分发。2021 年,攻击者利用 Google AdWords 广告假冒 Zoom
通信工具的网站,实际上安装了 Zloader 。在 2021年的另一场攻击中,使用了假色情网站,用户需要下载额外软件以观看视频。下载器通常打包分发,有时会用有效的数位签名进行签署。

显示受感染系统分布的地图:

代码特性

Zloader 的代码非常明显。首先,它被许多永远不会被调用的函数稀释。Downloader 模组可能包含来自 Backdoor模组的函数,反之亦然。总体而言,约一半的代码不会被调用。

其次,简单的 x86 指令如 CMP、ADD 和 XOR被替换为特别函数。这些函数包含大量无用代码,以复杂化分析,并且可以调用其他的「替代」函数。更糟的是,针对特定指令有多个「替代」函数。此外,一些常数在运行时使用上述「替代」函数进行计算。

字符串使用简单的 XOR 算法加密。

样本的导入函数非常少。API 在运行时通过其名称的哈希解决。

结果是,超过一半的文件大小是无用的,仅仅用于混淆简单操作。

配置

DownloaderBackdoor 模组都有内置配置,使用 RC4 加密。解密密钥以明文存储,看起来像是
vcvslrpvwwfanquofupxt。早期版本(例如 1.0.x)的结构与后期版本(1.6.x 和
1.8.x)有所不同。现代版本在配置中存储以下信息:

  • Botnet 名称(下图中的 divader
  • 攻击活动名称(xls_s_2010
  • 硬编码的 C&C 列表
  • RC4 密钥(03d5ae30a0bd934a23b6a7f0756aa504

BinStorage

我们必须简要介绍 BinStorage ——Zloader 用来与 C&C通信及储存各种数据(如网站注入、系统信息、被窃取的数据和日志)所使用的数据格式。_BinStorage_包含标头和记录(也称为字段)。主标头存储有关记录数、数据大小(以字节计算)和它们的
MD5 信息。记录有自己的小标头,包含 FieldID - DWORD,用于描述数据的意义。

一些 FieldID 是硬编码的。例如,FieldID=0x4E20 中存储著最新的工作 C&C。其他 FieldID从文件路径派生(用来存储被窃取的文件)。

注册表使用

Zloader 模组(至少是 Downloaders 和 Backdoors)使用注册表来存储其工作所需的各种信息。此数据的 ROOT_KEY 为
HKEY_CURRENT_USER\Software\Microsoft\

Zloader 在注册表中存储的最重要和有趣的数据结构称为 MAIN_STRUCT。它是 ROOT_KEY 的一个子键,值名称来自配置中发现的 RC4密钥。我们猜测,来自同一行为者的 bot 使用相同的 RC4 密钥,因此它们能够轻松查找和读取 MAIN_STRUCT

MAIN_STRUCT 使用配置中提供的 RC4 密钥加密。它存储以下信息:

  • Zloader 使用的其他存储的注册表路径
  • Zloader 使用的文件和目录路径
  • 解密这些存储的加密密钥

文件使用

根目录是 %APPDATA%。Zloader 在其中创建随机名称的目录,以储存模组、被窃取的数据和日志。这些路径被存储在 MAIN_STRUCT 中。

网络通信

如前所述,bot 与 C&C 间的通信使用 BinStorage。根据消息的实际类型,字段列表可能会改变,但始终有 5 个固定字段发送至 C&C:

  • 配置中的某个 DWORD
  • 配置中的 botnet 名称
  • 根据系统信息派生的 BotID
  • 配置中的调试标志
  • 16 字节随机数据

请求使用配置中的 RC4 密钥加密。C&C 的响应使用 RSA 签名。

PING 请求

此请求用于检查 C&C 是否存活。响应仅包含由 bot 发送的随机字节。

DOWNLOAD MODULE 请求

此请求用于从 C&C 根据其 ID 下载模组。响应不是 BinStorage 形式的!

GET CONFIG 请求

用于接收配置更新:新 C&C、网站注入、下载任务等等。

C&C 和 DGA

正如前面所示,内置配置有一个硬编码的 C&C 列表。实际上,这些列表多年来未曾改变。为了绕过对这些硬编码 C&C 的封锁,Zloader 使用
DGA(域生成算法)。在 Zloader 中,DGA 根据当前日期和配置中的 RC4 密钥生成 32 个域。

还有第三类 C&C——由伺服器响应得到。它们被存储到注册表中。

Downloader 模组

本分析基于版本 1.6.28.0,
44ede6e1b9be1c013f13d82645f7a9cff7d92b267778f19b46aa5c1f7fa3c10b

Downloader 的功能是下载、安装并运行下一个模组——Backdoor。

主函数

在 Downloader模组启动后,垃圾代码会立即开始运行。这部分代码由许多垃圾函数组成,形成一种“网络”。在下图中,仅一个垃圾函数的调用图表。这些函数还试图读取、写入并删除某些
%TEMP%*.txt 文件。这的目的是延迟有效载荷的执行,并且我们推测,这可以复杂化模拟、调试和分析。

主函数的第二个也是最后一个任务是启动 msiexec.exe 并进行 PE 注入。注入的数据包含两个缓冲区:一个大的缓冲区,其中 Downloader以加密形式存储,另一个小的缓冲区(0x42 字节),用于解密代码。在注入完成后,Downloader 会自行终止。

注入的代码

控制流转移到小缓冲区,此缓冲区会在 msiexec.exe 的地址空间中解密 Downloader。解密后,Downloader 开始执行其主要任务。

首先,注入代码尝试从注册表中读取 MAIN_STRUCT。如果失败,它认为未在该系统上安装,并开始安装过程:创建 MAIN_STRUCT、将
Downloader 模组复制到 %APPDATA% 并被添加到启动键
HKCU\Software\Microsoft\Windows\CurrentVersion\Run,与随机值名称一起。

无论如何,Backdoor 模组会从磁碟或网络请求并执行。

Backdoor 模组

本分析基于版本 1.6.28.0,
c7441a27727069ce11f8d54676f8397e85301b4d65d4d722c6b239a495fd0282

实际上有两个 Backdoor 模组:针对 32 位系统(moduleID 0x3EE)和 64 位系统(moduleID
0x3E9)。Downloader 始终请求 32 位版本的 Backdoor。

Backdoor 的功能比 Downloader 复杂得多。如果比较我们样本的大小(解包后),Backdoor 将会大出两倍。

Backdoor 的主要功能:

  • 启动 VNC 模组
  • 向使用浏览器访问的页面注入网站注入内容
  • 下载并执行任意文件
  • 键盘纪录
  • 截图
  • 窃取文件并发送给 C&C

窃取文件

Zloader 窃取文件的最大软件群体是加密钱包:

  • Electrum
  • Ethereum
  • Exodus 加密钱包
  • Zcash
  • Bitcoin-Qt
  • 等等

它还会从浏览器中窃取数据:Chrome、Firefox 和 IE 的 cookies;Chrome 的保存登录。最终,还能窃取 MicrosoftOutlook 的帐户信息。

Hooking

为达成其目标,Zloader 进行 WinAPI hooking。为了执行此操作,Backdoor 模组枚举进程并注入到以下进程中:

  • explorer.exe
  • msiexec.exe
  • iexplore.exe
  • firefox.exe
  • chrome.exe
  • msedge.exe

64 位版本的 Backdoor 被注入到 64 位进程中,32 位版本则注入到 32 位进程中。

注入的代码会 Hook 以下 WinAPI 函数:

  • NtCreateUserProcess
  • NtCreateThread
  • ZwDeviceIoControlFile
  • TranslateMessage
  • CertGetCertificateChain
  • CertVerifyCertificateChainPolicy

这些 Hook 可以根据用途被划分为 3 组:

  1. NtCreateUserProcessNtCreateThread 被 Hook,用于将 Backdoor 模组注入到新创建的线程和进程中。
  2. ZwDeviceIoControlFileCertGetCertificateChainCertVerifyCertificateChainPolicy 被 Hook,用于支持网站注入机制。
  3. TranslateMessage 被 Hook 用于记录按键以及创建截图。

网站注入

首先,浏览器必须注入 Backdoor 模组。此时,系统中运行著多个 Backdoor 模组实例:一个由 Downloader启动的“主实例”,其他正在浏览器中运行的模组。主实例启动了浏览器内的 Man-in-the-browser 代理,其他模组会 Hook
ZwDeviceIoControlFile 和与证书相关的 WinAPI(如上所述)。代理端口号被存储在 BinStorage 结构中到注册表中,因此在
Backdoor 实例之间保持同步。

被 Hook 的 ZwDeviceIoControlFile 函数等待 IOCTL_AFD_CONNECT
IOCTL_AFD_SUPER_CONNECT,并将连接路由到代理。被 Hook 的与证书相关的函数告知浏览器证书一切正确。

Botnet、攻击活动及其活动

最活跃的 botnet 和攻击活动使用 RC4 密钥
03d5ae30a0bd934a23b6a7f0756aa504,我们将在分析中聚焦于它们。使用上述密钥的样本有版本 1.x,通常是
1.6.28,但有些甚至是 1.0.x。

Botnet 和攻击活动名称

在 botnet 名称中值得一提的有以下几组:

  1. DLLobnovaAktualizacjaDLLgoogleaktualizacijagoogleaktualizacija1obnovlenie19vasjaivan
  2. 9092zi9092ti9092ca9092us9092229092ge

第一组名称包含音译的斯拉夫语词语和名称(vasjaivan),或许还带有错误,这揭示了坏人的起源——他们肯定是斯拉夫人。

第二组中带有 botnet 名称的样本首次观察到是在 2021 年 11 月,我们在接下来两个月找到了来自该组的一共 6 个 botnet名称。数字后的字母如 caus 可能是国家代码。

对于攻击活动名称,我们看到了相似的情况:相当多的斯拉夫词语和相同的 9092* 群组。

网站注入

我们分析了网站注入,确认它们针对金融公司:银行、经纪公司、保险公司、支付服务、加密货币相关服务等等。

注入代码通常很小:从几十字节到 20 KB 不等。为执行其任务,它会从坏人控制的外部域加载 JavaScript 代码。对这些域的分析使我们发现了
Zloader 操作人员与其他网络犯罪帮派之间的关联。

下载任务

Zloader 能够根据 C&C 的命令下载并执行任意文件,但长期以来我们并没有看到这些命令的任何迹象。直到 2021 年 11 月 24 日,botnet
9092ca 收到了一条命令,要求从 teamworks455[.]com 下载并执行文件。该域名在 [6] 中被提及。

另外两个下载任务包含 braves[.]funendoftheendi[.]com

联系

在我们的追踪过程中,我们注意到了与其他原本认为无关的恶意软件家族之间的联系。

Raccoon Stealer

三个下载任务中的两个包含指向 Raccoon Stealer 的链接。下载的样本拥有以下 sha256 哈希:

  • 5da3db74eee74412c1290393a0a0487c63b2c022e57aebcd632f0c3caf23d8bc
  • 5b731854c58c2c1316633e570c9ec82474347e64b07ace48017d0be2b6331eed

这两者具有相同的 Raccoon 配置,Telegram 频道为 kumchakl1

此外,Raccoon 在我们收到来自 C&C 的包含 Raccoon 链接的命令之前就已在 [6] 中被提及。我们对为何 Zloader 操作员会使用
Raccoon Stealer 感到困惑。您可以在这里阅读我们对 Raccoon Stealer 的分析
https://decoded.avast.io/vladimirmartyanov/raccoon-stealer-trash-panda-
abuses-telegram/

Ursnif

Ursnif,也被称为 Gozi 和 ISFB,是另一种具有类似功能的银行恶意软件家族。

数位签名

当我们发现 Zloader 样本和 Ursnif 样本使用相同的数位签名时,我们感到非常惊讶!

作为例子,考虑以下签名:
发行者 BABJNCXZHQCJUVWAJJ
指纹 46C79BD6482E287647B1D6700176A5F6F5AC6D57

使用此签名的 Zloader 样本的 SHA256 哈希为:
2a9ff0a0e962d28c488af9767770d48b9128b19ee43e8df392efb2f1c5a696f

使用相同签名的 Ursnif 样本的 SHA256 哈希为:
54e6e6b23dec0432da2b36713a206169468f4f9d7691ccf449d7d946617eca45

这不是 Ursnif 和 Zloader 样本之间共享的唯一数位签名。

基础设施

如前所述,第一个观察到的下载命令包含指向 teamworks455[.]com 的链接。我们检查了该网站的 TLS证书,发现其用于另一个网站——dotxvcnjlvdajkwerwoh[.]com。我们在 2021 年 11 月 11 日于 Ursnif网站注入中看到了此主机名,它被用于接收被窃取的数据。

另一个例子——aerulonoured[.]su——是 Zloader 用于接收被窃取数据的主机,至少从 2021 年 8 月开始。它也出现在
Ursnif 网站注入中,时间为 2021 年 11 月。

第三个例子——qyfurihpsbhbuvitilgw[.]com,此域名在 2021 年 10 月 20 日从 C&C 收到的 Zeus配置更新中发现。这必须添加到 C&C 列表中,然后由 Zloader bots 使用。这个域名也出现在 2021 年 11 月 1 日的 Ursnif网站注入中。

最后一个例子——etjmejjcxjtwweitluuw[.]com,这个域名是使用密钥
03d5ae30a0bd934a23b6a7f0756aa504 和日期 2021 年 9 月 22 日生成的
DGA。我们有非常强的证据表明该域名在该日作为 Zloader 的 C&C 是活跃的。同一主机在 Ursnif 网站注入中也于 2021 年 11 月 1日发现。

结论

我们感到自豪能够参与这项调查,因为我们继续我们的使命,使世界对每个人来说变得更安全。我们期待著成功摧毁 Zloader ботнет
以及起诉创建和运营它的人。

标记为
、、、、

分享:XFacebook

Leave a Reply

Your email address will not be published. Required fields are marked *