Las amenazas se dirigen tanto a Windows como Linux y el payload final es un backdoor personalizado. En algunos casos la carga útil es el W4SP Stealer, o un monitor de portapapeles para robar criptomonedas, o ambos.
Puntos clave de este blogpost:
- ESET Research descubrió 116 paquetes maliciosos en PyPI, el repositorio oficial de software para el lenguaje de programación Python, subidos en 53 proyectos.
- Las víctimas han descargado estos paquetes más de 10.000 veces.
- Desde mayo de 2023, la tasa de descarga es de más o menos 80 al día.
- El malware un backdoor capaz de ejecutar comandos de forma remota, realizar exfiltraciones y tomar capturas de pantalla.
- El componente backdoor está implementado tanto para Windows, en Python, como para Linux, en Go.
- En algunos casos, el payload final es W4SP Stealer o un monitor de portapapeles que roba criptomoneda, o ambos.
PyPI es popular entre los programadores de Python para compartir y descargar código. Dado que cualquiera puede contribuir al repositorio, el malware —a veces haciéndose pasar por bibliotecas de código legítimas y populares— puede aparecer allí. Encontramos 116 archivos (distribuciones fuente y ruedas) de 53 proyectos que contenían malware.
Algunos nombres de paquetes parecen similares a otros legítimos, pero creemos que la principal forma en que son instalados por las víctimas potenciales no es a través de typosquatting, sino de ingeniería social, donde las víctimas son guiadas a través de la ejecución de pip install {nombre-del-paquete} para poder utilizar el paquete "interesante".
A lo largo del año pasado, las víctimas descargaron estos archivos más de 10.000 veces; véase la Figura 1.
Los paquetes de PyPI pueden adoptar dos formas: paquetes fuente, que contienen todo el código fuente del proyecto y se construyen al instalarse, y paquetes precompilados (llamados wheels), que pueden contener módulos compilados para un sistema operativo o versión de Python específicos. Curiosamente, en algunos casos el código Python de la distribución fuente difiere del de la distribución compilada. La primera está limpia, mientras que la segunda contiene el código malicioso. El gestor de paquetes de Python, pip, favorece una rueda cuando está disponible en lugar de una distribución fuente. Como resultado, la maliciosa se instala a menos que se solicite explícitamente lo contrario.
Hemos observado que los operadores detrás de esta campaña utilizan tres técnicas para empaquetar código malicioso en paquetes de Python.
Módulo malicioso test.py
La primera técnica consiste en colocar un módulo "test" con código ligeramente ofuscado dentro del paquete. La Figura 2 muestra un archivo test.py con una función llamada graby que se define y luego se llama. Observe que la función maneja tanto sistemas Windows como Linux.
Figura 2. Código ligeramente ofuscado dentro del paquete test.py
Este módulo de prueba se importa en medio del código fuente del módulo principal del paquete(__init__.py), de modo que el código malicioso se ejecuta siempre que se importa el paquete. La Figura 3 muestra un módulo que se hace pasar por un capturador de pantalla e importa el malicioso test.py.
PowerShell en setup.py
La segunda técnica consiste en incrustar código PowerShell en el archivo setup.py, que suelen ejecutar automáticamente gestores de paquetes como pip para ayudar a instalar proyectos Python.
La Figura 4 muestra un script PowerShell que descarga y ejecuta la siguiente etapa.
Figura 4. En algunos paquetes, un script PowerShell malicioso está incrustado en el archivo setup.py
Esta técnica solo funciona en Windows y no infestará los sistemas Linux.
En los metadatos del paquete de la Figura 4, puede que haya observado que el autor del paquete es billythegoat356. Ha habido numerosos informes que asocian este apodo con actividades maliciosas, incluyendo un artículo de Phylum, donde revelan el posible vínculo de Billy con W4SP Stealer.
Solo malware…
En la tercera técnica, los operadores no hacen ningún esfuerzo por incluir código legítimo en el paquete, de modo que solo está presente el código malicioso, en una forma ligeramente ofuscada. La figura 5 muestra dos fragmentos de código malicioso para Windows que se escriben en archivos temporales y luego se ejecutan con pythonw.exe, que se utiliza en lugar de python.exe para que el código se ejecute sin abrir una ventana de consola.
Las siguientes etapas son paquetes Python, scripts o archivos binarios descargados desde Dropbox o transfer.sh.
Persistencia
En Windows, la persistencia se consigue la mayoría de las veces a través de un archivo VBScript Encoded (VBE), que es un archivo VBScript codificado, escrito en %APPDATA%/Pythonenv/pythenenv.vbe. La Figura 6 muestra cmd.exe ocultando el directorio %APPDATA%/Pythonenv, ejecutando pythenenv.vbe, y luego programando el archivo VBE para que se ejecute cada cinco minutos bajo la tarea MicrosoftWinRaRUtilityTaskB.
No hay comentarios.:
Publicar un comentario