Fantasma en la bóveda: Obsidian utilizado para distribuir PhantomPulse RAT
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
Los Elastic Security Labs descubrieron una nueva campaña de ingeniería social que abusa de la plataforma de toma de notas Obsidian y su ecosistema de complementos comunitarios para entregar PhantomPulse, un RAT previamente no documentado que apunta tanto a sistemas Windows como macOS. La operación parece estar dirigida a individuos en el espacio financiero y de criptomonedas, con atacantes utilizando LinkedIn y Telegram para distribuir un almacén de Obsidian comprometido como el cebo inicial. En Windows, la cadena de infección se basa en PowerShell, un cargador en memoria personalizado conocido como PhantomPull y técnicas de carga reflexivas. En macOS, los atacantes usan AppleScript junto con un mecanismo de mando y control de punto muerto basado en Telegram. La campaña también incorpora descubrimiento de C2 basado en blockchain a través de datos de transacciones de Ethereum.
Investigación
Los investigadores reprodujeron el ataque construyendo un almacén de Obsidian armado que utilizaba los complementos Shell Commands y Hider para desencadenar la ejecución maliciosa. Durante el análisis, observaron scripts de PowerShell descargando un cargador llamado syncobs.exe de 195.3.222.251, que luego recuperó una carga útil cifrada y la cargó de manera reflexiva en la memoria. El cargador creó un mutex, se comunicó con un panel de control alojado en panel.fefea22134.net, y soportó infraestructura de respaldo derivada de datos de blockchain. En macOS, el malware estableció persistencia a través de un plist de LaunchAgent y descargó una carga útil secundaria de AppleScript desde un dominio codificado y un canal de Telegram. Los investigadores recuperaron artefactos clave de archivos de configuración JSON y recursos en memoria vinculados a ambas rutas de infección.
Mitigación
Las organizaciones deben evitar que Obsidian genere procesos secundarios no autorizados, aplicar controles estrictos sobre el uso de complementos comunitarios y monitorear la actividad de PowerShell donde Obsidian aparece como el proceso principal. Las defensas de red deben bloquear el tráfico saliente a 195.3.222.251 y los dominios panel.fefea22134.net, 0x666.info, y ubicaciones de punto muerto de Telegram conocidas asociadas con la campaña. Los equipos de seguridad también deben buscar signos de carga reflexiva, abuso de tiempo de llamada en cola y el valor específico del mutex utilizado por el cargador de malware.
Respuesta
Si se detectan procesos secundarios sospechosos desde Obsidian, aísle el anfitrión afectado de inmediato y recolecte el directorio .obsidian para una revisión forense de los archivos de complementos maliciosos y el contenido del almacén. Busque el mutex hVNBUORXNiFLhYYh, luego escanee los extremos en busca de rastros del cargador PHANTOMPULL y binarios del RAT PHANTOMPULSE. Bloquee la infraestructura de mando y control identificada, revoque cualquier credencial comprometedora relacionada con Obsidian y realice una revisión más amplia por exposición de robo de credenciales relacionada con cuentas financieras y de criptomonedas.
graph TB %% Class definitions classDef technique fill:#99ccff classDef tool fill:#ffcc99 classDef malware fill:#ff9999 classDef process fill:#ccffcc %% Technique nodes tech_valid_accounts[«<b>Técnica</b> – <b>T1078 Cuentas válidas</b><br/><b>Descripción</b>: Los adversarios usan credenciales comprometidas para acceder a cuentas de víctimas.<br/><b>Detalles</b>: Credenciales de Obsidian proporcionadas a la víctima»] class tech_valid_accounts technique tech_user_execution[«<b>Técnica</b> – <b>T1204 Ejecución por usuario</b><br/><b>Descripción</b>: Los usuarios son engañados para ejecutar código malicioso.<br/><b>Detalles</b>: La víctima abre el vault compartido y activa la sincronización de plugins»] class tech_user_execution technique tech_powershell_initial[«<b>Técnica</b> – <b>T1059.001 PowerShell</b><br/><b>Descripción</b>: PowerShell se usa para ejecutar comandos y scripts.<br/><b>Detalles</b>: Comando PowerShell codificado en Base64 descarga script1.ps1»] class tech_powershell_initial technique tech_bits_transfer[«<b>Técnica</b> – <b>T1105 Transferencia de herramientas</b><br/><b>Descripción</b>: Transferencia de herramientas o payloads al host comprometido.<br/><b>Detalles</b>: BitsTransfer descarga syncobs.exe (binario de segunda etapa)»] class tech_bits_transfer technique tech_reflective_loading[«<b>Técnica</b> – <b>T1620 Carga reflectiva de código</b><br/><b>Descripción</b>: Carga código directamente en memoria sin tocar disco.<br/><b>Detalles</b>: PHANTOMPULL extrae payload AES-256-CBC cifrado y lo carga en memoria»] class tech_reflective_loading technique tech_process_injection[«<b>Técnica</b> – <b>T1055.002 Inyección PE</b><br/><b>Descripción</b>: Inyección de código malicioso en procesos.<br/><b>Detalles</b>: Inyección reflectiva con module stomping»] class tech_process_injection technique tech_dynamic_resolution[«<b>Técnica</b> – <b>T1568 Resolución dinámica</b><br/><b>Descripción</b>: Resolución de C2 en tiempo de ejecución mediante blockchain.<br/><b>Detalles</b>: Transacción blockchain resuelve URL C2»] class tech_dynamic_resolution technique tech_powershell_c2[«<b>Técnica</b> – <b>T1059.001 PowerShell</b><br/><b>Descripción</b>: PowerShell usado para beaconing y ejecución de comandos C2»] class tech_powershell_c2 technique tech_applescript[«<b>Técnica</b> – <b>T1059.007 AppleScript</b><br/><b>Descripción</b>: AppleScript ejecuta código malicioso en macOS.<br/><b>Detalles</b>: Dropper macOS ejecutado vía osascript»] class tech_applescript technique tech_launch_agent[«<b>Técnica</b> – <b>T1543.001 Launch Agent</b><br/><b>Descripción</b>: Persistencia mediante LaunchAgent.<br/><b>Detalles</b>: plist persistente instalado»] class tech_launch_agent technique tech_dead_drop_resolver[«<b>Técnica</b> – <b>T1102.001 Dead Drop Resolver</b><br/><b>Descripción</b>: Uso de servicio web como resolutor C2.<br/><b>Detalles</b>: Canal de Telegram usado como C2 alternativo»] class tech_dead_drop_resolver technique %% Tool / Malware nodes tool_syncobs_exe[«<b>Herramienta</b> – <b>Nombre</b>: syncobs.exe<br/><b>Descripción</b>: Binario de segunda etapa entregado por BitsTransfer»] class tool_syncobs_exe tool malware_phantompull[«<b>Malware</b> – <b>Nombre</b>: PHANTOMPULL<br/><b>Descripción</b>: Loader reflectivo que descifra y ejecuta payload AES-256-CBC»] class malware_phantompull malware %% Flow connections tech_valid_accounts –>|leads_to| tech_user_execution tech_user_execution –>|leads_to| tech_powershell_initial tech_powershell_initial –>|executes| tech_bits_transfer tech_bits_transfer –>|downloads| tool_syncobs_exe tool_syncobs_exe –>|enables| tech_reflective_loading tech_reflective_loading –>|loads| malware_phantompull malware_phantompull –>|facilitates| tech_process_injection tech_process_injection –>|injects| tool_syncobs_exe tech_process_injection –>|enables| tech_dynamic_resolution tech_dynamic_resolution –>|resolves| tech_powershell_c2 tech_dynamic_resolution –>|resolves| tech_applescript tech_powershell_c2 –>|beacons| tech_dead_drop_resolver tech_applescript –>|creates| tech_launch_agent tech_launch_agent –>|persists| tech_dead_drop_resolver
Flujo de Ataque
Detecciones
Descarga o Carga a través de Powershell (a través de línea de comandos)
Ver
Cadenas de Powershell Sospechosas (a través de línea de comandos)
Ver
Uso Sospechoso de Invoke-RestMethod (a través de powershell)
Ver
Cadenas de Powershell Sospechosas (a través de powershell)
Ver
Posible Actividad de Transferencia de Bits (a través de powershell)
Ver
Comunicación de Dominio Trycloudflare Sospechosa (a través de proxy)
Ver
Descarga de Archivo Sospechosa Detección IP Directa (a través de proxy)
Ver
Comunicación de Dominio Trycloudflare Sospechosa (a través de dns)
Ver
Obsidian Abusado para Ejecución de Código y Persistencia [Creación de Procesos en Windows]
Ver
Ejecución de PowerShell Sospechosa con Obsidian como Proceso Principal [Powershell de Windows]
Ver
Ejecución de Simulación
Requisito Previo: La Verificación de Telemetría y Línea Base Previa 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 apuntar a generar la telemetría exacta esperada por la lógica de detección. Ejemplos abstractos o no relacionados conducirán a un diagnóstico erróneo.
-
Narrativa del Ataque y Comandos:
- Compromiso Inicial: El atacante coloca un complemento malicioso de Obsidian (
evil-plugin.js) en el directorio de complementos de Obsidian del usuario. - Desencadenante de Ejecución: Cuando Obsidian arranca, el complemento ejecuta un comando de PowerShell de una sola línea que lanza
notepad.exeviaStart-Process. Esto crea exactamente la cadena de procesoObsidian.exe → notepad.exeque la regla observa. - Persistencia: El complemento está configurado para autoiniciarse en cada inicio de Obsidian, asegurando que el proceso secundario malicioso se repita.
- Evasión: El complemento también invoca brevemente
rundll32.exe(T1216.002) para cargar una DLL benigna, enmascarando la verdadera intención mientras mantiene intacta la cadena que activa la detección.
- Compromiso Inicial: El atacante coloca un complemento malicioso de Obsidian (
-
Script de Prueba de Regresión:
# ------------------------------------------------- # Simulación de complemento malicioso de Obsidian (PowerShell) # ------------------------------------------------- # 1. Asegúrese que Obsidian esté instalado en la ruta esperada $obsidianPath = "C:Program FilesObsidianObsidian.exe" if (-Not (Test-Path $obsidianPath)) { Write-Error "Obsidian no encontrado en $obsidianPath" exit 1 } # 2. Inicie Obsidian *como el padre* e inmediatamente inicie Notepad $startInfo = New-Object System.Diagnostics.ProcessStartInfo $startInfo.FileName = $obsidianPath $startInfo.Arguments = "-c `"Start-Process notepad.exe`"" $startInfo.UseShellExecute = $false $startInfo.CreateNoWindow = $true $proc = [System.Diagnostics.Process]::Start($startInfo) # 3. Opcional: invocar un binario firmado (rundll32) para simular T1216.002 Start-Process -FilePath "C:WindowsSystem32rundll32.exe" -ArgumentList "shell32.dll,Control_RunDLL" -WindowStyle Hidden # 4. Mantenga el script activo brevemente para permitir que se emitan registros Start-Sleep -Seconds 5 # ------------------------------------------------- -
Comandos de Limpieza:
# Termine cualquier instancia restante de Obsidian o Notepad creada por la prueba Get-Process -Name "Obsidian","notepad","rundll32" -ErrorAction SilentlyContinue | Stop-Process -Force # Retire el archivo de complemento malicioso simulado (si existió) $pluginPath = "$env:APPDATAObsidianpluginsevil-plugin.js" if (Test-Path $pluginPath) { Remove-Item $pluginPath -Force } Write-Host "Limpieza completa."