Mientras esperas una llamada, desconocidos revisan tus archivos.
Un grupo vinculado a Corea del Norte ataca activamente a empresas que operan en el sector Web3 y de criptomonedas utilizando malware escrito en el lenguaje de programación Nim. Estas acciones demuestran la mejora continua de las tácticas y técnicas por parte de los ciberdelincuentes.
Según informaron los especialistas de la empresa SentinelOne, el malware presenta una funcionalidad poco común para macOS: el uso de la tecnología de inyección de procesos y el protocolo seguro wss para la interacción remota, que representa una versión cifrada de WebSocket.
Uno de los aspectos más sofisticados es el mecanismo de persistencia del malware en el sistema. Se implementa a través de los manejadores de señales del sistema SIGINT y SIGTERM. Esto permite mantener la presencia del código malicioso incluso si el proceso se detiene o si el sistema se reinicia.
El nuevo malware ha sido denominado NimDoor. Anteriormente, algunos elementos de esta campaña ya fueron descritos por los grupos de investigación Huntabil.IT, Huntress y Validin, pero el ataque actual se distingue por los módulos maliciosos utilizados.
El escenario del ataque comienza con ingeniería social. Los atacantes se ponen en contacto con las víctimas potenciales a través de mensajerías como Telegram, ofreciendo organizar una videollamada mediante la plataforma Zoom. Se utiliza el servicio Calendly para programar la reunión. Luego, la víctima recibe un correo electrónico supuestamente con un enlace para unirse a la reunión de Zoom e instrucciones para ejecutar una actualización del SDK de Zoom para “garantizar la compatibilidad”.
De hecho, el usuario ejecuta un AppleScript que descarga desde un servidor externo la segunda etapa del código malicioso. Al mismo tiempo, se redirige al usuario al sitio oficial de Zoom, lo que crea la ilusión de legitimidad del proceso. A continuación, se extraen archivos ZIP con ejecutables que aseguran la persistencia del malware en el sistema y ejecutan scripts bash para el robo de datos.
El elemento clave de la infección es un cargador en C++ llamado InjectWithDyldArm64 (también conocido como InjectWithDyld). Este módulo descifra dos archivos binarios integrados: Target y trojan1_arm64. Luego, el cargador inicia Target en estado suspendido e inyecta en él el código ejecutable del segundo archivo. Después de esto, el proceso Target se reanuda.
La siguiente etapa es establecer una conexión con un servidor remoto y ejecutar los comandos recibidos. Los atacantes pueden recopilar información del sistema, ejecutar comandos arbitrarios y modificar los directorios de trabajo. Todos los resultados se envían de vuelta al servidor de control.
El módulo malicioso trojan1_arm64 puede descargar componentes adicionales especializados en la recolección de credenciales de navegadores populares como Arc, Brave, Google Chrome, Microsoft Edge y Mozilla Firefox. Además, los atacantes roban datos del mensajero Telegram.
Se destaca el uso de ejecutables escritos en Nim, que sirven como plataforma para ejecutar CoreKitAgent. Esta parte del complejo malicioso supervisa los intentos del usuario de finalizar los procesos del malware y restaura rápidamente su presencia, lo que hace que el sistema sea extremadamente resistente a las acciones de defensa básicas.
El código malicioso también ejecuta un script en AppleScript que cada 30 segundos envía una señal a uno de los dos servidores predeterminados y transmite una lista de procesos activos. A través de este canal también se ejecutan comandos adicionales recibidos de los atacantes.
Toda esta campaña evidencia el creciente interés de los grupos norcoreanos en macOS y el uso de AppleScript como herramienta de post-explotación y robo de datos. Anteriormente, grupos similares ya habían utilizado los lenguajes Go y Rust para construir cadenas de ataque de múltiples etapas.
La elección del lenguaje Nim en este caso se debe a sus capacidades para complicar la estructura del código. Gracias a las particularidades de su compilación, la funcionalidad puede ocultarse dentro de los archivos binarios de tal forma que la frontera entre el código de usuario y el del sistema se vuelve prácticamente indistinguible.