SOC Prime Bias: Moyen

14 Avr 2026 18:43

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.

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>Technique</b> – <b>T1078 Comptes valides</b><br/><b>Description</b>: Les attaquants utilisent des identifiants compromis pour accéder aux comptes.<br/><b>Détails</b>: Identifiants Obsidian fournis à la victime »] class tech_valid_accounts technique tech_user_execution[« <b>Technique</b> – <b>T1204 Exécution utilisateur</b><br/><b>Description</b>: L’utilisateur est amené à exécuter du code malveillant.<br/><b>Détails</b>: ouverture du vault partagé et synchronisation des plugins »] class tech_user_execution technique tech_powershell_initial[« <b>Technique</b> – <b>T1059.001 PowerShell</b><br/><b>Description</b>: PowerShell est utilisé pour exécuter des commandes.<br/><b>Détails</b>: commande Base64 télécharge script1.ps1 »] class tech_powershell_initial technique tech_bits_transfer[« <b>Technique</b> – <b>T1105 Transfert d’outils</b><br/><b>Description</b>: transfert de charges utiles vers l’hôte compromis.<br/><b>Détails</b>: téléchargement de syncobs.exe »] class tech_bits_transfer technique tech_reflective_loading[« <b>Technique</b> – <b>T1620 Chargement réflexif</b><br/><b>Description</b>: chargement en mémoire sans écriture disque.<br/><b>Détails</b>: déchiffrement AES-256-CBC en mémoire »] class tech_reflective_loading technique tech_process_injection[« <b>Technique</b> – <b>T1055.002 Injection PE</b><br/><b>Description</b>: injection de code dans un processus actif.<br/><b>Détails</b>: module stomping »] class tech_process_injection technique tech_dynamic_resolution[« <b>Technique</b> – <b>T1568 Résolution dynamique</b><br/><b>Description</b>: résolution du C2 en temps réel.<br/><b>Détails</b>: transaction blockchain pour URL C2 »] class tech_dynamic_resolution technique tech_powershell_c2[« <b>Technique</b> – <b>T1059.001 PowerShell</b><br/><b>Description</b>: communication et beacon C2 »] class tech_powershell_c2 technique tech_applescript[« <b>Technique</b> – <b>T1059.007 AppleScript</b><br/><b>Description</b>: exécution sur macOS<br/><b>Détails</b>: via osascript »] class tech_applescript technique tech_launch_agent[« <b>Technique</b> – <b>T1543.001 Launch Agent</b><br/><b>Description</b>: persistance via LaunchAgent<br/><b>Détails</b>: fichier plist installé »] class tech_launch_agent technique tech_dead_drop_resolver[« <b>Technique</b> – <b>T1102.001 Résolveur Dead Drop</b><br/><b>Description</b>: utilisation d’un service web comme C2<br/><b>Détails</b>: Telegram comme C2 de secours »] class tech_dead_drop_resolver technique %% Tool / Malware nodes tool_syncobs_exe[« <b>Outil</b> – <b>Nom</b>: syncobs.exe<br/><b>Description</b>: binaire de seconde étape »] class tool_syncobs_exe tool malware_phantompull[« <b>Malware</b> – <b>Nom</b>: PHANTOMPULL<br/><b>Description</b>: loader pour 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

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."