
Se sospecha que los atacantes detrás del ataque a la cadena de suministro dirigido al popular escáner Trivy llevaron a cabo un ataque de seguimiento que llevó al compromiso de numerosos paquetes npm con un gusano autopropagante previamente indocumentado llamado CanisterWorm.
El nombre proviene del hecho de que el malware utiliza un contenedor ICP, que se refiere a un contrato inteligente a prueba de manipulaciones en la cadena de bloques de la computadora de Internet, como un solucionador de caídas muertas. Este desarrollo marca la primera explotación documentada públicamente de un recipiente ICP con el propósito expreso de obtener un servidor de comando y control (C2), dijo el investigador de seguridad de Aikido Charlie Eriksen.
La lista de paquetes afectados se encuentra a continuación:
@EmilGroup 28 paquetes en alcance @opengov 16 paquetes en alcance @teale.io/eslint-config @airtm/uuid-base32 @pypestream/floating-ui-dom
Este desarrollo se produce menos de un día después de que los actores de amenazas aprovecharan las credenciales comprometidas para publicar el lanzamiento de Tribby, Tribby Action y Setup Tribby maliciosos, incluido un ladrón de credenciales. Se sospecha que una operación de cibercrimen centrada en la nube conocida como TeamPCP está detrás de este ataque.
La cadena de infección que involucra paquetes npm implica aprovechar un gancho posterior a la instalación para ejecutar el cargador. Luego, el cargador coloca una puerta trasera de Python que es responsable de conectarse al punto muerto del contenedor ICP y obtener una URL que apunte a la carga útil de la siguiente etapa. Debido a que la infraestructura de dead drop está descentralizada, es resiliente y resistente a los esfuerzos de eliminación.
«Los controladores de recipientes pueden intercambiar URL en cualquier momento y enviar nuevos archivos binarios a todos los hosts infectados sin tocar el implante», dijo Eriksen.
La persistencia la establece el servicio de usuario systemd. Este servicio está configurado para iniciar automáticamente la puerta trasera de Python después de un retraso de 5 segundos si finaliza por cualquier motivo utilizando la directiva «Restart=always». El servicio systemd se disfraza de herramienta PostgreSQL («pgmon»).
Como se mencionó anteriormente, la puerta trasera llama al contenedor ICP cada 50 minutos con un agente de usuario de navegador falso y recupera la URL en texto claro. Luego se analiza la URL y se recupera y ejecuta el archivo ejecutable.
«Si la URL contiene youtube(.)com, el script la omitirá», explicó Eriksen. «Esto es la Hibernación del Canister. El atacante desarma el implante apuntando el Canister al binario real, y lo desarma apuntándolo nuevamente al enlace de YouTube. Una vez que el atacante actualiza el Canister para que apunte a la nueva URL, todas las máquinas infectadas obtendrán el nuevo binario en la siguiente encuesta. El binario antiguo continuará ejecutándose en segundo plano porque el script no finaliza el proceso anterior».
Vale la pena señalar que Wiz también detectó un interruptor de apagado similar basado en youtube(.)com en relación con el binario troyanizado Trivy (versión 0.69.4). Este binario también accede al mismo recipiente ICP a través de un cuentagotas de Python (‘sysmon.py’). Al momento de escribir este artículo, la URL devuelta por C2 es un video de Rickroll en YouTube.
Hacker News descubrió que ICP Canister admite tres métodos: get_latest_link, http_request y update_link. Esto permite a los actores de amenazas cambiar su comportamiento y entregar la carga útil real en cualquier momento.
Además de esto, el paquete viene con un archivo «deploy.js» que el atacante ejecuta manualmente para distribuir la carga maliciosa a todos los paquetes a los que el token npm robado brinda acceso de manera programática. Se dice que el gusano está codificado por vibración utilizando herramientas de inteligencia artificial (IA) y no intenta ocultar su funcionalidad.
«Esto no es causado por la instalación de npm», dijo Aikido. «Esta es una herramienta independiente que los atacantes ejecutan utilizando tokens robados para maximizar el radio de explosión».
Para empeorar las cosas, se descubrió que las iteraciones posteriores de CanisterWorm detectadas en las versiones 1.8.11 y 1.8.12 de ‘@teale.io/eslint-config’ se autopropagaban sin necesidad de intervención manual.
A diferencia de «deploy.js», que es un script autónomo que el atacante necesitaba ejecutar utilizando un token npm robado para enviar una versión maliciosa del paquete npm al registro, la nueva variante incorpora esta funcionalidad en «index.js» dentro de la función findNpmTokens() que se ejecuta durante la fase posterior a la instalación para recopilar el token de autenticación npm de la máquina víctima.
La principal diferencia aquí es que el script posterior a la instalación, después de instalar la puerta trasera persistente, intenta encontrar todos los tokens npm del entorno del desarrollador e inmediatamente genera el gusano usando esos tokens iniciando «deploy.js» como un proceso en segundo plano completamente aislado.
Curiosamente, los atacantes supuestamente reemplazaron la carga útil de la puerta trasera de ICP con una cadena de prueba ficticia («hello123») para garantizar que toda la cadena de ataque funcionara según lo previsto antes de agregar el malware.
«Este es el punto en el que el ataque pasa de ‘la cuenta comprometida expone malware’ a ‘el malware compromete más cuentas y se expone a sí mismo'», dijo Eriksen. «Cada desarrollador o canal de CI que instala este paquete y tiene acceso al token npm, sin saberlo, se convierte en un vector de propagación. El paquete se infecta, los usuarios intermedios lo instalan y, si alguno de ellos tiene el token, el ciclo se repite».
(Esta es una historia en desarrollo. Vuelva a consultarla para obtener más detalles).
Source link
