SOC Prime Bias: Critique

22 May 2026 06:29 UTC

NG0002 cible le milieu académique chinois avec des appâts institutionnels militarisés

Author Photo
SOC Prime Team linkedin icon Suivre
NG0002 cible le milieu académique chinois avec des appâts institutionnels militarisés
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

Un acteur de menace suivi sous le nom de UNG0002 a lancé une campagne de spear-phishing contre des universités chinoises en utilisant une archive ZIP malveillante déguisée en avis officiel de test de condition physique. À l’intérieur de l’archive se trouvait un fichier LNK à double extension qui exécutait un VBScript, lequel utilisait ensuite Bandizip pour charger en mémoire un DLL malveillant. Ce DLL effectuait des vérifications anti-analyse, déchiffrait une charge utile SFX en mémoire et déployait finalement une balise Cobalt Strike pour des activités de commande et de contrôle. L’opération a combiné des techniques de « living-off-the-land » avec une infrastructure hébergée sur Alibaba Cloud pour soutenir l’intrusion.

Investigation

Seqrite Labs a examiné l’e-mail de phishing, la pièce jointe et toute la chaîne de charge utile, révélant que explorer.exe a été utilisé pour lancer le script VBS et Bandizip.exe a été détourné pour héberger le DLL malveillant. Les analystes ont documenté de nombreuses vérifications anti-débogage conçues pour éviter les environnements d’analyse et ont cartographié le flux d’exécution complet, de l’appât initial au déploiement final de la balise. Ils ont également identifié l’infrastructure liée à la campagne, y compris l’adresse IP 60.205.186.162 et le domaine lysander.asia, et ont lié l’activité à de précédentes opérations UNG0002. Un enrichissement supplémentaire a montré que le serveur de commande et de contrôle était hébergé sur Alibaba Cloud et utilisait des enregistrements MX liés à Feishu, renforçant ainsi l’attribution à un acteur de menace basé en Chine.

Atténuation

Non spécifié

Réponse

Non spécifié

"graph TB %% Définitions des classes classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef file fill:#e6e6e6 classDef process fill:#ffdd99 classDef malware fill:#ff9999 classDef network fill:#c2c2f0 %% Nœuds – Actions (Techniques) action_initial_access["<b>Action</b> – <b>T1566.001 Pièce jointe de spearphishing</b><br/>Un e-mail avec un ZIP malveillant est envoyé à la cible"] class action_initial_access action action_user_execution["<b>Action</b> – <b>T1204.002 Exécution par l’utilisateur</b><br/>L’utilisateur ouvre le fichier LNK en pensant que c’est un PDF"] class action_user_execution action action_masquerading["<b>Action</b> – <b>T1036 Mascarade</b><br/>Le LNK est à double extension et affiché comme un PDF"] class action_masquerading action action_permission_hijack["<b>Action</b> – <b>T1574.005 Faiblesse des autorisations de fichiers d’installation exécutables</b><br/>Explorer.exe est utilisé pour lancer un script VBS caché"] class action_permission_hijack action action_vbscript["<b>Action</b> – <b>T1059.005 Visual Basic</b><br/>Le VBS ouvre le PDF leurre et exécute Bandizip"] class action_vbscript action action_lol["<b>Action</b> – <b>T1218 Utilisation de ressources légitimes"] class action_lol action action_hidden_files["<b>Action</b> – <b>T1564.001 Fichiers et répertoires cachés</b><br/>Charge utile placé dans des dossiers au style macOS"] class action_hidden_files action action_dll_side_loading["<b>Action</b> – <b>T1574.008 Interception de chemin par détournement de l’ordre de recherche</b> / <b>T1574.002 Chargement latéral de DLL</b><br/>Bandizip charge le fichier malveillant ark.x64.dll"] class action_dll_side_loading action action_obfuscation["<b>Action</b> – <b>T1027 Fichiers ou informations obfusqués</b><br/>DLL contient des chaînes cryptées et une charge SFX cryptée"] class action_obfuscation action action_anti_analysis["<b>Action</b> – <b>T1497 Évasion de la virtualisation/sandbox</b> / <b>T1497.001 Vérifications système</b> / <b>T1497.002 Vérifications de l’activité utilisateur</b> / <b>T1622 Évasion de débogueur</b><br/>DLL vérifie la présence de débogueurs, d’outils d’analyse et d’artéfacts de sandbox"] class action_anti_analysis action action_process_discovery["<b>Action</b> – <b>T1057 Découverte de processus</b><br/>Énumère les processus en cours pour localiser les utilitaires d’analyse"] class action_process_discovery action action_reflective_loading["<b>Action</b> – <b>T1620 Chargement de code réflexif</b><br/>La charge utile SFX décryptée est chargée directement en mémoire"] class action_reflective_loading action action_c2["<b>Action</b> – <b>T1071.001 Protocole de la couche application : Protocoles Web</b><br/>La charge utile en mémoire établit une balise Cobalt Strike via HTTPS"] class action_c2 action %% Nœuds – Fichiers / Artéfacts file_zip["<b>File</b> – malicious.zip<br/>Contient le fichier LNK malveillant"] class file_zip file file_lnk["<b>File</b> – u5e38u5ddeu5927u5b662026u5e74u300au56fdu5bb6u5b66u751fu4f53u8d28u5065u5eb7u6807u51c6u300bu6d4bu8bd5u901au77e5.pdf.lnk"] class file_lnk file file_vbs["<b>File</b> – chromedo.vbs<br/>Visual Basic script exécuté par explorer"] class file_vbs file tool_bandizip["<b>Tool</b> – Bandizip.exe<br/>Archiver légitime utilisé pour charger le DLL malveillant"] class tool_bandizip tool file_dll["<b>File</b> – ark.x64.dll<br/>DLL malveillant chargé par chargement latéral"] class file_dll file malware_cobalt_strike["<b>Malware</b> – Cobalt Strike beacon<br/>Fournit un accès à distance"] class malware_cobalt_strike malware %% Nœuds – Processus process_explorer["<b>Process</b> – explorer.exe"] class process_explorer process process_chromedo["<b>Process</b> – chromedo (hôte VBS)"] class process_chromedo process %% Nœuds – Réseau network_c2["<b>Network</b> – Serveur C2 60.205.186.162 (lysander.asia) en HTTPS"] class network_c2 network %% Connexions – Flux d’attaque file_zip –>|contient| file_lnk file_lnk –>|appelle| process_explorer process_explorer –>|lance| file_vbs file_vbs –>|exécute| tool_bandizip tool_bandizip –>|charge| file_dll file_dll –>|active| action_obfuscation file_dll –>|effectue| action_anti_analysis file_dll –>|déclenche| action_process_discovery file_dll –>|soutient| action_reflective_loading action_reflective_loading –>|charge| malware_cobalt_strike malware_cobalt_strike –>|communique avec| network_c2 %% Lier les actions pour montrer la séquence action_initial_access –>|conduit à| action_user_execution action_user_execution –>|combinée avec| action_masquerading action_masquerading –>|permet| action_permission_hijack action_permission_hijack –>|déclenche| action_vbscript action_vbscript –>|utilise| action_lol action_lol –>|crée| action_hidden_files action_hidden_files –>|facilite| action_dll_side_loading action_dll_side_loading –>|inclut| action_obfuscation action_obfuscation –>|couvre| action_anti_analysis action_anti_analysis –>|alimente| action_process_discovery action_process_discovery –>|précède| action_reflective_loading action_reflective_loading –>|permets| action_c2 action_c2 –>|établit une balise avec| malware_cobalt_strike %% Assignations de classe class action_initial_access action class action_user_execution action class action_masquerading action class action_permission_hijack action class action_vbscript action class action_lol action class action_hidden_files action class action_dll_side_loading action class action_obfuscation action class action_anti_analysis action class action_process_discovery action class action_reflective_loading action class action_c2 action class file_zip file class file_lnk file class file_vbs file class file_dll file class tool_bandizip tool class process_explorer process class process_chromedo process class malware_cobalt_strike malware class network_c2 network "

Flux d’attaque

Exécution de la simulation

Condition préalable : 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 d’adversaire (TTP) conçue pour déclencher la règle de détection. Les commandes et le récit DOIVENT refléter directement les TTPs identifiés et viser à générer la télémétrie exacte attendue par la logique de détection.

  • Narrative & Commandes d’attaque :
    Un attaquant livre un DLL malveillant (nommé evil.dll) qui est chargé par un processus hôte d’apparence bénigne (rundll32.exe). Le DllMain du DLL appelle immédiatement CreateToolhelp32Snapshot suivi par Process32First pour énumérer tous les processus en cours d’exécution. La boucle d’énumération vérifie chaque nom de processus pour la présence d’un débogueur ("dbg" sous-chaîne) et sort si trouvé – une technique classique d’évasion de débogueur technique (T1622). Étant donné que le DLL est chargé par rundll32.exe, l’événement de création de processus enregistré par Sysmon contient les champs ApiSetName pour les deux API natives, satisfaisant la règle de détection.

  • Script de test de régression :

    # -------------------------------------------------
    # Étape 1 : Créer une source C pour le DLL malveillant
    # -------------------------------------------------
    $dllSource = @"
    #include <windows.h>
    #include <tlhelp32.h>
    
    BOOL APIENTRY DllMain(HMODULE hModule,
                          DWORD  ul_reason_for_call,
                          LPVOID lpReserved) {
        if (ul_reason_for_call == DLL_PROCESS_ATTACH) {
            HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
            if (hSnap == INVALID_HANDLE_VALUE) return FALSE;
    
            PROCESSENTRY32 pe = {0};
            pe.dwSize = sizeof(PROCESSENTRY32);
            if (Process32First(hSnap, &pe)) {
                do {
                    // Simple anti-debug check – look for "dbg" in process name
                    if (wcsstr(pe.szExeFile, L"dbg")) {
                        // Détecté débogueur; quitter la boucle
                        break;
                    }
                } while (Process32Next(hSnap, &pe));
            }
            CloseHandle(hSnap);
        }
        return TRUE;
    }
    "@
    
    $srcPath = "$env:Tempevil.c"
    $dllPath = "$env:Tempevil.dll"
    $srcPath | Out-File -Encoding ascii -FilePath $srcPath -Force
    Set-Content -Path $srcPath -Value $dllSource
    
    # -------------------------------------------------
    # Étape 2 : Compiler le DLL avec Visual C++ (cl.exe)
    # -------------------------------------------------
    # Assurez-vous que les outils de construction de Visual Studio sont installés et que l'environnement est configuré.
    # Exemple utilisant l'invite de commande Developer :
    #   cl.exe /LD /O2 /MD evil.c /link /OUT:evil.dll
    # Pour une automatisation dans PowerShell, invoquez les outils de construction MSVC :
    $vcvars = "${env:ProgramFiles(x86)}Microsoft Visual Studio2019BuildToolsVCAuxiliaryBuildvcvars64.bat"
    & cmd /c "`"$vcvars`" && cl.exe /LD /O2 /MD `"$srcPath`" /link /OUT:`"$dllPath`"" `
        | Out-Null
    
    if (-Not (Test-Path $dllPath)) {
        Write-Error "DLL compilation failed."
        exit 1
    }
    
    # -------------------------------------------------
    # Étape 3 : Exécuter le DLL malveillant via rundll32.exe
    # -------------------------------------------------
    $rundll = "$env:SystemRootSystem32rundll32.exe"
    & $rundll $dllPath,EntryPoint
    
    # -------------------------------------------------
    # Étape 4 : Pause pour permettre à Sysmon d'enregistrer l'événement
    # -------------------------------------------------
    Start-Sleep -Seconds 5

    Le script compile un DLL minimal qui effectue les appels API ciblés puis le charge avec rundll32.exe. Le court délai garantit que Sysmon a le temps d’enregistrer l’événement de création de processus.

  • Commandes de nettoyage :

    # Supprimer les artefacts compilés
    Remove-Item -Force -ErrorAction SilentlyContinue $env:Tempevil.c
    Remove-Item -Force -ErrorAction SilentlyContinue $env:Tempevil.dll
    
    # Facultatif : Redémarrez Sysmon pour effacer les poignées bloquées (pas nécessaire dans la plupart des cas)
    Stop-Service -Name Sysmon -Force
    Start-Service -Name Sysmon