最近,安全研究人员发现了一款新型银行木马,并将其命名为“Eternidade Stealer”(葡萄牙语意为“永恒”)。该木马通过WhatsApp劫持和社交工程诱饵进行传播。本文将剖析该攻击活动中使用的技术,并重点介绍威胁组织采用的新工具。
WhatsApp仍然是巴西网络犯罪生态中最常被利用的通信渠道之一。在过去两年中,威胁行为者不断完善其战术,利用该平台的巨大普及度来分发银行木马和信息窃取恶意软件。此前在2024年和2025年观察到的活动,如“Water Saci”,显示出从简单的网络钓鱼链接,发展到通过WhatsApp消息和群组分享涉及虚假政府计划、快递通知甚至欺诈性投资群的复杂社交工程方案的明显演变。
在此持续活动的基础上,研究人员最近发现了一款用Delphi编写的新型窃取程序Eternidade。它使用互联网消息访问协议动态检索命令与控制地址,允许威胁行为者更新其C2服务器。它通过WhatsApp蠕虫活动传播,攻击者现在部署的是Python脚本,这改变了以往使用PowerShell脚本劫持WhatsApp和传播恶意附件的方式。
Delphi凭借其技术效率和地域熟悉度的结合,仍然是巴西网络犯罪生态的基石。它能够快速开发原生的Windows可执行文件,易于分发、混淆和与系统API集成,这些特质使其成为隐蔽、自包含恶意软件的理想选择。由于Delphi在2000年代和2010年代曾在拉丁美洲合法的软件开发中被广泛教授和使用,许多开发者在进入地下领域之前就已经掌握了它。随着时间的推移,自由分享的源代码、破解的集成开发环境和葡萄牙语教程使其更易获取,而早期基于Delphi的银行木马的成功和转售则形成了一个持续的反馈循环。如今,这种共享知识和便利性的基础,使Delphi成为巴西威胁行为者最偏好的语言之一。
这种威胁远非理论性的。它正在实时发生。在进行此项研究期间,我们收到了以下来自恶意VBScript消息接收者的片段。 图1. 在准备当前报告期间通过WhatsApp收到的消息。 在以下部分中,我们将分析Eternidade的功能、基础设施和完整感染链,重点介绍该变体与早期活动的不同之处。
技术分析
图2. Eternidade Stealer的攻击链。 攻击活动始于一个经过混淆的VBScript,其大部分注释为葡萄牙语。执行时,该脚本会释放一个批处理文件,以下载并执行载荷:一个用于传播的WhatsApp蠕虫和一个部署基于Delphi的银行木马的MSI安装程序。 图3. 经过混淆的VBScript,注释为葡萄牙语。 载荷从威胁行为者的C2服务器下载。活动中使用的WhatsApp蠕虫是用Python编写的,这与最近报道的PowerShell变体不同。释放程序还会安装必要的Python依赖项,以确保载荷成功运行。 图4. 用于释放下一阶段载荷的函数。
WhatsApp传播蠕虫
文件哈希:SHA-256: 6168d63fad22a4e5e45547ca6116ef68bb5173e17e25fd1714f7cc1e4f7b41e1 图5. 超过1300行的Python脚本,旨在自动化WhatsApp消息发送、窃取联系人列表并分发恶意文件。 在图6中,脚本的开头直接显示了C2的意图,即建立C2通信并为追踪受感染机器生成唯一的会话ID。 图6. C2端点的初始化。
窃取WhatsApp联系人:核心功能
该活动的关键函数是“obter_contatos()”,它允许恶意软件窃取受害者的整个WhatsApp联系人列表。图7显示了它在浏览器中运行的JavaScript代码。 图7. 窃取受害者WhatsApp联系人列表的恶意软件JavaScript代码。
分解攻击
WPP API利用: 恶意软件使用‘WPP.contact.list()’,该函数来自‘wppconnect-w.js’库,为WhatsApp Web提供API包装器。恶意软件从GitHub下载此库以获得对WhatsApp的程序化访问。 智能过滤: 注意恶意软件如何过滤掉群组、商业联系人和广播列表。它通过专注于更可能落入网络钓鱼消息陷阱的个人联系人来优化攻击。 恶意软件为每个联系人提取以下信息:
- 完整的WhatsApp ID
- 联系人姓名
- 干净的手机号码
- 是否为已保存的联系人
自动数据外传: 收集联系人后,Python代码立即调用‘enviar_contatos_para_servidor()’。没有延迟,也不需要用户交互。
数据外传:将被盗联系人发送至C2
联系人一旦被收集就会立即被盗并发送到C2服务器,没有任何阻止的机会。每个联系人都包含受害者的电话号码和姓名,使其对定向攻击具有价值。会话ID和机器名称允许攻击者关联来自多个感染的数据。然后数据通过HTTP POST以明文形式发送(虽然使用了HTTPS,但数据本身未加密)。 图8. 恶意软件用于数据外传的Python脚本。
使用的消息模板
图9. 活动中使用的消息模板。 如图9所示,问候语会根据传递时间自动调整,并使用联系人的真实姓名,模仿合法的商业通信。攻击者可以通过C2服务器远程更改消息模板。
恶意软件分发:攻击向量
恶意软件从C2下载恶意文件,并将Base64转换为二进制。然后,它向所有联系人发送一条消息,包含个性化的问候语、恶意文件和后续消息。它使用waitForAck: false来加速传递并避免检测。
图10. 用于恶意软件分发的脚本。
MSI释放程序
Eternidade Stealer通过恶意的MSI安装程序传递,该安装程序释放多个组件,包括加密载荷和AutoIt脚本加载器。
图11. 由安装程序释放的恶意文件。
“.log”文件似乎是一个基于AutoIt的恶意脚本,结合了环境侦察、反检测检查和内存中便携式可执行文件/外壳代码加载器行为,通常用于传递银行木马和凭据窃取程序。代码包含用于初始化本机载荷的大型十六进制编码二进制数据块。
恶意软件仅通过检查操作系统语言来针对巴西受害者。如果系统未检测到为巴西葡萄牙语,它会显示错误消息并中止执行。
图12. 如果系统未检测为巴西葡萄牙语则显示的错误消息。
图13. 验证所用操作系统语言的脚本。
该脚本枚举正在运行的进程和注册表卸载项以检测已安装的安全产品。它还利用WMI枚举防病毒软件/防火墙/反间谍软件产品,收集可读名称用于决策或日志记录。
图14. 恶意软件检测受害者机器中安装的安全产品。
图15. 恶意软件检测受害者机器中安装的反间谍软件和防病毒产品。
它包含收集系统遥测、通过api.ipify.org调用获取外部IP以及收集本地IP的函数,这些功能通常用于将受感染主机与C2或操作员仪表板关联。
图16. 恶意软件收集系统遥测数据。
函数OBTERINFOADICIONAL()充当系统分析例程,收集基本主机信息并将其格式化为单个可读字符串。它首先查询Windows注册表以获取操作系统产品名称,然后从硬件描述键收集处理器型号。使用WMI访问Win32_ComputerSystem类来计算物理内存总量,提供机器RAM容量的近似度量。
图17. 恶意软件的OBTERINFOADICIONAL()函数。
最后,它从系统环境中捕获当前登录域,以指示主机是属于公司网络还是本地域。这些元素组合在一起,产生一个简明的硬件和系统摘要,为恶意软件操作员提供受感染机器配置的快速概况,以便采取进一步行动。
然后,恶意软件通过POST方法将收集到的系统信息发送到其C2 hxxps://itrexmssl[.]com/jasmin/altor/receptor[.]php。
收集的信息包括:
- 计算机名
- 操作系统版本和内部版本
- 用户名
- 本地和公共IP地址
- 当前日期和时间
- 已安装的防病毒软件、防火墙和反间谍软件及其状态
图18. 恶意软件收集的信息列表。 该样本展示了一个清晰且高度本地化的目标定位逻辑。它持续扫描活动窗口和正在运行的进程,查找与巴西银行门户、金融科技服务和加密货币平台相关的字符串。当它检测到匹配项时,例如与Bradesco、BTG Pactual、Binance、Coinbase、MetaMask、Trust Wallet或其他金融品牌相关的窗口标题或进程名时,恶意软件会立即解密并激活其下一阶段载荷。这种行为反映了经典的银行木马或覆盖层窃取程序策略,其中恶意组件在受害者打开目标银行或钱包应用程序之前保持休眠状态,确保攻击仅在相关上下文中触发,并对普通用户或沙箱环境保持不可见。 图19. 恶意软件扫描与巴西银行门户、金融科技服务和加密货币平台相关的字符串。
载荷解密
恶意软件在安装文件夹中搜索.tda或.dmp文件,这表明这不是一次性的释放程序,而是操作员工具包的一部分。如果找到,它首先加载.tda文件,使用自定义流密码解密,并在内存中运行前使用LZNT1解压缩。 图20. 恶意软件扫描安装文件夹中是否存在.tda和.dmp文件。 值得注意的是,这种自定义流密码与在Casbaneiro和Amavaldo注入器中观察到的密码相似。以下是报告中提及的解密算法片段和在此恶意软件上观察到的片段。 图21. Casbaneiro银行木马中使用的流密码。来源:ESET的We Live Security。 图22. 所使用的解密的Python实现。 图23. 载荷解密的实际代码。
注入器载荷
解密的.tda文件是一个用Delphi编译的注入器,它执行进程空洞化以运行最终载荷。注入器读取.dmp文件,使用上述相同的例程解密,并将Eternidade Stealer载荷注入到svchost.exe。 图24. 注入器执行进程空洞化以运行Eternidade Stealer。
Eternidade窃取程序
Eternidade Stealer是一个用Delphi编译的凭据窃取程序,用于收集敏感数据并维持与受感染主机的活动连接。 执行时,它首先检查注册表项“HKEY_CURRENT_USER\Software\MeuApp”以及值“Inicio”(葡萄牙语意为“开始”)是否存在。这用作感染标记,以确定它是否之前在此机器上运行过。如果不存在,它会收集系统信息,如计算机名和处理器信息,并通过HTTP POST方法将其发送到serverseistemasatu[.]com/data.php?recebe。然后继续创建注册表项“MeuApp”并将“Inicio”的值设置为True。 随后,它通过“EnumWindows”API枚举所有窗口,收集以下属性,并将其解析为如下格式:
- 窗口标题
- 类名
- 可执行文件路径
格式: Titulo: <窗口标题> | Class: <类名: | Exe: <可执行文件路径> 图25. Eternidade Stealer收集窗口标题、类名和可执行文件路径信息。 从枚举的窗口中,窃取程序专门查找与巴西银行、支付服务和加密货币钱包/交易所相关的应用程序,以针对其进行凭据窃取。
- 银行:桑坦德银行、巴西银行、Banrisul、Tribanco、布拉德斯科银行、Sicredi、Sicoob、BMG、BTG Pactual、BS2、伊塔乌联合银行、联邦储蓄银行、Mercantil银行、东北银行、亚马逊银行
- 支付服务:MercadoPago、RecargaPay、Stripe
- 加密货币交易所:币安、欧易、Crypto.com、Coinbase、Foxbit、Novadax、Bitget、Bybit、Coinext、Kucoin、Kraken、Bitstamp、Bitfinex、Poloniex、火币、Gate.io、Gemini
- 加密货币钱包:Electrum、Exodus、Atomic Wallet、MetaMask、Ledger Live、Trust Wallet、Blockchain.com、Coinomi、Phantom Wallet、Solflare、TokenPocket、Math Wallet
如果找到匹配项,恶意软件会建立与C2服务器的连接。该恶意软件的一个显著特点是使用硬编码凭据登录其电子邮件账户,从中检索其C2服务器。这是一种非常聪明的方式来更新其C2、维持持久性并在网络层面规避检测或关闭。如果恶意软件无法连接到电子邮件账户,它会使用硬编码的备用C2地址。 图26. 恶意软件使用硬编码凭据登录其电子邮件账户。 以下是用于从电子邮件检索C2服务器的过程:
- 使用硬编码凭据通过SSL连接到IMAP服务器。 图27. 用于连接IMAP服务器的硬编码凭据。
- 选择邮箱,在此样本中为图26中的“John”。
- 从最新的电子邮件中检索邮件头。
- 将邮件主题、发件人和收件人按以下格式连接: Assunto: <主题>De: <发件人邮箱地址>Para: <收件人邮箱地址> 图28. 恶意软件连接最新邮件的主题、发件人和收件人。
- 搜索字符串“ip:”并提取C2。
- 如果未找到,则检索邮件正文并重复检查过程。
- 如果仍未找到,则使用备用C2地址(在此样本中为“domimoveis1[.]com.br”)。 在调查过程中,我们观察到一些样本与未启用双重验证的电子邮件账户相关联,仅使用硬编码凭据即可访问。利用这些凭据,我们能够登录威胁行为者的账户并验证分析中观察到的行为。 图29. 研究人员通过硬编码凭据访问的威胁行为者电子邮件账户。
后门命令与功能
我们还观察到多个用于C2通信的加密字符串。这种混淆延迟了静态分析,并有助于样本规避静态和基于签名的检测。 图30. 用于C2通信的加密字符串。 解密例程使用硬编码密钥“edit1”和盐“MeuSaltPessoal#2024”。 详细的解密过程如下:
- 提取十六进制值。
- 将十六进制字符串转换为字节数组。
- 从字节中减去5。
- 使用盐和密钥应用循环异或。
图31. 解密例程的Python实现。 解密字符串后,我们发现恶意软件使用多个命令与C2服务器通信。恶意软件等待来自C2的传入消息并解析它们以确定要运行哪个函数。它实现了多个套接字,每个套接字专用于特定功能。 命令由C2按以下格式发送: 以下是样本中观察到的一些命令: <|SocketMain|> 当恶意软件收到<|SocketMain|>命令时,它会提取其中包含的值(这是受害者机器的唯一标识符)并保存它。这用于在将信息发送回C2时跟踪单个主机。 图32. <|SocketMain|>命令。 <|OK|> 从受感染主机收集以下信息:
- 检测到的银行
- 计算机系统名
- 注册用户
- 操作系统名称和架构
- 已安装的防病毒软件及最后更新时间
- 处理器
- 内存
然后,它将收集到的信息按以下格式发送回C2: <|Info|>{collected info1}<|>{collected info2}....<|>{message}<<| 图33. <|OK|>命令。 <|PING|> 这是一个核心C2命令,用于持续监控用户活动,并确定服务器接下来应发送哪个恶意功能。 当收到该命令时,恶意软件回复<|PONG|>,休眠100毫秒,并按以下格式报告当前活动窗口。这通知威胁行为者受感染主机正在使用哪个应用程序,这些信息可用于部署银行覆盖层或制作逼真的网络钓鱼窗口。 响应格式: SendigTitle>{opened window} 图34. <|PING|>命令。 <|PedidoSenhas|> 此命令允许威胁行为者发送用于窃取凭据的伪造输入自定义覆盖层。它发送此覆盖层以及特定参数(取决于受害者正在访问的窗口),以在合法的银行窗口上创建虚假的密码输入字段和提交按钮。这样,受害者不知不觉地在覆盖层字段中输入凭据,并将其外传到C2服务器。 收到的命令: <|PedidoSenhas|><|>EditPassword.Top={}<|>EditPassword.Left={}<|>EditPassword.PromptText={}<|>EditPasswordStyle={}<|>ButtonOk.Top={}<|>ButtonOk.Left={}<|>TamanhoImagem.Width={}<|>TamanhoImagem.Height={} <|CE_ASSI|> 、 <|CE_TRANS|> 和 <|CB_SEN|> 恶意软件还实现了针对联邦储蓄银行和巴西银行的隐藏银行覆盖层。这让受害者不知不觉地在覆盖层而非合法界面上输入银行信息,并将其外传到C2服务器。 以下是恶意软件使用的提取覆盖层: 图35. 恶意软件用于诱骗受害者输入银行信息的银行覆盖层。 观察到的其他命令包括:激活键盘记录功能、发送屏幕截图或文件以及其他功能: <|AlterarResolucao|> <|AtivarImagem|> <|Chat|> <|CloseChat|> <|Close|> <|DELETEDKL|> <|DesativarImagem|> <|Destravar|> <|DownloadFile <|Files|> <|first|> <|Folder|> <|HOLENOFF|> <|HOLE|> <|MENSAGEM|> <|Metodo|> <|NOSenha|> <|OpenChat|> <|Reconected|> <|REQUESTKEYBOARD|> <|RESTART|> <|UploadFile|> 从分析中,我们能够在VirusTotal上发现类似样本。我们识别出可追溯到2025年1月的类似恶意软件,其中一个由研究员Dodo on Security在X上分享。发现的命令和功能相似,但早期变体缺乏IMAP功能并使用硬编码的C2地址。这些相似性表明同一威胁行为者参与了此活动,并持续积极开发该恶意软件。 图36. Dodo on Security在X上发布的关于与Eternidade Stealer类似的银行木马的帖子。 以下是Eternidade Stealer与旧样本之间观察到的一些相似之处。 图37. Eternidade Stealer:向C2服务器发送信息。 图38. 与Eternidade Stealer功能相似的旧样本。 图39. 带有加密字符串的Eternidade Stealer。 图40. 带有加密字符串的旧样本。
恶意软件面板
从初始URL“serverseistemasatu[.]com”,我们识别出共享相似ASN和响应头的IP地址集群。我们还分析了托管在这些IP地址上的相关域名。 图41. 与“serverseistemasatu[.]com”相关的IP地址。 图42. 托管在其中一个IP地址上的域名。 在其中一个域名上,我们发现了额外的威胁行为者面板:一个用于管理重定向系统,另一个是登录面板,可能用于监控受感染主机。 图43. 可能用于监控受感染主机的登录面板。 图44. 重定向系统的登录面板。 重定向系统面板包含日志,显示尝试连接到C2地址的总访问次数和阻止次数。访问仅限于位于巴西和阿根廷的机器。任何被阻止的连接都会被重定向到 google.com/error。在记录的4… 图45. 重定向系统的连接日志。 面板中的统计部分提供了更广泛的视角,以了解有多少潜在受害者与其进行了交互。总共记录了454条通信记录,反映了来自广泛地理位置的接触尝试。虽然无法确认每个条目都代表直接与此活动相关的活跃感染,但数据的数量和多样性强烈表明,重定向模块被全球范围内的潜在受害者访问或探测,而不仅仅是在主要目标区域内。 图46. 重定向系统的统计面板。 通信总计来自38个国家,观察到的最高活动发生在美国,其次是荷兰、德国、英国和法国。只有两次通信被成功重定向到该活动的目标域名。仅从巴西IP地址进行了三次连接,这意味着尽管恶意软件家族和传播途径主要是巴西的,但可能的操作足迹和受害者暴露范围要广泛得多。 图47. 观察到的面板数据中的操作系统分布。 操作系统统计数据表明,在记录的454次通信中,主要是一种基于桌面的暴露模式。大多数连接(182次,占40%)来自未知操作系统类型,这表明用户代理数据不完整或经过混淆,可能来自自动化工具或匿名代理。Windows系统占115次连接,其次是macOS占94次,Linux占45次,而Android仅占18次。 这些统计数据证实基础设施主要被桌面用户联系,加强了该活动针对的是工作站环境而非移动端点的假设,并表明了一个混合的潜在受害者生态系统和全球传播。 在“配置”选项卡中,面板显示了重定向设置、允许的国家/地区和每个IP的连接数。它还包括复选框,用于启用反机器人保护、阻止VPN和代理、阻止托管服务器、阻止可疑IP、阻止空或非浏览用户代理以及其他相关保护。 图48. 重定向系统的配置选项卡。 还有一个输入字段,用于输入始终允许连接的IP地址列表,绕过所有其他检查。 图49. 重定向系统的允许IP地址列表输入字段。
结论
Eternidade Stealer是一种活跃且不断演变的威胁,凸显了两个令人担忧的趋势:WhatsApp作为传播途径的日益普及,以及恶意软件的持续发展,包括动态的基于IMAP的C2检索、改进的规避技术以及针对巴西受害者的地理围栏。网络安全防御者应对可疑的WhatsApp活动、意外的MSI或脚本执行以及与此持续活动相关的迹象保持警惕。
入侵指标
VBS: e1779d9810ad39a45759c856cc85f1148a8f6601 e3e24d57163e04ac16a93a698d4c8051473bccb4
Whats.py: 8f3b5a0cecd4d50fc6eb52a627fe6a9179e71736 167cc2d716bfebc440f14ff1affe7f99b8556f2e
Payload: db5545b6136f1197fd5234695cdeff285a99208e 03944933d662f4e96d43750aa29bd287685c6007
域名: hxxps://varegjopeaks[.]com/altor/teste_obscado[.]vbs hxxp://varegjopeaks[.]com/altor/whats.py hxxp://centrogauchodabahia123[.]com/altor/installer[.]msi hxxp://varegjopeaks[.]com/altor/installer[.]msi hxxps://itrexmssl[.]com/jasmin/altor/receptor[.]php hxxps://alentodolcevitad[.]com/admin[.]php miportuarios[.]com mazdafinancialsevrices[.]com adilsonralfadvocaciad[.]com domimoveis1[.]com[.]br serverseistemasatu[.]com
IP地址: 104.21.48[.]41 162.120.71[.]56 185.169.234[.]139 83.229.17[.]71 140.99.164[.]172 174.138.187[.]2/