banner
Hogar / Noticias / VMConnect: Los paquetes maliciosos de PyPI imitan módulos populares de código abierto
Noticias

VMConnect: Los paquetes maliciosos de PyPI imitan módulos populares de código abierto

Jul 28, 2023Jul 28, 2023

Inicio » Calendario editorial » Seguridad de la cadena de suministro de software » VMConnect: Los paquetes maliciosos de PyPI imitan módulos populares de código abierto

ReversingLabs ha identificado varios paquetes Python maliciosos en el repositorio de código abierto Python Package Index (PyPI). En total, los investigadores de ReversingLabs descubrieron 24 paquetes maliciosos que imitaban tres populares herramientas Python de código abierto: vConnector, un módulo contenedor para enlaces pyVmomi VMware vSphere; así como eth-tester, una colección de herramientas para probar aplicaciones basadas en ethereum; y bases de datos,una herramienta que brinda soporte asíncrono para una variedad de bases de datos.

Según las observaciones del equipo de investigación, la campaña comenzó alrededor del 28 de julio de 2023, cuando se publicó el primero de los paquetes maliciosos. Esto continúa hasta el día de hoy, con nuevos paquetes PyPI maliciosos publicados diariamente, a medida que se detectan y eliminan paquetes anteriores.

A diferencia de otras campañas recientes sobre la cadena de suministro, como la Operación Brainleeches, los paquetes maliciosos que componen esta campaña muestran evidencia de un esfuerzo concertado para engañar a los desarrolladores. Lo logran implementando toda la funcionalidad de los módulos que están imitando y defendiendo los proyectos de GitHub correspondientes y vinculados que omiten la funcionalidad maliciosa que se encuentra en el paquete de lanzamiento de PyPI.

Esta no es la primera vez que observamos tal comportamiento. En junio de 2022, por ejemplo, descubrimos un paquete malicioso npm, el sitio web de mantenimiento, que utilizaba un enfoque similar para ocultar funciones de criptominería. La campaña VMConnect es el ejemplo más reciente de módulos de código abierto que se utilizan para propagar código malicioso y una prueba más de que las evaluaciones de seguridad de los repositorios de código abierto pueden pasar por alto estos ataques matizados.

El equipo de investigación de ReversingLabs monitorea continuamente los repositorios de paquetes de código abierto para detectar casos de manipulación de códigos maliciosos, instalación de paquetes o dependencias maliciosos y otras formas de ataques a la cadena de suministro de software. Este trabajo implica escaneo y análisis automatizado y dirigido por humanos de paquetes publicados en los repositorios de paquetes públicos más populares como npm, PyPI, Ruby y NuGet.

Históricamente, la gran mayoría de las campañas maliciosas de la cadena de suministro que hemos identificado se encontraron en el repositorio de código abierto npm, que alberga la mayor parte de los proyectos y desarrolladores de código abierto. Sin embargo, en los últimos meses otras plataformas, en particular el Python Package Index (PyPI), han experimentado un aumento de la actividad maliciosa. En febrero, por ejemplo, los investigadores de ReversingLabs descubrieron 41 paquetes PyPI maliciosos que se hacían pasar por bibliotecas HTTP, algunas de las cuales imitaban bibliotecas populares y ampliamente utilizadas. En marzo, nos encontramos con un paquete PyPI malicioso llamado termcolor, un descargador de tres etapas publicado en múltiples versiones que adoptó el nombre de un paquete PyPI desaparecido. Luego, en mayo, PyPI dejó brevemente de aceptar nuevos envíos después de verse abrumado por envíos maliciosos.

Los investigadores de amenazas de ReversingLabs han identificado una nueva campaña PyPI maliciosa que incluye un paquete VMConnect sospechoso publicado en el repositorio de PyPI.

Este paquete fue declarado sospechoso durante el análisis de rutina realizado por ReversingLabs Titanium Platform, un potente motor de análisis estático capaz de extraer varios tipos de metadatos de una amplia gama de formatos de archivo.

Además de los distintos tipos de metadatos, la plataforma ReversingLabs Titanium también es capaz de extraer indicadores de comportamiento, lo que facilita la comprensión de las capacidades funcionales de un archivo. Y esa capacidad es lo que llamó nuestra atención sobre el archivo _init_.py dentro de VMConnect. El código dentro del archivo __init__.py de VMConnect es capaz de crear un proceso, decodificar datos utilizando el algoritmo Base64 y convertir datos binarios a su representación de cadena, un comportamiento comúnmente utilizado en la ofuscación. Esta combinación de comportamientos es lo que desencadenó la detección inicial y motivó una mayor investigación.

Figura 1: Indicadores de comportamiento extraídos del paquete VMConnect.

Una mirada detallada al archivo __init__.py confirmó la presencia de funcionalidad maliciosa dentro del paquete. Eso comenzó con esa cadena codificada en Base64, que se decodifica y ejecuta en otro proceso.

Figura 2: Ejecución de una cadena codificada en Base64 dentro del archivo __init__.py.

Cuando decodificamos la cadena, descubrimos que contiene una URL de descarga que se modifica según la información recopilada de la máquina host. La subcadena paperpin3902 en la URL de comando y control se reemplaza con una cadena que contiene la primera letra del nombre de la plataforma del host, el nombre de usuario y una cadena aleatoria de 6 caracteres.

Figura 3: La plantilla de URL C2, extraída de la cadena codificada en Base64, se modifica según la información de la máquina host.

La cadena Base64 decodificada y ejecutada contiene un bucle de ejecución interminable que se pone en contacto con el servidor de comando y control (C2) e intenta descargar otra cadena codificada en Base64 con comandos adicionales. Si tiene éxito, ese código se ejecuta y el bucle se repite, con el servidor C2 sondeado por el host infectado en busca de nuevos comandos después de un período de suspensión preconfigurado.

Figura 4: Bucle de ejecución y recuperación de comandos extraído de la cadena codificada en Base64 presente en el__init__.pyarchivo.

Aunque el servidor C2 estaba activo en el momento de esta investigación, el equipo de investigación no observó que cumpliera ningún comando. Dado que la obtención de comandos se realiza en un bucle sin fin, es posible que el operador del servidor C2 cargue comandos sólo después de que se determine que la máquina infectada es interesante para el actor de la amenaza. Alternativamente, el servidor C2 podría estar realizando algún tipo de filtrado de solicitudes. Por ejemplo, los atacantes pueden filtrar solicitudes según la dirección IP de la máquina infectada para evitar infectar objetivos de países específicos.

El paquete VMConnect fue publicado el 28 de julio por un desarrollador llamado Hushki Manager: una cuenta PyPI desechable creada el mismo día en que se publicó su único paquete.

Figura 5: Perfil PyPI del usuario hushki502.

A pesar de eso, el actor hizo un gran esfuerzo para que el paquete pareciera confiable. Por ejemplo, tiene una descripción que parece legítima y esa descripción corresponde a la funcionalidad presente dentro del paquete. Los actores de amenazas a menudo no hacen el esfuerzo de ordenar la descripción del proyecto en el sitio web de PyPI.

En cambio, a menudo se basan en simples errores tipográficos en los nombres de los paquetes para engañar a suficientes desarrolladores para que instalen su creación. Por ejemplo, los actores de amenazas detrás de la campaña Operation Brainleeches recientemente descubierta hicieron esfuerzos mínimos para disfrazar sus paquetes maliciosos, utilizando nombres de archivos predeterminados como index.html y DEMO.txt, probablemente copiados de kits de phishing y mínimamente modificados antes de ser publicados.

Figura 6: Descripción del paquete VMConnect.

En esta campaña, sin embargo, los atacantes adoptaron un enfoque más estudiado. Además de reutilizar la descripción de los paquetes reales, los atacantes establecieron correctamente enlaces a un repositorio de código fuente de Github que fue creado por el mismo autor el mismo día. El sitio del proyecto Github parece confiable, con una descripción que coincide con la del sitio PyPI y varias confirmaciones y nada obviamente sospechoso en los archivos publicados.

Figura 7: Perfil de Github del usuario hushki502.

Finalmente, los actores maliciosos se encargaron de ocultar la naturaleza maliciosa de esta herramienta omitiendo la funcionalidad maliciosa del archivo __init__.py que se publicó en el repositorio de Github.

Figura 8: Versión benigna de__init__.pyarchivo presente en el repositorio de Github.

El uso de los repositorios de GitHub correspondientes para crear la impresión de un paquete de código abierto legítimo es algo que hemos visto antes, y hay una buena explicación de por qué los actores de amenazas se toman la molestia de hacerlo.

Históricamente, muchas soluciones de seguridad de la cadena de suministro se han basado en revisiones de código fuente de bibliotecas de terceros. Los atacantes, por lo tanto, tienen un incentivo para despistar a las herramientas de escaneo de códigos y a los revisores manuales de códigos. Para los revisores, los proyectos PyPI tienden a parecer más confiables si tienen un enlace correspondiente a un repositorio de Github que no parezca arbitrario.

En el caso de los paquetes PyPI maliciosos, el atacante creó un repositorio Github falso con un nombre idéntico al del paquete PyPI y copió toda la funcionalidad del proyecto Github legítimo en el proyecto PyPI correspondiente. Sin embargo, la funcionalidad maliciosa no está presente en el código fuente. Sólo escaneando los artefactos utilizados en el proceso de construcción se habría detectado esta amenaza.

ReversingLabs observó una táctica similar utilizada en el caso del minero de monedas npm descubierto hace un año. En esa campaña, el contenido del paquete de lanzamiento (un sitio web temporal en “modo de mantenimiento”) también era diferente del contenido alojado en el repositorio de código fuente correspondiente. Al igual que con los paquetes PyPI actuales, se agregó contenido malicioso al código fuente público legítimo, lo que dio como resultado un paquete de lanzamiento de PyPI que se parece mucho al código fuente abierto en el que se basa, pero con algunos cambios sutiles (y maliciosos) que se pueden eliminar fácilmente. pasado por alto.

La lección para los equipos de desarrollo y seguridad de aplicaciones es que los paquetes de lanzamiento pueden contener (y contienen) funcionalidad maliciosa que no está presente en los repositorios de código abierto y, por lo tanto, no puede detectarse únicamente con el escaneo del código fuente o con revisiones manuales del código fuente. Estos equipos necesitan un método para detectar contenido sospechoso en los propios paquetes de lanzamiento final para evitar ser víctimas de ataques a la cadena de suministro, como esta campaña de VMConnect PyPI.

También es educativo observar más de cerca los métodos que los atacantes utilizaron en este caso para disfrazar sus intenciones maliciosas, incluido disfrazar sus productos maliciosos para imitar paquetes de código abierto legítimos y ampliamente utilizados.

Como señalamos anteriormente, los paquetes que detectamos imitan una variedad de paquetes PyPI conocidos con amplias distribuciones, pero que sirven a fines muy diferentes. El hilo común que conecta los paquetes PyPI que fueron imitados parece no ser más que su popularidad, medida en descargas mensuales.

En cada caso, los atacantes disfrazaron sus paquetes PyPI para que parecieran estas herramientas legítimas y ampliamente utilizadas. Eso incluía copiar la descripción del paquete y pegarla en sus paquetes de imitación, simplemente reemplazando el nombre del paquete legítimo con el nombre de su paquete impostor.

Desde el punto de vista de un investigador de amenazas o de un respondedor de incidentes, su falta de esfuerzo facilita la tarea de detectar la artimaña. En nuestra investigación, una búsqueda en Google de la primera oración de la descripción reveló inmediatamente el paquete legítimo correspondiente que estaba siendo imitado. Como se ve en las Figuras 9 y 10, las descripciones de los paquetes PyPI y los proyectos Github son idénticas, aparte del nombre del proyecto.

Figura 9: Descripción de Github del proyecto malicioso VMConnect.

Figura 10: Descripción de Github del proyecto vConnector legítimo.

En este caso, vConnector es un paquete bastante popular, publicado por primera vez hace nueve años, y la última modificación se envió al repositorio de Github hace casi cuatro años. Las estadísticas de descarga de este paquete muestran que tiene casi 40 mil descargas por mes. Una gran cantidad de descargas mensuales combinadas con la falta de mantenimiento reciente hacen de este paquete un muy buen objetivo para la suplantación.

El 19 de julio, se publicaron siete versiones diferentes de un paquete titulado osinfopkg en el repositorio de PyPI y se utilizaron para desarrollar y probar la funcionalidad maliciosa que finalmente se incluyó en el paquete VMConnect. Dado que se trataba de un paquete de prueba, el actor malicioso no dio Demasiado cuidado para que pareciera confiable, a pesar de que creó un repositorio Github dedicado que contiene dos proyectos más.

Luego, el 31 de julio, se lanzó otro paquete llamado ether. En este caso, el actor de amenazas se hizo pasar por el popular paquete eth-tester, una colección de herramientas para probar aplicaciones basadas en ethereum que cuenta con más de 60 mil descargas mensuales. Como observó el equipo de investigación de ReversingLabs con el paquete VMConnect, la descripción de ethter se copió palabra por palabra del paquete eth-tester, y solo se reemplazó el nombre del paquete.

Nuevamente, se creó un repositorio Github falso y se ocultó funcionalidad maliciosa en el archivo utils/based.py dentro del paquete PyPI correspondiente. El archivo malicioso no está presente en el repositorio de código fuente de Github, sólo en el paquete PyPI. El actor de amenazas también lanzó la última versión de su paquete malicioso con el número de versión 1.10.1b1. Esto está en línea con la convención de numeración de versiones del paquete suplantado y es superior a la última versión publicada del paquete suplantado. El mismo enfoque se aplica a la base cuántica maliciosa.paquete que se hace pasar por un paquete de bases de datos legítimas.

Afortunadamente para los desarrolladores de Python, ninguno de los paquetes que detectamos estuvo disponible para descargar durante mucho tiempo. La mayoría, incluido el paquete VMConnect, se eliminaron de PyPI entre uno y tres días después de su publicación.

Debido a las limitaciones de la plataforma PyPI, no sabemos el motivo por el que se eliminaron estos paquetes: si fueron detectados por sistemas internos operados por la propia PyPI, si los informes de ReversingLabs u otras empresas condujeron a las eliminaciones, o si los propios actores maliciosos Retiró los paquetes. Los esfuerzos por obtener una respuesta definitiva de PyPI sobre las circunstancias que llevaron a los distintos desmantelamientos no tuvieron éxito.

Sin embargo, hemos observado que diariamente se publican nuevos paquetes maliciosos en PyPI, tan pronto como el paquete anterior se informa y se elimina del repositorio de PyPI. En otras palabras, a pesar de la detección y eliminación de los paquetes descritos anteriormente, esta campaña maliciosa de PyPI sigue viva y continua. La rápida respuesta de los actores de amenazas para reemplazar paquetes PyPI maliciosos sugiere que se trata de una campaña bien planificada y organizada y que los actores maliciosos probablemente tengan una lista preparada de paquetes adecuados para imitar.

Quedan preguntas persistentes sobre los elementos clave de esta campaña maliciosa de la cadena de suministro. Entre ellos: quién (o qué) publicó los paquetes maliciosos, cuál es el objetivo final de los ataques y por qué se lanzó la campaña.

En cuanto a quién, no tenemos suficiente telemetría para identificar a uno o varios actores de amenazas como responsables de la última campaña. Sin embargo, al publicar los COI, incluida la infraestructura de comando y control que hemos recopilado, esperamos que otros puedan conectarlos con evidencia de ataques conocidos y actores de amenazas para ayudar a completar el panorama completo detrás de esta campaña.

Los ataques anteriores a la cadena de suministro que utilizan PyPI, npm y otros repositorios públicos van desde sofisticados (IconBurst) hasta poco sofisticados (Operación Brainleeches). Si bien la campaña VMConnect no tiene muchos de los signos reveladores de una campaña sofisticada de un Estado-nación, tampoco es una operación de copiar y pegar. Se necesitan más datos para llegar a conclusiones sobre quién o qué es el responsable de esta campaña maliciosa de PyPI.

De manera similar, el equipo de investigación no pudo obtener el entregable de la segunda etapa utilizado en estos ataques. Como se señaló, los puntos finales comprometidos que ReversingLabs observó simplemente sondearon servidores C2 esperando más comandos (y presumiblemente descargas). Pero no pudimos observar ningún intercambio activo, lo que podría indicar que los actores maliciosos no estaban utilizando activamente la infraestructura o que los puntos finales comprometidos que controlábamos no eran de su interés.

Al carecer de visibilidad sobre las últimas etapas de esta campaña, es imposible saber cuál era su objetivo final: ¿robo de datos sensibles o de propiedad intelectual? ¿Vigilancia? ¿Secuestro de datos? ¿Todo lo anterior? Se necesitan más datos que revelen toda la amplitud de esta campaña antes de que podamos especular sobre su intención.

Los indicadores de compromiso (IoC) se refieren a artefactos forenses o evidencia relacionada con una violación de seguridad o actividad no autorizada en una red o sistema informático. Los IOC desempeñan un papel crucial en las investigaciones de ciberseguridad y los esfuerzos de respuesta a incidentes cibernéticos, ayudando a los analistas y profesionales de la ciberseguridad a identificar y detectar posibles incidentes de seguridad.

Los siguientes IOC se recopilaron como parte de la investigación de ReversingLabs sobre la campaña de la cadena de suministro del software VMConnect.

45.61.139.219

ethertestnet.pro

deliworkshopexpress.xyz

Nombre del paquete

versión

SHA1

VMConectar

1.1.7

b0095f149951241c6e11e0d1be1f74e8cdfbdbb2

VMConectar

1.1.7

2ff1b3aa2dbff6d87447b250a8d19241e7853ab0

osinfopkg

0.0.2

67226da423ab4a2c97b2d008dec45280aaa5fdf5

osinfopkg

0.0.2

146942c5dbaba55be174b1bfb127410e332caa03

osinfopkg

0.0.3

0eb79e80c51c0e14be3620dfb237f7b53160a292

osinfopkg

0.0.3

bc2d48d6d9eeaf0b29625683942e90dfd2b75723

osinfopkg

0.0.4

9a276ca3678898f5596166416f7e709a2064e95c

osinfopkg

0.0.4

658605988c7afd9adf437fb64ff682cb4190f144

osinfopkg

1.0.1

5f03b73d56528ecbc3f24b8e7daec6b3d3370834

osinfopkg

1.0.1

19684554e4905bb3cf354a5d5a0f00d696f38926

osinfopkg

1.0.2

e531121b137182453f0d120be860ad882d2dc0a7

osinfopkg

1.0.2

b1f2d50be0aca0672475488d77c6f71a1b0633f8

osinfopkg

1.0.3

de4e9efeace6ff76dc00a166dca152dc3021d799

osinfopkg

1.0.3

664f0913a5952eeb77373f83e090fab7e94aa45e

osinfopkg

1.0.4

bd7ba47f730c2bc33afa67a39d9cbe3768f62426

osinfopkg

1.0.4

0dc723e77a5b97183a90eaecb62c9b7341e483ed

éter

0.9.1b1

6bf76b01bd17f370cd3f9947135bf250597d1ac1

éter

0.9.1b1

497df2fd2dba324be04cc57f50a3170b532aa70c

éter

1.10.1b1

d404a55f1f7fbcd8b3156a84ebcf97c57ba24b95

éter

1.10.1b1

9588affaf9d85e2141b9d76b914d9f89a8292574

bases de datos

0.7.0

dbc14c3ac0528a8aeb6edba8a0b2792dab131102

bases de datos

0.7.0

0b7b4444f820e9990dfeb5e2080321b5f25a9785

bases de datos

0.8.1

e6494b9a91862191556d77022e5577ddbe749ef4

bases de datos

0.8.1

a1b039f88c385f5c5eec2ef1701251c7341b1fcd

Estos últimos ejemplos de paquetes maliciosos en la plataforma PyPI son típicos en muchos sentidos. Imitan paquetes de código abierto populares y legítimos con decenas de miles de descargas mensuales y ocultan funciones maliciosas dentro de cadenas codificadas en Base64 que descargan comandos adicionales desde un servidor C2. El equipo de investigación de ReversingLabs ha observado muchas variaciones de este patrón de ataque en los últimos meses.

¿Qué significa esto para los equipos de seguridad y las organizaciones de desarrollo? La campaña VMConnect es un recordatorio de que las amenazas acechan en los repositorios de código abierto y que las prácticas estándar, como las revisiones automatizadas del código fuente, no son suficientes para eliminarlas.

El código fuente de los módulos maliciosos publicados en GitHub no era malicioso, pero era significativamente diferente del contenido de los paquetes de lanzamiento que eventualmente se compilan en los artefactos de lanzamiento como dependencias de terceros. Las pistas de que algo andaba mal, como cadenas codificadas en Base64, eran fáciles de detectar si se sabía dónde buscarlas. Aún así, estos indicadores a menudo pasan desapercibidos en las pruebas de seguridad de aplicaciones convencionales y en las revisiones manuales de código.

La plataforma ReversingLabs Software Supply Chain Security puede ayudarle en evaluaciones de seguridad, ayudando a detectar signos de funcionalidad maliciosa, evaluar dependencias de paquetes de terceros y proporcionar una amplia gama de indicadores de comportamiento. Estos indicadores se pueden extraer de varios formatos de archivos y usarse para detectar este tipo de amenaza antes de que genere la implementación de código malicioso en su entorno, causando daños financieros y a la reputación de su organización.

*** Este es un blog sindicado de Security Bloggers Network del blog ReversingLabs escrito por Karlo Zanki. Lea la publicación original en: https://www.reversinglabs.com/blog/vmconnect-malicious-pypi-packages-imitate-popular-open-source-modules

Figura 2: Ejecución de una cadena codificada en Base64 dentro del archivo __init__.py.Figura 3: La plantilla de URL C2, extraída de la cadena codificada en Base64, se modifica según la información de la máquina host.Figura 4: Bucle de ejecución y recuperación de comandos extraído de la cadena codificada en Base64 presente en el__init__.pyarchivo.Figura 5: Perfil PyPI del usuario hushki502.Figura 6: Descripción del paquete VMConnect.Figura 7: Perfil de Github del usuario hushki502.Figura 8: Versión benigna de__init__.pyarchivo presente en el repositorio de Github.Figura 9: Descripción de Github del proyecto malicioso VMConnect.Figura 10: Descripción de Github del proyecto vConnector legítimo.