SOC Prime Bias: Crítico

19 Ene 2026 19:11

GlassWorm se Cambia a Mac: Nueva Infraestructura, Nuevos Trucos

Author Photo
Ruslan Mikhalov Chief of Threat Research at 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 %% Class Definitions classDef action fill:#99ccff classDef technique fill:#ffcc99 classDef operator fill:#ff9900 classDef tool fill:#cccccc %% Nodes 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 IDE de VS Code<br/><b>Descripción</b>: Un 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 período (e.g., 15 minutos) antes de ejecutar su carga útil para evadir análisis."] class technique_delay technique technique_decrypt["<b>Técnica</b> – T1027.009 / T1027.004: Desencriptar Carga Útil AESu2011256u2011CBC<br/><b>Descripción</b>: La carga útil encriptada se desencripta en memoria usando AESu2011CBC con una clave de 256 bits."] class technique_decrypt technique technique_c2_retrieve["<b>Técnica</b> – T1573.001: Recopilar Endpoint del Blockchain de Solana<br/><b>Descripción</b>: La dirección del servidor C2 se almacena en un blockchain público y es recuperada por el malware."] class technique_c2_retrieve technique technique_c2_fetch["<b>Técnica</b> – T1048.003: Transferencia de Datos de Protocolo No Encriptado<br/><b>Descripción</b>: El malware contacta el endpoint del C2 usando un protocolo no encriptado (e.g., 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 añadir comandos maliciosos."] class technique_modify_plist technique technique_dump_keychain["<b>Técnica</b> – T1555.001 / T1555.002: Volcar Llavero<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 recogen 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 recogidos se copian en /tmp/ijewf para exfiltración posterior."] class technique_stage_data technique technique_archive["<b>Técnica</b> – T1560.001 / T1560.003: Archivar Datos Recogidos<br/><b>Descripción</b>: Los datos se comprimen en un formato de archivo (e.g., zip)."] class technique_archive technique technique_exfil["<b>Técnica</b> – T1048.003: Exfiltración por Canal No Encriptado No C2<br/><b>Descripción</b>: Se envía el archivo preparado a través de un canal no encriptado no ligado 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 monederos de criptomonedas se cambian por versiones troyanizadas para capturar activos de usuario."] class technique_impact technique %% Connections action_initial_access –>|usa| technique_vs_code_ext technique_vs_code_ext –>|desencadena| technique_delay technique_delay –>|lleva a| technique_decrypt technique_decrypt –>|establece| technique_c2_retrieve technique_c2_retrieve –>|contacta| technique_c2_fetch technique_c2_fetch –>|instala| technique_persistence_agent technique_c2_fetch –>|instala| technique_persistence_daemon technique_persistence_agent –>|modifica| technique_modify_plist technique_persistence_daemon –>|modifica| technique_modify_plist technique_modify_plist –>|habilita| technique_dump_keychain technique_dump_keychain –>|habilita| technique_steal_keys technique_steal_keys –>|almacena en| technique_stage_data technique_stage_data –>|archiva| technique_archive technique_archive –>|exfiltra vía| technique_exfil technique_exfil –>|facilita| technique_priv_esc technique_priv_esc –>|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."