Ciberdelincuentes ocultaron un troyano de acceso remoto (RAT) en un proveedor de Terraform y apuntaron a desarrolladores

Ciberdelincuentes ocultaron un troyano de acceso remoto (RAT) en un proveedor de Terraform y apuntaron a desarrolladores

El paquete falsificado difería del original popular en una sola letra.

image

El código de infraestructura resultó ser una trampa conveniente para las máquinas de trabajo de los desarrolladores. Aikido descubrió código malicioso en dos proveedores de Terraform y en dos módulos de Go. La empresa considera el hallazgo como el primer caso conocido por ella de distribución sistemática de malware a través del Terraform Registry.

Los proveedores gocommunity-io/dockerd y kreuzwenker/docker, publicados a comienzos de septiembre, resultaron ser peligrosos. El segundo imita al popular kreuzwerker/docker, que tiene alrededor de 56 millones de descargas. Un proveedor de Terraform es un complemento mediante el cual Terraform gestiona servicios externos, por lo que ese componente se ejecuta directamente en la máquina del desarrollador o en el entorno de CI/CD.

La lógica maliciosa casi no se detecta en una revisión habitual. El código en ambos proveedores se activa solo cuando el SHA-256 de los valores combinados containerName y networkID coincide con un hash predeterminado. Tras la coincidencia, el programa descifra la ruta al archivo oculto, extrae su contenido, desencripta los archivos con AES y ejecuta el código Go obtenido mediante un comando separado.

En la segunda etapa se carga un RAT, es decir, un troyano de acceso remoto. El programa recopila información sobre el sistema operativo, la arquitectura, el nombre del equipo, el usuario y la presencia de Node.js, tras lo cual se conecta con la infraestructura de control. Las órdenes llegan por dos canales independientes: Slack y un contrato inteligente en la red de pruebas Arbitrum Sepolia, y luego pueden ejecutar código adicional en Go o JavaScript.

Ese esquema dificulta el análisis. El RAT consulta la cadena de bloques aproximadamente cada tres segundos y Slack cada diez segundos, y los mensajes se cifran con claves distintas para los clientes infectados. En una sandbox habitual, el proveedor puede no mostrar comportamiento malicioso en absoluto si el equipo que verifica no reproduce los parámetros de ejecución necesarios.

Paralelamente, los atacantes distribuyeron el mismo código mediante los módulos de Go gocommunity.io/orderedbtree y gogets.dev/btreex. En el segundo caso, el archivo se disfrazó como un archivo SQL, y la ejecución también se vinculó a un valor de entrada especial. Los autores de la campaña falsificaron las fechas de los commits, por lo que parte del historial del proyecto parecía anterior a la publicación real del paquete en septiembre.

Para ocultarse, los operadores crearon los dominios gocommunity[.]io y gogets[.]dev, que representaban nuevos ecosistemas de paquetes de Go. Una táctica similar ya había afectado a npm, PyPI, Go Modules y otras plataformas, donde dependencias maliciosas se hacían pasar por herramientas habituales de desarrollo. Según Aikido, los nuevos dominios debían aumentar la confianza en los paquetes falsos.

Los rastros de la infraestructura y la clave pública compartida vinculan las nuevas muestras con la campaña Graphalgo. ReversingLabs en febrero vinculó Graphalgo con el grupo norcoreano Lazarus Group, que atraía a desarrolladores con ofertas de trabajo ficticias y pruebas. Aikido habla de un cruce técnico de los nuevos paquetes con esa campaña, y no de la atribución independiente de cada episodio.

En mensajes públicos del gestor del canal de Slack, Aikido identificó 18 nombres de host únicos. Entre ellos, tres máquinas Windows, cinco sistemas Linux y diez equipos con macOS. La escala parece limitada, y las condiciones selectivas de ejecución apuntan más a una operación focalizada. Anteriormente, los atacantes ya habían sustituido módulos de Terraform mediante la infraestructura comprometida de Coder.

Aikido recomienda considerar comprometida toda la máquina o el ejecutor de CI/CD donde se haya ejecutado cualquiera de los cuatro componentes. La empresa recomienda aislar el sistema, reemplazar los tokens vinculados de GitHub, GitLab y de los registros de paquetes, las credenciales en la nube y las claves SSH, revisar el historial de acciones, eliminar las dependencias maliciosas y reinstalar el sistema, ya que eliminar el paquete no es suficiente.