SOC Prime Bias: Crítico

19 Ene 2026 19:11

GlassWorm se Cambia a Mac: Nueva Infraestructura, Nuevos Trucos

Author Photo
Ruslan Mikhalov Jefe de Investigación de Amenazas en SOC Prime linkedin icon Seguir
GlassWorm se Cambia a Mac: Nueva Infraestructura, Nuevos Trucos
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

El actor de amenaza detrás de GlassWorm ha pasado de actividades enfocadas en Windows a macOS, distribuyendo extensiones maliciosas de VS Code que obtienen cargas útiles de JavaScript encriptadas a través de punteros C2 derivados de la blockchain de Solana. Esta ola amplía su capacidad al añadir troyanización de monederos de hardware mientras continúa con el robo de credenciales a gran escala a través de navegadores, herramientas de desarrollo y el llavero de macOS. La infraestructura incluye una dirección de monedero de Solana y una IP reutilizada de operaciones anteriores de GlassWorm, lo que sugiere continuidad en las herramientas y alojamiento del operador. Los investigadores observaron más de 50,000 descargas antes de que las extensiones fueran eliminadas, indicando una exposición significativa en entornos de desarrollo.

Investigación

Koi Security identificó tres extensiones maliciosas de VS Code en el mercado Open VSX y vinculó su flujo de trabajo de comando y control a un monedero de Solana más una dirección IP compartida previamente asociada a GlassWorm. Los implantes incorporan un retraso de ejecución de 15 minutos, luego desencriptan y ejecutan una carga útil de JavaScript AES-256-CBC. En macOS, la persistencia se establece a través de LaunchAgents. Los objetivos de recopilación incluyen monederos de navegador y datos de monederos de escritorio, tokens de acceso de desarrolladores, claves SSH y material del llavero de macOS. El malware almacena datos robados en /tmp/ijewf/ antes de la exfiltración hacia una ruta de servidor que se asemeja a /p2p. También intenta reemplazar aplicaciones de acompañamiento de moneders de hardware legítimas, como Ledger Live y Trezor Suite, con versiones troyanizadas para capturar secretos y transacciones de alto valor.

Mitigación

Refuerza los controles en las herramientas de desarrollo al hacer cumplir la lista blanca de extensiones y requerir una revisión de seguridad para las extensiones de VS Code, particularmente aquellas provenientes de mercados abiertos. Despliega detecciones en tiempo de ejecución para patrones de ejecución retrasada y creación o modificación sospechosa de LaunchAgents. Monitorea y bloquea la actividad saliente sospechosa asociada con búsquedas de C2 derivadas de Solana, y agrega detecciones de red para conexiones inusuales hacia la IP identificada reutilizada. Requiere MFA para cuentas de desarrolladores y en la nube e implementa verificaciones de integridad en monederos de hardware (validación de editor, notarización/verificación de firma y canales controlados de actualizaciones de software).

Respuesta

Genera alertas sobre LaunchAgents nuevos o modificados, acceso anómalo a almacenes del llavero y intentos de recuperación desde puntos de referencia C2 en Solana. Aísla y elimina las extensiones maliciosas de VS Code, luego erradica cualquier persistencia asociada con LaunchAgent. Realiza forenses dirigidos en /tmp/ijewf/ para delimitar el almacenamiento de credenciales y confirmar qué datos se recopilaron. Valida la integridad de las aplicaciones de monederos de hardware (Ledger Live, Trezor Suite) y reinstala desde fuentes confiables si se sospecha manipulación. Restaura credenciales afectadas, rota claves SSH y tokens de desarrolladores, invalida sesiones, y amplía la caza en los endpoints para los mismos IDs de extensiones, rutas de archivos y artefactos de persistencia.

«graph TB %% Definiciones de Clase classDef action fill:#99ccff classDef technique fill:#ffcc99 classDef operator fill:#ff9900 classDef tool fill:#cccccc %% Nodos action_initial_access[«<b>Acción</b> – Acceso Inicial»] class action_initial_access action technique_vs_code_ext[«<b>Técnica</b> – T1176.002: Extensión Maliciosa de VS Code IDE<br /><b>Descripción</b>: El adversario entrega una extensión maliciosa para Visual Studio Code que ejecuta código en el sistema de la víctima.»] class technique_vs_code_ext technique technique_delay[«<b>Técnica</b> – T1497.003: Retraso de Ejecución<br /><b>Descripción</b>: El malware espera un periodo (p. ej., 15 minutos) antes de ejecutar su carga útil para evadir el análisis.»] class technique_delay technique technique_decrypt[«<b>Técnica</b> – T1027.009 / T1027.004: Descifrar Carga Útil AESu2011256u2011CBC<br /><b>Descripción</b>: La carga útil cifrada se descifra en memoria utilizando AESu2011CBC con una clave de 256 bits.»] class technique_decrypt technique technique_c2_retrieve[«<b>Técnica</b> – T1573.001: Recuperar Punto Final de Blockchain Solana<br /><b>Descripción</b>: La dirección del servidor C2 se almacena en una blockchain pública y es obtenida por el malware.»] class technique_c2_retrieve technique technique_c2_fetch[«<b>Técnica</b> – T1048.003: Transferencia de Datos de Protocolo Sin Cifrar<br /><b>Descripción</b>: El malware contacta el punto final C2 utilizando un protocolo sin cifrar (p. ej., HTTP).»] class technique_c2_fetch technique technique_persistence_agent[«<b>Técnica</b> – T1543.001: Instalar LaunchAgent<br /><b>Descripción</b>: Un plist de LaunchAgent se coloca en el directorio LaunchAgents del usuario para persistencia.»] class technique_persistence_agent technique technique_persistence_daemon[«<b>Técnica</b> – T1543.004: Instalar LaunchDaemon<br /><b>Descripción</b>: Un plist de LaunchDaemon se coloca en el directorio LaunchDaemons del sistema para persistencia.»] class technique_persistence_daemon technique technique_modify_plist[«<b>Técnica</b> – T1647: Modificar Archivo PLIST<br /><b>Descripción</b>: El atacante edita el plist para alterar el comportamiento de inicio o agregar comandos maliciosos.»] class technique_modify_plist technique technique_dump_keychain[«<b>Técnica</b> – T1555.001 / T1555.002: Volcar Llaveros<br /><b>Descripción</b>: Se extrae material de credenciales del llavero de macOS.»] class technique_dump_keychain technique technique_steal_keys[«<b>Técnica</b> – T1552.001 / T1552.004: Robar Claves Privadas y Tokens<br /><b>Descripción</b>: Se recopilan claves privadas de criptomonedas y tokens de autenticación.»] class technique_steal_keys technique technique_stage_data[«<b>Técnica</b> – T1074: Datos Preparados<br /><b>Descripción</b>: Los archivos recopilados se copian en /tmp/ijewf para su posterior exfiltración.»] class technique_stage_data technique technique_archive[«<b>Técnica</b> – T1560.001 / T1560.003: Archivar Datos Recopilados<br /><b>Descripción</b>: Los datos se comprimen en un formato de archivo (p. ej., zip).»] class technique_archive technique technique_exfil[«<b>Técnica</b> – T1048.003: Exfiltración a Través de Canal no Cifrado no-C2<br /><b>Descripción</b>: El archivo preparado se envía a través de un canal no cifrado que no está vinculado al C2 principal.»] class technique_exfil technique technique_priv_esc[«<b>Técnica</b> – T1548.006: Manipulación de TCC<br /><b>Descripción</b>: La base de datos de Transparencia, Consentimiento y Control de macOS se modifica para obtener privilegios más altos.»] class technique_priv_esc technique technique_impact[«<b>Técnica</b> – T1496.002: Reemplazar Ledger Live / Trezor Suite<br /><b>Descripción</b>: Las aplicaciones legítimas de billeteras de criptomonedas se reemplazan con versiones troyanizadas para capturar los activos del usuario.»] class technique_impact technique %% Conexiones action_initial_access u002du002d>|usa| technique_vs_code_ext technique_vs_code_ext u002du002d>|activa| technique_delay technique_delay u002du002d>|conduce a| technique_decrypt technique_decrypt u002du002d>|establece| technique_c2_retrieve technique_c2_retrieve u002du002d>|contacta| technique_c2_fetch technique_c2_fetch u002du002d>|instala| technique_persistence_agent technique_c2_fetch u002du002d>|instala| technique_persistence_daemon technique_persistence_agent u002du002d>|modifica| technique_modify_plist technique_persistence_daemon u002du002d>|modifica| technique_modify_plist technique_modify_plist u002du002d>|habilita| technique_dump_keychain technique_dump_keychain u002du002d>|habilita| technique_steal_keys technique_steal_keys u002du002d>|almacena en| technique_stage_data technique_stage_data u002du002d>|archiva| technique_archive technique_archive u002du002d>|exfiltra vía| technique_exfil technique_exfil u002du002d>|facilita| technique_priv_esc technique_priv_esc u002du002d>|habilita| technique_impact «

Flujo de Ataque

Ejecución de Simulación

Prerrequisito: La Comprobación Previa de Telemetría y Línea Base debe haber pasado.

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 tienen como objetivo generar la telemetría exacta esperada por la lógica de detección. Ejemplos abstractos o no relacionados conducirán a diagnósticos erróneos.

  • Narrativa del Ataque y Comandos:
    Un atacante que ya ha comprometido una cuenta de usuario de macOS con privilegios bajos desea recolectar una contraseña de cuenta de servicio almacenada en el Llavero bajo la etiqueta pass_users_for_script. Para evitar dejar caer un binario separado, el atacante escribe un AppleScript de una línea que invoca la herramienta incorporada security a través de do shell script. El script se ejecuta directamente en la sesión del usuario, produciendo un evento de creación de proceso con la línea de comando exacta que la regla Sigma coincide.

    # Crear un elemento de llavero de prueba (solo para demostración; un atacante real apuntaría a un elemento existente)
    security add-generic-password -a attacker -s pass_users_for_script -w SuperSecret123
    
    # Ejecutar el AppleScript que lee la contraseña
    osascript -e 'do shell script "security find-generic-password -s '''pass_users_for_script''' -w"'
  • Script de Prueba de Regresión:

    #!/usr/bin/env bash
    set -euo pipefail
    
    # Paso 1: Asegurarse de que la entrada de llavero objetivo exista (idempotente)
    if ! security find-generic-password -s pass_users_for_script -w >/dev/null 2>&1; then
        security add-generic-password -a attacker -s pass_users_for_script -w SuperSecret123
    fi
    
    # Paso 2: Ejecutar el AppleScript que activa la regla de detección
    echo "[+] Ejecutando AppleScript para leer la entrada del llavero..."
    osascript -e 'do shell script "security find-generic-password -s '''pass_users_for_script''' -w"'
  • Comandos de Limpieza:

    # Eliminar el elemento de llavero de prueba para dejar el sistema limpio
    security delete-generic-password -s pass_users_for_script
    echo "[+] Limpieza completada: entrada de llavero de prueba eliminada."