"Un ninja sabio no busca a un enemigo al que no comprende del todo". - Splinter de Teenage Mutant Ninja Turtles
Como escritor técnico apasionado por la ciencia ficción, una de las partes más emocionantes de mi trabajo en Sonatype es cuando tengo la oportunidad de colaborar con el equipo de investigación de seguridad.
Desde que encontramos
No es una ocurrencia rara: evalúan constantemente cientos de paquetes sospechosos de registros de código abierto para determinar si son realmente maliciosos. Durante este procedimiento, identifican patrones familiares entre los paquetes y, a veces, al reconocer fuertes similitudes, realizan más investigaciones para localizar al actor/campaña detrás de ellos.
Entre la última semana de 2022 y principios de 2023, nuestro sistema de inteligencia artificial marcó paquetes sospechosos cargados en el registro de PyPI, incluidos pyrologin
, easytimestamp
, discorder , discorder
discord-dev
, style.py
y pythonstyles
. Nuestros investigadores de seguridad los examinaron y confirmaron que, en efecto, eran maliciosos. Y después de un análisis más profundo, notaron que estos paquetes agregaron una serie de características que no se ven a menudo en el malware de Python.
En lo que se ha convertido en una estrategia de facto, los malos actores ocultan una carga útil en el archivo setup[.]py
para que los desarrolladores solo tengan que usar una instalación pip simple para infectarse. En este caso, estarían lanzando sin darse cuenta un script de PowerShell que descarga un archivo ZIP para instalar bibliotecas que permiten al atacante controlar el mouse y el teclado de la víctima, tomar capturas de pantalla y crear conexiones remotas ocultas. Y además de eso, estos paquetes también filtran información confidencial como contraseñas, cookies y datos de billetera de criptomonedas, e incluso intentan instalar una herramienta para acceso remoto. Nuestros hallazgos coincidieron con
Sin embargo, el investigador de seguridad Carlos Fernández estaba teniendo una inquietante sensación de déjà vu. Durante la semana posterior a la divulgación de los paquetes, los recuerdos de haber visto versiones anteriores de este malware pasaron por su mente. Un actor de amenazas podría haber estado desarrollando su malware a lo largo del tiempo, pero necesitábamos asegurarnos, así que me puse mi sombrero OSINT para ayudarlo a ver si había algo de verdad en su intuición.
Mirando hacia atrás en nuestra base de datos, el 25 de septiembre de 2022, se cargó un paquete llamado pygradient
en el repositorio de PyPI. Nuestra IA lo marcó como sospechoso y nuestros investigadores de seguridad confirmaron que contenía malware y que incluía las fuentes de otro paquete llamado pystyle
. Ambas bibliotecas fueron escritas por
El ladrón W4SP cuenta con persistencia (se reactiva cada vez que los usuarios reinician la PC), ofuscación (el autor promete que es completamente indetectable) y técnicas de esteganografía para ocultar cargas útiles polimórficas y altamente ofuscadas dentro de un archivo de imagen. El malware envía todas las cuentas de Discord, tarjetas de crédito, contraseñas y monederos criptográficos de la víctima al atacante a través de una dirección de webhook de Discord codificada. Los malos actores interesados en este malware lo han comprado pagando unos 20 USD en criptomonedas.
Originalmente, pystyle
no tenía una naturaleza maliciosa: un paquete inofensivo para diseñar y colorear la salida de la consola para mejorar la legibilidad y la experiencia del usuario. Pero según la investigación de Phylum, una vez que se hizo popular (el paquete aún está activo en PyPI y acumula más de 40.000 descargas cada mes), decidieron agregar el malware W4SP en un par de lanzamientos.
Los paquetes de código abierto como pystyle
pueden actuar como agentes durmientes durante meses solo para ser activados más tarde por su propio autor con fines maliciosos. Un movimiento arriesgado, ya que su popular paquete puede ser descubierto por investigadores de seguridad como nosotros, quienes lo reportarán como malicioso y lo eliminarán para siempre. Es por eso que a menudo crean nuevos paquetes en los que incluyen el código fuente de una biblioteca inocua, agregan algún tipo de carga útil maliciosa y la cargan con un nuevo nombre: algo genérico, que suena benigno y parece inocente. Un nombre como pygradient
.
Después de observar más de cerca a Carlos, encontramos que este malware mutante proto-RAT carecía de algunas de las características de las versiones de diciembre: aunque también lanzó un script de PowerShell y exfiltró datos confidenciales, no usó cargas útiles codificadas en base64 ni una lista blanca. txt para evitar la autoinfección. En cierto modo, era una variante más suave y menos sofisticada.
Pero luego observamos los paquetes cargados a principios de noviembre, incluidos paintpy
, devicespoof
y devicespoofer
, y después de profundizar más, encontramos la confirmación de nuestra sospecha: el malware realmente estaba evolucionando.
Aunque BillyTheGoat no ha estado activo en GitHub desde noviembre, seguimos encontrando malware basado en sus creaciones o robándoles directamente, principalmente por parte de un usuario que aparentemente tiene su sede en Portugal llamado
Este usuario subió un paquete eliminado recientemente en PyPI llamado pystilez
, falsamente acreditado a BillyTheGoat en lo que parecía
Checkmarxapicolor
(junto con variaciones con nombres similares) que incluía un enlace al servidor Discord dentro de su código malicioso. El perfil de administrador vinculado a una cuenta de Steam verificada y el nombre "zeeckt" apareció como uno de los alias de Steam del atacante.
Un investigador de seguridad publicó una de las cargas útiles de zeeckt con fines educativos y recibió una respuesta interesante del coautor del ladrón W4SP:
Qué irónico que te roben a tu ladrón.
El mismo autor, aparentemente un desarrollador de Python de 17 años, reitera su frustración en un archivo README en su perfil de GitHub:
No sabemos exactamente qué código malicioso ha robado zeeckt de otros malhechores, pero una cosa es cierta: ese nombre sigue apareciendo en campañas de malware en registros de código abierto.
Carlos encontró recientemente cuatro paquetes más porforenitq
, forenith
, forenity
y forenitz
. Después de una mayor investigación, los etiquetó como maliciosos y los informó a PyPI para que los eliminaran. El caso más rápido tardó unos 20 minutos desde la publicación hasta la eliminación.
Mirando setup[.]py
en forenitq
, Carlos encontró la siguiente carga útil de primera etapa:
El atacante crea tres archivos temporales que descargan y ejecutan binarios de Windows desde direcciones URL específicas mediante el comando "iniciar". Aunque las babosas /rat
y /clip
sugieren intenciones maliciosas, no pudimos confirmar esa suposición sin mirar debajo del capó.
Al momento de escribir este artículo, la página alojada en hxxp://20[.]226[.]18[.]203
todavía está activa y solo muestra un enlace a una invitación de Discord que ya venció o es privada.
Carlos notó que el paquete se hacía pasar por el popular
Después de desofuscar el archivo RAT, encontró una línea que carga un posible secuestrador del portapapeles, pero los detalles estaban codificados en base64:
Tras la decodificación, obtenemos un código de Python diseñado para secuestrar el portapapeles de una víctima para reemplazar la dirección de la billetera de criptomonedas deseada con la dirección del atacante:
Busca patrones específicos como bitcoin (bc1), Ethereum (0x), Monero (4) y l itecoin (L o M o 3), y cuando encuentra un patrón, reemplaza la dirección deseada con la dirección de la billetera de criptomonedas del atacante. .
El código utiliza el
Además, descubrimos más técnicas que utiliza este mutante RAT para evadir la detección: una carga útil de primera etapa agregada al archivo forenitq/ansi[.]py
en lugar de setup[.]py
y una carga útil polimórfica de segunda etapa que cambia cada vez que ejecuta el binario
El atacante también agregó un nuevo comando y control con un menú de ayuda muy completo, y esta vez se fala português:
Como puede ver, los actores maliciosos están ansiosos por robar sus fondos criptográficos y las credenciales del sistema para penetrar aún más en su infraestructura. Su malware RAT sigue mutando para ser más evasivo y dañino para los desarrolladores. Por lo tanto, si no está protegiendo su cadena de suministro de software hoy, considere tomar medidas para hacerlo lo antes posible.
hxxp://20[.]226[.]18[.]203/inject/tCxFLYLT6ViY9ZnP
hxxp://20[.]226[.]18[.]203/clip
hxxp://20[.]226[.]18[.]203/rat