SOC Prime Bias: Élevé

17 Jun 2026 13:03 UTC

Opération Poisson : Décomposer une opération cybercriminelle entière

Author Photo
SOC Prime Team linkedin icon Suivre
Opération Poisson : Décomposer une opération cybercriminelle entière
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

Un acteur de menace peu qualifié connu sous le nom de « Poisson » a mené une campagne de vol d’identifiants en plusieurs étapes visant des personnes françaises et une petite entreprise. L’attaquant a utilisé Havoc C2, un enregistreur de frappe Python personnalisé, et a mis en place un accès résilient via OpenSSH et un réseau maillé VPN Tailscale. Cette configuration a permis à l’opérateur de conserver l’accès même après la perturbation de l’infrastructure de commande et de contrôle principale.

Investigation

Cato CTRL a mené un examen approfondi après incident couvrant 33 jours d’activité de l’attaquant et 339 commandes enregistrées. L’enquête a révélé l’utilisation de services gratuits tels que Backblaze B2, DuckDNS et IONOS, ainsi qu’une conception de persistance destinée à survivre aux démantèlements du C2. Les chercheurs ont également récupéré le playbook SSH de l’opérateur et les clés SSH des victimes, qui avaient été par erreur exposés dans un espace de stockage public.

Atténuation

Les défenseurs devraient générer des alertes pour le déploiement du serveur OpenSSH sur les postes de travail et surveiller l’activité du VPN Tailscale sur les systèmes où elle n’est pas attendue. Les organisations doivent également détecter les tunnels inversés SSH et suivre les tâches planifiées suspectes exécutées avec des privilèges élevés. Une remédiation efficace doit aller au-delà de la suppression de l’accès C2 et inclure l’élimination des mécanismes de persistance basés sur un réseau VPN maillé.

Réponse

Lorsque cette activité est identifiée, les équipes de sécurité doivent immédiatement localiser et démanteler toutes les connexions maillées Tailscale ou SSH actives. Les enquêteurs devraient examiner toutes les tâches planifiées et les raccourcis de démarrage pour déceler une persistance non autorisée. Une réinitialisation complète des identifiants est fortement recommandée pour tous les utilisateurs, car l’utilisation d’un enregistreur de frappe crée une forte probabilité de compromission des identifiants.

graph TB %% Définition des classes classDef action fill:#99ccff classDef tool fill:#cccccc classDef malware fill:#ff9999 classDef persistence fill:#99ff99 classDef command_control fill:#ffcc99 %% Exécution initiale et livraison de la charge utile action_stager_exec[« <b>Action</b> – <b>T1216.002 PowerShell : Interpréteur de commandes et scripts</b><br/>L’utilisateur exécute le stager VBScript sys.vbs afin de déclencher<br/>l’exécution par proxy des scripts système.<br/><b>Fichier</b> : sys.vbs »] class action_stager_exec action malware_powershell_payload[« <b>Malware</b> – <b>T1216.002 PowerShell</b><br/>Charge utile PowerShell déchiffrée utilisée pour<br/>télécharger le malware principal.<br/><b>Type</b> : Stager/Téléchargeur »] class malware_powershell_payload malware action_download_primary[« <b>Action</b> – <b>T1105 Transfert d’outils entrant</b><br/>Téléchargement de l’implant malware principal<br/>via PowerShell. »] class action_download_primary action %% Obfuscation et chargement malware_senti_dll[« <b>Malware</b> – <b>Nom</b> : senti.dll<br/><b>Techniques</b> : T1027.009 Charges utiles intégrées et T1027.015 Compression<br/>Utilise un encodage de type matriochka à cinq couches pour dissimuler<br/>le shellcode dans des mots anglais au sein d’une DLL .NET.<br/><b>Objectif</b> : Exécution sans fichier »] class malware_senti_dll malware %% Élévation de privilèges et persistance action_uac_bypass[« <b>Action</b> – <b>T1204 Exécution par l’utilisateur</b><br/>Tentative d’élévation de privilèges avec<br/>Start-Process -Verb RunAs afin de déclencher les invites UAC. »] class action_uac_bypass action persist_task_admin[« <b>Persistance</b> – <b>T1053 Tâche planifiée/Job</b><br/>Création de TaskAdmin1 pour exécuter le stager<br/>avec les privilèges les plus élevés à la connexion. »] class persist_task_admin persistence persist_startup_lnk[« <b>Persistance</b> – <b>T1547.001 Exécution automatique au démarrage ou à la connexion : Clés Registry Run / Dossier Startup</b><br/>Placement du raccourci sys.lnk dans le dossier de démarrage. »] class persist_startup_lnk persistence %% Vol d’identifiants tool_keylogger[« <b>Outil</b> – <b>Nom</b> : KeyL.zip<br/><b>Technique</b> : T1056.001 Capture d’entrée : Keylogging<br/>Keylogger Python personnalisé de 70 lignes<br/>destiné à récupérer les identifiants bancaires et de messagerie. »] class tool_keylogger tool %% Commandement et contrôle c2_havoc[« <b>Commandement et contrôle</b> – <b>Nom</b> : Havoc Framework<br/>Framework principal de gestion C2. »] class c2_havoc command_control tool_rustdesk[« <b>Outil</b> – <b>T1219 Logiciel d’accès distant</b><br/>RustDesk compilé sur mesure<br/>installé comme accès distant redondant. »] class tool_rustdesk tool %% Persistance résiliente persist_ssh_tailscale[« <b>Persistance</b> – <b>T1668 Contrôle exclusif</b><br/>Installation d’OpenSSH Server et connexion à un réseau maillé VPN Tailscale<br/>pour maintenir l’accès après l’arrêt du C2. »] class persist_ssh_tailscale persistence action_ssh_tunnel[« <b>Action</b> – <b>T1219.001 Tunneling IDE et T1572 Tunneling de protocole</b><br/>Utilisation du tunnel SSH inverse ssh -R afin de conserver<br/>un accès direct chiffré. »] class action_ssh_tunnel action %% Flux des connexions action_stager_exec –>|exécute| malware_powershell_payload malware_powershell_payload –>|télécharge| action_download_primary action_download_primary –>|charge| malware_senti_dll malware_senti_dll –>|déclenche| action_uac_bypass action_uac_bypass –>|établit| persist_task_admin action_uac_bypass –>|établit| persist_startup_lnk malware_senti_dll –>|déploie| tool_keylogger malware_senti_dll –>|communique_avec| c2_havoc c2_havoc –>|déploie_en_redondance| tool_rustdesk tool_rustdesk –>|mène_à| persist_ssh_tailscale persist_ssh_tailscale –>|utilise| action_ssh_tunnel

Flux d’attaque

Exécution de simulation

Prérequis : Le contrôle préalable Télémetry & Base de référence doit avoir réussi.

Raisonnement : 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 en rapport entraîneront des erreurs de diagnostic.

  • Narration de l’attaque & Commandes: L’adversaire, simulant le groupe « Poisson », vise à établir un point d’accès distant. Premièrement, ils mettent en scène une charge utile en créant un fichier nommé thales.zip dans un répertoire temporaire. Pour élever les privilèges, ils exécutent une commande PowerShell utilisant le RunAs verbe, ce qui est une méthode courante pour déclencher des invites UAC. Enfin, ils exécutent rustdesk.exe pour fournir un canal de communication de bureau distant secondaire. Cette séquence imite le modèle de comportement spécifique (élévation UAC + RustDesk + fichier zip spécifique) défini dans la règle de détection.

  • Script de test de régression :

    # Script de simulation : Émulation TTP Poisson
    
    # 1. Mettre en scène le fichier 'thales.zip' (requis par la logique de détection)
    $targetZip = "$env:TEMPthales.zip"
    New-Item -Path $targetZip -ItemType File -Force
    Write-Host "[+] Staged $targetZip"
    
    # 2. Simuler tentative d'élévation UAC via PowerShell (requis par la logique de détection)
    # Remarque : Ceci déclenchera une invite UAC dans un environnement réel.
    Write-Host "[+] Tentative d'élévation UAC via Start-Process -Verb RunAs..."
    Start-Process powershell.exe -ArgumentList "-Command Write-Host 'Elevation Attempted'" -Verb RunAs
    
    # 3. Simuler l'exécution de RustDesk (requis par la logique de détection)
    # Nous créerons un rustdesk.exe factice dans le dossier temporaire pour déclencher la détection sans installation réelle
    $rustdeskPath = "$env:TEMPrustdesk.exe"
    New-Item -Path $rustdeskPath -ItemType File -Force
    Write-Host "[+] Execution simulée de RustDesk à $rustdeskPath"
    Start-Process $rustdeskPath
  • Commandes de nettoyage :

    # Nettoyer les artefacts de simulation
    Remove-Item -Path "$env:TEMPthales.zip" -Force -ErrorAction SilentlyContinue
    Remove-Item -Path "$env:TEMPrustdesk.exe" -Force -ErrorAction SilentlyContinue
    Write-Host "[+] Nettoyage terminé."