【翻译】Grandoreiro银行木马样本分析
vghost 发表于 北京 企业安全 1112浏览 · 2024-06-07 03:27

REF:
https://securityintelligence.com/x-force/grandoreiro-banking-trojan-unleashed/

前言:

自2024年3月以来,IBM X-Force一直在追踪几起大规模的网络钓鱼攻击活动,这些攻击活动传播了Grandoreiro银行木马,该木马很可能是作为一种恶意软件即服务(MaaS)运作的。对恶意软件的分析揭示了字符串解密和域名生成算法(DGA)方面的重大更新,以及利用受感染主机上的Microsoft Outlook客户端进一步传播网络钓鱼电子邮件的能力。最新的恶意软件变种还专门针对1500多家全球银行,使攻击者能够在包括中南美洲、非洲、欧洲和印度-太平洋地区在内的60多个国家进行银行欺诈。尽管这些攻击活动传统上局限于拉丁美洲、西班牙和葡萄牙,但X-Force观察到最近的攻击活动冒充了墨西哥的税务局(SAT)、墨西哥的联邦电力委员会(CFE)、墨西哥行政和财务部、阿根廷税务局,以及南非税务局(SARS)。重新制作的恶意软件和新的攻击目标可能表明自最近一次针对Grandoreiro的执法行动以来,策略发生了变化,可能促使运营商开始在全球钓鱼攻击中扩大Grandoreiro的部署范围,从南非开始。

关键发现:

Grandoreiro是一种多组件的银行木马,很可能作为一种恶意软件即服务(MaaS)运作。
它正在活跃地参与冒充墨西哥、阿根廷和南非政府机构的网络钓鱼攻击活动。
这个银行木马专门针对全球60多个国家的1500多个全球银行应用程序和网站,包括中南美洲、非洲、欧洲和印度-太平洋地区。
最新的变种包含了重大更新,包括字符串解密和DGA计算,每天至少允许使用12个不同的C2域名。
Grandoreiro支持从受感染主机中收集电子邮件地址,并使用它们的Microsoft Outlook客户端发送进一步的网络钓鱼攻击活动。

Grandoreiro运营商扩大了攻击活动范围
拉美地区为重点的攻击活动
自2024年3月以来,X-Force观察到一些冒充墨西哥税务局(SAT)、墨西哥联邦电力委员会(CFE)、墨西哥城行政和财务部以及阿根廷税务局的网络钓鱼攻击活动。这些电子邮件的目标是拉美地区的用户,包括来自墨西哥、哥伦比亚和智利的顶级域名(TLDs)“.mx”、“.co”和“.cl”。为了保护个人隐私,图像中的任何真实身份都已被隐藏。

第一个攻击活动似乎试图被认为是官方和紧急的,通知目标用户收到有关未支付的联邦纳税人登记费(RFC)的最后通知。如果未支付,后果可能包括罚款、罚金,以及对用户的税务身份号码的封锁,从而影响目标的合法经营和访问政府服务的能力。另一个攻击活动冒充墨西哥联邦电力委员会(CFE),提醒收件人他们订阅了CFEMail,因此可以通过点击嵌入链接之一来查看其账户的PDF和XML格式的账单。第三个攻击活动模仿墨西哥城行政和财务部,指示收件人点击一个PDF文件以阅读有关合规通知的详细信息。一个冒充阿根廷税务局的攻击活动指示用户下载一份新的税务文件并采取相应行动。

在每个攻击活动中,收件人被要求点击一个链接来查看发票或费用、账单、进行付款等,具体取决于被冒充的实体。如果点击链接的用户位于特定国家(取决于攻击活动,墨西哥、智利、西班牙、哥斯达黎加、秘鲁或阿根廷),他们将被重定向到一个PDF图标的图像,并在后台下载一个ZIP文件。这些ZIP文件包含一个外观伪装成PDF图标的大型可执行文件,发现该文件是在电子邮件发送的前一天或当天创建的。

冒充SAT和CFE的样本电子邮件


Secretary of Administration and Finance (秘书处行政和财务部门):

AFIP (Administración Federal de Ingresos Públicos):这是阿根廷的联邦公共收入管理局,相当于其他国家的税务机关。AFIP 负责税收征管、海关和社会保障资源的管理。

Grandoreiro恶意软件最近出现了冒充南非税务局(South African Revenue Service,简称SARS)的网络钓鱼活动。这些活动声称来自纳税人援助服务部门。随着最近对Grandoreiro运营商的逮捕行动,X-Force观察到了一系列涉及到拉丁美洲以外地区的网络钓鱼活动,包括来自西班牙、日本、荷兰和意大利的国别顶级域名(TLD)。X-Force还观察到了两起冒充墨西哥税务局的网络钓鱼活动,可能是由同一运营商执行的。这些电子邮件使用英语或西班牙语撰写,并且格式相似。邮件中提到了税号,并告知收件人他们将收到一份符合南非税务局规定或税务局规定的电子税务发票。电子邮件中提供了一个PDF或XML链接,以查看发票,该链接会触发一个ZIP压缩文件的下载,其中包含Grandoreiro恶意软件的加载器可执行文件“SARS 35183372 eFiling 32900947.exe”(样本之间的数字可能有所变化)。


SAT (Servicio de Administración Tributaria):这是墨西哥的税务机关,类似于美国的国税局 (IRS)。
SARS (South African Revenue Service):这是南非的税务机关。

分析其加载器

根据之前的活动,Grandoreiro恶意软件的感染链始于一个自定义的加载器。这个可执行文件通常被膨胀到超过100MB的大小,以阻碍自动防病毒扫描。为了规避自动执行,它会显示一个模仿Adobe PDF阅读器的小型验证码弹窗,需要点击才能继续执行。


加载器有三个主要任务:

验证客户端是否是合法的受害者(而非研究人员或沙箱环境)。
枚举基本的受害者数据并将其发送回C2(Command and Control)服务器。
下载、解密并执行Grandoreiro银行木马。

所有这些任务都需要超过120个重要字符串,这些字符串使用改进的算法进行了加密。

首先,Grandoreiro会生成一个大的密钥字符串,这个字符串是硬编码的并且经过三次Base64编码。在这些样本中观察到的密钥以“D9JL@2]790B{P_D}Z-MXR&EZLI%3W>#VQ4UF+O6XVWB16713NIO!E…”开头。然后,它会取出加密的字符串,并使用自定义解码将其转换为一系列以十六进制字符表示的字节。

Grandoreiro使用密钥字符串通过旧的Grandoreiro算法解密结果。以下是解密过程的Python实现:

import base64

def decode_key(key):
    # Triple Base64 decoding
    key = base64.b64decode(base64.b64decode(base64.b64decode(key)))

    # Convert hexadecimal characters to bytes
    key = bytes.fromhex(key.decode())

    return key

def decrypt_string(encrypted_string, key):
    decrypted_string = ''

    for i in range(len(encrypted_string)):
        decrypted_byte = encrypted_string[i] ^ key[i % len(key)]
        decrypted_string += chr(decrypted_byte)

    return decrypted_string

# Usage example
encrypted_string = "..."
key_string = "D9JL@2]790B{P_D}Z-MXR&EZLI%3W>#VQ4UF+O6XVWB16713NIO!E..."
key = decode_key(key_string)
decrypted_string = decrypt_string(encrypted_string, key)
print(decrypted_string)

请将encrypted_string替换为您要解密的字符串,然后运行代码即可获得解密后的结果。


最后,它经过一轮最终的256位AES CBC解密和去填充,以获取明文字符串。AES密钥和初始化向量(IV)也以加密字符串的形式存储,并且必须使用与上述相同的算法解密,但跳过AES解密步骤。下面的图表概述了完整的解密过程:

解密过程:

解密过程的详细步骤如下:
使用相同的算法解密存储的AES密钥和初始化向量(IV),但跳过AES解密步骤,以获取解密后的AES密钥和IV。
使用解密后的AES密钥和IV进行256位AES CBC解密,得到解密后的结果。
对解密结果进行去填充操作,以还原明文字符串。

为了验证受害者不是处于沙盒环境中的一部分,Grandoreiro加载器收集以下信息,并将其与硬编码的值列表进行比对(见附录):

计算机名称
用户名
操作系统版本信息
安装的防病毒解决方案
受害者公共IP的国家(通过http://ip-api.com/json获取)
正在运行的进程列表

这个验证步骤还用于阻止特定国家的受害者。一份样本在以下情况下不会继续执行感染操作:

具有以下公共IP的俄罗斯、捷克、波兰和荷兰的受害者。
在美国的Windows 7机器上没有安装防病毒软件。
受害者概要信息
下一步执行的是构建受害者基本概要信息,以在C2面板上显示。恶意软件在受害者机器上枚举以下信息:

公共IP的国家
公共IP的地区
公共IP的城市
计算机名称
用户名
操作系统版本信息
安装的防病毒解决方案

受害者验证

在注册表子键“Software\Clients\Mail”中检查是否安装了Outlook邮件客户端。如果为真,则将值设置为“SIM”(在葡萄牙语中表示“是”)。
检查加密钱包是否存在:Binance、Electrum、Coinomi、Bitbox、OPOLODesk、Bitcoin
检查是否安装了特殊的银行安全软件:IBM Trusteer,Topaz OFD,Diebold
桌面监视器数量
卷序列号
感染日期
感染时间
Grandoreiro将这些结果使用字符串“*~+”连接起来,并将其作为加密的载荷请求的一部分发送到C2服务器。

受害者的特征和行为进行分析

Grandoreiro加载器的C2服务器可以通过上面解释的相同算法进行解密。解密后的域名通过URL:

https://dns.google/resolve?name=<C2 server>

通过DNS over HTTPS解析,以绕过基于DNS的阻断。在收到C2 IP地址之后,恶意软件取IP的前4位数字,并对其执行4个不同的数字映射,生成4位数字端口号。

然后,它将上述的受害者概要信息字符串与大写的葡萄牙语消息“CLIENT_SOLICITA_DDS_MDL”(可能翻译为“客户端请求模块数据”)连接起来。一个示例字符串可能如下所示:

该字符串被加密并作为URL路径通过HTTP GET请求发送到C2服务器,请求最终的Grandoreiro载荷。

如果成功,C2服务器将以HTTP 200状态码回复,其中包含另一条加密消息。它包含以下信息:

载荷下载URL
C2服务器
目录名称
载荷名称
载荷大小
这些信息是加密的,需要进行解密才能获取实际的值。


为了下载文件,Grandoreiro发出另一个HTTP GET请求到载荷URL。下载的文件存储在指定的目录名称下的“C:\ProgramData\”目录中。然后,使用基于RC4的算法使用密钥“7684223510”对文件进行解密。最后,使用“ZipForge” Delphi库对文件进行解压缩,并删除最初下载的文件。

存档文件可能包含两个文件,一个是.EXE(Grandoreiro银行木马),另一个是.CFG(配置文件)。

在执行之前,加载器对当前进程令牌的组成员进行枚举,特别是检查是否存在SECURITY_NT_AUTHORITY SID。如果进程具有所需权限,加载器将使用带有“runas”动词的ShellExecuteW()函数以提升的权限执行Grandoreiro载荷。相反,如果没有可用的必要权限,加载器将使用ShellExecuteW()在没有提升权限的情况下执行自身。

在感染的所有阶段(载荷下载、解密和执行)中,Grandoreiro加载器向其C2服务器报告状态消息。一些示例包括:

ERRO_FALHA_DOWNLOAD(“下载失败错误”)
ERRO_EXTRACAO(“解压缩错误”)
AV_COMEU_MODULO(“防病毒软件吃掉模块”)
ERRO_EXECUCAO(“执行错误”)
INFECTADO(“已感染”)

这些状态消息是根据实际情况报告给C2服务器的,具体消息可能会有所不同。

Grandoreiro银行木马

最终载荷是Grandoreiro银行木马。最新版本在字符串解密和DGA计算算法方面进行了重大更新。它还包括大量全球银行应用程序作为目标,支持执行并使攻击者能够在数十个国家进行银行欺诈。除此之外,还包括了专门的Outlook传播模块和多种功能,是已知的最大型银行木马之一,分析工作仍在继续。以下章节将深入探讨Grandoreiro最值得注意的特点,重点介绍其主要功能和特性。

持久性和配置

Grandoreiro首先通过Windows注册表建立持久性。它运行以下命令创建一个新的注册表Run键,并在用户登录时启动恶意软件:


注册表键的名称可能在样本之间有所不同,但通常与下载的载荷的原始文件名有关。如果Grandoreiro在非提升的进程中运行,则“/runas”动词将被省略。

除了.CFG文件之外,Grandoreiro还在C:\Public\目录下创建一个.XML文件。它通过加载器的字符串加密程序进行加密,并存储Grandoreiro可执行文件的文件名、路径和感染日期。

如果Grandoreiro找不到它的.CFG文件,它将使用默认值填充一个新的.CFG文件,指定启用哪些Grandoreiro功能、受害者的国家和感染日期。.CFG文件通过下文中解释的Grandoreiro字符串加密算法进行加密。

目标应用程序

Grandoreiro操作者显著升级了目标银行应用程序的列表,现在目标超过1500家全球银行。最新的变种首先确定受害者是否在目标国家列表中。每个国家还映射到一个更大的区域,Grandoreiro使用这个区域来确定应该在当前活动窗口上运行哪些字符串搜索。这意味着,如果受害者的国家被确定为比利时,它将搜索与欧洲地区相关的所有目标银行应用程序。Grandoreiro内部将国家映射到区域类别欧洲、北美、中美、南美、非洲、印太地区和全球岛屿,每个区域都有一个关联的Delphi类来搜索银行应用程序。此外,Grandoreiro还有一个类来搜索266个唯一字符串,用于识别加密货币钱包,该类在每次感染时都会运行。


Grandoreiro根据检测到的国家/地区启动一个新的线程。

下面的热力图突出显示了与每个国家/地区相关联的唯一银行应用程序的数量。请注意,每个应用程序可能会被多个字符串检测到:

Grandoreiro 针对各国银行应用程序(使用 Datawrapper 创建并根据 X-Force 团队的研究数据填充)

DGA

Grandoreiro传统上依靠域生成算法(DGA)根据当前日期计算其活动的C2服务器。Grandoreiro的最新版本通过引入多个种子来重新设计算法,并进一步发展,以针对银行木马的每种模式或功能计算不同的域名,从而将C2任务分开分配给多个操作者,作为其恶意软件服务的一部分。每个Grandoreiro样本可能有一个主要的默认种子(在配置文件丢失的情况下),以及一组特定功能的种子。X-Force分析的样本包含14个不同的种子,每天会生成14个可能的C2域名。为了解释算法,我们将计算2024年4月17日的域名。

DGA可视化

Grandoreiro从域名顶级开始,为每年的每一天映射一个域名。这些映射有两种,一种用于主要的C2,另一种用于所有特定功能的C2。然而,在732个顶级域中,只有337个是唯一的。对于给定的日期,主要的顶级域是dnsfor[.]me,次要的顶级域是neat-url[.]com。

在下一部分中,Grandoreiro将种子“xretsmzrb”(主种子)与2位数格式化的当前月份连接起来,将每个数字替换为三个硬编码的字符。数字“0”和“4”分别替换为“oit”和“zia”,得到完整的字符串“xretsmzrboitzia”。

最后,对于每个月的每一天,Grandoreiro有一个自定义的字符到字符的替换映射。对于17号,在所有26个字符的替换迭代后,最终的子域名字符串是“wondbbhonandhnd”。

在计算所有硬编码种子的剩余域名之后,2024年4月17日的C2域名列表如下:


X-Force能够确认至少有4个域名在那一天解析到了巴西的IP地址:

C2服务器的端口是通过IP地址的前四个数字计算得出的,使用了与Grandoreiro加载器类似的自定义数字到数字的映射。请参阅附录以获取所有预先计算的Grandoreiro域名的完整列表。请注意,Grandoreiro经常更换种子。在初始感染几周后,X-Force观察到只有主种子的C2服务器仍然活动。

对于五月初的X-Force DNS遥测研究显示,当前的感染主要集中在拉丁美洲地区:

命令与控制
在尝试解析计算得到的DGA之后,Grandoreiro会发送多个注册消息之一,与枚举数据连接并进行加密,就像Grandoreiro加载器一样。根据权限、安装的杀毒软件和活动的C2域,可能会发送以下消息:

CLIENT_SOLICITA_DD_FULL
CLIENT_SOLICITA_DD_WLT_FULL
CLIENT_SOLICITA_DD_FULL_ADMIN
CLIENT_SOLICITA_DADOS_ARQ
Grandoreiro支持许多不同的命令,包括以下内容:

远程控制:
启用和禁用鼠标输入
发送新的鼠标位置或点击,隐藏/显示鼠标
隐藏/显示任务栏
发送新的剪贴板内容
模拟键盘输入(所有特殊键)
重新启动计算机
启动/停止摄像头查看器
列出当前窗口,关闭/恢复/最大化窗口,设置为前台窗口,移动窗口位置
列出进程,通过PID终止进程
启动/停止键盘记录器
打开浏览器(MS Edge,Chrome,Internet Explorer,Firefox,Opera,Brave)
激活和停用模式(也可通过配置文件进行)
管理员模式
注册模式
Outlook发送模式(参见Outlook收集和垃圾邮件部分)
重新启动被锁定模式
常开模式
"Good DNS Exchange"模式(也在配置文件中硬编码了DGA种子)。可能使用硬编码在配置文件中的DGA种子。
“标题阻塞”或“线程阻塞”可能会阻止用户打开新窗口
文件上传/下载
接收BMP/XML文件(可能是为了模仿检测到的银行应用程序的身份验证窗口)
接收模块更新(尚未实施)
执行新的.EXE文件(尚未实施)
枚举主机文件系统
恶意软件控制
查找恶意软件所需的DLL(例如MouseA.dll)
“清理”DLL或ZIP文件(重新下载组件)
发送客户端枚举数据
更新国家信息
该恶意软件还特别支持打开硬编码的Banco Banorte网址:


它还允许在浏览器中执行JavaScript命令,以模拟HTML按钮点击。这个功能使得Grandoreiro银行木马能够与网页交互,执行像用户手动点击按钮或提交表单等操作。通过模拟按钮点击,该木马可以自动完成浏览器中的某些操作,例如填写表单、提交敏感信息或发起交易,而用户并不知情或同意。这种方法帮助该木马进行欺诈活动,例如窃取登录凭据或进行未经授权的交易。


由于Grandoreiro代码库中包含许多不同的命令及其命名,该银行木马似乎包含了新添加的命令以及不再使用的旧版功能。该银行木马可能经常进行开发周期,以添加新功能而不进行太多的重构,这导致了代码库的整体规模增大。

Outlook收集和垃圾邮件

Grandoreiro最有趣的功能之一是其能够通过收集Outlook中的数据并使用受害者的帐户发送垃圾邮件来传播。Grandoreiro实施了至少3种机制来收集和外泄电子邮件地址,每种机制使用不同的DGA种子。通过使用本地的Outlook客户端进行垃圾邮件发送,Grandoreiro可以通过受感染的受害者收件箱通过电子邮件传播,这可能是Grandoreiro产生大量垃圾邮件的原因之一。

收集
对于Outlook收集模式,Grandoreiro切换到DGA种子7,该种子用于外泄数据。日志和状态消息仍然发送到主要的C2服务器。例如,在开始收集过程之前,它会发送一个包含与受害者配置文件数据相同的日志,以及字符串“CLIENT_SOLICITA_DD_EMSOUT”(客户端请求EMSOUT数据)和“COLHENDO”(收集)。

为了与本地的Outlook客户端进行交互,Grandoreiro使用Outlook Security Manager工具,这是一种用于开发Outlook加载项的软件。主要原因是,如果Outlook对象模型保护程序检测到对受保护对象的访问,它会触发安全警报。Outlook Security Manager允许Grandoreiro在收集和垃圾邮件行为期间禁用这些警报。根据系统架构,该工具需要将DLL“secman.dll”或“secman64.dll”注册为COM服务器。然后,它使用MAPI与Outlook进行交互。

该恶意软件首先定位根邮箱文件夹,然后递归遍历电子邮件项。对于每封电子邮件,它会检查“SenderEmailAddress”属性,并根据黑名单筛选出不需要的电子邮件地址进行收集:


除了上述的收集过程外,Grandoreiro还支持通过Namespace.AddStore()函数首先向Outlook添加PST文件。另一个支持的收集机制是递归地遍历受害者的文件系统,并扫描文件以获取电子邮件地址。会打开并扫描以下扩展名的文件:[请提供具体的文件扩展名列表]。这些不包含上述字符串的电子邮件地址将被汇总到一个文本文件中,然后以ZIP格式进行压缩和外泄。


为了防止不必要的扫描,Grandoreiro维护了另一个路径的黑名单,排除了常见的系统目录。

垃圾邮件

为了发送垃圾邮件,Grandoreiro使用从C2服务器接收到的钓鱼模板。然后,它会浏览模板并填写占位符字段,例如:

$replyto → 回复地址
$link → 载荷的链接
$hora → 格式化的当前时间
$data → 格式化的当前日期
$email_destino → 目标地址
$valor → 随机生成的浮点值,如“123,45.67”,可能用于创建随机发票金额
$letnum_rand_branco → 大写字母和数字的随机字符串,粘贴在电子邮件HTML中的白色字体标签“<font style=”color: white;”>”之间。未知用途。
$assunto → 邮件主题
$nome_saudacao → 姓名和问候语
$nome_empresa → 公司名称
$link_imagem → 图片链接,可能用于支持公司标志、签名或横幅

在开始发送邮件之前,Grandoreiro启动一个线程来检测出现的对话框,并通过发送特定的TAB和SPACEBAR键来关闭它们。在发送邮件后,恶意软件会仔细地清除受害者邮箱中的已发送消息,以掩盖其行踪。此外,对于大部分收集和发送垃圾邮件的行为,Grandoreiro确保受感染机器上的最后一次输入至少在5分钟之前(或在某些情况下更长时间)。开发人员可能希望确保受害者不会注意到任何可疑行为。

在发送垃圾邮件时,Grandoreiro会返回以下状态消息:

PRONTO(“准备就绪”)
EM_REPOUSO(“休息中”)
DISPARANDO(“发射中”)
ENVIO_PAUSADO(“发送暂停”)
SEM_CONTA_DISPONIVEL(“没有可用账户”)
MAX_ERROS(“最大错误”)
字符串加密
由于Grandoreiro是一种非常庞大的恶意软件,它需要大量的字符串,如果这些字符串没有加密,那么检测起来将非常容易。Grandoreiro包含了分散在一百多个特定功能的字符串加载函数中的10,000多个字符串。解密机制与加载程序的字符串解密略有不同:

它使用与加载程序相同的Grandoreiro密钥,通过自定义的加密和密钥“A”来解密。一旦获得密钥,它会使用与加载程序相同的编码方式进行自定义解码,然后通过ElAES Pascal实现使用AES ECB模式解密结果字节。AES密钥是先前解密的Grandoreiro密钥的混淆版本。经过另一轮自定义解码后,字符串最终通过旧的Grandoreiro算法和Grandoreiro密钥解密。

总结:

X-Force观察到最近有几起冒充官方政府机构的网络钓鱼活动,用于传播Grandoreiro银行木马。Grandoreiro的分发者通常针对拉丁美洲地区的用户进行攻击;然而,自从最近对Grandoreiro操作者的执法行动以来,X-Force观察到该恶意软件已经在拉美以外的地区传播,包括中美洲、南美洲、非洲、欧洲和太平洋地区。X-Force分析的Grandoreiro银行木马样本在字符串解密和DGA计算算法方面进行了重大更新。这些新分析的样本现在包括至少1500个全球银行应用程序作为目标,这些应用程序支持执行并使攻击者能够在60多个国家进行银行欺诈。对恶意软件的更新以及多个国家的银行应用程序数量的显著增加,表明Grandoreiro的分发者正寻求在全球范围内进行攻击和传播恶意软件。

0 条评论
某人
表情
可输入 255