Phantom dans le coffre-fort : Obsidian utilisé pour livrer PhantomPulse RAT
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
Détections
Téléchargement ou Téléversement via PowerShell (via cmdline)
Voir
Chaînes PowerShell Suspicious (via cmdline)
Voir
Utilisation Suspecte de Invoke-RestMethod (via PowerShell)
Voir
Chaînes PowerShell Suspicious (via PowerShell)
Voir
Activité Possiblement de Bits Transfer (via PowerShell)
Voir
Communication Suspecte du Domaine Trycloudflare (via proxy)
Voir
Téléchargement de Fichier Suspicious IP Directe (via proxy)
Voir
Communication Suspecte du Domaine Trycloudflare (via dns)
Voir
Obsidian Exploité pour l’Exécution de Code et la Persistance [Création de Processus Windows]
Voir
Exécution Suspecte de PowerShell avec Obsidian comme Processus Parent [PowerShell Windows]
Voir
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 :
- Compromission Initiale : L’attaquant fait tomber un plugin Obsidian malveillant (
evil-plugin.js) dans le répertoire de plugins de l’utilisateur d’Obsidian. - Déclencheur d’Exécution : Lorsque Obsidian démarre, le plugin exécute un PowerShell one‑liner qui lance
notepad.exeviaStart-Process. Cela crée exactement la chaîne de processusObsidian.exe → notepad.exeque la règle surveille. - Persistance : Le plugin est configuré pour se charger automatiquement à chaque lancement d’Obsidian, assurant que le processus enfant malveillant se reproduit.
- É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.
- Compromission Initiale : L’attaquant fait tomber un plugin Obsidian malveillant (
-
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."