infostealer-malware-threadfluent-código-ofuscação

Dissecando um pacote de malware Infostealer de vários estágios

O pacote Python Fluente em fios, descoberto no PyPI, foi identificado como malicioso, contendo um malware infostealer convencional. No entanto, sua característica definidora é o uso de técnicas avançadas de ofuscação de código que obscurecem sua carga útil, tornando a análise particularmente desafiadora. Este malware utiliza três camadas de ofuscação iterativamente em sua cadeia de ataque, criando obstáculos significativos para a desconstrução manual.

Nossa equipe de Alerta Precoce de Malware relatou o pacote à equipe de segurança do PyPI, que o removeu rapidamente. Neste artigo, explicamos os estágios de Fluente em fiosO ataque do e os métodos que ele usa para esconder seu propósito, com foco em como o malware infostealer e a ofuscação de código trabalham juntos.

Camadas de ofuscação do malware ThreadFluent Infostealer

1. Criptografia tripla

O processo de ofuscação começa com uma carga altamente criptografada incorporada no fluente.py arquivo. O processo inicial de codificação e descriptografia pode ser resumido da seguinte forma:

encoded_data = base64_module.b64decode("... BASE-6 with encrypted payload, IV and RSA-encrypted keys…”);
# … Sequential decryption: ChaCha20, Blowfish and AES …
encrypted_payload = AES_Cipher.new(aes_key, AES_Cipher.MODE_CBC, iv=aes_iv).decrypt(encrypted_payload[16:])
final_payload = unpad_function(encrypted_payload, AES_Cipher.block_size)
exec( zlib_module.decompress(bz2_module.decompress(final_payload)) )

Este processo de ofuscação envolve:

  • Compressão: Usando gzip e bzip.
  • Criptografia simétrica: Criptografia encadeada com ChaCha20, Blowfish e AES.
  • Criptografia assimétrica: RSA usado para criptografar as chaves simétricas.

O resultado é codificado em Base64 e inserido como dados_codificados. Cada iteração se baseia na anterior, criando uma estrutura de criptografia aninhada que torna excepcionalmente difícil descobrir a carga real sem engenharia reversa.

 

2. Descompressão Gzip

Em muitas etapas intermediárias, o malware emprega um método de ofuscação simples, mas eficaz: compactação Gzip combinada com codificação Base64. 

import base64, zlib; eval(zlib.decompress(base64.b64decode(<STR>).decode('utf-8'))

Essa técnica garante que a carga ofuscada permaneça oculta durante todos os estágios.

3. Concatenação de código e compilação dinâmica

A camada final envolve dividir a carga ofuscada em múltiplas variáveis, que são concatenadas e decodificadas dinamicamente durante a execução:

import base64, zlib

FEQXCBDOZKHVIhT = '...'
# ....(111 other variables with base-64 encoded values) ...

zZytWuvuEdBXSrO =
  eval(<FEQXCBDOZKHVIhT' encoded with '\x>) +
  eval(<next variable, encoded>) +
  eval( ' zlib.decompress(base64.b64decode(<VAR>)).decode('utf-8') ') + ...

eval(compile(base64.b64decode(eval(zZytWuvuEdBXSrO)).decode('utf-8'), ‘<app>', 'exec'))

Esta etapa é particularmente difícil de ser feita manualmente por meio de engenharia reversa, pois cada variável deve ser decodificada e recombinada para revelar a próxima carga útil.

Ao combinar essas técnicas de ofuscação, o malware infostealer in Fluente em fios evita a detecção, demonstrando o papel crítico da Ofuscação de código em ataques cibernéticos modernos.

A cadeia de ataque multiestágio do ThreadFluent

O processo de Fluente em fios malware infostealer compreende quatro fases distintas, cada uma introduzindo camadas adicionais de Ofuscação de código. Esses estágios servem não apenas para entregar a carga, mas também para protegê-la contra detecção e análise.

infostealer-malware-código-ofuscação-threadfluent

Estágio 0: Execução inicial do código

O ponto de entrada é o __init__.py arquivo, que inicia a execução da carga ofuscada em fluente.py. Este arquivo usa ofuscação multicamadas (conforme descrito nas etapas 1–3) para produzir o conta-gotas do Estágio 1:

import os,threading
def main():
    if os.name == 'nt':
        from . import fluent
        fluent.main()
        
thread = threading.Thread(target=main , daemon=True)
thread.start()

Estágio 1: Conta-gotas inicial

O primeiro dropper, uma vez desofuscado, baixa e incorpora código malicioso adicional, coloca.py, de um repositório GitHub Red-haired-shanks-1337/repuests (aviso: possível código malicioso aqui). 

O conta-gotas incorpora coloca.py na instalação local do popular pedidos biblioteca, modificando sua __init__.py arquivo para executar a desofuscação e executar o próximo estágio. Essa desofuscação consiste em reverter muitas aplicações das camadas de ofuscação 1 … 3.

Estágio 2: Segundo conta-gotas

O segundo conta-gotas, uma vez desofuscado seguindo o mesmo processo, baixa outra carga útil, ssl.py do repositório GitHub, renomeia-o como udp.py, e gera um lockfile para garantir que o malware não seja reinstalado repetidamente. Então ele é executado para desofuscá-lo, resultando na execução do payload final do infostealer.

Estágio 3: Infostealer final

O estágio final é um infostealer totalmente funcional que emprega técnicas avançadas de evasão:

  • Características anti-análise:
    • Detecta ferramentas antimalware e encerra se quaisquer processos, IPs, nomes de host ou ambientes virtuais na lista negra forem detectados.
  • Exfiltração de dados:
    • Captura informações exaustivas. Variando de IP, endereço Mac, dados de VPN, cookies/histórico do navegador, dados de cartão de crédito e credenciais de carteira criptografada, entre outros, incluindo uma captura de tela.
    • Envia dados roubados (criptografados) por meio de um canal do Telegram, usando o modelo mostrado aqui: 
infostealer-malware-código-ofuscação-threadfluent

Estratégia de Desofuscação

Para analisar pacotes semelhantes, os pesquisadores devem reverter sistematicamente suas camadas de ofuscação:

  • Emular etapas de ofuscação: Escreva scripts para simular as transformações (por exemplo, descriptografia, descompactação) sem executar a carga útil.
  • Camadas de criptografia reversa: Extraia e descriptografe a carga útil usando as chaves e algoritmos incorporados.
  • Análise Iterativa: Processe cada estágio intermediário iterativamente para reconstruir a carga útil final.

Ferramentas automatizadas e ambientes de sandbox são essenciais para otimizar essa análise.

 

O Ator da Ameaça

Aparentemente o pacote foi publicado de duas contas PyPI, ABIRHOSSAIN10 e anomilano785, atualmente removido. 

Existe uma conta GitHub (atualmente ativa) chamada ABIRHOSSAIN10, que pode estar relacionado à campanha. O Pernas-de-cabelo-ruivo-1337 O usuário do GitHub que possui o repositório usado para baixar as cargas úteis dos estágios 2 e 3 também está sob análise.

Embora a atribuição seja sempre complicada e a participação em uma equipe vermelha seja uma possibilidade, o tipo e o volume de informações vazadas sugerem a presença de um agente malicioso.

Conclusão: O papel da ofuscação de código na evolução do malware

O processo de Fluente em fios pacote exemplifica a ofuscação moderna de malware em sua entrega em vários estágios. Juntamente com as técnicas de evasão empregadas, este pacote demonstra um esforço claro para evitar a detecção e resistir à análise.

Esta análise ressalta a importância de esforços colaborativos e ferramentas automatizadas no combate a tais ameaças. Ao dissecar e entender esses métodos, os profissionais de segurança podem desenvolver melhores defesas contra malwares semelhantes no futuro.

Como o sistema MEW da Xygeni impediu que o pacote malicioso threadfluent chegasse à produção

Xygeni Alerta antecipado de malware (MEW) O sistema foi fundamental para interromper a Fluente em fios Pacote Python, uma dependência maliciosa contendo ofuscação de código e um multi-estágio malware infostealer, antes que pudesse comprometer ambientes de produção. Veja como:

  • Detecção por meio de análise estática
    MEW avistado Fluente em fioscódigo oculto, encontrando sinais suspeitos como criptografia em camadas e atividade de dependência incomum.
  • Avaliação de acessibilidade em tempo de execução
     O sistema descobriu que o código do pacote poderia ser executado durante o uso, marcando-o como uma ameaça séria sem realmente executá-lo.
  • CI/CD Pipeline pós-colheita
    MEW bloqueado Fluente em fios em tempo real, impediu que fosse incluído em builds e impediu que chegasse à produção. Enviou aos desenvolvedores alertas acionáveis, economizando tempo valioso.
  • Compartilhamento de inteligência contra ameaças
    A Xygeni rapidamente relatou o pacote ao PyPI e compartilhou suas descobertas com sua rede de segurança global, impedindo que ele se espalhasse ainda mais.

Pegando Fluente em fios no início, o sistema MEW da Xygeni garantiu que o código malicioso não prejudicasse as cadeias de fornecimento de software ou CI/CD workflows.

Proteja seu CI/CD Pipelines de graça

Prevenir ameaças como Fluente em fios com o sistema de alerta precoce de malware da Xygeni. Comece seu teste grátis hoje e proteja sua cadeia de suprimentos de software.

Imagem de Luis Rodríguez

Luis rodriguez

Luis Rodriguez é um físicocist + matemático e CISSP. Atualmente cofundador e CTO da Xygeni Security. Ele tem mais de 20 anos de experiência em segurança de software e participou de projetos como SAST e SCA. Atualmente ele se concentra em software supply chain security.

Imagem de Daniel Martín

Daniel Martin

Daniel Martín é especialista em segurança cibernética e membro da equipe de pesquisa de segurança da Xygeni, especializado em SDLC segurança e mitigação de vulnerabilidades de aplicativos.

sca-tools-software-composição-análise-ferramentas
Priorize, corrija e proteja seus riscos de software
você recebe uma avaliação gratuita de 7 dias da nossa licença Business Edition e pode aproveitar alguns dos recursos avançados da plataforma SecurityScorecard.
Não é necessário cartão de crédito

Proteja seu desenvolvimento e entrega de software

com o Suíte de Produtos da Xygeni