SOC Prime Bias: Moyen

14 Apr 2026 15:43 UTC

Phantom dans le coffre-fort : Obsidian utilisé pour livrer PhantomPulse RAT

Author Photo
SOC Prime Team linkedin icon Suivre
Phantom dans le coffre-fort : Obsidian utilisé pour livrer PhantomPulse RAT
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

Elastic Security Labs a découvert une nouvelle campagne d’ingénierie sociale qui exploite la plateforme de prise de notes Obsidian et son écosystème de plugins communautaires pour livrer PhantomPulse, un RAT jusqu’alors non documenté, ciblant à la fois les systèmes Windows et macOS. L’opération semble viser des individus dans les secteurs financier et des cryptomonnaies, les attaquants utilisant LinkedIn et Telegram pour distribuer un coffre-fort Obsidian compromis comme appât initial. Sur Windows, la chaîne d’infection repose sur PowerShell, un chargeur personnalisé en mémoire appelé PhantomPull, et des techniques de chargement réflexif. Sur macOS, les attaquants utilisent AppleScript ainsi qu’un mécanisme de commande et de contrôle dead-drop basé sur Telegram. La campagne intègre également une découverte de C2 basée sur la blockchain à travers des données de transactions Ethereum.

Enquête

Les chercheurs ont reproduit l’attaque en construisant un coffre-fort Obsidian armé utilisant les plugins Shell Commands et Hider pour déclencher une exécution malveillante. Lors de l’analyse, ils ont observé des scripts PowerShell téléchargeant un chargeur nommé syncobs.exe depuis 195.3.222.251, qui récupérait ensuite une charge utile chiffrée et la chargeait en mémoire de manière réflexive. Le chargeur créait un mutex, communiquait avec un panneau de contrôle hébergé sur panel.fefea22134.net, et supportait une infrastructure de repli dérivée des données de la blockchain. Sur macOS, le malware établissait la persistance via un plist de LaunchAgent et téléchargeait une charge utile secondaire d’AppleScript depuis un domaine codé en dur et un canal Telegram. Les enquêteurs ont récupéré des artefacts clés à partir de fichiers de configuration JSON et de ressources en mémoire liées à chaque chemin d’infection.

Atténuation

Les organisations devraient empêcher Obsidian de générer des processus enfants non autorisés, appliquer des contrôles stricts sur l’utilisation des plugins communautaires, et surveiller l’activité de PowerShell lorsque Obsidian apparaît comme le processus parent. Les défenses réseau devraient bloquer le trafic sortant vers 195.3.222.251 et les domaines panel.fefea22134.net, 0x666.info, ainsi que les emplacements de dead-drop Telegram associés à la campagne. Les équipes de sécurité devraient également rechercher des signes de chargement réflexif, d’abus de callback de file d’attente, et la valeur spécifique du mutex utilisée par le chargeur malveillant.

Réponse

Si des processus enfants suspects sont détectés à partir d’Obsidian, isolez immédiatement l’hôte affecté et collectez le répertoire .obsidian pour un examen judiciaire des fichiers de plugins malveillants et du contenu du coffre-fort. Recherchez le mutex hVNBUORXNiFLhYYh, puis scannez les points de terminaison pour trouver des traces du chargeur PHANTOMPULL et des binaires du RAT PHANTOMPULSE. Bloquez l’infrastructure de commande et de contrôle identifiée, révoquez les identifiants obsidiens compromis, et effectuez un examen plus large pour détecter une exposition au vol d’identifiants impliquant des comptes financiers et de cryptomonnaies.

Flux du’Attaque

Exécution de Simulation

Prérequis : la Vérification Pré‑vol de la Télémétrie & Baseline doit avoir réussi.

Justification : Cette section détaille l’exécution précise de la technique de l’adversaire (TTP) conçue pour déclencher la règle de détection. Les commandes et le récit DOIVENT refléter directement les TTPs identifiés et viser à générer la télémétrie exacte attendue par la logique de détection. Des exemples abstraits ou non liés mèneront à un diagnostic erroné.

  • Narratif et Commandes de l’Attaque :

    1. Compromission Initiale : L’attaquant fait tomber un plugin Obsidian malveillant (evil-plugin.js) dans le répertoire de plugins de l’utilisateur d’Obsidian.
    2. Déclencheur d’Exécution : Lorsque Obsidian démarre, le plugin exécute un PowerShell one‑liner qui lance notepad.exe via Start-Process. Cela crée exactement la chaîne de processus Obsidian.exe → notepad.exe que la règle surveille.
    3. Persistance : Le plugin est configuré pour se charger automatiquement à chaque lancement d’Obsidian, assurant que le processus enfant malveillant se reproduit.
    4. Évasion : Le plugin invoque également brièvement rundll32.exe (T1216.002) pour charger une DLL bénigne, masquant la véritable intention tout en maintenant la chaîne de détection déclenchante intacte.
  • Script de Test de Régression :

    # -------------------------------------------------
    # Simulation de plugin Obsidian malveillant (PowerShell)
    # -------------------------------------------------
    # 1. Assurez-vous qu'Obsidian est installé au chemin attendu
    $obsidianPath = "C:Program FilesObsidianObsidian.exe"
    if (-Not (Test-Path $obsidianPath)) {
        Write-Error "Obsidian non trouvé à $obsidianPath"
        exit 1
    }
    
    # 2. Lancez Obsidian *comme parent* et faites apparaître immédiatement le Bloc-notes
    $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. Optionnel : invoquez un binaire signé (rundll32) pour simuler T1216.002
    Start-Process -FilePath "C:WindowsSystem32rundll32.exe" -ArgumentList "shell32.dll,Control_RunDLL" -WindowStyle Hidden
    
    # 4. Maintenez le script actif brièvement pour permettre l'émission de journaux
    Start-Sleep -Seconds 5
    # -------------------------------------------------
  • Commandes de Nettoyage :

    # Terminez toute instance errante d'Obsidian ou de Bloc-notes créée par le test
    Get-Process -Name "Obsidian","notepad","rundll32" -ErrorAction SilentlyContinue | Stop-Process -Force
    
    # Supprimez le fichier de plugin malveillant simulé (si existant)
    $pluginPath = "$env:APPDATAObsidianpluginsevil-plugin.js"
    if (Test-Path $pluginPath) { Remove-Item $pluginPath -Force }
    
    Write-Host "Nettoyage complet."