Stealers en macOS, Observados: Qué Deberían Vigilar los Defensores
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
El artículo perfila un ladrón de credenciales de macOS asociado con el ecosistema AMOS, entregado a través de páginas de actualización de software falsas. Se empuja a las víctimas a ejecutar una cadena de comandos que extrae un binario auxiliar de rvdownloads.com, lo ejecuta a través de zsh y activa un AppleScript ofuscado para recolectar contraseñas, artefactos del navegador, extensiones de billetera de criptomonedas, Apple Notes y archivos locales. La persistencia se establece utilizando un plist de LaunchAgent malicioso que se hace pasar por un componente legítimo de Spotlight. El escrito también comparte los IOCs observados y los pasos de análisis utilizados para validar el flujo de infección.
Investigación
El investigador capturó el inicial comando curl que obtenía una URL codificada en Base64, la decodificó y observó una descarga de curl de seguimiento del binario auxiliar. El auxiliar ejecutó dos AppleScripts: uno para la detección de VM y otro que manejó la recopilación y exfiltración. El ladrón extrajo credenciales del Keychain, intentó terminar las herramientas de seguridad, recolectó datos de navegadores y billeteras, copió Apple Notes, agrupó los resultados en un archivo y lo subió a laislivon.com. La persistencia se creó instalando un LaunchAgent que vuelve a ejecutar la cadena de scripts completa al iniciar sesión del usuario.
Mitigación
Reduzca la exposición bloqueando los dominios maliciosos identificados, restringiendo la ejecución de scripts no firmados y monitoreando la actividad inusual de carga de launchctl vinculada a nuevos LaunchAgents. Use controles de punto final que señalen combinaciones sospechosas de curl y osascript, especialmente cuando extraen contenido remoto de hosts desconocidos. Limite la ejecución privilegiada donde sea posible y aplique listas de aplicaciones permitidas para evitar el inicio de binarios auxiliares no confiables.
Respuesta
Si se encuentran indicadores, aísle el punto de acceso, termine los procesos maliciosos activos, elimine el binario auxiliar y borre el plist del LaunchAgent malicioso. Restablezca las credenciales y tokens potencialmente expuestos, dando prioridad a los secretos de Keychain y los datos almacenados en el navegador. Recolecte artefactos forenses para los IOCs listados, revise los registros del sistema para la ejecución de curl/osascript y monitoree los reintentos de llamadas o descargas relacionados con la misma infraestructura de C2.
"graph TB %% Definiciones de Clase classDef action fill:#99ccff classDef tool fill:#cccccc classDef technique fill:#ffedcc classDef process fill:#e2e2ff %% Nodos u2013 Acciones action_initial_access["<b>Acción</b> – <b>T1219 Herramientas de Acceso Remoto</b><br/>Ejecute un comando curl que decodifica una URL en base64 y ejecuta un shell zsh para descargar una carga secundaria de rvdownloads.com/frozenfix/update."] class action_initial_access action action_obfuscation["<b>Acción</b> – <b>T1027 Ofuscación</b><br/>El script de ayuda oculta cadenas utilizando Base64, aritmética personalizada, relleno binario e inserción de código basura."] class action_obfuscation action action_sandbox_evasion["<b>Acción</b> – <b>T1497.002 Evasión del Sandbox de Virtualización</b><br/>AppleScript verifica la salida de system_profiler para indicadores de VM como QEMU, VMware y KVM."] class action_sandbox_evasion action action_credential_harvest["<b>Acción</b> – <b>T1056.002 Captura de Entrada de Interfaz Gráfica de Usuario</b><br/>Se simula un diálogo de osascript que solicita la contraseña de administrador, la valida contra el Keychain y la almacena en ~/.pwd."] class action_credential_harvest action action_defense_evasion["<b>Acción</b> – <b>T1027.005 Eliminación de Indicadores de las Herramientas</b><br/>El malware termina Little Snitch y BlockBlock y descarga sus agentes de lanzamiento."] class action_defense_evasion action action_browser_theft["<b>Acción</b> – <b>T1217 Descubrimiento de Información del Navegador</b><br/>Enumera perfiles de Chrome, Brave, Edge, Opera y Firefox y extrae datos de inicio de sesión, cookies, autocompletar y datos de extensiones, apuntando a extensiones de billeteras de criptomonedas."] class action_browser_theft action action_notes_theft["<b>Acción</b> – Robo de Datos de Apple Notes<br/>Copia la base de datos SQLite de Notes y los archivos multimedia asociados a una carpeta de preparación."] class action_notes_theft action action_data_staging["<b>Acción</b> – <b>T1132 Codificación de Datos</b><br/>Copia los archivos recopilados en /tmp/stolen_data y los comprime en archive.tar.gz."] class action_data_staging action action_c2["<b>Acción</b> – <b>T1102 Servicio Web</b><br/>Sube el archivo comprimido mediante un POST de curl a https://laislivon.com/upload."] class action_c2 action action_persistence["<b>Acción</b> – <b>T1543.001 Persistencia de Agente de Lanzamiento</b><br/>Escribe un plist de LaunchAgent (com.apple.mdworker.plist) en ~/Library/LaunchAgents y lo carga con launchctl."] class action_persistence action action_execution["<b>Acción</b> – <b>T1127.003 Ejecución de Proxy de Utilidades de Desarrollador de Confianza</b><br/>Ejecuta el AppleScript malicioso en cada inicio de sesión usando osascript, aprovechando las utilidades de desarrolladores de confianza."] class action_execution action %% Nodos u2013 Herramientas tool_curl["<b>Herramienta</b> – <b>Nombre</b>: curl<br/><b>Descripción</b>: Transfiere datos desde servidores remotos utilizando sintaxis URL."] class tool_curl tool tool_osascript["<b>Herramienta</b> – <b>Nombre</b>: osascript<br/><b>Descripción</b>: Ejecuta scripts de AppleScript o JavaScript para Automation en macOS."] class tool_osascript tool tool_launchctl["<b>Herramienta</b> – <b>Nombre</b>: launchctl<br/><b>Descripción</b>: Gestiona agentes de lanzamiento y demonios en macOS."] class tool_launchctl tool %% Nodos u2013 Técnicas (detalle adicional) tech_T1027_008["<b>Técnica</b> – T1027.008 Cargas Útiles Despojadas<br/>Las cargas útiles se despojan de símbolos e información de depuración para dificultar el análisis."] class tech_T1027_008 technique tech_T1027_001["<b>Técnica</b> – T1027.001 Relleno Binario<br/>Agrega bytes no funcionales a los binarios para cambiar el tamaño y el hash."] class tech_T1027_001 technique tech_T1027_007["<b>Técnica</b> – T1027.007 Resolución Dinámica de API<br/>Resuelve llamadas de API en tiempo de ejecución para evitar la detección estática."] class tech_T1027_007 technique tech_T1027_016["<b>Técnica</b> – T1027.016 Inserción de Código Basura<br/>Inserta instrucciones irrelevantes para confundir herramientas de análisis."] class tech_T1027_016 technique tech_T1140["<b>Técnica</b> – T1140 Desofuscar/Decodificar Archivos o Información<br/>Decodifica o desofusca datos antes de la ejecución."] class tech_T1140 technique tech_T1555_001["<b>Técnica</b> – T1555.001 Credenciales de Almacenes de Contraseñas: Keychain<br/>Extrae credenciales almacenadas del Keychain de macOS."] class tech_T1555_001 technique tech_T1555_002["<b>Técnica</b> – T1555.002 Credenciales de Almacenes de Contraseñas: Memoria de Securityd<br/>Lee credenciales de la memoria del demonio de seguridad."] class tech_T1555_002 technique tech_T1555_003["<b>Técnica</b> – T1555.003 Credenciales de Navegadores Web<br/>Roba contraseñas guardadas de los navegadores."] class tech_T1555_003 technique tech_T1606_001["<b>Técnica</b> – T1606.001 Forjar Credenciales Web: Cookies Web<br/>Recoge cookies de navegador para secuestro de sesiones."] class tech_T1606_001 technique tech_T1132_001["<b>Técnica</b> – T1132.001 Codificación Estándar<br/>Utiliza codificación estándar (por ejemplo, gzip) para la compresión de datos."] class tech_T1132_001 technique tech_T1546_009["<b>Técnica</b> – T1546.009 Ejecución Activada por Evento: DLLs de AppCert<br/>Activa la ejecución a través de eventos del sistema de confianza."] class tech_T1546_009 technique %% Conexiones de Flujo action_initial_access –>|usa| tool_curl tool_curl –>|descarga| action_obfuscation action_obfuscation –>|emplea| tech_T1027_008 action_obfuscation –>|emplea| tech_T1027_001 action_obfuscation –>|emplea| tech_T1027_007 action_obfuscation –>|emplea| tech_T1027_016 action_obfuscation –>|emplea| tech_T1140 action_obfuscation –>|conduce a| action_sandbox_evasion action_sandbox_evasion –>|verifica para| tech_T1497_002 action_sandbox_evasion –>|conduce a| action_credential_harvest action_credential_harvest –>|usa| tool_osascript action_credential_harvest –>|captura| tech_T1056_002 action_credential_harvest –>|extrae| tech_T1555_001 action_credential_harvest –>|extrae| tech_T1555_002 action_credential_harvest –>|conduce a| action_defense_evasion action_defense_evasion –>|elimina| tech_T1027_005 action_defense_evasion –>|conduce a| action_browser_theft action_browser_theft –>|descubre| tech_T1217 action_browser_theft –>|roba| tech_T1555_003 action_browser_theft –>|recoge| tech_T1606_001 action_browser_theft –>|conduce a| action_notes_theft action_notes_theft –>|almacena en| action_data_staging action_data_staging –>|comprime con| tech_T1132 action_data_staging –>|usa codificación| tech_T1132_001 action_data_staging –>|conduce a| action_c2 action_c2 –>|sube vía| tool_curl action_c2 –>|usa| tech_T1102 action_c2 –>|conduce a| action_persistence action_persistence –>|crea| tech_T1543_001 action_persistence –>|carga con| tool_launchctl action_persistence –>|conduce a| action_execution action_execution –>|ejecuta con| tool_osascript action_execution –>|aprovecha| tech_T1127_003 action_execution –>|activado por| tech_T1546_009 "
Flujo de Ataque
Detecciones
Intento de Enumeración Posible de System_profiler (vía process_creation)
Ver
Posible Colección por Entrada de Credenciales Local en macOS (vía cmdline)
Ver
Se Creó un Archivo en la Carpeta Temporal de MacOS (vía file_event)
Ver
Posible Intento de Descubrimiento de Contraseña de Navegador de MacOS (vía cmdline)
Ver
Intento de Ejecución de Curl Sospechoso [MacOS] (vía cmdline)
Ver
Posible Manipulación de Cadenas Codificadas en Base64 [MacOS] (vía cmdline)
Ver
Detección de Ejecución de Comando Malicioso por curl y Base64 [Linux Process Creation]
Ver
Detección de Persistencia de Stealer de macOS y Exfiltración de Datos [Linux File Event]
Ver
Ejecución de Simulación
Prerrequisito: La Verificación Previa de Telemetría y Línea de 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 TTP identificados y tener como objetivo generar la telemetría exacta esperada por la lógica de detección.
-
Narrativa y Comandos de Ataque:
Un atacante que ha ganado acceso a nivel de usuario en la máquina de la víctima desea establecer persistencia y exfiltrar las credenciales recopiladas.
- Persistencia: El atacante escribe un plist de LaunchAgent malicioso en el directorio estándar de LaunchAgents de macOS (simulado en el colector de Linux a través de una ruta de directorio de inicio).
- Recopilación de Datos: Archivos sensibles son copiados a una carpeta de preparación.
- Preparación para la Exfiltración: Los datos preparados son archivados en
/tmp/archive.tar.gzusando la herramienta nativatar. - Activación: El atacante carga el LaunchAgent con
launchctl, lo que provoca que el código malicioso se ejecute en cada inicio de sesión de usuario.
Las líneas de comando exactas coinciden con las cadenas supervisadas por la regla, asegurando que se genere una alerta.
-
Script de Prueba de Regresión:
#!/usr/bin/env bash set -euo pipefail # 1. Crear un archivo "robado" ficticio echo "password123" > /tmp/credentials.txt # 2. Crear plist malicioso de LaunchAgent (ubicación simulada) PLIST_PATH="$HOME/Library/LaunchAgents/com.apple.mdworker.plist" mkdir -p "$(dirname "$PLIST_PATH")" cat > "$PLIST_PATH" <<EOF <?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.apple.mdworker</string> <key>ProgramArguments</key> <array> <string>/usr/bin/cat</string> <string>/tmp/credentials.txt</string> </array> <key>RunAtLoad</key><true/> </dict> </plist> EOF # 3. Archivar los datos "robados" (camino exacto que supervisa la regla) tar -czf /tmp/archive.tar.gz -C /tmp credentials.txt # 4. Cargar el LaunchAgent (esto genera la línea de comandos que supervisa la regla) launchctl load "$PLIST_PATH" echo "Simulación completa – la detección debería haberse activado." -
Comandos de Limpieza:
#!/usr/bin/env bash set -euo pipefail # Descargar el LaunchAgent launchctl unload "$HOME/Library/LaunchAgents/com.apple.mdworker.plist" || true # Eliminar archivos rm -f "$HOME/Library/LaunchAgents/com.apple.mdworker.plist" rm -f /tmp/archive.tar.gz rm -f /tmp/credentials.txt echo "Limpieza terminada."