Ataque a la Cadena de Suministro de Rust Apunta a arrayref, internment y append-only-vec
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
Un sofisticado ataque a la cadena de suministro apuntó al ecosistema de Rust comprometiendo una cuenta legítima de mantenedor y utilizando una identidad de errores tipográficos para inyectar dependencias maliciosas en tiempo de construcción. Los atacantes envenenaron tres crates ampliamente utilizados, arrayref, internment, y append-only-vec, para ejecutar un dropper de ejecución remota de código durante el proceso de compilación de Cargo. Esto permitió la ejecución silenciosa de código en estaciones de trabajo de desarrolladores y en pipelines de CI/CD durante la compilación rutinaria.
Investigación
Los investigadores analizaron el ataque utilizando Harden-Runner, que capturó el script de construcción malicioso intentando una conexión saliente a un servidor de payload a través del puerto 9089. La revisión forense del historial de Git de crates.io-index reveló la inserción dirigida de dependencias maliciosas y un señuelo de descontinuación y actualización diseñado para empujar a los desarrolladores hacia versiones comprometidas. Los investigadores también identificaron mecanismos secundarios de persistencia y comportamientos de C2 reportados por usuarios afectados.
Mitigación
La mitigación inmediata incluye fijar crates legítimas a versiones verificadas como seguras y auditar los archivos Cargo.lock en busca de versiones de dependencias comprometidas. Las organizaciones deben purgar los cachés locales y de CI/CD, incluyendo ~/.cargo/registry/cache, para eliminar los archivos .crate maliciosos. El filtrado de salidas para conexiones salientes inusuales desde entornos de construcción y una estricta disciplina de archivos de bloqueo también son defensas críticas a largo plazo.
Respuesta
Si se encuentran versiones afectadas en un archivo de bloqueo, el entorno de construcción debe ser tratado como comprometido y todas las credenciales accesibles, incluidas las claves SSH, los tokens de la nube y los secretos de CI/CD, deben ser rotados. Los sistemas de los desarrolladores deben ser examinados en busca de artefactos de persistencia como servicios systemd no autorizados o archivos sospechosos en los directorios de configuración. Todos los artefactos de software producidos durante el período de exposición deben ser reconstruidos desde fuentes limpias y verificadas.
Flujo de Ataque
Detecciones
Posibles Puntos de Persistencia [ASEPs – Software/NTUSER Hive] (vía registry_event)
Posibles Comunicaciones C2 sobre HTTP a IP Directa con Puerto Poco Común (vía proxy)
Se creó un Archivo Oculto en un Host Linux (vía file_event)
IOCs (HashSha256) para detectar: Ataque de Cadena de Suministro de Rust: arrayref, internment, y append-only-vec envenenados por el dropper de tiempo de construcción proc-macro1
IOCs (SourceIP) para detectar: Ataque de Cadena de Suministro de Rust: arrayref, internment, y append-only-vec envenenados por el dropper de tiempo de construcción proc-macro1
IOCs (DestinationIP) para detectar: Ataque de Cadena de Suministro de Rust: arrayref, internment, y append-only-vec envenenados por el dropper de tiempo de construcción proc-macro1
Detección de Conexión de Red Saliente Anómala [Conexión de Red de Windows]
Ejecución de PowerShell y VBScript Malicioso en Ataque de Cadena de Suministro de Rust [Windows Powershell]
Ejecución de Proceso de Construcción Sospechoso en el Directorio Temporal de Unix [Creación de Proceso en Linux]
Ejecución de Simulación
Requisito Previo: El Chequeo Pre-vuelo de Telemetría y Línea de Base debe haber sido aprobado.
Justificación: Esta sección detalla la ejecución precisa de la técnica del adversario (TTP) diseñada para activar la regla de detección. Los comandos y la narrativa DEBEN reflejar directamente los TTPs identificados y apuntar a generar la telemetría exacta esperada por la lógica de detección. Ejemplos abstractos o no relacionados conducirán a un diagnóstico erróneo.
-
Narrativa de Ataque y Comandos: El adversario ha inyectado con éxito un crate malicioso en un proyecto de Rust. Cuando se inicia el proceso de compilación, el
script build.rsejecuta un hilo de fondo que intenta establecer una conexión con un servidor C2 remoto en el puerto 9089 para obtener un payload. Esto simula la «Conexión de Red Saliente Anómala» descrita en la regla. El objetivo es activar la alerta de registro de cortafuegos/red al acceder al puerto específico9089. -
Script de Prueba de Regresión:
# Simular un dropper en tiempo de construcción intentando conectarse a un servidor C2 en el puerto 9089 # Usamos un cliente TCP para simular el intento de conexión de red. $C2_IP = "127.0.0.1" # Localhost para evitar tráfico externo real durante las pruebas $C2_PORT = 9089 Write-Host "Simulando actividad de red del proceso de construcción..." -ForegroundColor Cyan try { $client = New-Object System.Net.Sockets.TcpClient $beginConnect = $client.BeginConnect($C2_IP, $C2_PORT, $null, $null) $success = $beginConnect.AsyncWaitHandle.WaitOne(1000, $false) if ($success) { Write-Host "¡Conexión exitosa! Debería generarse telemetría." -ForegroundColor Green $client.EndConnect($beginConnect) } else { Write-Host "Conexión fallida (esperado si no hay oyente activo), pero la telemetría debería mostrar el intento." -ForegroundColor Yellow } $client.Close() } catch { Write-Host "Error durante la simulación: $($_.Exception.Message)" -ForegroundColor Red } -
Comandos de Limpieza:
# No se realizaron cambios persistentes con el script; sin embargo, asegúrese de que cualquier oyente local esté detenido. # Si se inició un oyente para pruebas, use: Stop-Process -Name "nc" -ErrorAction SilentlyContinue Write-Host "Limpieza completa." -ForegroundColor Green