SOC Prime Bias: Medio

16 Abr 2026 16:46

La campaña de Safari de Corea del Norte entrega RATs

Author Photo
Ruslan Mikhalov Jefe de Investigación de Amenazas en SOC Prime linkedin icon Seguir
La campaña de Safari de Corea del Norte entrega RATs
shield icon

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

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:

    1. 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).
    2. Los binarios se hacen ejecutables y se lanzan secuencialmente para imitar la inicialización, reconocimiento, persistencia y fases de robo de credenciales del kit.
    3. 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 &
  • 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."