SOC Prime Bias: Medio

14 Abr 2026 18:43

Fantasma en la bóveda: Obsidian utilizado para distribuir PhantomPulse RAT

Author Photo
SOC Prime Team linkedin icon Seguir
Fantasma en la bóveda: Obsidian utilizado para distribuir PhantomPulse RAT
shield icon

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

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:

    1. Compromiso Inicial: El atacante coloca un complemento malicioso de Obsidian (evil-plugin.js) en el directorio de complementos de Obsidian del usuario.
    2. Desencadenante de Ejecución: Cuando Obsidian arranca, el complemento ejecuta un comando de PowerShell de una sola línea que lanza notepad.exe via Start-Process. Esto crea exactamente la cadena de proceso Obsidian.exe → notepad.exe que la regla observa.
    3. Persistencia: El complemento está configurado para autoiniciarse en cada inicio de Obsidian, asegurando que el proceso secundario malicioso se repita.
    4. 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.
  • 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."