"Um ninja sábio não procura um inimigo que ele não entende completamente." - Splinter de Teenage Mutant Ninja Turtles
Desde que encontramos
Entre a última semana de 2022 e o início de 2023, nosso sistema de IA sinalizou pacotes suspeitos carregados no registro PyPI, incluindo pyrologin
, easytimestamp
, discorder
, discord-dev
, style.py
e pythonstyles
. Nossos pesquisadores de segurança olharam para eles e confirmaram que eram realmente maliciosos. E após uma análise mais aprofundada, eles notaram que esses pacotes adicionavam uma série de recursos que não são vistos com frequência no malware Python.
No que se tornou uma estratégia de fato, os agentes mal-intencionados ocultam uma carga útil no arquivo setup[.]py
, de modo que os desenvolvedores só precisam usar uma simples instalação de pip para serem infectados. Nesse caso, eles lançariam inadvertidamente um script do PowerShell que baixa um arquivo ZIP para instalar bibliotecas que permitem ao invasor controlar o mouse e o teclado da vítima, fazer capturas de tela e criar conexões remotas ocultas. Além disso, esses pacotes também exfiltram informações confidenciais como senhas, cookies e dados da carteira de criptomoedas e até tentam instalar uma ferramenta para acesso remoto. Nossos achados estiveram de acordo com
Olhando para trás em nosso banco de dados, em 25 de setembro de 2022, um pacote chamado pygradient
foi carregado no repositório PyPI. Nossa IA o sinalizou como suspeito e nossos pesquisadores de segurança confirmaram que continha malware e que agrupava as fontes de outro pacote chamado pystyle
. Ambas as bibliotecas são de autoria de
Originalmente, o pystyle
não tinha uma natureza maliciosa - um pacote inofensivo para estilizar e colorir a saída do console para melhorar a legibilidade e a experiência do usuário. Mas, de acordo com a pesquisa da Phylum, uma vez que se tornou popular (o pacote ainda está ativo no PyPI e acumula mais de 40.000 downloads todos os meses), eles decidiram adicionar o malware W4SP em alguns lançamentos.
Pacotes de código aberto como pystyle
podem atuar como agentes adormecidos por meses, apenas para serem ativados posteriormente por seu próprio autor para fins maliciosos. Uma jogada arriscada, já que seu pacote popular pode ser descoberto por pesquisadores de segurança como nós, que o denunciarão como malicioso e o removerão para sempre. É por isso que eles geralmente criam novos pacotes onde incluem o código-fonte de uma biblioteca inócua, adicionam algum tipo de carga maliciosa e a carregam com um novo nome: algo genérico, de aparência benigna e aparência inocente. Um nome como pygradient
.
Mas então analisamos os pacotes carregados no início de novembro, incluindo paintpy
, devicespoof
e devicespoofer
, e depois de nos aprofundarmos, encontramos a confirmação de nossa suspeita: o malware estava realmente evoluindo.
Embora BillyTheGoat não esteja ativo no GitHub desde novembro, ainda encontramos malware baseado em suas criações ou roubados diretamente deles, principalmente por um usuário que aparentemente mora em Portugal chamado
Este usuário carregou um pacote recentemente removido no PyPI chamado pystilez
, falsamente creditado a BillyTheGoat no que parecia
Checkmarxapicolor
(junto com variações com nomes semelhantes) que incluía um link de servidor Discord em seu código malicioso. O perfil do administrador vinculado a uma conta Steam verificada e o nome “zeeckt” apareceu como um dos apelidos do Steam do invasor.
Carlos recentemente encontrou mais quatro pacotes porforenitq
, forenith
, forenity
e forenitz
. Após uma investigação mais aprofundada, ele os marcou como maliciosos e os denunciou ao PyPI para serem removidos. O caso mais rápido levou cerca de 20 minutos desde a publicação até a exclusão.
Olhando para setup[.]py
em forenitq
, Carlos encontrou o seguinte payload de primeiro estágio:
O invasor cria três arquivos temporários que baixam e executam binários do Windows a partir de URLs específicos usando o comando "start". Mesmo que os slugs /rat
e /clip
sejam sugestivos de intenção maliciosa, não poderíamos confirmar essa suposição sem olhar sob o capô.
No momento da redação deste artigo, a página hospedada em hxxp://20[.]226[.]18[.]203
ainda está ativa e mostra apenas um link para um convite do Discord que já expirou ou é privado.
Carlos notou que a embalagem estava se passando por popular
Após a decodificação, obtemos um código Python projetado para sequestrar a área de transferência da vítima para substituir o endereço pretendido da carteira de criptomoedas pelo endereço do invasor:
Ele procura padrões específicos como bitcoin (bc1), Ethereum (0x), Monero (4) e l itecoin (L ou M ou 3) e, quando um padrão é encontrado, substitui o endereço pretendido pelo endereço da carteira de criptomoeda do invasor .
O código usa o
Além disso, descobrimos mais técnicas que esse mutante RAT usa para evitar a detecção: uma carga útil de primeiro estágio adicionada ao arquivo forenitq/ansi[.]py
em vez de setup[.]py
e uma carga útil polimórfica de segundo estágio que muda toda vez que você executa o binário.
O atacante também adicionou um novo comando e controle com um menu de ajuda bem completo — e desta vez se fala português:
hxxp://20[.]226[.]18[.]203/inject/tCxFLYLT6ViY9ZnP
hxxp://20[.]226[.]18[.]203/clip
hxxp://20[.]226[.]18[.]203/rat