A equipe de pesquisa da ESET analisou a atividade do Webworm ao longo de 2025, um grupo APT alinhado à China que inicialmente tinha como foco organizações na Ásia, mas que recentemente passou a direcionar seus ataques para a Europa. Embora este seja nosso primeiro post público no blog sobre o grupo, acompanhamos as atividades do Webworm desde que a Symantec divulgou informações sobre esses criminosos pela primeira vez, em 2022. Ao longo dos anos, observamos que o grupo vem modificando continuamente suas táticas, técnicas e procedimentos (TTPs).
O Webworm está ligado a outros grupos APT alinhados à China, como SixLittleMonkeys e FishMonger. No passado, utilizava famílias de malware conhecidas como McRat (também chamado de 9002 RAT) e Trochilus. No entanto, nos últimos anos, começou a migrar para ferramentas de proxy, tanto já existentes quanto desenvolvidas sob medida, que são mais discretas do que backdoors completos. Em 2025, o Webworm também adicionou dois novos backdoors ao seu arsenal: EchoCreep, que utiliza o Discord para comunicação de comando e controle (C&C), e GraphWorm, que usa a API do Microsoft Graph com a mesma finalidade. O grupo também é conhecido por hospedar seus malwares e ferramentas em repositórios do GitHub, permitindo que o malware seja baixado diretamente na máquina da vítima.
Principais pontos deste post:
- Desde sua descoberta em 2022, o grupo APT Webworm vem atualizando ativamente seu conjunto de ferramentas e seus alvos.
- Em 2025, o grupo passou a utilizar backdoors que exploram o Discord e a API do Microsoft Graph para comunicação de comando e controle (C&C).
- A equipe de pesquisa da ESET decifrou mais de 400 mensagens do Discord e um arquivo de histórico bash encontrado em um servidor de operador, com comandos de reconhecimento usados contra mais de 50 alvos únicos.
- Além de backdoors, o Webworm utiliza múltiplas ferramentas de proxy, tanto já existentes quanto desenvolvidas sob medida.
- O grupo utiliza o GitHub para hospedar seus malwares.
Atribuímos a campanha de 2025 ao Webworm com base nas informações que descobrimos após decifrar as mensagens do Discord usadas pelo backdoor EchoCreep para comunicação de comando e controle (C&C). Essas informações nos levaram ao repositório do GitHub dos cibercriminosos, que continha artefatos preparados, como a aplicação SoftEther VPN. Dentro do arquivo de configuração do SoftEther, encontramos um endereço IP que coincide com um IP conhecido do Webworm.
As vítimas afetadas pelo Webworm nos países mencionados mais adiante neste post foram devidamente notificadas. Além disso, os serviços que identificamos, como um repositório do GitHub e um bucket da Amazon Web Services (S3), foram desativados.
Enfoque evolutivo
Em 2022, uma das principais características do Webworm era o uso de backdoors e trojans de acesso remoto (RATs) conhecidos, como McRat e Trochilus. Conforme descrito na publicação da Symantec, o grupo inicialmente tinha como alvo principalmente países da Ásia, como Rússia, Mongólia e Geórgia.
Em 2024, observamos que o grupo começou a se afastar dos backdoors tradicionais em favor de ferramentas legítimas ou semi-legítimas, como proxies SOCKS (SoftEther VPN) e outras soluções de rede. Embora essas ferramentas ajudem o Webworm a evitar detecção, elas também não oferecem o conjunto completo de comandos normalmente disponível em backdoors, fazendo com que os operadores precisem recorrer a intérpretes de comando como cmd.exe ou powershell.exe.
Nesse período, também vimos o grupo reduzir suas operações na Ásia e deslocar seu foco para países europeus. Essa tendência continuou em 2025, com ataques direcionados a órgãos governamentais na Bélgica, Itália, Sérvia e Polônia. Ao mesmo tempo, o Webworm também avançou para a África do Sul, comprometendo uma universidade local.
Nessas campanhas mais recentes, o Webworm aparentemente abandonou por completo o Trochilus e o McRat, enquanto continua expandindo seu conjunto de ferramentas. Entre as novas adições estão dois backdoors, EchoCreep baseado no Discord e GraphWorm baseado na API do Microsoft Graph. Embora o grupo continue utilizando soluções de proxy existentes, especificamente iox, ferramenta de port forwarding e proxy de intranet escrita em Go, e frp, fast reverse proxy, também passou a adotar soluções proxy personalizadas como WormFrp, ChainWorm, SmuxProxy e WormSocket.
Essas ferramentas proxy personalizadas não apenas criptografam as comunicações, mas também permitem encadeamento através de múltiplos hosts, tanto dentro quanto fora da rede. Acreditamos que os cibercriminosos utilizam essas ferramentas em conjunto com o SoftEther VPN para ocultar melhor seus rastros e aumentar o sigilo das atividades. Todos os proxies e serviços VPN do Webworm são hospedados em servidores em nuvem pertencentes a infraestrutura controlada pela Vultr e pela IT7 Networks. Dado o volume e a complexidade das ferramentas de proxy, é possível que o Webworm esteja construindo uma rede oculta muito maior, enganando vítimas para que executem seus próprios proxies.
Comunicação C&C via Discord e API do Microsoft Graph
Em 2025, o Webworm passou a explorar o Discord e a API do Microsoft Graph para comunicação de comando e controle (C&C). Durante a análise do backdoor EchoCreep, conseguimos identificar mais de 400 mensagens do Discord. Também encontramos quatro canais únicos, cada um associado a uma vítima diferente. O EchoCreep utiliza o Discord para enviar arquivos, transmitir relatórios de execução e receber comandos. Toda a comunicação de rede do backdoor ocorre por meio das APIs do Discord via requisições HTTP cuidadosamente estruturadas.
No caso do GraphWorm, que utiliza a API do Microsoft Graph para comunicação de C&C, observamos o uso exclusivo de endpoints do OneDrive, principalmente para obter novas tarefas e enviar informações da vítima. Um diretório separado do OneDrive é criado para cada vítima. Como a instância do OneDrive utilizada pelo GraphWorm opera na nuvem, o backdoor consegue explorar o endpoint da API do Microsoft Graph /createUploadSession para enviar arquivos grandes previamente preparados.
Bucket Amazon S3
Durante nossa investigação das campanhas de 2025, descobrimos que o Webworm passou a utilizar sua solução de proxy personalizada WormFrp para obter configurações a partir de um bucket do Amazon Web Services (S3) comprometido, localizado em wamanharipethe.s3.ap-south-1.amazonaws[.]com. Um bucket do Amazon S3 é uma solução de armazenamento em nuvem pública disponível na Amazon Web Services, onde S3 significa Simple Storage Service. Acreditamos que o bucket comprometido seja a versão publicamente acessível ou possivelmente mal configurada em termos de políticas de acesso de whpjewellers.s3.amazonaws[.]com.
Nossa análise inicial dos arquivos armazenados no bucket revelou vários snapshots de hosts de máquinas virtuais, sendo que um deles continha a configuração atual e o estado ativo de uma máquina pertencente a um órgão governamental na Itália. Isso pode indicar que os operadores conseguiram penetrar com sucesso no ambiente responsável pelo gerenciamento das máquinas virtuais da vítima. No entanto, também é possível que tenham obtido acesso apenas a um host onde os snapshots eram armazenados. De qualquer forma, fica evidente que, por meio desse bucket S3, o Webworm consegue exfiltrar dados enquanto a vítima, sem perceber, arca com os custos do serviço.
No final de outubro de 2025, o grupo cibercriminoso enviou outro arquivo ao bucket S3, um executável chamado SharpSecretsdump. Essa ferramenta, conforme sua documentação, imita a atividade do conhecido secretsdump.py do Impacket para extrair credenciais do host Windows comprometido onde é executada. Presumimos que os operadores do Webworm tenham enviado essa ferramenta ao bucket S3 para utilizá-la contra suas vítimas.
Entre dezembro de 2025 e janeiro de 2026, os operadores enviaram 20 novos arquivos ao serviço, dois dos quais foram exfiltrados de um órgão governamental na Espanha. O primeiro, um arquivo XML, contém configurações salvas de hosts virtuais usadas pelo mRemoteNG, um gerenciador de conexões remotas de código aberto. O segundo é um diagrama do Microsoft Visio que detalha a infraestrutura por trás de um domínio utilizado por esse órgão governamental.
Repositório do GitHub
Enquanto analisávamos a infraestrutura de C&C do EchoCreep no Discord, conseguimos obter identificadores únicos do Discord relacionados a usuários, canais e servidores (guilds). Infelizmente, devido ao acesso limitado ao token do bot, não houve chamadas à API que pudessem ser usadas para enumerar informações sobre os proprietários do servidor ou do próprio bot.
No entanto, as mensagens do Discord revelaram o repositório do GitHub GitHub, que funciona como um repositório de staging para outras ferramentas e malwares utilizados pelo Webworm (uma dessas ferramentas utilizava o bucket do Amazon S3 comprometido mencionado anteriormente). Por ser um fork direto do repositório legítimo do WordPress, ele poderia passar despercebido em uma análise superficial. A Figura 1 mostra uma visão geral desse repositório, com arquivos de staging localizados no diretório wp-admin.
Infiltração
Embora não tenhamos conseguido identificar o ponto de entrada que o Webworm utiliza para comprometer suas vítimas, descobrimos que o grupo emprega utilitários de código aberto para varrer arquivos e diretórios de servidores web das vítimas, em busca de vulnerabilidades.
Detectamos isso após notar que uma máquina de uma vítima estava se comunicando com um servidor proxy hospedado em 64.176.85[.]158. Ao analisar o endereço IP, observamos que anteriormente havia sido exposto ali, na porta 80, um diretório aberto contendo os utilitários de código aberto mencionados. A Figura 2 mostra uma visão de nível superior dessa listagem de diretório exposto.
Os diretórios-chave relevantes para o nosso artigo são nuclei/, .dirsearch/ e o arquivo .bash_history. Como observado na Figura 3, os operadores do Webworm conseguiram realizar brute force em diretórios e arquivos dentro de servidores web utilizando o dirsearch, uma ferramenta de varredura de caminhos web com capacidade de filtrar códigos de status específicos, e o nuclei, um scanner de vulnerabilidades de código aberto, para identificar possíveis falhas em alvos específicos.
Os resultados da execução do dirsearch foram armazenados no diretório .dirsearch, o que revelou que a ferramenta havia sido utilizada contra 56 alvos em diferentes países, como Espanha, Hungria, Bélgica, Nigéria, República Tcheca e Sérvia.
No diretório nuclei, encontramos o script LegalHackers, chamado _1.sh. Trata-se de um exploit de prova de conceito para o CVE-2017-7692, uma vulnerabilidade que permite execução remota de código pós-autenticação no cliente de webmail SquirrelMail. Ao analisar o diretório .bash_history, descobrimos que um script com nome semelhante havia sido executado contra um alvo de webmail na Sérvia. Isso leva à hipótese de que o grupo obteve as credenciais da vítima sérvia e pode ter utilizado essa vulnerabilidade como parte do acesso inicial.
Conjunto de ferramentas
Neste post, analisamos em detalhes as novas adições ao arsenal do Webworm. Primeiro, seus dois backdoors personalizados: EchoCreep e GraphWorm. Em seguida, as soluções de proxy customizadas que o grupo implementou em suas campanhas de 2025: WormFrp, ChainWorm, SmuxProxy e WormSocket.
EchoCreep
O EchoCreep é um novo backdoor, escrito em Go, que utiliza o Discord como servidor de C&C, com mensagens que remontam a 21 de março de 2024. Ele é capaz de executar os comandos mostrados na Tabela 1.
Tabela 1. Comandos do EchoCreep.
| Command | Arguments | Description |
| upload | File path | Uploads a file, as an attachment, to Discord from the specified file system path. |
| download | Source (URL) and destination (path) | Downloads a file from the provided source URL to the file system path destination. |
| shell | String | Executes the string within a cmd.exe shell. |
| sleep | Integer (seconds) | Sleeps for the specified number of seconds before providing a success report back to the Discord server. |
Embora não tenhamos conseguido confirmar como o backdoor chegou à máquina da vítima, parece que a persistência só foi estabelecida após o comprometimento por meio de comandos de C&C.
Toda a comunicação de rede do EchoCreep é direcionada por endpoints da API do Discord, por meio de requisições HTTP cuidadosamente estruturadas. Para processar os comandos, o backdoor primeiro precisa decodificá-los usando Base64 e, em seguida, descriptografá-los utilizando AES-CBC-128. A Figura 4 mostra um exemplo de um comando e uma resposta após ambos terem sido descriptografados.
{"guild": "lol", "channel_id": 1220298277849796651, "channel": "fire", "content": "shell whoami", "time": "2025-04-14T08:35:41.751000+00:00", "author_id": 1219910976007045171, "author": "jonson889912"}
Figura 4. Comando e resposta do EchoCreep.
Das 433 mensagens do Discord que conseguimos decifrar, não foi possível identificar exatamente quem foram as vítimas, já que não são clientes da ESET. No entanto, ao menos conseguimos determinar a quantidade de vítimas comprometidas pelo EchoCreep com base nos nomes dos canais. Descobrimos que esses nomes correspondiam ao endereço IP da vítima ou a uma combinação do endereço IP com o nome de host da máquina da vítima. Ao identificar quatro canais únicos com essa convenção de nomenclatura, acreditamos que há quatro vítimas.
Após a primeira execução do EchoCreep, ele não tenta criar um novo canal, mas sim envia uma mensagem indicando “Up Success” para um canal que já existe (ver Figuras 5 e 6). Isso indica que os canais foram criados antes da execução do backdoor, o que sugere que os operadores já conheciam os alvos ou que exfiltraram as informações necessárias após o acesso inicial.
As primeiras mensagens, enviadas entre 21 de março de 2024 e 31 de março de 2025, parecem ter sido comandos de teste do grupo cibercriminoso. A Figura 7 mostra que os cibercriminosos deixaram algumas informações sobre suas configurações de IP local.
Ethernet adapter Ethernet0:
Connection-specific DNS Suffix . : lan
Link-local IPv6 Address . . . . . : fe80::2111:d79b:b1ba:1f4a%10
IPv4 Address. . . . . . . . . . . : 192.168.8.174
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.8.1
Figura 7. Saída do ipconfig no Windows.
Muitas das outras mensagens iniciais continham valores lixo (garbage data), possivelmente usados como teste para validar a comunicação, como observado na Figura 8.
Pouco tempo depois, começamos a observar operações de download, como as da Figura 9, mostrando a evolução para comandos mais avançados.
Além disso, na Figura 10 vemos atividades de teste que podem ter sido adaptações iniciais do mecanismo de persistência que o Webworm utilizaria posteriormente contra as vítimas. Outro ponto interessante é que o comando run é executado em vez do comando shell, que foi utilizado posteriormente, o que reforça nossa conclusão de que se tratava de testes iniciais.
A primeira intrusão efetiva ocorreu em 9 de abril de 2025, quando surgiram novas mensagens “Up Success” nos registros associados a um novo nome de canal. Pouco depois do comprometimento inicial, o agente de ameaça utilizou comandos shell para executar o curl e baixar arquivos.
GraphWorm
O GraphWorm é outro novo backdoor utilizado pelo Webworm. Ele é executado toda vez que a vítima faz login na máquina. O GraphWorm utiliza a API do Microsoft Graph para comunicação de C&C, o que indica que o Webworm conta com uma nova infraestrutura para comprometer vítimas, armazenando informações dentro de um tenant do Microsoft Graph. De acordo com o observado, o backdoor utiliza exclusivamente o OneDrive para receber comandos e enviar dados da vítima. Os dados envolvidos nessas comunicações são primeiro criptografados com AES-256-CBC usando chamadas da biblioteca OpenSSL EVP e depois codificados em Base64. O GraphWorm também permite configurar ajustes de proxy, possibilitando o tunelamento de todo o tráfego através do proxy especificado.
Em sua primeira execução, o backdoor cria um ID único da vítima concatenando o IP do adaptador de rede, o ID do processador e o número de série de um dispositivo físico por meio do framework WMI.
Esse ID único é utilizado no processo para renomear ou criar uma nova pasta no OneDrive dentro do tenant. Cada pasta é única para cada comprometimento e contém subpastas específicas para cada vítima. As três subpastas /files, /result e /job são usadas para armazenar arquivos, resultados dos comandos executados na máquina da vítima e tarefas enfileiradas pelos operadores para execução, respectivamente.
Uma vez que a pasta é criada corretamente, o backdoor coleta informações sobre a máquina da vítima, resultando no objeto JSON mostrado na Figura 11.
{
"Host Name": "<computer_name>",
"IP Address": "<ip>",
"MAC Address": "<mac>",
"Operating System": "<os>",
"Privilege": "<Admin|Regular User>",
"Time Zone": "<UTC-XXXX>",
"User Name": "<username>",
"Workgroup": "<workgroup",
"publicKey": "<key>"
}
Figura 11. Estrutura da configuração.
Os comandos que o GraphWorm recebe via OneDrive estão descritos na Tabela 2, em ordem de descoberta.
Tabela 2. Comandos do GraphWorm.
| Command | Arguments | Description |
| keyExchange | String <adminPublicKey> | This value is set in memory and unfortunately its purpose is not easily identifiable. It could be used to set a public key within the application to gain reverse shell access. |
| sessionKey | String <sessionKey> String <keyId> | Another set of values set within memory and not evident how they are used. Believed to be an RSA private key and AES key to be updated in memory and used for cryptographic functions. |
| kill | N/A | Stops the execution of the backdoor. |
| shell | N/A | Spawns a new instance of cmd.exe. |
| exec | File path | Executes a new process using CreateProcessW. |
| upload | String <onedrive_path> String <agent_path> | Downloads a file based on the OneDrive and agent path. The <onedrive_path> is believed to be the full path as it appears in OneDrive, resulting in the format of /me/drive/root:/<onedrive_path>, and <agent_path> is the full file path as it appears on disk. |
| sleep | Integer | Updates sleep duration. |
| poll | Integer | Updates sleep duration for an undetermined reason. Possibly because the development of commands is still ongoing. |
| rest | Integer | Sleep for a duration of time. |
| upgrade | JSON text | The JSON text contains configuration settings to update fields in memory, followed by writing of these changes to the config.dat file on disk. |
| download | String <onedrive_path> String <file_path> | Uploads the file from the provided <file_path> to the path desired in OneDrive. <onedrive_path> is believed to be in the format of /me/drive/root:/<uniqueid>/<filename>/:content. |
| heartbeat | Integer <min> Integer <max> | Used to create a random delay period between the min and max of how long to wait to update alive.txt. |
Durante nossa pesquisa, observamos que, após a execução do comando shell, os resultados eram gravados em um arquivo chamado beacon_shell_output.txt e armazenados em um diretório temporário. Para o envio desses resultados de comandos shell de grande volume, é muito provável que os operadores tenham utilizado o endpoint da API do Microsoft Graph /createUploadSession, já que o backdoor opera sobre uma instância em nuvem do OneDrive.
WormFrp
O WormFrp é uma ferramenta de tunelamento proxy inspirada no utilitário já existente fast reverse proxy (frp), também utilizado pelo Webworm. Os cibercriminosos expandiram o frp com funcionalidades personalizadas para que a ferramenta possa obter seus valores de configuração a partir de um bucket comprometido da Amazon S3, wamanharipethe.s3.ap-south-1.amazonaws[.]com.
O bucket S3 comprometido contém vários arquivos com extensão .txt criptografados com AES no modo ECB. Cada instância do WormFrp possui uma chave AES única codificada diretamente no binário e obtém um arquivo exclusivo a partir do bucket S3. O arquivo de configuração é atualizado durante a execução do WormFrp para enviar informações de volta ao operador, permitindo identificar de onde o túnel está sendo estabelecido.
O WormFrp requer um argumento de linha de comando para ser executado. Após obter sua configuração a partir do bucket S3, o WormFrp tenta autenticar-se em um servidor frp, abrindo um proxy reverso e um proxy TCP SOCKS5. De acordo com as amostras observadas, o nome de usuário e a senha são sempre gerados aleatoriamente.
Cada instância do WormFrp se conecta a um servidor frp por meio de um endereço IP público. Também é possível observar atividade adicional de rede na máquina da vítima depois que o proxy reverso é configurado.
ChainWorm
O ChainWorm é outra ferramenta proxy personalizada utilizada pelos operadores do Webworm. A principal função do ChainWorm parece ser ajudar a expandir a infraestrutura de rede de proxies do Webworm, abrindo uma porta na máquina onde é implantado. O Webworm pode usar essa ferramenta para encadear proxies, permitindo que dados especialmente elaborados sejam enviados através da porta, conectando-se a outro sistema remoto e encaminhando o tráfego para o próximo destino por meio de um número indeterminado de salt.
Normalmente, a porta aberta no host comprometido é codificada diretamente na ferramenta. Em seguida, conexões TCP são abertas nessa porta para receber qualquer transmissão que resulte em conexões de saída adicionais para um endereço IP ou hostname, juntamente com sua respectiva porta.
Utilizando a combinação de hostname e porta, é estabelecida uma conexão com o próximo salto da cadeia. Uma vez que as conexões entre origem e destino são estabelecidas, qualquer dado transmitido é encaminhado para o próximo salto ascendente da cadeia. Caso ocorra alguma exceção em qualquer momento do processo, a origem é notificada com a sequência de bytes 0x05 01 00 01 00 00 00 00 00 00 00 00 antes de uma nova tentativa de reconexão.
SmuxProxy
O SmuxProxy é um utilitário baseado no iox, uma ferramenta de port forwarding e proxy para intranet. Sobre a funcionalidade já existente do iox, o SmuxProxy incorpora pequenas personalizações que permitem definir de forma fixa um endereço IP e uma porta de servidor, facilitando sua implantação e execução pelos operadores. Ele também pode gerar uma chave aleatória e um vetor de inicialização para comunicações criptografadas.
WormSocket
O último dos novos proxies personalizados do Webworm é o WormSocket, uma ferramenta que utiliza servidores configurados com socket.io para estabelecer um proxy para requisições web. O WormSocket permite criar uma rede de proxies altamente configurável e escalável, possibilitando interagir com nós específicos a qualquer momento.
Sua configuração é baseada tanto em valores codificados diretamente no binário quanto em argumentos de linha de comando. O WormSocket aceita um argumento opcional de linha de comando --proxy, seguido de uma URI contendo autenticação básica, utilizada como configuração para criar um objeto WebProxy. Esse proxy é utilizado sobre uma conexão com um web socket. As configurações desse web socket são codificadas diretamente no WormSocket.
Assim que o WormSocket é iniciado, ele primeiro se conecta ao endereço IP e à porta configurados, tentando conexões por meio dos esquemas ws, wss, http e https. Depois que uma conexão bem-sucedida é estabelecida, é criada uma tarefa assíncrona para receber e enviar novas mensagens. Existem quatro tipos possíveis de mensagens, descritos em detalhes na Tabela 3.
| Type | Message class | Values | Description |
| 1 | InitiateForwarderClientReq | String <ForwardedClientId> | Uses the IpAddress field to perform a DNS lookup to obtain the host address of a possible domain passed through, the result of which is used to create a new TCP client with the Port. Once the client establishes connectivity, it is stored within a dictionary of ForwardedClientId and TcpClient pairs. In addition, a new InitiateForwarderClientRep message object is created with the same information used to build the TCP client, and sent with the messages read through the client and stored in a ConcurrentQueue for later use. |
| String <IpAddress> | |||
| Integer <Port> | |||
| 2 | InitiateForwarderClientRep | String <ForwarderClientId> | ForwarderClientId is used to look up an already configured TCP client created by InitiateForwarderClientReq in the client dictionary, all other values appear to not be in use. Once the TCP client is retrieved, new messages are read and stored in a ConcurrentQueue for later use. |
| String <BindAddress> | |||
| Integer <BindPort> | |||
| Integer <AddressType> | |||
| Integer <Reason> | |||
| 3 | SendDataMessage | String <ForwarderClientId> | Sends the Data through base64 encoding followed by the TCP client associated with ForwarderClientId. |
| Bytes[] <Data> | |||
| 4 | CheckInMessage | String <MessengerId> | Assigns MessengerId to the internal MessengerId, which does not appear to be used for anything. |
Conclusão
O Webworm é um grupo APT alinhado à China e ativo pelo menos desde 2022. Ele utiliza um conjunto de ferramentas em constante evolução, composto principalmente por backdoors e por uma combinação de utilitários proxy de código aberto e personalizados. Nas campanhas de 2025 que observamos, o Webworm passou a utilizar backdoors baseados no Discord (EchoCreep) e na API do Microsoft Graph (GraphWorm). O grupo também continua realizando staging de arquivos em repositórios do GitHub, e tudo indica que continuará adotando essa prática no futuro.
Por meio da nossa análise, tivemos a oportunidade de recuperar comandos executados a partir de um servidor, o que nos forneceu uma visão das possíveis técnicas de acesso inicial utilizadas pelo grupo, incluindo o uso de um scanner de vulnerabilidades de código aberto, além de permitir a identificação de alguns de seus alvos.
Fica claro que o Webworm é um grupo APT bastante ativo e que continuará buscando novas ferramentas para comprometer suas vítimas, seja durante o acesso inicial ou em etapas posteriores ao comprometimento.
Indicadores de Comprometimento
Você pode encontrar uma lista completa de indicadores de comprometimento (IoCs) e amostras em nosso repositório no GitHub.
Arquivos
| SHA-1 | Filename | Detection | Description |
| CB4E5043333670738142 |
SearchApp.exe | WinGo/Agent.ZK | EchoCreep backdoor using Discord for C&C. |
| 1DF40A4A31B30B62EC33 |
ssh.exe | WinGo/HackTool. |
WormFrp proxy tool. |
| 7DCFE9EE25841DFD58D3 |
svc.exe | MSIL/HackTool. |
WormHole proxy tool. |
| 77F1970D620216C5FFF4 |
C2OverOneDrive_v |
Win32/Agent.VWD | GraphWorm backdoor using the Microsoft Graph API for C&C. |
| 948159A7FC2E68838686 |
MessengerClient. |
MSIL/HackTool.P |
WormSocket proxy tool. |
| A3C077BDF8898E612CCD |
dsocks.exe | WinGo/Riskware. |
SmuxProxy, a custom iox with hardcoded IP. |
Rede
| IP | Domain | Hosting provider | First seen | Details |
| N/A | wamanharipethe. |
N/A | 2025-04-14 | Compromised S3 for frp configurations and data exfiltration. |
| 45.77.13[.]67 | N/A | Vultr Holdings, LLC | 2025-04-07 | WormSocket web socket server. |
| 64.176.85[.]158 | N/A | The Constant Company, LLC | 2025-06-28 | SmuxProxy server. |
| 104.243.23[.]43 | N/A | IT7 Networks Inc | 2025-04-09 | SmuxProxy server. |
| 108.61.200[.]151 | N/A | Vultr Holdings, LLC | 2025-04-10 | WormFrp proxy server. |
| 144.168.60[.]233 | N/A | IT7 Networks Inc | 2025-06-30 | Reverse shell IP discovered on SmuxProxy server. |
Técnicas MITRE ATT&CK
Esta tabela foi elaborada utilizando a versão 19 do framework MITRE ATT&CK.
| Tactic | ID | Name | Description |
| Reconnaissance | T1595.002 | Active Scanning: Vulnerability Scanning | Webworm utilized the open-source vulnerability scanner nuclei against targets. |
| T1595.003 | Active Scanning: Wordlist Scanning | Webworm used dirsearch, which leverages wordlists, to perform web directory scanning on targets. | |
| Resource Development | T1588.006 | Obtain Capabilities: Vulnerabilities | Webworm used publicly available exploit code for post-authentication remote code execution. |
| T1583.004 | Acquire Infrastructure: Server | Servers for WormFrp, SmuxProxy, and WormSocket are hosted on cloud services operated on Vultr and IT7 Network ASNs. | |
| T1583.003 | Acquire Infrastructure: Virtual Private Server | Webworm makes use of SoftEther VPN servers that have been seen hosted on Vultr cloud services. | |
| T1584.006 | Compromise Infrastructure: Web Services | Webworm has been seen compromising S3 buckets as well as using tools like nuclei to find footholds. | |
| T1608.002 | Stage Capabilities: Upload Tool | Webworm staged tools in its GitHub repo for direct download onto compromised systems. | |
| Execution | T1059.003 | Command and Scripting Interpreter: Windows Command Shell | EchoCreep and GraphWorm both use the Windows command line to execute operator commands. |
| T1053.005 | Scheduled Task/Job: Scheduled Task | EchoCreep is executed under the custom-created MicrosoftSSHUpdate scheduled task. | |
| Persistence | T1547.001 | Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder | GraphWorm persists by making updates to registry Run keys. |
| Defense Impairment | T1070.004 | Indicator Removal: File Deletion | GraphWorm cleans up a created beacon file after successful upload. |
| T1112 | Modify Registry | GraphWorm makes modifications to registry Run keys for persistence. | |
| T1027.013 | Obfuscated Files or Information: Encrypted/Encoded File | GraphWorm and EchoCreep use encryption and encoding techniques to obfuscate data. | |
| T1550.001 | Use Alternate Authentication Material: Application Access Token | GraphWorm and EchoCreep use API keys to communicate with the C&C infrastructure. | |
| T1078.004 | Valid Accounts: Cloud Accounts | GraphWorm uses a valid cloud account to access Microsoft Graph APIs. | |
| T1070.006 | Indicator Removal: Timestomp | EchoCreep contains a modified timestamp attribute. | |
| Lateral Movement | T1021.007 | Remote Services: Cloud Services | Webworm makes use of a compromised S3 bucket to use as a file staging zone. |
| Collection | T1005 | Data from Local System | Both EchoCreep and GraphWorm can collect data from the local system. |
| T1074.001 | Data Staged: Local Data Staging | GraphWorm stages a beacon file locally before uploading to the C&C. | |
| T1074.002 | Data Staged: Remote Data Staging | GraphWorm stages files and tasks within OneDrive via the Microsoft Graph API. | |
| Command and Control | T1071.001 | Application Layer Protocol: Web Protocols | EchoCreep, GraphWorm, and WormSocket make use of HTTP and the WebSocket protocol. |
| T1132.001 | Data Encoding: Standard Encoding | EchoCreep, GraphWorm, and WormSocket make use of base64 encoding. | |
| T1573.002 | Encrypted Channel: Asymmetric Cryptography | EchoCreep, GraphWorm, WormSocket, and WormFrp use AES in some capacity. | |
| T1090.003 | Proxy: Multi-hop Proxy | WormSocket and ChainWorm create multiple proxy hops. | |
| T1090.002 | Proxy: External Proxy | WormFrp, ChainWorm, WormSocket, SmuxProxy, and GraphWorm have the capability to connect to external proxies. | |
| T1090.001 | Proxy: Internal Proxy | ChainWorm and WormSocket can create internal proxies. | |
| T1102.002 | Web Service: Bidirectional Communication | EchoCreep and GraphWorm use Discord and the Microsoft Graph API for C&C infrastructure. | |
| Exfiltration | T1041 | Exfiltration Over C2 Channel | EchoCreep and GraphWorm exfiltrate data to their respective C&C infrastructures. |
| T1567.002 | Exfiltration Over Web Service: Exfiltration to Cloud Storage | GraphWorm exfiltrates data to OneDrive via the Microsoft Graph API. |




