El paquete Python hilo fluido, descubierto en PyPI, ha sido identificado como malicioso, que contiene un malware convencional de robo de información. Sin embargo, su característica definitoria es el uso de técnicas avanzadas de ofuscación de código que ocultan su carga útil, lo que hace que el análisis sea particularmente complicado. Este malware utiliza tres capas de ofuscación de forma iterativa a lo largo de su cadena de ataque, lo que crea obstáculos importantes para la deconstrucción manual.
Nuestro equipo de alerta temprana de malware informó del paquete al equipo de seguridad de PyPI, que lo eliminó rápidamente. En este artículo, explicamos las etapas de hilo fluidoEl ataque de y los métodos que utiliza para ocultar su propósito, centrándose en cómo el malware ladrón de información y la ofuscación de código funcionan juntos.
Capas de ofuscación del malware Infostealer de ThreadFluent
1. Triple cifrado
El proceso de ofuscación comienza con una carga útil altamente cifrada incrustada en el fluido.py archivo. El proceso inicial de codificación y descifrado se puede resumir de la siguiente manera:
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 proceso de ofuscación implica:
- Compresión:Usando gzip y bzip.
- Encriptación simétrica:Cifrado encadenado con ChaCha20, Blowfish y AES.
- Cifrado asimétrico:RSA se utiliza para cifrar las claves simétricas.
El resultado se codifica en Base64 y se inserta como datos codificadosCada iteración se basa en la anterior, creando una estructura de cifrado anidada que hace que sea excepcionalmente difícil descubrir la carga útil real sin ingeniería inversa.
2. Descompresión Gzip
En muchos pasos intermedios, el malware emplea un método de ofuscación sencillo pero efectivo: compresión Gzip combinada con codificación Base64.
import base64, zlib; eval(zlib.decompress(base64.b64decode(<STR>).decode('utf-8'))
Esta técnica garantiza que la carga útil ofuscada permanezca oculta durante todas las etapas.
3. Concatenación de código y compilación dinámica
La capa final implica dividir la carga útil ofuscada entre múltiples variables, que se concatenan y decodifican dinámicamente durante la ejecución:
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 es particularmente complicada de realizar mediante ingeniería inversa manual, ya que cada variable debe ser decodificada y recombinada para revelar la siguiente carga útil.
Al combinar estas técnicas de ofuscación, la software malicioso ladrón de información in hilo fluido evade la detección, lo que demuestra el papel fundamental de Ofuscación de código en los ciberataques modernos.
La cadena de ataque de múltiples etapas de ThreadFluent
El hilo fluido software malicioso ladrón de información comprende cuatro etapas distintas, cada una de las cuales introduce capas adicionales de Ofuscación de códigoEstas etapas sirven no solo para entregar la carga útil, sino también para protegerla contra la detección y el análisis.
Etapa 0: Ejecución inicial del código
El punto de entrada es el __init__.py archivo, que inicia la ejecución de la carga útil ofuscada en fluido.pyEste archivo utiliza ofuscación multicapa (como se describe en los pasos 1 a 3) para producir el cuentagotas de la etapa 1:
import os,threading
def main():
if os.name == 'nt':
from . import fluent
fluent.main()
thread = threading.Thread(target=main , daemon=True)
thread.start()
Etapa 1: Gotero inicial
El primer cuentagotas, una vez desofuscado, descarga e incrusta código malicioso adicional, pone.py, desde un repositorio de GitHub Shanks de pelo rojo 1337/repuestas (Advertencia: código potencialmente malicioso aquí).
El gotero se incrusta pone.py en la instalación local del popular solicitudes biblioteca, modificando su __init__.py archivo para ejecutar la desofuscación y ejecutar la siguiente etapa. Esta desofuscación consiste en revertir muchas aplicaciones de las capas de ofuscación 1…3.
Etapa 2: Segundo gotero
El segundo cuentagotas, una vez desofuscado siguiendo el mismo proceso, descarga otra carga útil, ssl.py desde el repositorio de GitHub, lo renombra como udp.py, y genera un archivo de bloqueo para garantizar que el malware no se vuelva a instalar repetidamente. Luego se ejecuta para desofuscarlo, lo que da como resultado la ejecución de la carga útil final del robo de información.
Etapa 3: El último ladrón de información
La etapa final es un ladrón de información completamente funcional que emplea técnicas de evasión avanzadas:
- Funciones anti-análisis:
- Detecta herramientas antimalware y las finaliza si se detectan procesos, direcciones IP, nombres de host o entornos virtuales incluidos en la lista negra.
- Exfiltración de datos:
- Captura información exhaustiva, como IP, dirección MAC, datos de VPN, cookies/historial del navegador, datos de tarjetas de crédito y credenciales de billeteras criptográficas, entre otros, incluida una captura de pantalla.
- Envía datos robados (encriptados) a través de un canal de Telegram, utilizando la plantilla que se muestra aquí:
Estrategia de desofuscación
Para analizar paquetes similares, los investigadores deben invertir sistemáticamente sus capas de ofuscación:
- Pasos para emular la ofuscación: Escriba scripts para simular las transformaciones (por ejemplo, descifrado, descompresión) sin ejecutar la carga útil.
- Capas de cifrado inverso: Extraiga y descifre la carga útil utilizando las claves y algoritmos integrados.
- Análisis iterativo: Procesar cada etapa intermedia de forma iterativa para reconstruir la carga útil final.
Las herramientas automatizadas y los entornos aislados son esenciales para agilizar este análisis.
El actor de la amenaza
Aparentemente el paquete fue publicado desde dos cuentas de PyPI, ABIRHOSSAIN10 y anomilano785, actualmente eliminado.
Hay una cuenta de GitHub (actualmente activa) llamada ABIRHOSSAIN10, que podría estar relacionado con la campaña. Shanks de pelo rojo 1337 El usuario de GitHub que posee el repositorio utilizado para descargar las cargas útiles de las etapas 2 y 3 también está bajo análisis.
Aunque la atribución siempre es complicada y la pertenencia a un equipo rojo es una posibilidad, el tipo y el volumen de información exfiltrada apuntan a un actor malicioso.
Conclusión: El papel de la ofuscación de código en la evolución del malware
El hilo fluido Este paquete ejemplifica la ofuscación de malware moderna en su distribución en varias etapas. Junto con las técnicas de evasión empleadas, este paquete demuestra un claro esfuerzo por evadir la detección y resistir el análisis.
Este análisis destaca la importancia de los esfuerzos colaborativos y las herramientas automatizadas para combatir estas amenazas. Al analizar y comprender estos métodos, los profesionales de seguridad pueden desarrollar mejores defensas contra malware similar en el futuro.
Cómo el sistema MEW de Xygeni impidió que el paquete malicioso threadfluent llegara a producción
xygenis Alerta temprana de malware (MEW) El sistema fue fundamental para detener la hilo fluido Paquete Python, una dependencia maliciosa que contiene funciones avanzadas código de ofuscación y una de varias etapas software malicioso ladrón de información, antes de que pudiera comprometer los entornos de producción. A continuación, se explica cómo:
- Detección mediante análisis estático
MEW avistado hilo fluidoCódigo oculto, encontrando señales sospechosas como cifrado en capas y actividad de dependencia inusual. - Evaluación de la accesibilidad en tiempo de ejecución
El sistema descubrió que el código del paquete podía ejecutarse durante el uso, marcándolo como una amenaza grave sin llegar a ejecutarlo. - CI/CD Pipeline Protección:
MEW bloqueado hilo fluido En tiempo real, impidió que se incluyera en las compilaciones y que llegara a producción. Envió alertas procesables a los desarrolladores, lo que les permitió ahorrar un tiempo valioso. - Intercambio de inteligencia sobre amenazas
Xygeni informó rápidamente el paquete a PyPI y compartió sus hallazgos con su red de seguridad global, evitando así que se propagara más.
Atrapando hilo fluido Al principio, el sistema MEW de Xygeni se aseguró de que el código malicioso no dañara las cadenas de suministro de software ni CI/CD flujos de trabajo.
Protege tu CI/CD Pipelines gratis
Prevenir amenazas como hilo fluido con el sistema de alerta temprana de malware de Xygeni. Comience su prueba gratuita. hoy y asegure su cadena de suministro de software.
Luis Rodríguez
Luis Rodríguez es físicocist + matemático y CISSP. Actualmente cofundador y director de tecnología de Xygeni Security. Cuenta con más de 20 años de experiencia en seguridad de software y ha participado en proyectos como... SAST y SCAActualmente se centra en software supply chain security.
Daniel Martín
Daniel Martín es experto en ciberseguridad y miembro del equipo de investigación de seguridad de Xygeni, especializado en SDLC Mitigación de vulnerabilidades de seguridad y aplicaciones.





