La campagne TerminalFix permet le pivotement réseau via des hôtes compromis
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
TerminalFix est une variante de la technique ClickFix dans laquelle les assaillants utilisent de fausses invites de vérification Cloudflare pour manipuler les utilisateurs à exécuter des commandes PowerShell malveillantes. L’attaque combine le chargement latéral de DLL, la livraison de charge utile basée sur la stéganographie et un tunnel inverse basé sur WebSocket. Cela permet au poste de travail compromis de fonctionner comme un pivot réseau pour une reconnaissance supplémentaire et un déploiement potentiel de rançongiciel.
Enquête
L’enquête a examiné le cycle de vie de l’attaque depuis l’appât initial basé sur le web jusqu’à l’activité post-exploitation. Les analystes ont identifié que LockScreenContentServer.exe était abusé pour le chargement latéral de DLL et que des fichiers PNG étaient utilisés pour la livraison de charge utile stéganographique. La campagne a été associée à Vice Spider sur la base de rapports médiatiques allemands et de conseils publiés par la BSI.
Atténuation
Les défenseurs doivent surveiller les iframes suspects basés sur le navigateur suivis par l’exécution de PowerShell ou de Windows Terminal. Les organisations devraient détecter les comportements de chargement de DLL inhabituels, en particulier lorsque des binaires légitimes chargent des DLL à partir d’emplacements inattendus tels que C:ProgramData. Restreindre les politiques d’exécution PowerShell et surveiller les tâches planifiées non autorisées et les modifications de la clé Run du registre peuvent réduire davantage l’exposition de l’attaque.
Réponse
Lorsque l’activité TerminalFix est détectée, isolez le poste de travail affecté pour l’empêcher de fonctionner comme un pivot réseau. Analysez le trafic réseau pour les connexions WebSocket externes vers des domaines inconnus et l’activité de reconnaissance interne telle que les requêtes LDAP. Examinez la télémétrie des endpoints pour l’exécution de scripts Python non autorisés et l’utilisation d’outils incluant Impacket et Certipy.
Flux d’attaque
Nous mettons encore à jour cette partie.
Détections
Opérations suspectes sur la clé de registre NoWarningNoElevationOnInstall (via registry_event)
Points de persistance possibles [ASEPs – Software/NTUSER Hive] (via registry_event)
Motifs de ligne de commande Impacket possibles (via cmdline)
Exécution de code à distance possible en utilisant Impacket (via cmdline)
Exécution de Python depuis des dossiers suspects (via cmdline)
Énumération possible de comptes ou de groupes administrateurs (via cmdline)
Découverte de relations de confiance de domaine suspect (via cmdline)
Mouvement latéral possible via PsExec ou similaire (via system)
Mouvement latéral possible via PsExec ou similaire (via audit)
Utilisation possible de PsExec (via audit)
IOC (SourceIP) à détecter : TerminalFix : Quand un poste de travail devient un pivot réseau
IOC (DestinationIP) à détecter : TerminalFix : Quand un poste de travail devient un pivot réseau
Détection de pivot réseau TerminalFix [Connexion réseau Windows]
Détecter l’exécution malveillante de TerminalFix [Création de processus Windows]
Détection de commandes PowerShell malveillantes pour la récupération de ZIP et PNG [Windows Powershell]
Exécution de simulation
-
Narratif d’attaque & Commandes: L’adversaire a pris un accès initial et tente d’établir un canal C2 persistant pour pivoter à travers le poste de travail. Pour se fondre dans le trafic web standard, ils utilisent le protocole WebSocket. L’attaquant exécute un script PowerShell qui initie une connexion à
gitnow.dev. Cela mime le comportement TerminalFix où le poste de travail agit comme un relais. L’objectif est de déclencher ledomain_selectionandconnection_selectioncritères de la règle de détection. -
Script de test de régression:
# Simulation de connexion WebSocket C2 de TerminalFix # Domaine cible : gitnow.dev $targetDomain = "gitnow.dev" $uri = "wss://$targetDomain/path/to/c2" Write-Host "Simulation de connexion C2 TerminalFix à $targetDomain..." $ws = New-Object System.Net.WebSockets.ClientWebSocket $ct = New-Object System.Threading.CancellationTokenSource try { # Tentative de connexion pour générer de la télémétrie de connexion réseau $connectTask = $ws.ConnectAsync($uri, $ct.Token) # Nous utilisons un délai car le domaine n'existe probablement pas/ne répondra pas if ($connectTask.Wait(10000)) { Write-Host "Connecté avec succès à $targetDomain" $ws.CloseAsync([System.Net.WebSockets.WebSocketCloseStatus]::NormalClosure, "Fermeture", $ct.Token).Wait() } } catch { Write-Host "Tentative de connexion. La télémétrie devrait être générée dans les journaux Sysmon/EDR." Write-Host "Détail de l'erreur : $($_.Exception.Message)" } finally { $ws.Dispose() } -
Commandes de nettoyage:
# Aucune persistance ou fichier n'a été créé dans ce script de simulation spécifique. # Si des fichiers temporaires étaient utilisés, ils devraient être supprimés ici. Write-Host "Nettoyage de simulation complet. Aucun artefact laissé par ce script."