SOC Prime Bias: Medio

14 Apr 2026 15:43 UTC

Fantasma nella cassaforte: Obsidian sfruttato per consegnare PhantomPulse RAT

Author Photo
SOC Prime Team linkedin icon Segui
Fantasma nella cassaforte: Obsidian sfruttato per consegnare PhantomPulse RAT
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Riepilogo

Elastic Security Labs ha scoperto una nuova campagna di ingegneria sociale che sfrutta la piattaforma di gestione delle note Obsidian e il suo ecosistema di plugin della comunità per distribuire PhantomPulse, un RAT precedentemente non documentato che prende di mira sia i sistemi Windows che macOS. L’operazione sembra mirare a individui nel settore finanziario e delle criptovalute, con gli attaccanti che utilizzano LinkedIn e Telegram per distribuire un vault Obsidian compromesso come esca iniziale. Su Windows, la catena di infezione si basa su PowerShell, un loader personalizzato in memoria noto come PhantomPull, e tecniche di caricamento riflessivo. Su macOS, gli attaccanti utilizzano AppleScript insieme a un meccanismo di comando e controllo tramite dead-drop su Telegram. La campagna incorpora inoltre la scoperta C2 basata su blockchain attraverso i dati delle transazioni su Ethereum.

Indagine

I ricercatori hanno riprodotto l’attacco costruendo un vault Obsidian armato che utilizzava i plugin Shell Commands e Hider per attivare l’esecuzione malevola. Durante l’analisi, hanno osservato script PowerShell scaricare un loader chiamato syncobs.exe da 195.3.222.251, che quindi recuperava un payload criptato e lo caricava in memoria riflessivamente. Il loader creava un mutex, comunicava con un pannello di controllo ospitato su panel.fefea22134.net, e supportava infrastrutture di fallback derivate dai dati blockchain. Su macOS, il malware stabiliva la persistenza attraverso un plist LaunchAgent e scaricava un payload AppleScript secondario da un dominio hard-coded e da un canale Telegram. Gli investigatori hanno recuperato artefatti chiave da file di configurazione JSON e risorse in memoria legate a entrambi i percorsi di infezione.

Mitigazione

Le organizzazioni dovrebbero impedire a Obsidian di generare processi figli non autorizzati, applicare controlli rigorosi sull’uso dei plugin della comunità e monitorare l’attività di PowerShell quando Obsidian appare come processo genitore. Le difese di rete dovrebbero bloccare il traffico in uscita verso 195.3.222.251 e i domini panel.fefea22134.net, 0x666.info, e le posizioni note di dead-drop su Telegram associate alla campagna. I team di sicurezza dovrebbero anche cercare segni di caricamento riflessivo, abuso di callback della coda dei timer e il valore specifico del mutex utilizzato dal malware loader.

Risposta

Se vengono rilevati processi figli sospetti da Obsidian, isolare immediatamente l’host interessato e raccogliere la directory .obsidian per una revisione forense dei file plugin malevoli e del contenuto del vault. Cercare il mutex hVNBUORXNiFLhYYh, quindi eseguire la scansione degli endpoint per tracce dei binari loader PHANTOMPULL e RAT PHANTOMPULSE. Bloccare l’infrastruttura di comando e controllo identificata, revocare eventuali credenziali compromesse relative a Obsidian e eseguire una revisione più ampia per l’esposizione al furto di credenziali coinvolgendo conti finanziari e di criptovalute.

Flusso di Attacco

Esecuzione di Simulazione

Prerequisito: Il Controllo Prevolo di Telemetria e Baseline deve essere passato.

Motivazione: Questa sezione dettaglia l’esecuzione precisa della tecnica dell’avversario (TTP) progettata per attivare la regola di rilevamento. I comandi e la narrazione DEVONO riflettere direttamente i TTP identificati e mirare a generare la telemetria esatta attesa dalla logica di rilevamento. Esempi astratti o non correlati porteranno a diagnosi errate.

  • Narrazione & Comandi dell’Attacco:

    1. Compromissione Iniziale: L’attaccante inserisce un plugin malevolo di Obsidian (evil-plugin.js) nella directory dei plugin di Obsidian dell’utente.
    2. Attivazione Esecuzione: Quando Obsidian si avvia, il plugin esegue un one-liner di PowerShell che lancia notepad.exe via Start-Process. Questo crea esattamente la catena di processo Obsidian.exe → notepad.exe che la regola monitora.
    3. Persistenza: Il plugin è impostato per caricarsi automaticamente ad ogni avvio di Obsidian, garantendo che il processo figlio malevolo si ripeta.
    4. Evasione: Il plugin invoca brevemente anche rundll32.exe (T1216.002) per caricare una DLL benigna, mascherando il vero intento mentre mantiene intatta la catena che innesca il rilevamento.
  • Script di Test di Regressione:

    # -------------------------------------------------
    # Simulazione plugin malevolo Obsidian (PowerShell)
    # -------------------------------------------------
    # 1. Assicurarsi che Obsidian sia installato nella posizione prevista
    $obsidianPath = "C:Program FilesObsidianObsidian.exe"
    if (-Not (Test-Path $obsidianPath)) {
        Write-Error "Obsidian not found at $obsidianPath"
        exit 1
    }
    
    # 2. Avviare Obsidian *come genitore* e immediatamente avviare 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. Opzionale: invocare un binario firmato (rundll32) per simulare T1216.002
    Start-Process -FilePath "C:WindowsSystem32rundll32.exe" -ArgumentList "shell32.dll,Control_RunDLL" -WindowStyle Hidden
    
    # 4. Mantenere lo script attivo brevemente per permettere la generazione di log
    Start-Sleep -Seconds 5
    # -------------------------------------------------
  • Comandi di Pulizia:

    # Terminare eventuali istanze di Obsidian o Notepad lasciate dal test 
    Get-Process -Name "Obsidian","notepad","rundll32" -ErrorAction SilentlyContinue | Stop-Process -Force
    
    # Rimuovere il file del plugin malevolo simulato (se esisteva)
    $pluginPath = "$env:APPDATAObsidianpluginsevil-plugin.js"
    if (Test-Path $pluginPath) { Remove-Item $pluginPath -Force }
    
    Write-Host "Pulizia completata."