RDP Expuesto: La Mala Configuración que Aún Beneficia a los Atacantes
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
El artículo explica que los servicios del Protocolo de Escritorio Remoto expuestos continúan sirviendo como un vector común de acceso inicial para los atacantes. Muchas organizaciones aún dejan los puertos RDP accesibles desde la internet pública, convirtiéndolos en objetivos fáciles para el escaneo automatizado y los intentos de intrusión oportunistas. El post destaca incidentes reales en los que los atacantes abusaron del acceso RDP abierto o portales RDWeb expuestos para ingresar a los entornos y luego expandir su acceso mediante el movimiento lateral.
Investigación
Los casos descritos incluyen una organización de salud con un puerto de RDP expuesto a internet, un incidente que involucró el compromiso a través de un portal RDWeb, y una intrusión en la que los atacantes cambiaron la configuración del firewall y del registro para habilitar RDP después de explotar un dispositivo VPN de SonicWall vulnerable. En estos escenarios, los atacantes se basaron en comandos de Windows directos, utilidades de túnel inverso y scripts de recolección de credenciales para mantener el acceso y moverse más profundamente en la red.
Mitigación
Las defensas recomendadas se centran en eliminar la exposición innecesaria del RDP, colocar el acceso requerido de RDP detrás de firewalls configurados correctamente, rotar las credenciales después de cualquier exposición sospechosa, y alimentar los registros de firewall y VPN a un SIEM para una detección más rápida. El artículo también recomienda implementar cobertura EDR y monitoreo de los cambios en el registro que habilitan o reactivan los servicios RDP.
Respuesta
Si se detecta actividad sospechosa relacionada con RDP, los respondedores deben bloquear la dirección IP ofensiva, deshabilitar el servicio RDP, revertir cualquier cambio malicioso en el registro, confirmar que las reglas del firewall no han sido alteradas, y restablecer las credenciales afectadas. También es esencial el monitoreo continuo de intentos repetidos de acceso y la validación de todos los cambios de configuración.
graph TB %% Class Definitions classDef technique fill:#ffcc99 classDef action fill:#99ccff classDef tool fill:#cccccc classDef operator fill:#ff9900 %% Nodes – Techniques tech_scanning_ip[«<b>Técnica</b> – <b>T1595.001</b><br/><b>Nombre</b>: Escaneo Activo: Escaneo de Bloques IP<br/><b>Descripción</b>: El adversario sondea rangos de direcciones IP para localizar hosts vulnerables.»] class tech_scanning_ip technique tech_scanning_vuln[«<b>Técnica</b> – <b>T1595.002</b><br/><b>Nombre</b>: Escaneo Activo: Escaneo de Vulnerabilidades<br/><b>Descripción</b>: Usa herramientas automatizadas para encontrar vulnerabilidades conocidas en sistemas remotos.»] class tech_scanning_vuln technique tech_valid_accounts[«<b>Técnica</b> – <b>T1078</b><br/><b>Nombre</b>: Cuentas Válidas<br/><b>Descripción</b>: Uso de credenciales robadas o comprometidas para obtener acceso.»] class tech_valid_accounts technique tech_disable_firewall[«<b>Técnica</b> – <b>T1562.004</b><br/><b>Nombre</b>: Deshabilitar o Modificar el Firewall del Sistema<br/><b>Descripción</b>: Altera la configuración del firewall para permitir tráfico entrante como RDP.»] class tech_disable_firewall technique tech_create_modify_process[«<b>Técnica</b> – <b>T1543</b><br/><b>Nombre</b>: Crear o Modificar Proceso del Sistema<br/><b>Descripción</b>: Crea o cambia procesos del sistema a través de la configuración de registros o servicios.»] class tech_create_modify_process technique tech_system_services[«<b>Técnica</b> – <b>T1569</b><br/><b>Nombre</b>: Servicios del Sistema<br/><b>Descripción</b>: Manipula servicios para ejecutar código malicioso o mantener persistencia.»] class tech_system_services technique tech_discovery_network[«<b>Técnica</b> – <b>T1049</b><br/><b>Nombre</b>: Descubrimiento de Conexiones de Red del Sistema<br/><b>Descripción</b>: Enumera conexiones de red activas en el host comprometido.»] class tech_discovery_network technique %% Nodes – Tools / Commands tool_shodan[«<b>Herramienta</b> – <b>Nombre</b>: Shodan<br/><b>Descripción</b>: Servicio de escaneo a nivel de internet usado para descubrir servicios expuestos como RDP.»] class tool_shodan tool tool_rdp[«<b>Herramienta</b> – <b>Nombre</b>: Protocolo de Escritorio Remoto (RDP)<br/><b>Descripción</b>: Servicio de inicio de sesión remoto de Windows utilizado después del robo de credenciales.»] class tool_rdp tool tool_netsh[«<b>Herramienta</b> – <b>Nombre</b>: netsh<br/><b>Comando</b>: netsh advfirewall add rule name=’RDP-Open’ dir=in protocol=TCP localport=3389 action=allow enable=yes»] class tool_netsh tool tool_reg[«<b>Herramienta</b> – <b>Nombre</b>: reg.exe<br/><b>Comando</b>: reg add «HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server» /v fDenyTSConnections /t REG_DWORD /d 0 /f»] class tool_reg tool tool_netstart[«<b>Herramienta</b> – <b>Nombre</b>: net start<br/><b>Comando</b>: net start TermService»] class tool_netstart tool tool_adv_ip_scanner[«<b>Herramienta</b> – <b>Nombre</b>: Advanced IP Scanner<br/><b>Descripción</b>: Utilidad GUI usada para enumerar dispositivos y conexiones de red.»] class tool_adv_ip_scanner tool %% Connections – Attack Flow tech_scanning_ip –>|usa| tool_shodan tech_scanning_ip –>|lleva a| tech_scanning_vuln tech_scanning_vuln –>|lleva a| tech_valid_accounts tech_valid_accounts –>|usa| tool_rdp tool_rdp –>|habilita| tech_disable_firewall tech_disable_firewall –>|usa| tool_netsh tech_disable_firewall –>|lleva a| tech_create_modify_process tech_create_modify_process –>|usa| tool_reg tech_create_modify_process –>|lleva a| tech_system_services tech_system_services –>|usa| tool_netstart tech_valid_accounts –>|reutilizada para| tech_valid_accounts tech_valid_accounts –>|lleva a| tech_discovery_network tech_discovery_network –>|usa| tool_adv_ip_scanner
Flujo de Ataque
Detecciones
Posible Sombrero de Servicios de Escritorio Remoto (via registry_event)
Ver
Posible Sombrero de Servicios de Escritorio Remoto (via process_creation)
Ver
Modificaciones Sospechosas del Firewall via CLI (via cmdline)
Ver
Detectar Modificación del Registro para Habilitar Conexiones RDP [Evento del Registro de Windows]
Ver
Detección de RDP Expuesto y Modificación de Reglas del Firewall [Firewall]
Ver
Ejecución de Simulación
Prerequisito: La Verificación Preliminar de Telemetría y Línea Base debe haber pasado.
Razonamiento: 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 la narrativa DEBEN reflejar directamente las TTP identificadas y tienen como objetivo generar la telemetría exacta esperada por la lógica de detección.
-
Narrativa de Ataque & Comandos:
-
Reconocimiento (T1016.001): El adversario realiza un escaneo rápido del subred objetivo para identificar hosts con el puerto 3389 abierto, usando
Test-NetConnectionen un bucle. -
Escalada de Privilegios / Manipulación del Firewall (T1021.001): Habiendo conseguido derechos de administrador local, el atacante usa
netsh.exepara agregar una regla de firewall entrante permisiva para RDP, exponiendo así el servicio a internet. - Verificación Post-creación: El atacante enumera las reglas del firewall para confirmar que la nueva entrada existe, luego inicia una sesión RDP (fuera del alcance de esta prueba).
-
Reconocimiento (T1016.001): El adversario realiza un escaneo rápido del subred objetivo para identificar hosts con el puerto 3389 abierto, usando
-
Script de Prueba de Regresión:
#--------------------------------------------------------- # Actividad Simulada del Adversario – Exposición RDP vía netsh #--------------------------------------------------------- # 1. Escanea la subred local /24 en busca de puertos RDP abiertos (reconocimiento benigno) $subnet = "10.0.0." 1..254 | ForEach-Object { $ip = "$subnet$_" $result = Test-NetConnection -ComputerName $ip -Port 3389 -WarningAction SilentlyContinue if ($result.TcpTestSucceeded) { Write-Host "[+] RDP abierto en $ip" } } # 2. Agrega una regla de firewall que permita RDP entrante desde cualquier dirección $ruleName = "TempAllowRDP_$(Get-Random -Maximum 10000)" $netshCmd = "advfirewall firewall add rule name=`"$ruleName`" dir=in action=allow protocol=TCP localport=3389" Write-Host "`n[+] Creando regla de firewall vía netsh..." Start-Process -FilePath "$env:SystemRootSystem32netsh.exe" -ArgumentList $netshCmd -Wait -NoNewWindow # 3. Verifica que la regla existe (opcional, ayuda a confirmar la telemetría) netsh advfirewall firewall show rule name=$ruleName # Fin del ataque simulado -
Comandos de Limpieza:
#--------------------------------------------------------- # Eliminar la regla de firewall temporal creada durante la prueba #--------------------------------------------------------- $rulePrefix = "TempAllowRDP_" $rules = netsh advfirewall firewall show rule name=all | Select-String -Pattern $rulePrefix | ForEach-Object { ($_ -split 's+')[0] } foreach ($r in $rules) { Write-Host "[*] Eliminando regla $r" netsh advfirewall firewall delete rule name=$r }