A ESET Research descobriu um conjunto de projetos Python maliciosos sendo distribuídos em PyPI, o repositório oficial de pacotes Python. A ameaça tem como alvo sistemas Windows e Linux e geralmente oferece um backdoor personalizado. Em alguns casos, a carga final é uma variante do infame Ladrão W4SP, ou um simples monitor de área de transferência para roubar criptomoedas, ou ambos. Em maio de 2023, nós relatado em outro cluster de pacotes que encontramos no PyPI que fornece malware para roubo de senhas e criptomoedas, mas os dois clusters parecem ser campanhas diferentes.
Pontos-chave deste blogpost:
- A ESET Research descobriu 116 pacotes maliciosos no PyPI, o repositório oficial de software para a linguagem de programação Python, carregados em 53 projetos.
- As vítimas baixaram esses pacotes mais de 10,000 vezes.
- Desde maio de 2023, a taxa de download é de mais ou menos 80 por dia.
- O malware oferece um backdoor capaz de execução remota de comandos, exfiltração e captura de tela.
- O componente backdoor é implementado tanto para Windows, em Python, quanto para Linux, em Go.
- Em alguns casos, o W4SP Stealer ou um monitor de área de transferência que rouba criptomoedas, ou ambos, são entregues.
PyPI é popular entre os programadores Python para compartilhar e baixar código. Como qualquer pessoa pode contribuir para o repositório, malware – às vezes se passando por bibliotecas de códigos legítimas e populares – pode aparecer lá. Encontramos 116 arquivos (distribuições de origem e rodas) de 53 projetos contendo malware. Alguns nomes de pacotes são semelhantes a outros pacotes legítimos, mas acreditamos que a principal forma como eles são instalados por vítimas em potencial não é por meio de typosquatting, mas por engenharia social, onde as vítimas são orientadas executando pip install {nome do pacote} para poder usar o pacote “interessante” por qualquer motivo.
Durante o ano passado, as vítimas baixaram esses arquivos mais de 10,000 mil vezes; veja a Figura 1.
Infestando PyPI
Os pacotes PyPI podem assumir duas formas: pacotes fonte, que contêm todo o código-fonte do projeto e são construídos após a instalação, e pacotes pré-construídos (chamados rodas), que pode conter módulos compilados para um sistema operacional específico ou versão Python. Curiosamente, em alguns casos, o código Python na distribuição fonte difere da distribuição construída. O primeiro está limpo, enquanto o último contém o código malicioso. Gerenciador de pacotes do Python, pip, prefere uma roda quando está disponível, em vez de uma distribuição de origem. Como resultado, o malicioso é instalado, a menos que seja explicitamente solicitado de outra forma.
Observamos os operadores por trás desta campanha usando três técnicas para agrupar código malicioso em pacotes Python.
Módulo test.py malicioso
A primeira técnica é colocar um módulo de “teste” com código levemente ofuscado dentro do pacote. A Figura 2 mostra um teste.py arquivo com uma função chamada pegajoso sendo definido e então chamado. Observe que a função lida com sistemas Windows e Linux.
Este módulo de teste é importado no meio do código-fonte do módulo principal do pacote (__init__.py), para que o código malicioso seja executado sempre que o pacote for importado. A Figura 3 mostra um módulo que se disfarça como um screenshotter e importa o arquivo malicioso teste.py.
PowerShell em setup.py
A segunda técnica é incorporar o código do PowerShell no setup.py arquivo, que normalmente é executado automaticamente por gerenciadores de pacotes, como pip para ajudar a instalar projetos Python.
A Figura 4 mostra um script do PowerShell que baixa e executa o próximo estágio.
Este script do PowerShell é baixado transferir[.]sh/eyRyPT/Updater.zip em um diretório temporário como update.zip. O script então descompacta o arquivo ZIP em C: ProgramData e o exclui do diretório temporário. Em seguida, o script executa o pip programa para instalar dependências. Finalmente, ele executa o código Python em C:ProgramDataUpdaterserver.pyw.
Esta técnica só funciona no Windows e não infestará os sistemas Linux.
Nos metadados do pacote da Figura 4, você deve ter notado que o autor do pacote é Billythegoat356. Houve vários relatos associando esse apelido a atividades maliciosas, incluindo um artigo do Filo, onde eles revelam a ligação potencial de Billy com o W4SP Stealer.
Apenas malware…
Na terceira técnica, os operadores não fazem nenhum esforço para incluir código legítimo no pacote, de forma que apenas o código malicioso esteja presente, de forma levemente ofuscada. A Figura 5 mostra dois trechos de código malicioso para Windows sendo gravados em arquivos temporários e executados com pythonw.exe, que é usado em vez de python.exe para que o código seja executado sem abrir uma janela do console.
Os próximos estágios são pacotes Python, scripts ou arquivos binários baixados do Dropbox ou transferência.sh.
Persistência
No Windows, a persistência é alcançada na maioria das vezes através de um Codificado em VBScript (VBE), que é um arquivo VBScript codificado, gravado em %APPDATA%/Pythonenv/pythenenv.vbe. A Figura 6 mostra cmd.exe escondendo o diretório %APPDATA%/Pythonenv, corrida pythenenv.vbee, em seguida, agendar o arquivo VBE para ser executado a cada cinco minutos na tarefa MicrosoftWinRaRUtilityTaskB.
No Linux, a persistência é obtida colocando um arquivo malicioso entrada na área de trabalho, mate-user-share.desktop, Na ~ / .config / autostart / diretório, como visto na Figura 7. Arquivos localizados no começo automático diretório são executados em cada inicialização do sistema. A entrada da área de trabalho usa o nome de um COMPANHEIRO subprojeto pelo nome do arquivo, mas é apenas para reduzir suspeitas, porque não tem nada a ver com o ambiente de área de trabalho.
A Figura 7 também mostra os downloads do módulo dl.dropbox[.]com/s/u3yn2g7rewly4nc/proclean para ~/.config/.kde/.kdepath. Este é provavelmente um esforço para representar um diretório de configuração para o KDE GUI do Plasma para Linux.
Lançando o mate-user-share.desktop arquivo, por sua vez, executa o baixado .kdepath arquivo, que é o arquivo executável do Linux que contém o componente backdoor.
Carga útil final
Normalmente, a carga final é um backdoor personalizado que permite a execução remota de comandos, exfiltração de arquivos e, às vezes, inclui a capacidade de fazer capturas de tela. No Windows, o backdoor é implementado em Python.
A Figura 8 mostra o backdoor criando uma conexão de soquete TCP para blazywound.ignorelist[.]com na porta 6001. Depois de enviar o nome do host, endereço MAC e nome de usuário para o servidor C&C, o backdoor manipulará diretamente alguns comandos ou executará qualquer outro comando em um processo separado e enviará de volta a saída do comando e quaisquer informações de erro ao servidor.
No Linux, o backdoor é implementado em Go; veja a Figura 9.
Em alguns casos, em vez do backdoor, a carga útil é uma variante do infame Ladrão W4SP, ou um simples monitor de área de transferência que rouba criptomoedas, ou ambos. A Figura 10 mostra um monitor de área de transferência direcionado às criptomoedas Bitcoin, Ethereum, Monero e Litecoin. O malware usa o legítimo clipe de pipe pacote para verificar o conteúdo da área de transferência em busca de endereços de carteira. Se for encontrado, o malware copia um endereço controlado pelo invasor para a área de transferência, na esperança de que a vítima cole esse endereço em uma futura transação de criptomoeda.
Os produtos ESET detectam os pacotes Python maliciosos como variantes de Python/Agent e Python/TrojanDownloader, e o backdoor como Python/Agent.AOY ou Linux/Spy.Agent.BB.
A maioria dos pacotes já foi retirada do ar pelo PyPI no momento desta pesquisa. A ESET comunicou-se com o PyPI para tomar medidas contra os restantes e todos os pacotes maliciosos conhecidos estão agora offline. A lista completa de 116 pacotes pode ser encontrada em nosso Repositório GitHub.
É importante notar que o malware em um repositório de projeto PyPI não é um problema de segurança para o próprio PyPI. Na verdade, o software que executa o PyPI era recentemente auditado por uma empresa externa que avaliou que o PyPl “estava em conformidade com as melhores práticas amplamente aceitas”.
Conclusão
O PyPI continua a ser abusado por ciberataques para comprometer os dispositivos dos programadores Python. Esta campanha exibe uma variedade de técnicas usadas para incluir malware em pacotes Python. Os desenvolvedores Python devem examinar minuciosamente o código que baixam, especialmente verificando essas técnicas, antes instalando-o em seus sistemas. Além de continuarem a abusar do W4SP Stealer de código aberto, os operadores também implantaram um backdoor simples, mas eficaz. Esperamos que tal abuso do PyPI continue e aconselhamos cautela ao instalar código de qualquer repositório de software público.
Para quaisquer dúvidas sobre nossa pesquisa publicada no WeLiveSecurity, entre em contato conosco em ameaçaintel@eset.com.
A ESET Research oferece relatórios privados de inteligência APT e feeds de dados. Para qualquer esclarecimento sobre este serviço, visite o Inteligência de ameaças ESET Disputas de Comerciais.
IoCs
Arquivos
SHA-1 |
Nome do arquivo |
Detecção |
Descrição |
439A5F553E4EE15EDCA1CFB77B96B02C77C5C388 |
cache.py |
Python/Agente.AGL |
Downloader backdoor do Linux.. |
B94E493579CC1B7864C70FAFB43E15D2ED14A16B |
coloramma-0.5.4-py3-none-any.whl |
Python/Agente.AGU |
Pacote com instalador backdoor do Linux. |
AE3072A72F8C54596DCBCDE9CFE74A4146A4EF52 |
coloramma-4.5-py3-none-any.zip |
Python/Agente.AOY |
Pacote com backdoor do Windows. |
70C271F79837B8CC42BD456A22EC51D1261ED0CA |
lixo.py |
Python/Agente.AGM |
Instalador de persistência do Windows. |
B0C8D6BEEE80813C8181F3038E42ADACC3848E68 |
prolimpar |
Linux/Agente.Espião.BB |
Porta dos fundos do Linux. |
07204BA8D39B20F5FCDB9C0242B112FADFFA1BB4 |
prov.py |
Python/Agente.AGL |
Downloader backdoor do Linux. |
EF59C159D3FD668C3963E5ADE3C726B8771E6F54 |
tmp |
Linux/Agente.Espião.BB |
Porta dos fundos do Linux. |
Para obter uma lista completa de pacotes maliciosos, consulte nosso GitHub repositório malware-ioc.
Network
Nome do domínio |
Endereço IP |
Visto pela primeira vez |
Descrição |
blazywound.ignorelist[.]com |
204.152.203[.]78 |
2022-11-21 |
Servidor C&C para componente backdoor. |
Técnicas MITER ATT e CK
Esta tabela foi construída usando versão 14 da estrutura MITER ATT & CK.
Tática |
ID |
Nome |
Descrição |
Acesso Inicial |
Compromisso da cadeia de suprimentos: comprometer dependências de software e ferramentas de desenvolvimento |
O malware é distribuído usando o serviço de gerenciamento de pacotes PyPl do Python. |
|
Persistência |
Tarefa/Trabalho Agendado: Tarefa Agendada |
No Windows, a persistência é obtida por meio de uma tarefa agendada. |
|
Execução de inicialização automática de inicialização ou logon: entradas de inicialização automática XDG |
No Linux, uma entrada de inicialização automática é criada para iniciar o backdoor quando o usuário faz login. |
||
Evasão de Defesa |
Mascaramento: corresponder ao nome ou local legítimo |
No Linux, os arquivos persistentes têm nomes semelhantes aos de software legítimo |
|
Acesso de credencial |
Credenciais de armazenamentos de senhas: Credenciais de navegadores da Web |
W4SP rouba senhas dos navegadores instalados. |
|
Coleção |
Dados da área de transferência |
Para roubar fundos durante uma transação de criptomoeda, os dados da área de transferência são substituídos. |
|
Comando e controle |
Protocolo de camada de não aplicação |
O backdoor usa um protocolo binário não criptografado sobre TCP. |
- Conteúdo com tecnologia de SEO e distribuição de relações públicas. Seja amplificado hoje.
- PlatoData.Network Gerativa Vertical Ai. Capacite-se. Acesse aqui.
- PlatoAiStream. Inteligência Web3. Conhecimento Amplificado. Acesse aqui.
- PlatãoESG. Carbono Tecnologia Limpa, Energia, Ambiente, Solar, Gestão de resíduos. Acesse aqui.
- PlatoHealth. Inteligência em Biotecnologia e Ensaios Clínicos. Acesse aqui.
- Fonte: https://www.welivesecurity.com/en/eset-research/pernicious-potpourri-python-packages-pypi/
- :tem
- :é
- :onde
- 000
- 1
- 10
- 116
- 14
- 152
- 2023
- 7
- 8
- 80
- 9
- a
- habilidade
- Capaz
- Sobre
- abuso
- aceito
- alcançado
- Açao Social
- atividades
- endereço
- endereços
- aconselhar
- Depois de
- contra
- Agente
- Todos os Produtos
- permite
- já
- tb
- entre
- an
- e
- Outro
- qualquer
- qualquer um
- aparecer
- APT
- SOMOS
- AS
- avaliado
- At
- autor
- automaticamente
- disponível
- em caminho duplo
- Porta dos fundos
- BE
- Porque
- sido
- atrás
- ser
- Acreditar
- MELHOR
- Bitcoin
- ambos
- navegadores
- construído
- Pacote
- mas a
- by
- chamado
- Campanha
- Campanhas
- CAN
- capaz
- casos
- cautela
- cadeia
- verificar
- a verificação
- limpar
- Agrupar
- código
- COM
- comunicada
- compilado
- componente
- compromisso
- Configuração
- da conexão
- cônsul
- Contacto
- não contenho
- contém
- conteúdo
- continuar
- continua
- continuar
- contribuir
- criado
- Criar
- Credenciais
- criptomoedas
- criptomoedas
- personalizadas
- dados,
- dia
- definido
- entregue
- entrega
- dependências
- implantado
- área de trabalho
- descobrir
- desenvolvedores
- Desenvolvimento
- Dispositivos/Instrumentos
- diferente
- diretamente
- descoberto
- monitores
- distribuído
- distribuição
- distribuições
- do
- down
- download
- descarga
- de downloads
- Dropbox
- durante
- cada
- Eficaz
- esforço
- ou
- embutir
- incorporado
- Engenharia
- entrada
- Meio Ambiente
- erro
- especialmente
- ethereum
- Cada
- executado
- Executa
- execução
- exfiltração
- esperar
- explicitamente
- externo
- fato
- FALHA
- favores
- Figura
- Envie o
- Arquivos
- final
- Finalmente
- Empresa
- Primeiro nome
- cinco
- Escolha
- formulário
- Antigo
- formas
- encontrado
- Quadro
- da
- cheio
- função
- fundos
- futuro
- GitHub
- Go
- manipular
- Alças
- Ter
- ajudar
- esperança
- HTTPS
- if
- imagem
- implementação
- implementado
- importador
- importações
- in
- incluir
- inclui
- Incluindo
- infame
- INFORMAÇÕES
- Inquéritos
- dentro
- instalar
- instalação
- instalado
- instalando
- em vez disso
- Inteligência
- para dentro
- emitem
- IT
- ESTÁ
- se
- conhecido
- língua
- lançamento
- camada
- legítimo
- menos
- bibliotecas
- levemente
- LINK
- linux
- Lista
- Litecoin
- localizado
- olhar
- mac
- a Principal
- fazer
- malwares
- de grupos
- Gerente
- Gerentes
- Match
- Posso..
- média
- metadados
- Coração
- Minutos
- Módulo
- Módulos
- Monero
- Monitore
- mais
- a maioria
- nome
- nomes
- Próximo
- não
- nada
- Perceber..
- notando
- agora
- numeroso
- of
- Oferece
- oficial
- modo offline
- on
- ONE
- queridos
- só
- open source
- abertura
- operando
- sistema operativo
- operadores
- or
- Outros
- de outra forma
- A Nossa
- saída
- Acima de
- pacote
- pacotes
- página
- Senha
- senhas
- passado
- para
- persistência
- peças
- Lugar
- colocação
- Plasma
- platão
- Inteligência de Dados Platão
- PlatãoData
- por favor
- pontos
- Popular
- potencial
- PowerShell
- presente
- privado
- provavelmente
- processo
- Produtos
- Programadores
- Programação
- projeto
- projetos
- protocolo
- público
- publicado
- PYPL
- Python
- Taxa
- em vez
- razão
- reduzir
- remanescente
- remoto
- substituído
- Relatórios
- repositório
- pesquisa
- resultar
- revelar
- Execute
- corrida
- é executado
- programado
- agendamento
- screenshots
- escrita
- Scripts
- Segundo
- segurança
- Vejo
- visto
- enviar
- envio
- separado
- servidor
- serviço
- instalação
- compartilhando
- rede de apoio social
- Shows
- semelhante
- simples
- desde
- So
- Redes Sociais
- Engenharia social
- Software
- alguns
- às vezes
- fonte
- código fonte
- específico
- Etapa
- Estágio
- inicialização
- rouba
- lojas
- tal
- .
- sistemas
- mesa
- Tire
- tomado
- tomar
- alvejando
- tem como alvo
- Tarefa
- técnica
- técnicas
- temporário
- teste
- do que
- que
- A
- A fonte
- deles
- então
- Lá.
- Este
- deles
- Terceiro
- isto
- completamente
- ameaça
- três
- Através da
- tempo
- vezes
- para
- transação
- VIRAR
- dois
- tipicamente
- para
- carregado
- sobre
- us
- usar
- usava
- Utilizador
- usos
- utilização
- geralmente
- Variante
- variedade
- versão
- VET
- via
- Vítima
- vítimas
- Visite a
- caminhou
- Wallet
- foi
- Caminho..
- we
- web
- Navegadores da Web
- BEM
- foram
- o que quer
- Roda
- quando
- sempre que
- qual
- enquanto
- largamente
- largura
- precisarão
- janela
- Windows
- de
- sem
- trabalho
- Equivalente há
- escrito
- ano
- Vocês
- zefirnet
- Zip