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.
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:
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.
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.
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.





