La campaña de Safari de Corea del Norte entrega RATs
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
El artículo describe un nuevo marco de malware para macOS llamado Mach-O Man que ha sido vinculado a la famosa unidad Chollima del Grupo Lazarus. El malware se distribuye a través de cuentas de Telegram comprometidas e invitaciones a reuniones falsas que convencen a los objetivos de ejecutar un comando ClickFix en sus dispositivos. El conjunto de herramientas incluye varios binarios Mach-O diseñados para recopilar detalles del host, mantener la persistencia y robar credenciales y datos del navegador, con la exfiltración ocurriendo a través de Telegram. La campaña parece centrarse en intercambios de criptomonedas y otras organizaciones en el sector financiero.
Investigación
Los investigadores identificaron un binario de puesta en escena llamado teamsSDK.bin que fue descargado y ejecutado a través de una secuencia de comandos maliciosos. Componentes adicionales, incluidos D1yCPUyk.bin, minst2.bin, y macrasv2, fueron usados luego para enumerar el sistema, crear un LaunchAgent para persistencia y cosechar extensiones del navegador, datos del llavero y cookies. La comunicación de comando y control dependía de un servidor HTTP basado en Go que exponía un punto final sin autenticación /info y filtraba un token de API de bot de Telegram. Los investigadores también encontraron servicios de acceso remoto como RDP, WinRM y Chrome Remote Desktop expuestos en el host C2.
Mitigación
Los usuarios deben evitar interactuar con enlaces a reuniones no solicitadas y confirmar la legitimidad de cualquier comando de terminal sugerido durante conversaciones inesperadas. Las organizaciones deben monitorear agentes de lanzamiento no autorizados, requerir firmas de código confiables para binarios de macOS y restringir la ejecución de archivos desconocidos. Las defensas de red deben bloquear conexiones salientes a servidores HTTP basados en Go sospechosos y marcar el tráfico usando el Go-http-client agente de usuario. Los tokens de bot de Telegram deben protegerse de la exposición, y los servicios de escritorio remoto deben ser asegurados con controles de acceso de menor privilegio.
Respuesta
Los equipos de seguridad deben detectar la ejecución de archivos .bin desconocidos y monitorear la creación de LaunchAgents nombrados com.onedrive.launcher. También se deben activar alertas en conexiones salientes a infraestructura sospechosa utilizando el Go-http-client agente de usuario, así como solicitudes POST repetidas a /info puntos finales. Los defensores deben observar actividad inesperada de la API de Telegram vinculada a tokens de bot desconocidos. Se debe realizar una forensía completa del host para identificar y eliminar todos los binarios maliciosos, seguida de restablecimientos de credenciales para cualquier cuenta que pueda haber sido comprometida.
"graph TB %% Class Definitions Section classDef action fill:#99ccff classDef tool fill:#cccccc classDef malware fill:#ffcc99 classDef process fill:#e6ffe6 classDef file fill:#ffe6cc classDef service fill:#e6e6ff %% Node Definitions initial_access_user_execution["<b>Action</b> – <b>T1204.001 Ejecución del Usuario</b><br/>La víctima hace clic en un enlace ‘fix’ malicioso en una reunión de Telegram que ejecuta un comando curl"] class initial_access_user_execution action tool_curl["<b>Herramienta</b> – <b>Nombre</b>: curl<br/><b>Descripción</b>: utilidad de línea de comando para transferir datos desde o hacia un servidor"] class tool_curl tool file_teamsSDK_bin["<b>Archivo</b> – <b>Nombre</b>: teamsSDK.bin (Mach-O)<br/><b>Descripción</b>: Binario de puesta en escena descargado y ejecutado"] class file_teamsSDK_bin file process_curl_download["<b>Proceso</b> – descarga y ejecuta curl teamsSDK.bin"] class process_curl_download process malware_teamsSDK["<b>Malware</b> – <b>Nombre</b>: teamsSDK<br/><b>Descripción</b>: contacta C2 después de la ejecución"] class malware_teamsSDK malware service_go_http["<b>Servicio</b> – Servidor HTTP basado en Go<br/><b>Puerto</b>: 80/443<br/><b>Punto Final</b>: /info (sin autenticación)"] class service_go_http service process_c2_communication["<b>Proceso</b> – Comunica con C2 vía HTTP POST a /info"] class process_c2_communication process file_minst2_bin["<b>Archivo</b> – <b>Nombre</b>: minst2.bin"] class file_minst2_bin file process_install_launchagent["<b>Proceso</b> – Instala LaunchAgent plist para persistencia"] class process_install_launchagent process malware_fake_onedrive["<b>Malware</b> – Falso binario ‘OneDrive’ lanzado al iniciar sesión"] class malware_fake_onedrive malware tool_macrasv2["<b>Herramienta</b> – <b>Nombre</b>: macrasv2<br/><b>Descripción</b>: extrae entradas del Llavero, contraseñas del navegador, cookies, extensiones"] class tool_macrasv2 tool process_keychain_extraction["<b>Proceso</b> – Extrae datos del Llavero y del navegador de macOS"] class process_keychain_extraction process action_discovery_system_info["<b>Acción</b> – <b>T1082 Descubrimiento de Información del Sistema</b><br/>Recoge ID de CPU, nombre del host, usuario, aplicaciones instaladas"] class action_discovery_system_info action action_discovery_software["<b>Acción</b> – <b>T1518 Descubrimiento de Software</b><br/>Enumera navegadores y extensiones instalados"] class action_discovery_software action service_telegram_bot["<b>Servicio</b> – API de Bot de Telegram<br/><b>Propósito</b>: Recibir credenciales exfiltradas"] class service_telegram_bot service process_exfiltration["<b>Proceso</b> – Envía datos recopilados al bot de Telegram"] class process_exfiltration process action_content_injection["<b>Acción</b> – <b>T1659 Inyección de Contenido</b><br/>El punto final /info sin autenticación permite subida arbitraria de archivos"] class action_content_injection action action_dynamic_resolution["<b>Acción</b> – <b>T1568 Resolución Dinámica</b><br/>Resuelve el dominio C2 en tiempo de ejecución"] class action_dynamic_resolution action %% Conexiones initial_access_user_execution –>|usa| tool_curl tool_curl –>|descarga| file_teamsSDK_bin file_teamsSDK_bin –>|ejecutado por| process_curl_download process_curl_download –>|ejecuta| malware_teamsSDK malware_teamsSDK –>|comunica con| service_go_http service_go_http –>|recibe datos vía| process_c2_communication process_c2_communication –>|activa| file_minst2_bin file_minst2_bin –>|instala| process_install_launchagent process_install_launchagent –>|crea| malware_fake_onedrive malware_fake_onedrive –>|ejecuta al iniciar sesión| action_discovery_system_info action_discovery_system_info –>|lleva a| action_discovery_software action_discovery_software –>|proporciona datos a| tool_macrasv2 tool_macrasv2 –>|realiza| process_keychain_extraction process_keychain_extraction –>|proporciona datos a| process_exfiltration process_exfiltration –>|envía a| service_telegram_bot malware_teamsSDK –>|habilita| action_content_injection action_content_injection –>|permite| file_minst2_bin malware_teamsSDK –>|habilita| action_dynamic_resolution action_dynamic_resolution –>|resuelve| service_go_http "
Flujo de Ataque
Detecciones
Modificación de Permisos de Archivo del Directorio Temporal de MacOS Sospechoso (via cmdline)
Ver
Intento de Ejecución de Curl Sospechoso [MacOS] (via cmdline)
Ver
IOCs (HashSha256) para detectar: Safari de Corea del Norte: Cazando RATs
Ver
Detección del Despliegue del Kit de Malware Mach-O Man [Creación de Proceso Linux]
Ver
Ejecución de Simulación
Requisito Previo: La Verificación de Telemetría y Línea Base debe haber pasado.
Fundamento: Esta sección detalla la ejecución precisa de la técnica del adversario (T1546.006 / T1587.001) diseñada para desencadenar la regla de detección. Los comandos reflejan un despliegue realista de «vivir de la tierra» de los binarios de Mach-O Man.
-
Narrativa de Ataque y Comandos:
- Un atacante que ya ha obtenido una posición en el host macOS copia los cuatro binarios de Mach-O Man desde una ubicación de puesta en escena (
/tmp/stage) a un directorio grabable (/usr/local/bin). - Los binarios se hacen ejecutables y se lanzan secuencialmente para imitar la inicialización, reconocimiento, persistencia y fases de robo de credenciales del kit.
- La persistencia se logra escribiendo un daemon de lanzamiento plist que apunta a
minst2.bin.
# Paso 1 – Preparar los binarios (simulado copiando desde una carpeta de activos de prueba) mkdir -p /usr/local/bin/macho cp ./assets/teamsSDK.bin /usr/local/bin/macho/ cp ./assets/D1YrHRTg.bin /usr/local/bin/macho/ cp ./assets/minst2.bin /usr/local/bin/macho/ cp ./assets/macrasv2 /usr/local/bin/macho/ # Paso 2 – Hacerlos ejecutables chmod +x /usr/local/bin/macho/*.bin # Paso 3 – Ejecutar los binarios de puesta en escena y reconocimiento /usr/local/bin/macho/teamsSDK.bin & /usr/local/bin/macho/D1YrHRTg.bin & # Paso 4 – Instalar persistencia (daemon de lanzamiento) para minst2.bin cat <<'EOF' > /Library/LaunchDaemons/com.macho.minst2.plist <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key><string>com.macho.minst2</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/macho/minst2.bin</string> </array> <key>RunAtLoad</key><true/> </dict> </plist> EOF sudo launchctl load -w /Library/LaunchDaemons/com.macho.minst2.plist # Paso 5 – Ejecutar el componente de robo/exfiltración de credenciales /usr/local/bin/macho/macrasv2 & - Un atacante que ya ha obtenido una posición en el host macOS copia los cuatro binarios de Mach-O Man desde una ubicación de puesta en escena (
-
Secuencia de Prueba de Regresión: (script bash autónomo que reproduce los pasos anteriores)
#!/usr/bin/env bash set -euo pipefail # --- VARIABLES ------------------------------------------------- BIN_DIR="/usr/local/bin/macho" ASSET_DIR="$(pwd)/assets" PLIST="/Library/LaunchDaemons/com.macho.minst2.plist" # --- PRE‑CHECK ------------------------------------------------- if [[ $(id -u) -ne 0 ]]; then echo "Script requiere root para instalar el daemon de lanzamiento. Re‑run con sudo." exit 1 fi # --- DESPLIEGUE DE BINARIOS ------------------------------------------- mkdir -p "$BIN_DIR" for bin in teamsSDK.bin D1YrHRTg.bin minst2.bin macrasv2; do cp "$ASSET_DIR/$bin" "$BIN_DIR/$bin" chmod +x "$BIN_DIR/$bin" done # --- EJECUTAR STAGER & RECON ------------------------------------ "$BIN_DIR/teamsSDK.bin" & "$BIN_DIR/D1YrHRTg.bin" & # --- PERSISTENCIA (daemon de lanzamiento) ------------------------------- cat <<'EOF' > "$PLIST" <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key><string>com.macho.minst2</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/macho/minst2.bin</string> </array> <key>RunAtLoad</key><true/> </dict> </plist> EOF launchctl load -w "$PLIST" # --- EJECUTAR COMPONENTE DE ROBO DE CREDENCIALES ----------------------- "$BIN_DIR/macrasv2" & echo "Simulación ejecutada – espere unos segundos para que aparezca la telemetría." -
Comandos de Limpieza:
#!/usr/bin/env bash set -euo pipefail BIN_DIR="/usr/local/bin/macho" PLIST="/Library/LaunchDaemons/com.macho.minst2.plist" # Descargar daemon de lanzamiento if [[ -f "$PLIST" ]]; then sudo launchctl unload -w "$PLIST" sudo rm -f "$PLIST" fi # Matar cualquier proceso malicioso restante pkill -f teamsSDK.bin || true pkill -f D1YrHRTg.bin || true pkill -f minst2.bin || true pkill -f macrasv2 || true # Eliminar binarios sudo rm -rf "$BIN_DIR" echo "Limpieza completa."