ESET与巴西联邦警察合作捣毁Grandoreiro银行木马

ESET与巴西联邦警察合作捣毁Grandoreiro银行木马

ESET 提供了技术分析、统计信息、已知的 C&C 服务器,并能够一睹受害者的情况

ESET 已与巴西联邦警察合作,试图破坏 Grandoreiro 僵尸网络。 ESET 通过提供技术分析、统计信息以及已知的命令和控制 (C&C) 服务器域名和 IP 地址为该项目做出了贡献。由于 Grandoreiro 网络协议的设计缺陷,ESET 研究人员还能够一睹受害者的情况。

ESET 自动化系统已处理数以万计的 Grandoreiro 样本。该恶意软件自 2020 年 10 月左右开始使用的域生成算法 (DGA) 每天都会生成一个主域,并可选择生成多个故障安全域。 DGA 是 Grandoreiro 知道如何向 C&C 服务器报告的唯一方式。除了当前日期之外,DGA 还接受静态配置 – 截至撰写本文时,我们已经观察到 105 个此类配置。

Grandoreiro 的运营商滥用 Azure 和 AWS 等云提供商来托管其网络基础设施。 ESET 研究人员提供了对于识别负责设置这些服务器的帐户至关重要的数据。巴西联邦警察进行的进一步调查确定并逮捕了控制这些服务器的个人。在这篇博文中,我们将探讨如何获取数据来协助执法部门执行这一破坏行动。

背景

Grandoreiro是众多拉丁美洲银行木马之一。它至少从 2017 年起就一直活跃,ESET 研究人员从那时起就一直在密切跟踪它。 Grandoreiro 的目标是巴西和墨西哥,自 2019 年起也瞄准了西班牙(见图 1)。虽然西班牙是 2020 年至 2022 年期间最受攻击的国家,但在 2023 年,我们观察到重点明显转向墨西哥和阿根廷,后者是 Grandoreiro 的新成员。

ESET与巴西联邦警察合作捣毁Grandoreiro银行木马
图 1. Grandoreiro 检测率(2020 年 1 月以来的数据)

从功能角度来看,自2020 年我们上一篇博文以来,Grandoreiro 并没有太大变化。我们在本节中简要概述了恶意软件,并在稍后深入研究了一些更改,主要是新的 DGA 逻辑。

当拉丁美洲银行木马成功入侵计算机时,它通常会向远程服务器发出 HTTP GET 请求,发送有关受感染计算机的一些基本信息。虽然较旧的 Grandoreiro 版本实现了此功能,但随着时间的推移,开发人员决定放弃它。

Grandoreiro 定期监视前台窗口以查找属于 Web 浏览器进程的窗口。当找到这样的窗口并且其名称与银行相关字符串的硬编码列表中的任何字符串匹配时,恶意软件才会启动与其 C&C 服务器的通信,每秒至少发送一次请求,直到终止。

操作员必须手动与受感染的机器交互才能窃取受害者的钱。该恶意软件允许:

  • 挡住受害者的屏幕,
  • 键盘记录,
  • 模拟鼠标和键盘活动,
  • 共享受害者的屏幕,
  • 显示虚假的弹出窗口。

Grandoreiro 经历了快速且持续的发展。有时,我们甚至每周都会看到几个新的构建,这使得跟踪变得困难。为了进行演示,2022 年 2 月,Grandoreiro 的运营商向二进制文件添加了版本标识符。在图 2 中,我们显示了版本标识符更改的速度。平均而言,在 2022 年 2 月到 2022 年 6 月之间,每四天就有一个新版本。在 2022 年 5 月 24 日到 2022 年 6 月 22 日之间的一个月时间里,我们继续看到PE 编译时间不断进步的新样本,但它们缺少版本标识符。 2022 年6 月 27 日版本标识符更改为V37,此后我们没有看到它发生变化,因此我们得出结论:该功能已被删除。

ESET与巴西联邦警察合作捣毁Grandoreiro银行木马
图 2. 2022 年 2 月至 6 月之间的 Grandoreiro 版本历史记录

拉丁美洲的银行木马有很多共同点。 Grandoreiro 与其他拉丁美洲银行木马的相似之处主要在于其明显的核心功能以及将其下载程序捆绑在 MSI 安装程序中。过去,我们观察到一些案例,其下载器与Mekotio和Vadokrist共享,但不是在过去两年。 Grandoreiro 银行木马与其他家族的主要区别在于其独特的二进制填充机制,该机制会大量填充最终的可执行文件(我们在2020 年的博客文章中进行了描述)。随着时间的推移,Grandoreiro 的运营商也将这种反分析技术添加到其下载器中。令我们惊讶的是,在 2023 年第三季度,此功能已从银行木马和下载器二进制文件中完全删除,此后我们就再也没有观察到它。

自 2022 年 2 月以来,我们一直在追踪Grandoreiro 的第二个变体,它与主要变体有很大不同。我们在 2022 年 3 月、5 月和 6 月的小型活动中看到了它。基于其绝大多数 C&C 服务器域未解析、其核心功能经常更改以及其网络协议无法正常运行,我们坚信它是正在进行的工作;因此我们将重点关注这篇博文中的主要变体。

Grandoreiro 长期跟踪

专为自动、长期跟踪选定恶意软件系列而设计的 ESET 系统自 2017 年底以来一直在监控 Grandoreiro,提取版本信息、C&C 服务器、目标,并自 2020 年底以来提取 DGA 配置。

DGA追踪

DGA 配置被硬编码在 Grandoreiro 二进制文件中。每个配置都可以通过我们称为dga_id 的字符串来引用。对 DGA 使用不同的配置会产生不同的域。我们将在本文后面更深入地探讨 DGA 机制。

ESET从我们已知的Grandoreiro样本中总共提取了105个不同的dga_id 。在我们的跟踪过程中,其中 79 个配置至少曾经生成过解析为活动 C&C 服务器 IP 地址的域。

生成的域通过 No-IP 的动态 DNS 服务 (DDNS) 注册。 Grandoreiro 的运营商滥用该服务,频繁更改其域名以与 DGA 相对应,并随意更改 IP 地址。这些域解析的绝大多数 IP 地址都是由云提供商(主要是 AWS 和 Azure)提供的。表 1 说明了有关 Grandoreiro C&C 服务器使用的 IP 地址的一些统计数据。

表 1. 自我们开始跟踪以来有关 Grandoreiro C&C IP 地址的统计信息

信息平均值最低限度最大限度
每天新的 C&C IP 地址数量3134
每日活跃 C&C IP 地址数量13127
C&C IP 地址的寿命(以天为单位)51425

在我们开始跟踪生成的域及其关联的 IP 地址后不久,我们开始注意到由具有不同配置的 DGA 生成的许多域解析为相同的 IP 地址(如图 3 所示)。这意味着在某一天,受到具有不同dga_id的 Grandoreiro 样本危害的受害者都连接到同一 C&C 服务器。这种现象并非巧合——我们在追踪过程中几乎每天都会观察到这种现象。

ESET与巴西联邦警察合作捣毁Grandoreiro银行木马
图 3. 两种不同 Grandoreiro DGA 配置中 IP 重叠的架构

在更罕见的情况下,我们还观察到几天后一个 IP 地址被不同的dga_id重复使用。只是这一次,Grandoreiro 用于建立连接的参数(在文本后面解释)也发生了变化。这意味着,与此同时,C&C 服务器端必须重新安装或重新配置。

我们最初的假设是dga_id对于每个 DGA 配置都是唯一的。后来证明这是不正确的——我们观察到两组不同的配置共享相同的dga_id。表 2 显示了“jjk”和“gh”,其中“jjk”和“jjk(2)”对应于两种不同的 DGA 配置,与“gh”和“gh(2)”相同。

表 2 显示了我们能够观察到的簇。共享至少一个 IP 地址的所有 DGA 配置都位于同一集群中,并列出了它们关联的dga_id 。占所有受害者不到 1% 的集群将被忽略。

表 2. Grandoreiro DGA 集群

集群IDdga_id列表簇的大小占所有 C&C 服务器的百分比占所有受害者的百分比
1b, bbh, bbj, bbn, bhg, cfb, cm, cob, cwe, dee, dnv, dvg, dzr, E, eeo, eri, ess, fhg, fox, gh, gh(2), hjo, ika, jam, jjk, jjk(2), JKM, jpy, k, kcy, kWn, md7, md9, MRx, mtb, n, Nkk, nsw, nuu, occ, p, PCV, pif, rfg, rox3, s, sdd, sdg, sop, tkk, twr, tyj, u, ur4, vfg, vgy, vki, wtt, ykl, Z, zaf, zhf6293.6%94%
2jl2,jly22.4%2.5%
3IBR10.8%1.6%
4JYY11.6%1.1%

最大的簇包含所有活动dga_id的 78% 。它负责我们所见过的所有 C&C 服务器 IP 地址的 93.6% 和所有受害者的 94%。唯一由 1 个以上dga_id组成的簇是簇 2。

一些消息来源声称 Grandoreiro 以恶意软件即服务 (MaaS) 的形式运行。 Grandoreiro C&C 服务器后端不允许多个操作员同时进行活动。根据表2,绝大多数DGA产生的IP地址可以聚集在一起,没有明确的分布模式。最后,考虑到网络协议的高带宽要求(我们在博文末尾对此进行了深入探讨),我们认为不同的 C&C 服务器被用作原始负载平衡系统,并且 Grandoreiro 更有可能由一个单个团体或几个彼此密切合作的团体。

命令与控制(C2)追踪

Grandoreiro 对其网络协议的实施使 ESET 研究人员能够窥视幕后并了解受害者情况。 Grandoreiro C&C 服务器在向每个新连接的受害者发出初始请求时,会泄露有关已连接受害者的信息。也就是说,数据会因请求数量、请求间隔以及 C&C 服务器提供的数据的有效性而产生偏差。

每个连接到 Grandoreiro C&C 服务器的受害者都由一个login_string来标识——这是 Grandoreiro 在建立连接时构建的字符串。不同的构建使用不同的格式,不同的格式包含不同的信息。我们总结了可以从表 3 中的login_string获取的信息。出现次数列显示了我们见过的包含相应类型信息的所有格式的百分比。

表 3. 可从 Grandoreiro 受害者的login_string获取的信息概述

信息发生描述
操作系统100%受害者机器的操作系统。
计算机名称100%受害者机器的名称。
国家100%Grandoreiro 样本的目标国家/地区(在恶意软件样本中硬编码)。
版本100%Grandoreiro 示例的版本 ( version_string )。
银行代号92%触发 C&C 连接的银行的代号(由 Grandoreiro 的开发人员分配)。
正常运行时间25%受害者机器运行的时间(以小时为单位)。
屏幕分辨率8%受害者主显示器的屏幕分辨率。
用户名8%受害者的用户名。

其中三个字段值得更仔细的解释。国家/地区是 Grandoreiro 二进制文件中硬编码的字符串,而不是通过适当的服务获取的信息。因此,它更像是受害者的预期国家。

银行代号是 Grandoreiro 开发商与某家银行或其他金融机构相关的字符串。受害者访问了该银行的网站,从而触发了 C&C 连接。

version_string是标识特定 Grandoreiro 版本的字符串。它在恶意软件中被硬编码,并包含一个字符串,用于标识特定的构建系列、版本(我们已经在简介中讨论过)和时间戳。表 4 说明了不同的格式及其所包含的信息。请注意,某些时间戳仅包含月份和日期,而其他时间戳也包含年份。

表 4. 不同version_string格式及其解析的列表

版本字符串构建ID版本时间戳
DANILODANILO不适用不适用
(V37)(P1X)1207P1XV3712/07
(MX)2006MX不适用20/06
fox50.28102020fox50不适用2020年10月28日
MADMX(RELOAD)EMAIL2607MADMX(RELOAD)EMAIL不适用26/07

人们可能会想说,构建 ID 实际上标识了操作员。然而,我们认为情况并非如此。该字符串的格式非常混乱,有时它仅指二进制文件可能构建的月份(例如 ( AGOSTO)2708)。此外,我们坚信P1X指的是 Grandoreiro 操作员使用的名为PIXLOGGER 的控制台。

C&C 服务器跟踪 – 调查结果

在本节中,我们重点关注通过查询 C&C 服务器发现的内容。本节中列出的所有统计数据均直接从 Grandoreiro C&C 服务器获取,而不是从 ESET 遥测获取。

旧样本仍然活跃

我们观察到的每个login_string都包含version_string,其中绝大多数包含时间戳信息(参见表3和表4)。虽然其中许多仅包含日期和月份(这似乎是开发人员偶尔的选择),但最旧的通信样本的时间戳为15/09/2020 – 即从该 DGA 首次引入 Grandoreiro 时开始。最新样本的时间戳为12/23/2023。

操作系统分布

由于所有的login_string格式都包含操作系统信息,我们可以根据图4所示,准确地描述哪些操作系统受到了攻击。

ESET与巴西联邦警察合作捣毁Grandoreiro银行木马
图表4. Grandoreiro受害者中的操作系统分布

(预期)国家分布

我们已经提到,Grandoreiro 使用硬编码值而不是查询服务来获取受害者的国家/地区。图 5 显示了我们观察到的分布。

ESET与巴西联邦警察合作捣毁Grandoreiro银行木马
图 5. Grandoreiro 受害者中的(预期)国家/地区代码分布

Grandoreiro 会出现这种分布。有趣的是,它与图 1 中描绘的热图并不相关。最合乎逻辑的解释是,构建没有正确标记以类似于其预期目标。例如,硬编码标记根本没有反映阿根廷境内攻击的增加。巴西几乎占所有受害者的 41%,其次是墨西哥(占 30%)和西班牙(占 28%)。阿根廷、葡萄牙和秘鲁占比不到1%。有趣的是,我们看到一些(少于 10 名)受害者被标记为PM(圣皮埃尔和密克隆群岛)、GR(希腊)或FR(法国)。我们认为这些要么是拼写错误,要么有其他含义,而不是针对这些国家。

另请注意,虽然Grandoreiro早在 2020 年就添加了来自拉丁美洲以外的许多国家/地区的目标,但我们观察到针对这些国家/地区的活动很少甚至没有,图 5 支持了这一点。

受害者人数

我们观察到,每天连接的受害者平均数量为 563。但是,这个数字肯定包含重复项,因为如果受害者长时间保持连接(我们观察到的情况经常如此),那么 Grandoreiro C&C 服务器将根据多个请求进行报告。

为了解决这个问题,我们将独特的受害者定义为具有一组独特的识别特征(例如计算机名称、用户名等)的受害者,同时忽略了那些可能会发生变化的特征(例如正常运行时间)。这样,我们平均每天就有 551 名不同的受害者连接。

考虑到我们观察到的受害者在一年多的时间里不断连接到 C&C 服务器,我们计算出平均每天有 114 个新的唯一受害者连接到 C&C 服务器。我们通过忽略我们之前已经观察到的独特受害者来得出这个数字。

Grandoreiro 内部结构

让我们深入关注 Grandoreiro 的两个最关键的功能:DGA 和网络协议。

DGA

Grandoreiro 的运营商多年来已经实现了多种 DGA,最近的一种出现在 2020 年 7 月。虽然我们注意到一些细微的变化,但算法的核心从那以后就没有改变。

DGA 使用硬编码在二进制文件中的特定配置,存储为多个字符串。图 6 显示了一种此类配置(dga_id “bbj”),以 JSON 格式重新格式化以提高可读性。

ESET与巴西联邦警察合作捣毁Grandoreiro银行木马
图 6. Grandoreiro DGA 配置,以 JSON 重新格式化

在绝大多数情况下,base_domain字段是freedynamicdns.org或zapto.org。如前所述,Grandoreiro 使用 No-IP 进行域名注册。 base64_alpha字段对应于 DGA 使用的自定义 base64 字母表。 Month_substitution用于用月份数字替换字符。

dga_table构成配置的主要部分。它由 12 个字符串组成,每个字符串有 35 个由 | 分隔的字段。每行的第一个条目是dga_id。第二个也是最后一个条目代表该行的预期月份。其余 32 个字段分别代表该月中不同日期的值(至少有一个字段未使用)。

DGA 的逻辑如图 7 所示。该算法首先选择正确的行和其中的正确条目,将其视为四字节密钥。然后,它将当前日期格式化为字符串,并使用简单的 XOR 使用密钥对其进行加密。然后,它将 dga_id 添加到结果前面,使用带有自定义字母表的 Base64 对结果进行编码,然后删除所有 = 填充字符。最终结果是与 base_domain 一起用作当天的 C&C 服务器的子域。红色突出显示的部分是故障安全机制,我们接下来讨论它。

ESET与巴西联邦警察合作捣毁Grandoreiro银行木马
图 7. 用 Python 重新实现的 Grandoreiro DGA 计算

Grandoreiro 在某些版本中实现了主域无法解析时的故障安全机制。这种机制并不存在于所有构建中,并且其逻辑已经改变了几次,但基本思想如图 7 所示。它使用的配置在我们分析的示例中是不变的,可以通过图 7 中所示的简单代码生成8. 每个条目由一个密钥、一个前缀和一个基本域组成。

故障安全算法占据了主要 C&C 子域的一部分。然后它会迭代所有配置条目,使用 XOR 对其进行加密并在前面添加前缀,类似于主要算法部分。

ESET与巴西联邦警察合作捣毁Grandoreiro银行木马
图 8. 用 Python 重新实现的故障安全 DGA 配置生成器

自 2022 年 9 月起,我们开始观察使用稍作修改的 DGA 的样本。该算法几乎保持相同,但不是在最后一步中对子域进行 Base64 编码,而是在其前面添加了硬编码前缀。根据我们的跟踪,自 2023 年 7 月左右以来,这种方法已成为主流方法。

网络协议

Grandoreiro 利用 RTC Portal,这是一组构建在RealThinClient SDK之上的 Delphi 组件,而 RealThinClient SDK 又构建在 HTTP(S) 之上。 RTC Portal 于2017 年停产,其源代码发布在GitHub上。本质上,RTC Portal 允许一个或多个控件远程访问一台或多台主机。主机和控件由称为网关的中介组件分隔开。

Grandoreiro 操作员使用控制台(充当控制端)连接到 C&C 服务器(充当网关)并与受感染的计算机(充当主机)进行通信。要连接到网关,需要三个参数:密钥、密钥长度和登录名。

密钥用于加密发送到服务器的初始请求。因此,服务器也需要知道密钥,以便解密最初的客户端请求。

密钥长度决定了握手期间建立的用于加密流量的密钥的长度。使用自定义流密码对流量进行加密。建立了两种不同的密钥——一种用于入站流量,一种用于出站流量。

登录名可以是任何字符串。网关要求每个连接的组件都有唯一的登录名。

Grandoreiro 使用秘密密钥和密钥长度值的两种不同组合,始终硬编码在二进制文件中,并且我们已经讨论了用作登录名的login_string 。

RTC 文档指出它一次只能处理有限数量的连接。考虑到每个连接的主机每秒至少需要发送一个请求,否则连接就会断开,我们认为 Grandoreiro 使用多个 C&C 服务器的原因是为了不压垮其中任何一个服务器。

结论

在这篇博文中,我们提供了对 Grandoreiro 长期跟踪幕后的一瞥,这有助于使这次破坏行动成为可能。我们已经深入描述了 Grandoreiro 的 DGA 的工作原理、同时存在多少种不同的配置,以及我们如何能够发现它们之间的许多 IP 地址重叠。

我们还提供了从 C&C 服务器获得的统计信息。这些信息提供了对受害者和目标的出色概述,同时也使我们能够看到影响的实际程度。

巴西联邦警察领导的破坏行动针对的是据信在 Grandoreiro 行动层级中处于高层的个人。 ESET 将继续跟踪其他拉丁美洲银行木马,同时密切监视此次中断操作后的任何 Grandoreiro 活动。

威胁情报(IOCs)

文件

SHA-1文件名检测描述
FB32344292AB36080F2D040294F17D39F8B4F3A8Notif.FEL.RHKVYIIPFVBCGQJPOQà.msiWin32/Spy.Grandoreiro.DBMSI下载器
08C7453BD36DE1B9E0D921D45AEF6D393659FDF5RYCB79H7B-7DVH76Y3-67DVHC6T20-CH377DFHVO-6264704.msiWin32/Spy.Grandoreiro.DBMSI下载器
A99A72D323AB5911ADA7762FBC725665AE01FDF9PCRE.dllWin32/Spy.Grandoreiro.BMGrandoreiro
4CDF7883C8A0A83EB381E935CD95A288505AA8B8dllWin32/Spy.Grandoreiro.BMGrandoreiro(带有二进制填充)

网络

IP地址域名托管服务提供商第一次见到细节
20.237.166[.]161DGA 生成Azure2024-01-12C&C 服务器。
20.120.249[.]43DGA 生成Azure2024-01-16C&C 服务器。
52.161.154[.]239DGA 生成Azure2024-01-18C&C 服务器。
167.114.138[.]249DGA 生成OVH2024-01-02C&C 服务器。
66.70.160[.]251DGA 生成OVH2024-01-05C&C 服务器。
167.114.4[.]175DGA 生成OVH2024-01-09C&C 服务器。
18.215.238[.]53DGA 生成AWS2024-01-03C&C 服务器。
54.219.169[.]167DGA 生成AWS2024-01-09C&C 服务器。
3.144.135[.]247DGA 生成AWS2024-01-12C&C 服务器。
77.246.96[.]204DGA 生成VDSina2024-01-11C&C 服务器。
185.228.72[.]38DGA 生成Master da Web2024-01-02C&C 服务器。
62.84.100[.]225不适用VDSina2024-01-18分发服务器。
20.151.89[.]252不适用Azure2024-01-10分发服务器。

MITRE ATT&CK 技术

该表是使用MITRE ATT&CK 框架版本 14构建的。

战术ID姓名描述
资源开发T1587.001开发能力:恶意软件Grandoreiro 开发人员开发自己的自定义下载器。
初始访问T1566网络钓鱼Grandoreiro 通过网络钓鱼电子邮件进行传播。
执行T1204.002用户执行:恶意文件Grandoreiro 迫使受害者手动执行网络钓鱼附件。
持久性控制T1547.001引导或登录自动启动执行:注册表运行键/启动文件夹Grandoreiro 使用标准自动启动位置来实现持久性。
T1574.001劫持执行流程:DLL搜索顺序劫持Grandoreiro 是通过破坏 DLL 搜索顺序来执行的。
防御规避T1140反混淆/解码文件或信息Grandoreiro 通常以受密码保护的 ZIP 存档形式分发。
T1027.001混淆的文件或信息:二进制填充Grandoreiro EXE 过去常常使用大型 BMP 图像放大.rsrc部分。
T1218.007系统二进制代理执行:MsiexecGrandoreiro 下载程序捆绑在 MSI 安装程序中。
T1112修改注册表Grandoreiro 将其部分配置数据存储在 Windows 注册表中。
发现T1010应用程序窗口发现Grandoreiro 根据窗口名称发现在线银行网站。
T1057流程发现Grandoreiro 根据进程名称发现安全工具。
T1518.001软件发现:安全软件发现Grandoreiro 检测银行保护产品的存在。
T1082系统信息发现Grandoreiro 收集有关受害者计算机的信息,例如%COMPUTERNAME%和操作系统。
收藏T1056.002输入捕获:GUI 输入捕获Grandoreiro 可以显示虚假的弹出窗口并捕获输入到其中的文本。
T1056.001输入捕获:键盘记录Grandoreiro 能够捕获击键。
T1114.001邮件收集:本地邮件收集Grandoreiro 的操作人员开发了一种从 Outlook 中提取电子邮件地址的工具。
命令与控制T1132.002数据编码:非标准编码Grandoreiro 使用 RTC,它使用自定义流密码对数据进行加密。
T1568.002动态解析:域生成算法Grandoreiro 仅依靠 DGA 来获取 C&C 服务器地址。
T1573.001加密通道:对称密码学在RTC中,加密和解密是使用相同的密钥完成的。
T1571非标准端口Grandoreiro 经常使用非标准端口进行分发。
T1071应用层协议RTC 构建在 HTTP(S) 之上。
渗漏T1041通过 C2 通道渗漏Grandoreiro 将数据泄露到其 C&C 服务器。
影响T1529系统关闭/重启Grandoreiro 可以强制系统重新启动。

from

转载请注明出处及链接

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用 * 标注