要点
Proofpoint 发现一种名为 ZenRAT 的新恶意软件通过密码管理器 Bitwarden 的虚假安装包进行分发。
该恶意软件专门针对 Windows 用户,并将使用其他主机的用户重定向到良性网页。
目前,尚不清楚恶意软件是如何传播的。
该恶意软件是一种模块化远程访问木马 (RAT),具有信息窃取功能。
概述
Proofpoint Emerging Threats 经常收到社区的提示,从而调查和检测新型恶意软件。2023 年 8 月 10 日,Malwarebytes 威胁情报高级总监 Jérôme Segura 分享了一个恶意软件样本,该样本作为 Windows 软件安装包的一部分进行分发。该样本最初是在一个假装与 Bitwarden 相关的网站 bitwariden[.]com 上发现的,该网站与真实的 bitwarden.com 非常相似。与标准 Bitwarden 安装包一起打包的是一个恶意的 .NET 可执行文件,我们将其称为“ZenRAT”。
目前,尚不清楚恶意软件是如何传播的,但伪装成虚假软件安装程序的历史活动已通过 SEO 中毒、广告软件捆绑或电子邮件进行传播。
图 1:假 Bitwarden 网站,bitwariden[.]com。与 bitwarden.com 的主题非常相似。尚不确定流量如何定向到该域
专门针对 Windows 用户
仅当用户通过 Windows 主机访问该恶意网站时,该网站才会显示虚假的 Bitwarden 下载。如果非 Windows 用户尝试导航到此域,页面将更改为完全不同的内容。
图 2:如果非 Windows 用户尝试访问恶意网站,他们会被重定向到克隆的 opensource.com 文章。此屏幕截图是在 Ubuntu 22.04 上使用 Mozilla Firefox 拍摄的
相反,该网站伪装成合法网站“opensource.com”,甚至克隆了Scott Nesbitt 从 Opensource.com 上发表的一篇有关 Bitwarden 密码管理器的文章。此外,如果 Windows 用户单击“下载”页面上标记为 Linux 或 MacOS 的下载链接,他们将被重定向到合法的 Bitwarden 站点,vault.bitwarden.com。单击“下载”按钮或 Windows 桌面安装程序下载按钮会导致尝试下载 Bitwarden-Installer-version-2023-7-1.exe。此有效负载托管在域名crazygameis[.]com上,截至撰写本文时,该域似乎不再托管该有效负载:
图 3:当 Windows 用户单击“下载”按钮或 Windows 桌面安装程序选项时,系统会向crazygameis[.]com 发出请求以检索恶意 Bitwarden 安装程序
这两个域的域名注册商似乎都是 NiceNIC International Group,而网站本身似乎托管在 Cloudflare 上。
安装人员详细信息
恶意安装程序 Bitwarden-Installer-version-2023-7-1.exe 似乎于 2023 年 7 月 28 日首次在 VirusTotal 上报告,名称为“CertificateUpdate-version1-102-90”。
图 4:到目前为止,安装程序示例已经以两个完全不同的名称在相对接近的位置出现过两次
查看安装程序的详细信息,我们可以看到数字签名无效,但更有趣的是,安装程序声称是 Piriform 的 Speccy – 一个用于收集系统规格的软件应用程序。
图 5:恶意 bitwarden 安装程序的文件元数据声称它是 Speccy,这是一个用于收集有关运行该应用程序的系统的信息(规格)的应用程序
不仅如此,安装程序声称它是由 Tim Kosse 签名的,Tim Kosse 是一位开源软件开发人员,因 Filezilla FTP/SFTP 软件而闻名。
图 6:除了有问题的文件属性之外,安装程序还具有无效的数字签名,并声称由 Tim Kosse 签名,Tim Kosse 是一位因 FileZilla FTP/SFTP 软件而闻名的开源开发人员
安装程序文件将自身复制到 C:Users[用户名]AppdataLocalTemp,并在同一目录中创建一个名为 .cmd 的隐藏文件,该文件为自身和安装程序文件启动自删除循环。
图 7:名为 .cmd 的文件随安装程序一起放入当前用户下的 AppDataLocalTemp 中。该文件运行一个自删除循环,一旦安装程序可执行文件完成运行,该循环就会自动删除自身和安装程序
安装程序将可执行文件 ApplicationRuntimeMonitor.exe 的副本放置到 C:Users[用户名]AppDataRoamingRuntime Monitor 中,并运行它。
ZenRAT 详细信息
ZenRAT (ApplicationRuntimeMonitor.exe) 与安装程序文件不同,具有一些有趣的元数据,声称是完全不同的应用程序。文件属性声称它是由Monitoring Legacy World Ltd 创建的:
图 8:已删除的 ZenRAT 可执行文件的文件元数据,声称属于另一个应用程序
执行时,它使用 WMI 查询和其他系统工具来收集有关主机的信息:
-CPU 名称 -GPU 名称 - 操作系统版本 -安装的 RAM -IP 地址和网关 -安装的防病毒 软件 -安装的应用程序
据观察,ZenRAT 将此信息连同被盗的浏览器数据/凭证一起发送回其命令和控制 (C2) 服务器,该文件位于名为 Data.zip 的 zip 文件中,文件名为 InstalledApps.txt 和 SysInfo.txt。
图 9:执行后,ZenRAT 将收集系统指纹数据并将其打包到 ZIP 文件中,以便与其他模块(例如其浏览器信息窃取器)的输出一起渗透到 C2。SysInfo.txt 包含有关受感染主机的指纹数据,而 InstalledApps.txt 包含已安装应用程序的列表
命令与控制
初始执行后,ZenRAT 与其 C2 服务器建立通信。在本例中,Proofpoint 观察到的唯一活动 C2 服务器是 185[.]186.72.14。C2 协议是独一无二的。
客户端通信
客户端发起与 C2 的通信。无论命令和传输的额外数据如何,第一个数据包始终为 73 字节。以下是客户端签入的数据包结构:
图 10:ZenRAT 客户端通信的一般结构。虽然某些命令 ID 可能会导致客户端传输更多数据,但第一个数据包始终总计 73 字节。附加数据不会附加到此数据包中,而是作为同一 TCP 流中的单独数据包发送
命令 ID – 客户端数据包的第一个字节保留用于发送到 C2 服务器的命令。下面是观察到的客户端命令 ID 的表格:
数据大小 – 8 个字节,从客户端数据包中的第二个字节开始。期望来自客户端的字节数。包括命令 ID 和数据大小值本身。例如,图10中的0x49表示客户端总共发送了73个字节。
硬件 ID – 该值是当前用户的用户名、计算机名称、Windows 版本字符串和 Windows 目录时间戳的毫秒值的 Sha-256 哈希串联。
Bot ID – HWID 之后是 16 字节的 Bot ID,由硬编码 GUID 生成
版本 – 接下来的八个字节保留给植入版本
构建 – 最后七个字节保留用于植入物的构建版本
服务器端通信
服务器端的通信比客户端简单得多。与客户端的通信一样,服务器发送回客户端的第一个数据包是固定长度的 - 在本例中,大小为 9 个字节,后面是流中返回客户端的某些响应所需的附加数据包。服务器响应的数据包结构与客户端通信的前九个字节的结构相同——一个字节的响应代码,后面是从发送回受感染主机的数据量中保留的八个字节。
图 11:C2 响应的数据包结构。第一个数据包始终是固定大小(九个字节),并且该数据包的结构与客户端数据包的前九个字节相同。
响应 ID – 一个单字节字段,表示对客户端发送到服务器的命令的响应。下面是观察到的服务器响应 ID 的表格:
数据大小 – 八字节值定义客户端应从服务器获取的数据量,包括响应 ID 和数据大小字段。
观察到的有趣命令
虽然 ZenRAT 有几个观察到的命令 ID,但以下是观察到的一些更有趣的命令 ID:
发送日志
虽然建立自定义 C2 协议似乎非常谨慎,但 ZenRAT 配置为以明文方式将其日志发送到 C2 服务器。如上所述,客户端发送日志的命令ID是0x08。客户端将发送其初始 73 字节数据包,然后是迄今为止已执行的各种任务的完整 ASCII 日志。
图 12:发送日志命令的屏幕截图。用于确定以明文格式发送到 C2 服务器的不同命令 ID 的用途。
图 12中的日志表明,在与 C2 服务器建立通信之前,ZenRAT 会执行一些系统检查:
IsBlockedRegion:A geofencing检查,以确保恶意软件不在以下任何区域运行:
ru-BY
ru-KG
ru-KZ
ru-MD
ru-RU
ru-UA
IsMutex:确保 ZenRAT 可以为自己创建互斥锁。这是为了确保系统上一次只有一份恶意软件副本在运行。
IsSmallDisk:系统检查,确保恶意软件运行的系统磁盘大小不小于95GB,可以视为反沙箱功能。
IsDetectVM:反虚拟化检查,根据与虚拟化产品关联的黑名单进程名称集检查正在运行的进程:
虚拟机工具
vbox服务
VMware用户
虚拟机托盘
虚拟机
虚拟机工具
虚拟机工具
文本 [ CONFIRMED ] 表示检查成功,而检查不成功将导致日志中显示 [ ERROR ]。通过检查后,客户端会发送 ping 命令 ID 来验证连接,然后检查客户端的更新。之后,在本例中,我们看到客户端请求任务分配,其中 C2 服务器使用客户端的任务和模块编号进行响应。在客户端请求此模块后,立即根据 SHA256 哈希对其进行验证,并将其注入 PID 2680(在我们的分析中,这是 regasm.exe 进程),并带有一个参数:
uZxIDqImAABkdGqXUbYcQqojy5S9DIKtioa0zReZTJK+MVGP4yuvtUIuq8JUGQM7z+3XyneLWjgDAAAAAAAAAAIAAAAAAAAABQAAAHIEAAAAAAAA
解码后,该值的十六进制转储变为:
图 13:在客户端发送日志命令 ID 中观察到的 base64 数据参数的结构。此结构中的大多数值与 73 字节客户端通信数据包中的值相同。
此数据结构中的大多数值 - 机器人 ID、硬件 ID、版本和版本与客户端通信数据包结构相同,因此让我们关注不同之处:
1、IP 地址 – C2 服务器的 IP 地址。如前所述,这是 185[.]186.72.14
2、端口号 – 与 C2 服务器通信时使用的 TCP 端口号。在本例中,植入程序使用端口 9890/TCP
3、模块 ID – 与客户端尝试运行的模块关联的模块号 (0x05)
4、任务 ID – 从服务器分配的用于激活此模块的任务 ID。十六进制值 (0x0472 == 1138)
发送模块结果
客户端命令 ID 0x06 用于传输模块结果。在一个单独的示例中,观察到 ZenRAT 将任务 ID 为 0x0829 的模块 0x09 的结果发送回 C2 服务器:
图 14:与模块结果 (0x06) 命令 ID 一起发送的数据结构
图 14 中传输的数据使用 AES-256-CBC 以 50000 字节的块进行加密。要解密此数据,必须按 50016 块(50000 字节 + 16 字节 CBC 填充)进行处理。32 字节密钥源自任务 ID 的 SHA256 哈希值。例如,0x2908000000000000 生成 SHA256 哈希值 799b9288579cac5dc19f6b7cb84636f07ea52ecfa151bc71f00e8b8dbf980869,而 16 字节 IV 是硬件 ID 的前 16 个字节(本身是由 a 组成的 SHA256 哈希值)系统特定数据的合并。此硬件 ID 与中的硬件 ID 相同上面的客户端通信部分)。去掉下一个数据包开头的0x290800000000000000(总共9个字节——8个字节的TaskID,加上0x00),使用上面的Key和IV值,结果就是Data.zip文件,
图 15:通过使用任务 ID 的 SHA256 值作为密钥,以及硬件 ID 值的前 16 字节作为 IV,可以解密与命令 ID 0x06 一起发送的数据。
任务和模块 ID 字段的存在意味着 ZenRAT 被设计为模块化、可扩展的植入物。目前,我们还没有观察到其他模块被广泛使用。
结论
恶意软件通常通过伪装成合法应用程序安装程序的文件进行传播。最终用户应注意仅直接从受信任的来源下载软件,并始终检查托管软件下载的域是否属于官方网站的域。人们还应该警惕搜索引擎结果中的广告,因为这似乎是此类感染的主要驱动因素,尤其是在去年。
IOC
新兴威胁规则覆盖范围
2037786 – ET INFO Pastebin-style Service (textbin.net in TLS SNI)
2047754 – ET MALWARE ZenRAT Ping Command
2047755 – ET MALWARE ZenRAT CnC OK Response
2047754 – ET MALWARE ZenRAT Ping Command
2047755 – ET MALWARE ZenRAT CnC OK Response
2047756 – ET MALWARE ZenRAT Get Status Command
2047757 – ET MALWARE ZenRAT Status Response
2047758 – ET MALWARE ZenRAT Change Status Command
2047759 – ET MALWARE ZenRAT Request Module Command
2047760 – ET MALWARE ZenRAT Request Module CnC Response
2047761 – ET MALWARE ZenRAT Update Command
2047762 – ET MALWARE ZenRAT Update CnC Response (Already Actual)
2047763 – ET MALWARE ZenRAT Tasking Command
2047764 – ET MALWARE ZenRAT Tasking CnC Response M1
2047765 – ET MALWARE ZenRAT Tasking CnC Response M2
数据解密脚本
The following is a decryption script for the data uploaded by the browser stealing module. This script was provided by our Reverse Engineering Team:
#! /usr/bin/env python3
# ZenRAT encrypts stolen browser data before uploading - but does it in 50000 byte chunks
import sys
import hashlib
# from Crypto.Cipher import AES
from Cryptodome.Cipher import AES
def unpad(s):
if s[-s[-1]:] == s[-1:0] * s[-1]:
return s[:-s[-1]]
else:
return s
data = sys.stdin.buffer.read()
h = hashlib.sha256()
h.update(data[9:41]) # HWID - itself the SHA256 of username + machine name + windows ver + msecs
iv = h.digest()[:16]
h = hashlib.sha256()
h.update(data[0x49:0x51]) # Task ID
key = h.digest()
out = b""
for p in range(0x52, len(data), 50016): # CBC adds 16 bytes (blocksize) to the length
aes = AES.new(key, AES.MODE_CBC, iv)
out += unpad(aes.decrypt(data[p:p + 50016]))
sys.stdout.buffer.write(out)
转载来源:https://www.proofpoint.com/us/blog/threat-insight/zenrat-malware-brings-more-chaos-calm
图片来源网络侵权可联系删除