详解全球联合执法摧毁的 Grandoreiro 僵尸网络
2024-2-8 13:10:30 Author: www.freebuf.com(查看原文) 阅读量:6 收藏

ESET 与巴西联邦警察合作,摧毁 Grandoreiro 僵尸网络。由于 Grandoreiro 僵尸网络通信协议中存在设计缺陷,研究人员利用这种缺陷跟踪受害者。

研究人员构建了自动分析系统,处理了数以万记的 Grandoreiro 样本文件。自从 2020 年 10 月以来,该恶意软件一直使用 DGA 算法每天生成一个主域名,以及几个备用的域名。除了当天日期外,DGA 算法还支持静态配置。

Grandoreiro 僵尸网络的运营人员滥用 Azure 和 AWS 等云服务提供商部署攻击基础设施,根据分析人员提供的线索,执法部门逮捕了使用这些服务器的个人。

背景

Grandoreiro 僵尸网络是最常见的拉丁美洲银行木马之一,自从 2017 年以来一直保持活跃。Grandoreiro 僵尸网络的主要攻击目标是西班牙、巴西与墨西哥。当然攻击者也是有阶段性的,20220 年到 2022 年西班牙是受攻击最严重的国家,而后明显转向墨西哥与阿根廷。

1707368675_65c460e3bcb2ab914c2b3.png!small?1707368675653

检出分布

Grandoreiro 僵尸网络的主体功能并没有太大变化。最初当 Grandoreiro 成功入侵时,就会向 C&C 服务器发起 HTTP GET 请求回传失陷主机的基本信息。随着时间的推移,开发人员后来放弃了该功能。Grandoreiro 会定期监控前台窗口,查看属于 Web 浏览器进程的窗口。在窗口名称与硬编码的银行相关字符串匹配时,恶意软件就会启用与 C&C 服务器的通信,在进程终止前每秒发送一次请求。

运营人员要手动与失陷主机进行交互,才能窃取受害者的财产。恶意软件支持以下功能:

  • 截取屏幕
  • 按键记录
  • 模拟鼠标与键盘活动
  • 共享屏幕
  • 显示虚假弹出窗口

Grandoreiro 僵尸网络一直在持续更新,最频繁时每周都有几个新版本发布。2022 年 2 月,Grandoreiro 在恶意样本中增加了版本标识符。统计可以发现,2022 年 2 月到 6 月平均每四天就发布一个新版本。六月底发布了 V37 版本后,版本号就再也没有发生过变化,这一功能应该是被放弃了。

1707368698_65c460fab860c9e2e5647.png!small?1707368698291

版本迭代

拉丁美洲的银行木马大多很相似,Grandoreiro 僵尸网络与其他银行木马也很相似。Grandoreiro 将 Downloader 捆绑在 MSI 安装程序中,有时也与 Mekotio 和 Vadokrist 共享 Downloader。最初,Grandoreiro 僵尸网络只在主样本中使用二进制填充,后来也将这种反分析技术增加到 Downloader 中。令人惊讶的是,2023 年第三季度攻击者废止了这项技术,再也没有使用过。

自从 2022 年 2 月以来,分析人员一直在持续跟踪 Grandoreiro 僵尸网络的第二个变种。该变种的大多数 C&C 服务器域名未绑定解析,而且核心功能还在持续改变,应该是开发工作还在进行中。

长期跟踪

自从 2017 年以来,研究人员一直监控 Grandoreiro 僵尸网络,提取版本信息、C&C 服务器、受害者等。

DGA 算法

DGA 算法被 Grandoreiro 僵尸网络硬编码内置,通过名为 dga_id 的字符串获得引用。分析人员从样本文件中提取了 105 个不同的 dga_id,其中 79 个配置都有绑定解析的 IP 地址。

生成的域名通过 No-IP 的动态 DNS 服务注册,Grandoreiro 僵尸网络的运营方滥用该服务,频繁更改解析关系。这些域名解析的 IP 地址,绝大多数由云服务提供商提供,主要是 AWS 与 Azure。

1707368724_65c4611432b1616a840aa.png!small?1707368723881

C&C 地址统计信息

不同配置的 DGA 算法生成的域名都解析到了相同的 IP 地址,这意味着不同的 Grandoreiro 样本文件入侵的受害者都会回连到相同的 C&C 服务器。

1707368741_65c4612589308890e6d9a.png!small?1707368741329

攻击基础设施架构

极少数情况下,也有相同的 IP 地址在几天后被其他 dga_id 重用。研究人员最初认为每个 dga_id 是唯一的,但这是不正确的,样本间存在配置共享相同的 dga_id。以下为共享至少一个 IP 地址的所有 DGA 配置都聚合在同一集合中,受害者占比过低的集合将会被忽略。

1707368763_65c4613b89639bcc73b89.png!small

DGA 集合

最大的集合中包含 78% 的 dga_id,包含了 93.6% 的 C&C 服务器与 94% 的受害者。有消息称 Grandoreiro 提供恶意软件即服务(MaaS),C&C 服务器支持不同的攻击者同时使用。根据上述数据,DGA 生成的据大多数 IP 地址可以聚集在一起,没有明确的分布模式。考虑到网络通信对带宽的要求,研究人员认为不同的 C&C 服务器其实是一个负载均衡,Grandoreiro 很有可能是由单个或者几个小组密切配合的。

C&C 通信

Grandoreiro 在失陷主机上线时描会向 C&C 服务器回传受害者的信息,研究人员据此对受害者情况进行了跟踪。连接到 Grandoreiro 的 C&C 服务器的每个受害者都使用 login_string 进行标识,不同版本的 Grandoreiro 样本文件使用的格式不同。通过该字符串可以提取的信息如下所示:

信息比例描述
Operating system失陷主机操作系统
Computer name失陷主机名称
Country所在国家/地区
VersionGrandoreiro 版本
Bank codename92%银行代码
Uptime25%正常运行时间
Screen resolution8%屏幕分辨率
Username8%受害者用户名

Country 是硬编码的字符串,不是通过执行命令获取的,更可能是攻击者预期的受害者所在国家。Bank codename 是银行或者其他金融机构的关键字符串,受害者访问网站就会触发 C&C 回连。Version 也是硬编码的,标识特定的构建系列、版本与时间戳。请注意,某些时间戳仅包含月份和日期,也有部分时间戳包含年份。

1707368800_65c461602b8763cbe1d7b.png!small?1707368799690

版本信息

有人认为 Build ID 实际上标识了攻击者,但也有人持反对意见。该字符串的格式非常混乱,可能与攻击者身份无关。另外,研究人员坚信 P1X 是指 Grandoreiro 运营方使用的名为 PIXLOGGER 的控制台。

受害者跟踪

此处的统计数据都是从 C&C 服务器获取的,而非通过 ESET 遥测数据获取。

旧样本仍然活跃

每个 login_string 都包含 version_string,其中绝大多数都包含时间戳信息。最早发现的时间戳为 202 年 9 月 15 日,这也是 Grandoreiro 僵尸网络首次引入 DGA 算法的时间,最新的时间戳为 2023 年 12 月 23 日。

操作系统

所有 login_string 都包含操作系统信息,受害者中使用 Windows 10 的最多。

1707368844_65c4618c128cc004265ef.png!small?1707368843690

操作系统分布

国家分布

四成左右的受害者都在巴西,其他如下所示:

1707368858_65c4619a770b7c309373a.png!small?1707368858027

受害者分布

这只是攻击者预期的国家分布,比如阿根廷的受害者完全没有反映。巴西、墨西哥和西班牙几乎包揽了全部,也有极少部分受害者被标记为 PM(圣皮埃尔和密克隆群岛)、GR(希腊)或 FR(法国)。分析人员认为这些要么是错别字,要么另有含义,而非针对这些国家。

研究人员发现平均每天连接 C&C 服务器的受害者大约 563 人。但这一数字肯定包含重复项,长时间保持连接的情况下会持续发现连接请求。因此,分析人员将唯一特征(如计算机名称、用户名等)作为标识,可以看到平均每天有 551 个受害者。在考虑到已经失陷的受害者的情况下,平均每天有 114 个新的受害者连接到 C&C 服务器。

DGA 算法

Grandoreiro 的运营方使用了多种 DGA 算法,但核心逻辑变化不大,最新的更新出现在 2020 年 7 月。

DGA 使用在二进制文件中硬编码的特定配置,存储在多个字符串中。将 JSON 格式化后如下所示:

1707368882_65c461b25f9f0ff3a88f2.png!small?1707368882194

DGA 配置信息

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

dga_table 构成了配置的主要部分。它由 12 个字符串组成,每个字符串有 35 个字段,由 | 分隔。每行的第一个条目是 dga_id。第二个和最后一个条目表示该行的预期月份,其余 32 个字段分别表示该月不同日期的值。

DGA 算法逻辑如下所示,最终输出结果是子域名,该子域名与 base_domain 拼接起来用作当天的 C&C 服务器。

1707368906_65c461ca609e9919da136.png!small?1707368906275

Python 实现的 DGA 算法

以红色突出显示的部分是 Grandoreiro 的故障安全机制,在主域名无法解析时备用。尽管并非所有样本文件都有该机制,但使用的配置文件是固定的。如下所示,每条都由一个 Key、一个前缀和一个基础域名组成。

故障安全机制会采用主 C&C 子域名生成的部分逻辑,遍历所有条目并对其进行异或加密,最后当作前缀前置。

1707368922_65c461da145b3dec52e2c.png!small?1707368921713

故障安全机制

2022 年 9 月,攻击者在最后一步中取消了对子域名的 base64 编码,而是转为在前面附加一个硬编码前缀。根据分析人员的跟踪,这种方法自 2023 年 7 月以来已经成为主流机制。

网络协议

Grandoreiro 利用 RTC Portal 进行 C&C 通信,这是构建在 RealThinClient SDK 之上的 Delphi 组件。RTC Portal 在 2017 年已经停止更新,源码也发布到 GitHub 上。从本质上讲,RTC Portal 允许一个或多个控件远程访问一个或多个主机。

Grandoreiro 的运营人员使用控制台连接到 C&C 服务器并与失陷主机进行通信。要连接到网关,需要三个参数:密钥、密钥长度和登录名。

  • 密钥用于加密发送到服务器的初始请求。因此,服务器还需要知道密钥,以便解密初始客户端请求。
  • 密钥长度决定了在握手期间建立的用于加密流量的密钥的长度。使用自定义流密码对流量进行加密。攻击者建立了两个不同的密钥:一个用于入站流量,另一个用于出站流量。
  • 登录名可以是任何字符串。网关要求每个连接的组件具有唯一的登录名。

RTC 文档指出,它一次只能处理有限数量的连接。考虑到每个连接的主机每秒至少需要发送一个请求,否则其连接将被丢弃。研究人员认为 Grandoreiro 使用多个 C&C 服务器的原因就是为了不让其中任何一个 C&C 服务器不堪重负。

结论

本文详细介绍了 Grandoreiro 的 DGA 算法,以及攻击基础设施的 IP 重叠。根据对攻击行动的跟踪,技术分析支撑了由巴西联邦警察牵头的执法行动,逮捕了 Grandoreiro 中职位非常高的运营者。

参考来源

ESET


文章来源: https://www.freebuf.com/articles/network/391818.html
如有侵权请联系:admin#unsafe.sh