SOC Prime Bias: Critique

27 Nov 2025 19:10

Chasse aux Menaces de Zscaler : Exposition et Reconstruction de la Campagne APT Water Gamayun

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Follow
Chasse aux Menaces de Zscaler : Exposition et Reconstruction de la Campagne APT Water Gamayun
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

Le rapport couvre une intrusion en plusieurs étapes attribuée au groupe APT Water Gamayun qui exploite une vulnérabilité MMC zero-day (CVE-2025-26633) pour livrer des charges utiles PowerShell dans une archive RAR à double extension.

Enquête

Zscaler a reconstruit la chaîne de destruction depuis une redirection de recherche Bing vers un site compromis, le téléchargement d’un fichier .pdf.rar, l’exploitation de MSC EvilTwin, des scripts PowerShell en plusieurs étapes et l’exécution de la porte dérobée ItunesC.exe.

Atténuation

Les conseils incluent la surveillance des archives à double extension, l’inspection des redirections, la détection des commandes PowerShell encodées et le blocage des IP et domaines malveillants.

Réponse

Lors de la détection, alertez sur mmc.exe lançant PowerShell avec -EncodedCommand, mettez le fichier en quarantaine, bloquez les connexions sortantes vers 103.246.147.17 et activez les procédures de réponse aux incidents.

graph TB %% Class Definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef malware fill:#ff9999 classDef process fill:#ccccff classDef file fill:#ffff99 classDef c2 fill:#ffccff %% Node Definitions node_initial_access[« <b>Action</b> – <b>T1659 Injection de contenu</b><br /><b>Description</b> : Compromission d’un site légitime afin d’injecter des redirections malveillantes »] class node_initial_access action node_malicious_domain[« <b>Fichier</b> – <b>Nom</b> : Domaine malveillant ressemblant à un domaine légitime<br /><b>Objectif</b> : Héberger une archive à double extension »] class node_malicious_domain file node_pdf_rar[« <b>Fichier</b> – <b>Nom</b> : brochure.pdf.rar<br /><b>Type</b> : Archive à double extension déguisée en PDF »] class node_pdf_rar file node_user_execution[« <b>Action</b> – <b>T1204.001 Lien malveillant</b><br /><b>Description</b> : La victime clique sur le lien et télécharge l’archive »] class node_user_execution action node_exploit_client[« <b>Action</b> – <b>T1203 Exploitation pour l’exécution côté client</b><br /><b>Description</b> : L’archive dépose un fichier .msc qui détourne mmc.exe via MSC EvilTwin »] class node_exploit_client action node_cve[« <b>Outil</b> – <b>Nom</b> : Exploit MSC EvilTwin (CVE‑2025‑26633)<br /><b>Cible</b> : mmc.exe »] class node_cve tool node_mmc[« <b>Processus</b> – <b>Nom</b> : mmc.exe »] class node_mmc process node_powershell[« <b>Processus</b> – <b>Nom</b> : powershell.exe »] class node_powershell process node_ps_command[« <b>Action</b> – <b>T1059.001 PowerShell</b><br /><b>Description</b> : Charge utile EncodedCommand en Base64 UTF‑16LE »] class node_ps_command action node_obfuscation[« <b>Action</b> – <b>T1027 Obfuscation</b> et <b>T1140 Décodage</b><br /><b>Description</b> : Double encodage de la commande PowerShell »] class node_obfuscation action node_unrar[« <b>Outil</b> – <b>Nom</b> : UnRAR.exe »] class node_unrar tool node_rar_payload[« <b>Fichier</b> – <b>Nom</b> : Charges utiles RAR protégées par mot de passe »] class node_rar_payload file node_hidden_window[« <b>Action</b> – <b>T1564.003 Fenêtre masquée</b><br /><b>Description</b> : La classe .NET WinHpXN appelle ShowWindow pour masquer la console »] class node_hidden_window action node_itunesc[« <b>Malware</b> – <b>Nom</b> : ItunesC.exe<br /><b>Fonction</b> : Chargeur et porte dérobée »] class node_itunesc malware node_c2[« <b>C2</b> – <b>IP</b> : 103.246.147.17<br /><b>Protocole</b> : HTTPS »] class node_c2 c2 %% Connections node_initial_access u002du002d>|redirige vers| node_malicious_domain node_malicious_domain u002du002d>|fournit| node_pdf_rar node_pdf_rar u002du002d>|téléchargé par| node_user_execution node_user_execution u002du002d>|déclenche| node_exploit_client node_exploit_client u002du002d>|dépose| node_cve node_cve u002du002d>|détourne| node_mmc node_mmc u002du002d>|charge| node_powershell node_powershell u002du002d>|exécute| node_ps_command node_ps_command u002du002d>|utilise| node_obfuscation node_ps_command u002du002d>|télécharge| node_unrar node_unrar u002du002d>|extrait| node_rar_payload node_rar_payload u002du002d>|conduit à| node_hidden_window node_hidden_window u002du002d>|lance| node_itunesc node_itunesc u002du002d>|communique avec| node_c2

Flux d’attaque

Exécution de simulation

Prérequis : La vérification préliminaire de télémétrie et de base 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 TTP identifiés et viser à générer la télémétrie exacte attendue par la logique de détection. Les exemples abstraits ou non liés conduiront à des erreurs de diagnostic.

  • Narration et commandes de l’attaque :
    L’attaquant, utilisant la méthodologie de Water Gamayun, prépare une charge utile PowerShell malveillante qui écrit un nouvel utilisateur administrateur local et l’ajoute au groupe Administrateurs. Pour cacher la charge utile, l’attaquant :

    1. Écrit le script PowerShell en texte clair.
    2. L’encode en Base64 UTF‑16LE.
    3. Insère un souligné (_) après chaque 4 caractères pour augmenter l’entropie.
    4. Enchaîne une |Replace('_','') opération de sorte que le runtime PowerShell supprime les soulignés avant de décoder, correspondant à la signature de détection.

    La commande d’exécution finale est :

    powershell.exe -EncodedCommand <Base64StringWithUnderscores> | Replace('_','')

    Cette ligne de commande exacte satisfait les deux conditions de la règle Sigma (-EncodedCommand and |Replace('_','')), générant des entrées Sysmon EventID 1 et Security EventID 4688 que la règle signalera.

  • Script de test de régression :
    Le script ci-dessous automatise la création de la charge utile obfusquée et l’exécute. Il peut être exécuté sur n’importe quel hôte Windows avec PowerShell 5.1+.

    # Simulation d'obfuscation PowerShell à la manière de Water Gamayun
    # Étape 1 : Définir la charge utile PowerShell malveillante (ajoute un utilisateur administrateur local)
    $payload = @'
    $user = "tempAdmin"
    $pwd  = ConvertTo-SecureString "P@ssw0rd!" -AsPlainText -Force
    New-LocalUser -Name $user -Password $pwd -FullName "Temp Admin" -Description "Test admin account"
    Add-LocalGroupMember -Group "Administrators" -Member $user
    '@
    
    # Étape 2 : Encoder en UTF-16LE puis Base64
    $bytes   = [System.Text.Encoding]::Unicode.GetBytes($payload)
    $b64     = [Convert]::ToBase64String($bytes)
    
    # Étape 3 : Injecter des soulignés tous les 8 caractères (simulant le modèle du groupe)
    $b64Underscored = ($b64 -split '(.{8})' | Where-Object {$_} | ForEach-Object { $_ + '_' }) -join ''
    
    # Étape 4 : Exécuter avec la pipeline nécessaire Replace('_','')
    powershell.exe -EncodedCommand $b64Underscored | Replace('_','')
  • Commandes de nettoyage :
    Les commandes suivantes suppriment l’utilisateur de test et restaurent l’environnement.

    # Nettoyage : Supprimer le compte administrateur temporaire créé par le test
    $user = "tempAdmin"
    if (Get-LocalUser -Name $user -ErrorAction SilentlyContinue) {
        Remove-LocalUser -Name $user
        Write-Host "Deleted test user $user."
    } else {
        Write-Host "Test user $user does not exist."
    }