Uma nova campanha maliciosa resultou na publicação de quase 800 pacotes no registro npm, utilizados para distribuir malware multiplataforma capaz de comprometer sistemas Windows, macOS e Linux.
De acordo com o pesquisador Paul McCarty, da OpenSourceMalware, muitos desses pacotes utilizam nomes aparentemente gerados por inteligência artificial ou variações aleatórias de nomes legítimos, estratégia semelhante ao typosquatting. Apesar das diferenças nos nomes, os pacotes possuem o mesmo objetivo: entregar um poderoso Remote Access Trojan (RAT) acompanhado de funcionalidades de roubo de informações.
Diferentemente de outras campanhas de ataques à cadeia de suprimentos de software envolvendo o npm, nas quais os invasores normalmente utilizam hooks como preinstall ou postinstall para executar código automaticamente durante a instalação, os pacotes identificados nesta campanha adotam outra abordagem.
Os arquivos README dos pacotes instruem os desenvolvedores a carregá-los por meio da função require(), recurso nativo do Node.js utilizado para importar módulos, arquivos locais e bibliotecas de terceiros.
WEL1DROPPER identifica o sistema da vítima
Quando o pacote malicioso é carregado, ocorre a execução de um downloader identificado como WEL1DROPPER.
O malware inicialmente identifica o sistema operacional e a arquitetura do processador da máquina comprometida. A partir dessas informações, tenta baixar um payload compatível utilizando três servidores hospedados na infraestrutura do Cloudflare Workers:
oob-worker.cf103-070.workers[.]devoob-worker.cf102-baf.workers[.]devoob-worker.cf99-9b3.workers[.]dev
Caso o download por HTTPS não seja bem-sucedido, o malware utiliza um mecanismo alternativo baseado em consultas DNS.
Nesse cenário, registros DNS TXT são utilizados para transferir os dados necessários para a próxima etapa da infecção, utilizando a infraestrutura associada ao domínio wel1[.]ru.
Os domínios utilizados variam de acordo com o sistema operacional e a arquitetura da máquina:
- Linux x64:
sdk.dl.wel1[.]ru - Linux ARM64:
ext.dl.wel1[.]ru - macOS:
pkg.dl.wel1[.]ru - Windows:
net.dl.wel1[.]ru
Segundo McCarty, o malware começa realizando uma consulta a um registro TXT localizado em c.<domínio>. A resposta informa quantas partes compõem o payload, podendo variar entre 1 e 2.000 segmentos.
Em seguida, novas consultas DNS são realizadas para recuperar cada parte individualmente. Os dados retornados são posteriormente unidos e decodificados de Base64, reconstruindo o arquivo binário malicioso.
Na etapa final, o payload é gravado em um diretório temporário e executado utilizando /bin/sh em sistemas Linux e macOS ou cmd.exe no Windows.
Malware tenta dificultar monitoramento no Windows
A Sonatype também acompanha a campanha, classificando a ameaça como Flooding Dropper.
De acordo com a empresa, após a infecção o estágio final do malware é iniciado como um processo independente.
Na versão destinada ao Windows, o código malicioso executa diferentes técnicas para dificultar sua detecção e análise. Entre elas estão modificações relacionadas ao Event Tracing for Windows (ETW) e ao Antimalware Scan Interface (AMSI), mecanismos utilizados pelo Windows e por soluções de segurança para inspecionar atividades potencialmente maliciosas.
O malware também verifica se está sendo executado em ambientes virtuais ou sandboxes, técnicas normalmente utilizadas por pesquisadores e sistemas automatizados de análise de malware.
Para manter acesso ao equipamento mesmo após uma reinicialização, o malware configura mecanismos de persistência por meio de uma chave Run do Registro do Windows e de uma tarefa agendada.
Depois disso, um novo payload criptografado é baixado utilizando o caminho:
/pkg/update_win.exe
O executável é então iniciado no sistema comprometido.
macOS também é alvo da campanha
O fluxo de infecção identificado no macOS apresenta características semelhantes.
Inicialmente, o malware procura sinais de depuradores, ferramentas de análise e outros artefatos que possam indicar que está sendo executado em um ambiente controlado.
Caso o ambiente seja considerado adequado, o malware tenta baixar um payload específico para macOS:
/pkg/beacon_mac.bin
Se o download convencional falhar, o atacante volta a utilizar o mecanismo alternativo baseado em registros DNS TXT.
Para garantir persistência no macOS, a ameaça utiliza um LaunchAgent, permitindo que o código malicioso seja iniciado novamente no sistema. O executável é posteriormente iniciado como um processo separado.
Linux recebe payload relacionado ao framework Sliver
No Linux, o malware analisado consiste em um executável ELF compactado utilizando UPX.
Esse arquivo realiza o download de novos componentes utilizando uma URL hospedada em Cloudflare Workers:
oob-worker[.]cf99-9b3.workers[.]dev
A cadeia de infecção termina com a implantação do Sliver, um framework open source de comando e controle (C2).
Ferramentas desse tipo podem fornecer diversas capacidades de pós-exploração, permitindo que operadores controlem remotamente máquinas comprometidas e executem comandos adicionais.
Código de telemetria utilizado para esconder comportamento malicioso
Os pesquisadores também identificaram nos pacotes um arquivo chamado:
lib/telemetry.js
À primeira vista, o componente aparenta implementar um SDK legítimo destinado à coleta de métricas e informações de telemetria.
No entanto, o arquivo contém a mesma lógica utilizada pelo downloader malicioso.
Segundo a OpenSourceMalware, o arquivo não é importado diretamente pelo ponto de entrada principal do pacote e também não possui infraestrutura adicional codificada em seu interior.
A implementação extensa de telemetria provavelmente foi adicionada para gerar ruído e fazer com que o comportamento suspeito parecesse uma funcionalidade legítima de analytics ou profiling durante uma análise superficial do código.
Campanha pode ter relação com alvos russos
A análise do payload destinado ao macOS revelou referências a domínios como:
tcsbank[.]rucloudpayments[.]ru
A presença dessas referências pode indicar interesse dos operadores da campanha em instituições financeiras e serviços de pagamentos utilizados na Rússia.
Os pesquisadores também suspeitam que a operação possa representar uma evolução de uma campanha anterior de dependency confusion, identificada como Moika.
Essa atividade havia sido observada anteriormente em abril, quando mais de 250 pacotes foram publicados no npm com o objetivo de coletar informações do ambiente comprometido e distribuir um segundo payload específico para o sistema operacional da vítima.
Outras campanhas maliciosas atingem npm e PyPI
A descoberta ocorre enquanto pesquisadores da Unit 42, da Palo Alto Networks, também acompanham diferentes campanhas envolvendo pacotes maliciosos publicados nos repositórios npm e Python Package Index (PyPI).
Uma das operações identificadas utilizava um conjunto de dez pacotes npm capazes de baixar um malware ofuscado destinado ao roubo de criptomoedas, além de um trojan de acesso remoto.
Após serem instalados, esses pacotes disponibilizavam uma função chamada getPlugin, responsável por construir dinamicamente a URL utilizada para obter o payload malicioso.
O código baixado possuía funcionalidades de crypto stealer e RAT, permitindo aos atacantes executar comandos arbitrários nos sistemas comprometidos.
Outra investigação encontrou diferentes pacotes maliciosos distribuídos simultaneamente entre npm e PyPI e associados a múltiplos grupos de ameaça.
Entre as capacidades observadas estavam:
- roubo de credenciais de ambientes em nuvem;
- distribuição de droppers utilizando C2 baseado em blockchain por meio da técnica EtherHiding;
- roubo de chaves de carteiras Solana utilizando Telegram;
- exfiltração de segredos armazenados em arquivos
.env; - execução remota de código utilizando páginas falsas de CAPTCHA;
- roubo de tokens do Discord;
- comprometimento de credenciais utilizadas em pipelines de CI/CD do GitHub Actions.
Extensões do Chrome também transformam navegadores em proxies
Além das campanhas envolvendo pacotes de software, pesquisadores identificaram extensões do Google Chrome que utilizam os navegadores das vítimas como parte de redes de proxy residencial.
As extensões são divulgadas como ferramentas aparentemente legítimas, incluindo:
- emuladores de jogos;
- gerenciadores de senhas;
- ferramentas de produtividade;
- inspetores de CSS;
- conversores de Markdown.
Depois de instaladas, essas extensões podem receber comandos remotamente através de uma conexão persistente via WebSocket.
De acordo com a Unit 42, as extensões analisadas incorporam o mesmo SDK comercial de compartilhamento de largura de banda, conectando o navegador do usuário a uma rede de proxies residenciais utilizada em operações automatizadas de coleta de informações na web.
Para realizar o crawling das páginas, o SDK injeta um iframe oculto nas abas ativas do navegador.
O conteúdo das páginas é então convertido para Markdown em segundo plano e enviado para uma infraestrutura remota na nuvem.
Os pesquisadores destacam que algumas dessas extensões informam sobre esse comportamento em suas páginas na Chrome Web Store e também em suas respectivas políticas de privacidade.
Após a instalação, o SDK solicita autorização para que o usuário participe do serviço.
Caso o usuário recuse, as funcionalidades de proxy e crawling permanecem desativadas. No entanto, algumas extensões apresentam essa autorização como necessária para que o serviço continue funcionando normalmente.
Um dos exemplos mencionados pelos pesquisadores é a extensão InstaSkip, identificada pelo ID:
mdondgockboebafloibbhjofmoedmnnn
O caso reforça novamente os riscos associados a ataques contra a cadeia de suprimentos de software. Bibliotecas, dependências e extensões aparentemente legítimas podem se tornar um vetor inicial para comprometimento de estações de desenvolvimento, servidores e ambientes corporativos.