SOC Prime Bias: Medio

09 Dic 2025 18:46

Malware Cliente Castle RAT: Tácticas, Técnicas y Oficio

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Follow
Malware Cliente Castle RAT: Tácticas, Técnicas y Oficio
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

CastleRAT es un troyano de acceso remoto observado por primera vez en marzo de 2025, distribuido en variantes Python y C compilado. Recoge metadatos del sistema, pulsaciones de teclas, contenidos del portapapeles, capturas de pantalla y detalles de dispositivos multimedia, para luego exfiltrar esta información a un servidor C2 usando cifrado RC4. El malware puede obtener cargas adicionales, iniciarlas a través de rundll32 y establecer persistencia mediante tareas programadas y métodos de bypass de UAC.

Investigación

El equipo de investigación de amenazas de Splunk realizó ingeniería inversa de las implementaciones en Python y C, mapeando sus comportamientos a técnicas MITRE ATT&CK que incluyen descubrimiento del sistema, keylogging, captura de pantalla, enumeración de dispositivos de audio/video, resolutores de caída sin regreso y duplicación de controladores para escalamiento de privilegios. La investigación enfatizó la dependencia de CastleRAT en binarios legítimos de Windows (rundll32, ComputerDefaults.exe) y su uso de www.ip-api.com para obtener la dirección IP pública.

Mitigación

Los defensores deben detectar conexiones salientes sospechosas a dominios desconocidos, patrones de tráfico cifrados con RC4, y ejecuciones de rundll32 usando cargas DLL basadas en ordinales. Monitorear tareas programadas creadas para iniciar CastleRAT, intentos de bypass de UAC aprovechando ComputerDefaults.exe y procesos lanzados con banderas de audio silenciosas del navegador. Bloquear el acceso a ubicaciones de resolutores de caída sin regreso conocidas, incluyendo páginas de Steam Community abusadas.

Respuesta

Cuando se identifica actividad de CastleRAT, aislar el host afectado, eliminar los procesos maliciosos y retirar tareas programadas o artefactos de persistencia asociados. Recopilar evidencia forense como jerarquías de procesos, argumentos de la línea de comandos, y cambios en el registro. Realizar una búsqueda exhaustiva de complementos DLL adicionales y canales C2, y luego implementar medidas de remediación y reforzamiento en todo el entorno.

mermaid graph TB %% Class definitions classDef technique fill:#e6f7ff %% Node definitions t1016_001[«<b>Técnica</b> – T1016.001 Descubrimiento de Configuración de Red del Sistema<br/>Recoge detalles del sistema como el nombre del equipo, nombre de usuario, GUID de la máquina, versión del sistema operativo y dirección IP pública para enviar al C2»] class t1016_001 technique t1115[«<b>Técnica</b> – T1115 Datos del Portapapeles<br/>Recoge datos del portapapeles de Windows y los exfiltra, a menudo usando acciones de pegado simuladas»] class t1115 technique t1036[«<b>Técnica</b> – T1036 Suplantación<br/>Nombra archivos eliminados y variables de entorno para aparentar ser componentes legítimos de Python o Java»] class t1036 technique t1056_001[«<b>Técnica</b> – T1056.001 Captura de Entrada: Keylogging<br/>Intercepta las pulsaciones de teclas, las escribe en un archivo local, cifra el archivo con RC4 y lo envía al atacante»] class t1056_001 technique t1559[«<b>Técnica</b> – T1559 Comunicación entre Procesos<br/>Genera un proceso de shell oculto con sus flujos estándar redirigidos a través de tuberías anónimas, permitiendo la ejecución remota de comandos sin consola visible»] class t1559 technique t1123[«<b>Técnica</b> – T1123 Captura de Audio<br/>Enumera dispositivos de captura de medios a través de Media Foundation»] class t1123 technique t1125[«<b>Técnica</b> – T1125 Captura de Video<br/>Enumera dispositivos de captura de medios a través de Media Foundation»] class t1125 technique t1218_011[«<b>Técnica</b> – T1218.011 Ejecución de Proxy de Binario del Sistema: Rundll32<br/>Carga función de exportación de DLL malicioso por ordinal»] class t1218_011 technique t1055_001[«<b>Técnica</b> – T1055.001 Inyección de Proceso: Inyección de Librería de Enlace Dinámico<br/>Usa rundll32.exe para cargar una DLL maliciosa»] class t1055_001 technique t1547_010[«<b>Técnica</b> – T1547.010 Ejecución de Inicio Automático en Arranque o Inicio de Sesión: Monitores de Puerto<br/>Descarga complementos DLL adicionales del C2, los descifra con RC4, y los carga»] class t1547_010 technique t1053[«<b>Técnica</b> – T1053 Tarea/Trabajo Programado<br/>Crea una tarea programada para iniciar el malware al inicio»] class t1053 technique t1113[«<b>Técnica</b> – T1113 Captura de Pantalla<br/>Captura periódicamente capturas de pantalla y las exfiltra»] class t1113 technique t1102_001[«<b>Técnica</b> – T1102.001 Servicio Web: Resolutor de Caída sin Regreso<br/>Recupera configuraciones o cargas útiles de sitios web externos benignos»] class t1102_001 technique t1127[«<b>Técnica</b> – T1127 Ejecución de Proxy de Utilidades de Desarrollador Confiable<br/>Usa ComputerDefaults.exe y duplicación de controladores para burlar el UAC y ejecutar código con privilegios elevados»] class t1127 technique t1027[«<b>Técnica</b> – T1027 Archivos u Información Ofuscada<br/>Usa cifrado RC4 para comandos y cargas de datos»] class t1027 technique t1048_001[«<b>Técnica</b> – T1048.001 Exfiltración a Través de Protocolo Alternativo: Protocolo No C2 Cifrado Simétricamente<br/>Envía datos cifrados al C2»] class t1048_001 technique t1132_001[«<b>Técnica</b> – T1132.001 Codificación de Datos: Codificación Estándar<br/>Codifica datos antes de la transmisión»] class t1132_001 technique %% Connections showing attack flow t1016_001 u002du002d>|leads_to| t1115 t1115 u002du002d>|leads_to| t1036 t1036 u002du002d>|leads_to| t1056_001 t1056_001 u002du002d>|leads_to| t1559 t1559 u002du002d>|leads_to| t1123 t1123 u002du002d>|leads_to| t1125 t1125 u002du002d>|leads_to| t1218_011 t1218_011 u002du002d>|leads_to| t1055_001 t1055_001 u002du002d>|leads_to| t1547_010 t1547_010 u002du002d>|leads_to| t1053 t1053 u002du002d>|leads_to| t1113 t1113 u002du002d>|leads_to| t1102_001 t1102_001 u002du002d>|leads_to| t1127 t1127 u002du002d>|leads_to| t1027 t1027 u002du002d>|leads_to| t1048_001 t1048_001 u002du002d>|leads_to| t1132_001

Flujo de Ataque

Ejecución de Simulación

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

Fundamento: 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 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:

    1. Etapa 1 – Desplegar el binario de CastleRAT:El atacante copia CastleRAT.exe al directorio %APPDATA% del víctima para mezclarse con los datos del usuario.
    2. Etapa 2 – Ejecutar keylogging:Usando un pequeño cargador C# en memoria, el atacante invoca SetWindowsHookEx para instalar un gancho de teclado de bajo nivel, haciendo que Sysmon registre la API en el CallTrace del evento de creación del proceso.
    3. Etapa 3 – Escalamiento de privilegios:El mismo cargador luego llama a DuplicateHandle para duplicar un manejo de un proceso del sistema con privilegios (por ejemplo, lsass.exe), permitiendo que el malware se ejecute con derechos de SYSTEM. Ambas llamadas a la API aparecen en el mismo CallTrace de Sysmon, satisfaciendo los criterios de la regla de detección.
  • Script de Prueba de Regresión:

    # -------------------------------------------------
    # Simulación de CastleRAT – activa SetWindowsHookEx y DuplicateHandle
    # -------------------------------------------------
    $castlePath = "$env:APPDATACastleRAT.exe"
    
    # 1. Soltar un complemento mínimo que cargue la carga real (simulado aquí)
    $payload = @"
    using System;
    using System.Runtime.InteropServices;
    public class Loader {
        [DllImport("user32.dll")]
        public static extern IntPtr SetWindowsHookEx(int idHook, IntPtr lpfn, IntPtr hMod, uint dwThreadId);
        [DllImport("kernel32.dll", SetLastError = true)]
        public static extern bool DuplicateHandle(IntPtr hSourceProcessHandle,
                                                  IntPtr hSourceHandle,
                                                  IntPtr hTargetProcessHandle,
                                                  out IntPtr lpTargetHandle,
                                                  uint dwDesiredAccess,
                                                  bool bInheritHandle,
                                                  uint dwOptions);
        public static void Execute() {
            // Instalar un gancho de teclado de bajo nivel (WH_KEYBOARD_LL = 13)
            SetWindowsHookEx(13, IntPtr.Zero, IntPtr.Zero, 0);
            // Duplicar un manejo del proceso actual (simulado)
            IntPtr dupHandle;
            DuplicateHandle((IntPtr)-1, (IntPtr)0x1234, (IntPtr)-1, out dupHandle, 0, false, 0);
        }
    }
    "@
    
    # Compile el código C# sobre la marcha
    Add-Type -TypeDefinition $payload -Language CSharp
    
    # Copiar el proceso actual de PowerShell (actúa como CastleRAT.exe) al camino de destino
    Copy-Item -Path $PSCommandPath -Destination $castlePath -Force
    
    # Ejecutar la carga maliciosa
    [Loader]::Execute()
    
    # Mantener el proceso vivo brevemente para asegurar que Sysmon registre la pila de llamadas
    Start-Sleep -Seconds 5

«@

# Compile the C# code on‑the‑fly
Add-Type -TypeDefinition $payload -Language CSharp

# Copy the current PowerShell process (acts as CastleRAT.exe) to the target path
Copy-Item -Path $PSCommandPath -Destination $castlePath -Force

# Execute the malicious payload
[Loader]::Execute()

# Keep the process alive briefly to ensure Sysmon logs the call stack
Start-Sleep -Seconds 5
  • Comandos de Limpieza:

    # Remover el binario simulado de CastleRAT
    Remove-Item -Path "$env:APPDATACastleRAT.exe" -Force
    
    # Opcionalmente descargar cualquier gancho (no necesario para el complemento, pero incluido por completitud)
    # No se requiere descarga explícita para la llamada SetWindowsHookEx con devolución de llamada NULA utilizada arriba.