DarkGate Bajo el Capó
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
DarkGate es un cargador basado en Delphi vendido como Malware-as-a-Service en mercados criminales. Incluye funcionalidad completa de RAT, resolución de API dinámica y trucos de evasión en capas como conjuntos de caracteres base64 personalizados, estilo Union-API llamada de sistema carga y inyección APC. La herramienta, atribuida al vendedor “RastaFarEye”, ha sido adoptada por actores como TA577 y Ducktail. Se comunica con C2 sobre HTTP con cargas útiles ofuscadas y puede desplegar utilidades de escritorio remoto, robar tokens de Discord y ejecutar un shell reverso interactivo.
Análisis de Malware DarkGate
La publicación ofrece un recorrido detallado de ingeniería inversa del ejecutable DarkGate, explicando su configuración personalizada, generación de BotID con XOR y registro cifrado. Cataloga las técnicas de persistencia del cargador, rutas de escalamiento de privilegios, flujos de trabajo de robo de tokens y abuso de binarios legítimos como PsExec y Extexport para carga lateral de DLL. El informe documenta además los patrones de comunicación C2, credenciales hVNC predeterminadas y los puertos HTTP típicos utilizados (2351 y 9999).
Mitigación
Los equipos de seguridad deben vigilar la creación de los archivos y entradas de registro Run referenciados, invalidar o bloquear inmediatamente las credenciales hVNC predeterminadas, y detectar PsExec y Extexport siendo usados para carga de DLL no aprobada. El análisis de comportamiento debe cubrir el uso de llamada de sistema Union-API, inyección APC a través de NtTestAlert y suplantación de PID principal. Las defensas de red pueden marcar puertos HTTP extraños e intentar decodificar los alfabetos base64 personalizados de DarkGate para detectar el tráfico C2.
Respuesta
Una vez confirmada la actividad de DarkGate, aísle el punto final afectado, recupere los artefactos documentados, elimine los procesos maliciosos y limpie todos los puntos de persistencia. Rote cualquier credencial expuesta y bloquee los dominios C2 conocidos y rangos de IP. Una revisión forense exhaustiva debería identificar cualquier carga útil secundaria y verificar que todas las DLL introducidas a través de Extexport u otros cargadores relacionados hayan sido erradicadas.
mermaid graph TB %% Class definitions classDef technique fill:#ffcc99 classDef tool fill:#c2e0ff classDef action fill:#d9ffd9 %% Nodes – Techniques step_initial_infection[«<b>Técnica</b> – <b>T1055.001: Acceso Inicial vía Script AutoIt</b><br />Se utiliza un script AutoIt para entregar la carga útil del malware al sistema de la víctima.»] class step_initial_infection technique step_dynamic_api[«<b>Técnica</b> – <b>T1027.007: Archivos Ofuscados/Almacenados – Resolución de API Dinámica</b><br />El código malicioso resuelve las APIs de Windows necesitadas en tiempo de ejecución para evadir el análisis estático.»] class step_dynamic_api technique step_union_syscall[«<b>Técnica</b> – <b>T1106: API Nativa</b><br />Se realiza evasión de llamadas de sistema de Union API para ocultar el comportamiento malicioso de las herramientas de monitoreo.»] class step_union_syscall technique step_process_injection[«<b>Técnica</b> – <b>T1055.004: Inyección de Proceso – APC</b><br />Se utiliza la inyección de Llamada de Procedimiento Asincrónico para ejecutar código malicioso dentro de un proceso legítimo.»] class step_process_injection technique step_token_manipulation[«<b>Técnica</b> – <b>T1134: Manipulación de Token de Acceso</b><br />El atacante roba o modifica los tokens de acceso para obtener privilegios elevados.»] class step_token_manipulation technique step_priv_esc_psexec[«<b>Técnica</b> – <b>T1548.002: Abuso del Mecanismo de Elevación de Control – PsExec</b><br />Se aprovecha PsExec para ejecutar comandos como un usuario con privilegios más altos en sistemas remotos.»] class step_priv_esc_psexec technique step_persistence[«<b>Técnica</b> – <b>T1547.001: Scripts de Inicialización de Arranque o Inicio de Sesión – LNK y Registro Run</b><br />Se crean archivos de acceso directo y claves de registro Run para asegurar que el malware inicie en el arranque.»] class step_persistence technique step_keylogging[«<b>Técnica</b> – <b>T1056.001: Captura de Entrada – Keylogging</b><br />Se graban las pulsaciones de teclas del usuario para capturar credenciales y datos sensibles.»] class step_keylogging technique step_remote_vnc[«<b>Técnica</b> – <b>T1021.005: Servicios Remotos – VNC</b><br />Un servidor VNC oculto proporciona al atacante acceso remoto al escritorio de manera interactiva.»] class step_remote_vnc technique step_command_execution[«<b>Técnica</b> – <b>T1059.001: Intérprete de Comandos y Scripts – PowerShell</b> y <b>T1059.003: Intérprete de Comandos y Scripts – Shell de Comando de Windows</b><br />Se utilizan PowerShell y cmd para ejecutar comandos adicionales del atacante.»] class step_command_execution technique step_c2_communication[«<b>Técnica</b> – <b>T1102.002/T1102.003: Protocolo de Capa de Aplicación – Protocolos Web (HTTP/HTTPS)</b> y <b>T1132.002: Codificación de Datos – Codificación Estándar</b><br />El tráfico C2 se envía sobre HTTP con codificación personalizada para mezclarse con el tráfico web normal.»] class step_c2_communication technique step_environment_checks[«<b>Técnica</b> – <b>T1497.001: Evasión de Virtualización/Sandbox – Verificación de Sistema</b> y <b>T1112: Modificar Registro</b><br />El malware examina el entorno y cambia valores del registro para ocultar su presencia.»] class step_environment_checks technique %% Nodes – Tools tool_autoit[«<b>Herramienta</b> – <b>Nombre</b>: AutoIt<br /><b>Descripción</b>: Lenguaje de scripting usado para crear el script inicial de infección.»] class tool_autoit tool tool_psexec[«<b>Herramienta</b> – <b>Nombre</b>: PsExec<br /><b>Descripción</b>: Utilidad de ejecución remota que ejecuta procesos con privilegios elevados.»] class tool_psexec tool tool_vnc[«<b>Herramienta</b> – <b>Nombre</b>: Servidor VNC Oculto<br /><b>Descripción</b>: Proporciona capacidad de escritorio remoto encubierto al atacante.»] class tool_vnc tool %% Connections – Attack Flow step_initial_infection u002du002d>|uses| tool_autoit step_initial_infection u002du002d>|leads_to| step_dynamic_api step_dynamic_api u002du002d>|leads_to| step_union_syscall step_union_syscall u002du002d>|leads_to| step_process_injection step_process_injection u002du002d>|leads_to| step_token_manipulation step_token_manipulation u002du002d>|leads_to| step_priv_esc_psexec step_priv_esc_psexec u002du002d>|uses| tool_psexec step_priv_esc_psexec u002du002d>|leads_to| step_persistence step_persistence u002du002d>|leads_to| step_keylogging step_keylogging u002du002d>|leads_to| step_remote_vnc step_remote_vnc u002du002d>|uses| tool_vnc step_remote_vnc u002du002d>|leads_to| step_command_execution step_command_execution u002du002d>|leads_to| step_c2_communication step_c2_communication u002du002d>|leads_to| step_environment_checks
Flujo de Ataque
Detecciones
Detección de Inyección APC vía NtQueueApcThread y NtTestAlert en DarkGate [Windows Sysmon]
Ver
Detección de Ejecución de Comandos y Escalamiento de Privilegios de Malware DarkGate [Creación de Procesos de Windows]
Ver
IOCs (HashMd5) para detectar: Internos de DarkGate
Ver
IOCs (HashSha256) para detectar: Internos de DarkGate
Ver
Ejecución Sospechosa de AutoHotKey y AutoIT Desde Ubicación Inusual (vía creación de proceso)
Ver
Puntos de Persistencia Posibles [ASEPs – Software/Colmena NTUSER] (vía evento_registro)
Ver
Ejecución de Simulación
Prerequisito: La Verificación de Prevuelo de Telemetría y Línea Base debe haber pasado.
-
Narrativa de Ataque y Comandos:
El adversario simulado ya ha infiltrado el punto final y busca establecer acceso persistente RDP. Primero, cosechan credenciales almacenándolas concmdkey, luego usanpsexec.exepara moverse lateralmente, y finalmente lanzan una carga útil de PowerShell que deja un stub de registrador de teclas. Cada paso está diseñado para generar exactamente los eventos de creación de proceso que la regla de detección monitorea.-
Robo de Credenciales (T1552.001) – Almacenar una entrada de credencial diseñada que coincida con el
patrón de selección_cmdkey. -
Movimiento Lateral (T1219) – Ejecutar
psexec.execontra un host remoto, invocando un comando que genera una nueva sesión de PowerShell. - Ejecución de PowerShell (T1059.001) – Ejecutar un comando de PowerShell que carga un script malicioso (simulado aquí con un comando inofensivo codificado en base64).
-
Despliegue de Keylogger (T1056.001) – Compilar y ejecutar un pequeño binario C que llama a
GetAsyncKeyState, generando la coincidencia deAPIcampo.
-
Robo de Credenciales (T1552.001) – Almacenar una entrada de credencial diseñada que coincida con el
-
Script de Prueba de Regresión:
# Script de Simulación DarkGate – PowerShell # -------------------------------------------------- # 1. Entrada de credenciales Cmdkey (coincide con el patrón de detección) $generic = '""' # genérico vacío como usa DarkGate $user = 'SafeMode' # nombre de usuario que la regla espera $pass = 'darkgatepassword0' # contraseña que la regla espera cmd.exe /c cmdkey /generic:$generic /user:$user /pass:$pass # 2. Movimiento lateral con PsExec (el binario debe existir en PATH o especificar la ruta completa) $remoteHost = '10.0.0.5' $psexecPath = "$env:SystemRootSystem32psexec.exe" if (Test-Path $psexecPath) { & $psexecPath \$remoteHost -accepteula cmd /c "whoami" } else { Write-Host "PsExec no encontrado en $psexecPath – omitiendo este paso." } # 3. Ejecución de PowerShell (comando inofensivo codificado en base64) $psCommand = 'Write-Output "Carga útil de PowerShell ejecutada"' $encoded = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($psCommand)) powershell.exe -EncodedCommand $encoded # 4. Compilación y ejecución del registro de teclas $cSource = @" #include <windows.h> int main() { // Llamada simple a GetAsyncKeyState para satisfacer la coincidencia de API GetAsyncKeyState(VK_RETURN); return 0; } "@ $srcPath = "$env:TEMPkeylog_stub.c" $exePath = "$env:TEMPkeylog_stub.exe" $cSource | Set-Content -Path $srcPath -Encoding ASCII # Compilar con Visual C++ (cl.exe debe estar en PATH) cl.exe /nologo /O2 /Fe:$exePath $srcPath if (Test-Path $exePath) { & $exePath } -
Comandos de Limpieza:
# Eliminar entrada de credencial cmd.exe /c cmdkey /delete:$generic # Borrar archivos temporales Remove-Item -Force -ErrorAction SilentlyContinue "$env:TEMPkeylog_stub.c" Remove-Item -Force -ErrorAction SilentlyContinue "$env:TEMPkeylog_stub.exe" # Opcional: terminar cualquier proceso de psexec o powershell lanzado por el script Get-Process -Name psexec, powershell -ErrorAction SilentlyContinue | Stop-Process -Force