SOC Prime Bias: Critique

02 Jun 2026 19:44 UTC

Opération Tissage du Dragon utilise Azure Cloud C2 pour cibler la République tchèque et Taïwan

Author Photo
SOC Prime Team linkedin icon Suivre
Opération Tissage du Dragon utilise Azure Cloud C2 pour cibler la République tchèque et Taïwan
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

Une opération d’espionnage ciblée suivie sous le nom d’Operation Dragon Weave utilise des fichiers de raccourci LNK malveillants accompagnés d’un exécutable basé sur Rust pour lancer un chargeur multi-étapes qui déploie finalement l’agent de commande et de contrôle Adaptix AZUREVEIL. Les opérateurs abusent du Microsoft Azure Blob Storage comme un mécanisme de dépôt mort pour les communications C2. La campagne cible le personnel gouvernemental et les chercheurs en République Tchèque et à Taïwan.

Enquête

L’enquête a suivi toute la chaîne d’infection, depuis l’archive ZIP initiale jusqu’à l’exécution de VBScript, le déchiffrement basé sur PowerShell, le chargement de DLL furtif et un chargeur Rust personnalisé qui utilisaient RC4, Base64 et SM4 pour déchiffrer la charge utile finale. Le dernier malware, AZUREVEIL, a été identifié comme une DLL Adaptix 64 bits qui communique uniquement par Azure Blob Storage et prend en charge l’exécution in-memory de Beacon Object File.

Atténuation

Les défenseurs devraient bloquer l’exécution de fichiers LNK inattendus et de binaires non signés, appliquer des contrôles stricts sur l’exécution de scripts et macros, et surveiller un trafic inhabituel d’Azure Blob Storage. L’utilisation de PowerShell avec contournement de la politique d’exécution doit être restreinte ou étroitement surveillée, et les équipes de sécurité doivent détecter la création suspecte de fichiers dans %LOCALAPPDATA% and %TEMP%. Une bonne hygiène des identifiants pour les comptes Azure et une rotation régulière des jetons SAS sont également recommandées.

Réponse

Les équipes de sécurité doivent détecter et isoler les hôtes affectés, recueillir la mémoire volatile pour récupérer d’éventuelles charges utiles en mémoire, bloquer le domaine de stockage Azure identifié, et chercher les artefacts de fichiers et les motifs de processus signalés. Une enquête médico-légale complète doit également être effectuée pour identifier tout autre composant déposé et supprimer les mécanismes de persistance.

graph TB %% Class Definitions Section classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef file fill:#ddffdd classDef process fill:#ffeb99 classDef operator fill:#ff9900 %% Nodes attack_phishing[« <b>Action</b> – <b>T1566.001 Pièce jointe de spearphishing</b><br/>L’adversaire envoie par e-mail une archive ZIP malveillante aux victimes. »] class attack_phishing action file_zip[« <b>Fichier</b> – malicious.zip<br/>Contient un raccourci .lnk et un exécutable dropper compilé en Rust. »] class file_zip file action_user_exec[« <b>Action</b> – <b>T1204.001 Exécution par l’utilisateur</b><br/>La victime ouvre le fichier .lnk ou exécute le fichier .exe, déclenchant la chaîne du dropper. »] class action_user_exec action file_lnk[« <b>Fichier</b> – payload.pdf.lnk<br/>Le raccourci utilise une double extension et l’icône Edge pour paraître légitime. »] class file_lnk file tool_wscript[« <b>Outil</b> – wscript.exe<br/>Exécute la charge utile VBScript. »] class tool_wscript tool file_vbs[« <b>Fichier</b> – empty.vbs<br/>VBScript minimal qui lance PowerShell. »] class file_vbs file action_vbscript[« <b>Action</b> – <b>T1059.005 Visual Basic</b><br/>Le VBScript s’exécute via wscript afin de démarrer PowerShell. »] class action_vbscript action action_powershell[« <b>Action</b> – <b>T1059.001 PowerShell</b><br/>Profile.ps1 est exécuté avec contournement de la stratégie d’exécution et déchiffre l’étape suivante. »] class action_powershell action file_dat[« <b>Fichier</b> – 1.dat<br/>Conteneur chiffré par XOR contenant RuntimeBroker_update.exe. »] class file_dat file process_runtime[« <b>Processus</b> – RuntimeBroker_update.exe<br/>Déchiffré depuis 1.dat ; charge la DLL malveillante UnityPlayer.dll via DLL side-loading. »] class process_runtime process file_dll[« <b>Fichier</b> – UnityPlayer.dll<br/>DLL malveillante placée aux côtés de RuntimeBroker_update.exe. »] class file_dll file action_dll_sideload[« <b>Action</b> – <b>T1546.009 DLL AppCert</b><br/>Le DLL side-loading fournit l’exécution de code. »] class action_dll_sideload action tool_rustloader[« <b>Outil</b> – Chargeur Rust (RUSTCLOAK)<br/>Alloue de la mémoire, écrit le PE AZUREVEIL déchiffré et l’exécute via les fibres Windows. »] class tool_rustloader tool action_process_injection[« <b>Action</b> – <b>T1055.002 Injection de processus</b><br/>Injection PE utilisant les fibres Windows. »] class action_process_injection action file_azureveil[« <b>Fichier</b> – AZUREVEIL.exe<br/>Charge utile déchiffrée exécutée après l’injection. »] class file_azureveil file action_discovery[« <b>Action</b> – <b>T1083 Découverte de fichiers et répertoires</b><br/>Le chargeur énumère les fichiers et les déplace vers %TEMP%. »] class action_discovery action action_network_discovery[« <b>Action</b> – <b>T1016 Découverte de la configuration réseau du système</b><br/>Collecte les informations MAC et IP pour le proxy et les mouvements latéraux. »] class action_network_discovery action action_c2[« <b>Action</b> – <b>T1102 Service Web</b><br/>Communique avec Azure Blob Storage via HTTPS. »] class action_c2 action action_dead_drop[« <b>Action</b> – <b>T1102.003 Communication à sens unique</b><br/>Téléverse un beacon blob et récupère les commandes depuis le même conteneur. »] class action_dead_drop action action_encrypted_channel[« <b>Action</b> – <b>T1573.001 Canal chiffré</b><br/>Les données de beacon et les commandes sont chiffrées avec un RC4 personnalisé et SM4-CBC. »] class action_encrypted_channel action action_exfil[« <b>Action</b> – <b>T1567.002 Exfiltration via un service Web</b><br/>Téléverse des données chiffrées vers un point de terminaison Azure Blob. »] class action_exfil action action_persistence[« <b>Action</b> – <b>T1547.009 Modification de raccourci</b><br/>Place un fichier .lnk malveillant dans les emplacements de démarrage pour assurer la persistance. »] class action_persistence action %% Edges attack_phishing –>|livre| file_zip file_zip –>|déclenche| action_user_exec action_user_exec –>|ouvre| file_lnk file_lnk –>|exécute| tool_wscript tool_wscript –>|exécute| file_vbs file_vbs –>|lance| action_vbscript action_vbscript –>|démarre| action_powershell action_powershell –>|déchiffre| file_dat file_dat –>|produit| process_runtime process_runtime –>|charge| file_dll file_dll –>|utilisée par| action_dll_sideload process_runtime –>|effectue| action_process_injection action_process_injection –>|utilise| tool_rustloader tool_rustloader –>|charge| file_azureveil file_azureveil –>|effectue| action_discovery action_discovery –>|effectue également| action_network_discovery action_network_discovery –>|envoie des données à| action_c2 action_c2 –>|utilise| action_dead_drop action_dead_drop –>|repose sur| action_encrypted_channel action_encrypted_channel –>|permet| action_exfil action_exfil –>|peut déclencher| action_persistence file_lnk –>|établit| action_persistence %% Class Assignments class attack_phishing action class file_zip file class action_user_exec action class file_lnk file class tool_wscript tool class file_vbs file class action_vbscript action class action_powershell action class file_dat file class process_runtime process class file_dll file class action_dll_sideload action class tool_rustloader tool class action_process_injection action class file_azureveil file class action_discovery action class action_network_discovery action class action_c2 action class action_dead_drop action class action_encrypted_channel action class action_exfil action class action_persistence action

Flux d’attaque

Exécution de simulation

Préalable : La vérification pré-vol des télémétries et des bases de référence doit avoir été passée.

Narrative de l’attaque & Commandes

  1. Livraison : L’attaquant envoie un email de phishing avec une pièce jointe nommée 計畫申請審查結果通知單.pdf.lnk. La double extension cache la nature de raccourci. Le LNK pointe vers C:Tempevil.vbs.
  2. Exécution (VBScript) : Quand la victime double-clique sur le LNK, wscript.exe lance evil.vbs. Le script dépose RuntimeBroker_update.exe to %APPDATA%MicrosoftWindowsStart MenuProgramsRuntimeBroker_update.exe et copie un UnityPlayer.dll (contenant le chargeur basé sur Rust) dans le même répertoire.
  3. Chargement détourné de DLL : L’attaquant exécute RuntimeBroker_update.exe. Comme l’exécutable est signé (ou imite un binaire légitime), Windows charge la UnityPlayer.dll, qui exécute la charge utile Rust intégrée (RUSTCLOAK) et établit un canal C2 vers Azure.
  4. Post-exécution : La charge utile effectue une découverte du système (T1016, T1082) et commence l’exfiltration (T1041) sur un canal chiffré (T1573).

Script de Test de Régression

<# 
  Script de simulation pour la détection de LNK malveillant + chargement détourné de DLL.
  Prérequis :
  - Sysmon avec ProcessCreate (ID 1) et ImageLoad (ID 7) activés.
  - Permission d'écriture vers $env:APPDATAMicrosoftWindowsStart MenuPrograms
#>

# 1. Préparer VBScript malveillant
$vbPath = "$env:TEMPevil.vbs"
@'
Set objShell = CreateObject("WScript.Shell")
'objShell.Run """$env:APPDATAMicrosoftWindowsStart MenuProgramsRuntimeBroker_update.exe""", 0, False
'@ | Set-Content -Path $vbPath -Encoding Unicode

# 2. Déployer un pseudo fichier UnityPlayer.dll (exemple binaire)
$dllPath = "$env:APPDATAMicrosoftWindowsStart MenuProgramsUnityPlayer.dll"
# Pour la démonstration, copier un DLL existant (ex : version.dll) et le renommer
Copy-Item "$env:SystemRootSystem32version.dll" $dllPath -Force

# 3. Déployer l'exécutable helper (copie d'un binaire légitime pour le réalisme)
$exePath = "$env:APPDATAMicrosoftWindowsStart MenuProgramsRuntimeBroker_update.exe"
Copy-Item "$env:SystemRootSystem32RuntimeBroker.exe" $exePath -Force

# 4. Créer un LNK malveillant avec double extension
$lnkPath = "$env:USERPROFILEDesktop計畫申請審查結果通知單.pdf.lnk"
$ws = New-Object -ComObject WScript.Shell
$shortcut = $ws.CreateShortcut($lnkPath)
$shortcut.TargetPath = "$env:SystemRootSystem32wscript.exe"
$shortcut.Arguments = "`"$vbPath`""
$shortcut.Save()

Write-Host "LNK malveillant créé à $lnkPath"
Write-Host "Exécution du LNK pour déclencher la chaîne..."
Start-Process -FilePath $lnkPath -Wait

Commandes de Nettoyage

# Supprimer les artefacts
Remove-Item "$env:TEMPevil.vbs" -Force -ErrorAction SilentlyContinue
Remove-Item "$env:APPDATAMicrosoftWindowsStart MenuProgramsUnityPlayer.dll" -Force -ErrorAction SilentlyContinue
Remove-Item "$env:APPDATAMicrosoftWindowsStart MenuProgramsRuntimeBroker_update.exe" -Force -ErrorAction SilentlyContinue
Remove-Item "$env:USERPROFILEDesktop計畫申請審查結果通知單.pdf.lnk" -Force -ErrorAction SilentlyContinue
Write-Host "Nettoyage terminé."