🔒 🖥️ Escritorio remoto en Windows: la puerta que dejas abierta sin saberlo

hace 4 meses

Escritorio remoto en Windows: la puerta que dejas abierta sin saberlo

Table of Contents

¿Tu ordenador con Windows está expuesto? Guía de protección contra el acceso remoto no autorizado

El acceso remoto a Windows seguro mal configurado es uno de los mayores riesgos digitales: cada vez que alguien se conecta a tu ordenador remotamente, tiene una ventana abierta a tus archivos, contraseñas, cuentas bancarias y cámaras.

El control remoto mal configurado se convierte en la puerta de entrada más sencilla para los atacantes y en la más ignorada por los usuarios, comprometiendo el endurecimiento del endpoint antes incluso de que el sistema operativo entre en juego.

La buena noticia es que esta protección se construye con pasos concretos: desactivar lo innecesario, bloquear el puerto 3389, forzar NLA, exigir MFA y registrar los eventos 4625, todos ellos aplicables con PowerShell sin necesidad de soluciones de pago.

⚡ Respuesta rápida

Para tener un acceso remoto a Windows seguro: desactiva RDP si no lo usas (fDenyTSConnections=1) y bloquea el puerto 3389 TCP/UDP en el firewall; si necesitas RDP, ponlo siempre detrás de una VPN (WireGuard, OpenVPN, Tailscale) con NLA forzado, restricción por IP y 2FA obligatorio; mantén Windows y cualquier herramienta remota (TeamViewer, AnyDesk) actualizadas; y monitoriza el evento 4625 del Visor de eventos para detectar intentos de fuerza bruta. El script PowerShell aplica todo esto de una vez y crea tareas programadas que reaplican el bloqueo en cada arranque, inicio de sesión, cada hora y al conectar a una red nueva.

💡 Definición rápida

El control remoto de ordenadores es la capacidad de operar un equipo Windows desde otro dispositivo sin estar físicamente delante de él. El equipo controlado se llama host y el cliente conecta a través de internet, LAN o VPN. La seguridad depende del protocolo, el cifrado y la autenticación: estos cuatro factores definen si tu configuración constituye o no un acceso remoto a Windows seguro.

📋 Resumen rápido

🔒 Acceso remoto a Windows: cómo desactivarlo o protegerlo con PowerShell

El acceso remoto a Windows seguro permite controlar un ordenador desde otro dispositivo a través de internet o una red local. El puerto RDP 3389 expuesto recibe intentos de intrusión automatizados cada día. La vulnerabilidad BlueKeep (CVE-2019-0708, CVSS 9.8) permitía ejecución remota de código sin autenticación previa.

  • ✅ Cómo deshabilitar RDP, bloquear el puerto 3389 y detectar software remoto instalado
  • ✅ Las 8 medidas clave: VPN, MFA, NLA y restricción por IP
  • ✅ Comparativa de seguridad: RDP, TeamViewer, AnyDesk, VNC y RustDesk
  • ✅ Script PowerShell con 4 tareas programadas: inicio, logon, cada hora y al conectar a red nueva
  • ✅ Señales de acceso remoto comprometido y cómo reaccionar

📅 Publicado: 26 de marzo de 2026 · 🕒 Tiempo de lectura: 18 minutos

En la guía de hardening de Windows: guía completa de endurecimiento del sistema encontrarás todas las guías prácticas para proteger tu equipo paso a paso.


¿Qué es el control remoto de ordenadores?

📌 ¿Qué es el control remoto de ordenadores?

🔍 ¿Qué es el control remoto de un ordenador? El control remoto de ordenadores es la capacidad de operar un equipo Windows desde otro dispositivo sin estar físicamente delante de él, usando protocolos como RDP (puerto 3389), VNC (5900), SSH (22) o herramientas comerciales como TeamViewer y AnyDesk (HTTPS 443). El equipo controlado se llama host y el cliente conecta a través de internet, LAN o VPN. La seguridad depende del protocolo, el cifrado y la autenticación aplicada: los protocolos más seguros son SSH y RDP detrás de VPN; los menos seguros son RDP expuesto directamente a internet y VNC sin tunelizar. Aquí, acceso remoto a Windows se refiere exactamente a esta capacidad de control, aplicada específicamente al sistema operativo de Microsoft.
Protocolo / HerramientaUso principalPuerto por defectoCifrado
RDP (Microsoft)Escritorio remoto Windows3389 TCPTLS
VNCMultiplataforma, open source5900 TCPOpcional
TeamViewerSoporte técnico y teletrabajo443 / 5938AES-256
AnyDeskSoporte y trabajo remoto443 / 7070TLS 1.2
SSHAdministración de servidores22 TCPAES-256
Chrome Remote DesktopAcceso personal ocasional443 HTTPSTLS

🏆 Ranking de protocolos por nivel de seguridad nativo

ProtocoloSeguridad nativaRecomendado paraCombinar con
SSH🟢 ExcelenteAdministración Linux/servidoresClaves públicas + MFA
RDP + VPN🟢 Muy buenaTeletrabajo profesional WindowsNLA + 2FA + restricción IP
TeamViewer🟡 Buena con MFASoporte técnico puntualMFA + dispositivos confianza
AnyDesk🟡 Buena con MFASoporte técnico puntualMFA + lista blanca
Chrome Remote Desktop🟡 AceptableUso doméstico ocasionalCuenta Google con 2FA
RDP expuesto sin VPN🔴 MalaNunca recomendableSolo si imposible alternativa
VNC sin tunelizar🔴 PésimaNunca recomendableSolo dentro de SSH/VPN

⚠️ Riesgos de un escritorio remoto mal configurado

🔍 ¿Cuáles son los riesgos de tener RDP expuesto en Windows?

Los cinco riesgos principales del RDP mal configurado ordenados por frecuencia:

  1. Fuerza bruta RDP (muy alta): bots rastrean el puerto 3389 y lanzan diccionarios de credenciales automáticamente
  2. Ransomware vía RDP (muy alta): grupos como LockBit y BlackCat entran por RDP expuesto y cifran todos los archivos
  3. Estafa de soporte técnico falso (alta): el atacante llama haciéndose pasar por Microsoft y convence a la víctima de instalar TeamViewer
  4. Credential stuffing (alta): contraseñas reutilizadas de brechas anteriores abren acceso a todas las cuentas vinculadas
  5. Man-in-the-Middle (media): interceptación de sesión en conexiones no cifradas

Según la CISA, el RDP expuesto es el punto de entrada en más del 50% de los ataques de ransomware documentados.

Un escritorio remoto mal configurado es uno de los vectores de ataque más utilizados en la actualidad para comprometer este tipo de conexión. El NIST SP 800-46r2, Guía de acceso remoto seguro, establece los principios técnicos para construir un acceso remoto a Windows seguro alineado con los estándares oficiales de la industria.

🚨 Dato crítico: Cada día se realizan millones de intentos automatizados de conexión al puerto 3389 desde redes de bots que rastrean internet buscando equipos sin protección y con credenciales débiles.
  • 🔓 Acceso no autorizado: un atacante con tus credenciales tiene control total del equipo.
  • 🦠 Instalación de malware: ransomware, keyloggers y troyanos.
  • 📁 Robo de datos: archivos, contraseñas guardadas, documentos, que después pueden acabar a la venta en la web oscura.
  • 🎭 Estafas de soporte técnico falso por vishing: cómo funcionan y cómo evitarlas: el atacante llama haciéndose pasar por un técnico de Microsoft, convence a la víctima de instalar TeamViewer o AnyDesk y obtiene acceso total al equipo.
  • 🔒 Secuestro del equipo: bloqueo total del acceso.
  • 🕵️ Espionaje: cámara, micrófono y actividad en tiempo real.
Tipo de ataqueVector de entradaImpactoFrecuencia
Fuerza bruta RDPPuerto 3389 expuestoControl total del equipo🔴 Muy alta
Ransomware vía RDPCredenciales comprometidasCifrado de archivos🔴 Muy alta
Estafa soporte técnicoIngeniería socialRobo de datos y dinero🟠 Alta
Credential stuffingContraseñas reutilizadasAcceso a cuentas vinculadas🟠 Alta
Man-in-the-MiddleConexión no cifradaInterceptación de sesión🟡 Media

💸 Coste real de un incidente por RDP comprometido

🔍 ¿Cuánto cuesta un incidente provocado por RDP expuesto? El coste depende del perfil afectado: para un usuario doméstico entre 800-5.000 € (recuperación de archivos, formateo, pérdida de productividad); para una pyme entre 15.000-150.000 € (rescate medio LockBit ~50.000 €, días de actividad parada, recuperación forense); para una empresa mediana puede superar 1 millón € si hay extorsión doble, sanciones AEPD y daño reputacional. La inversión en acceso remoto a Windows seguro (10 minutos de PowerShell) es prácticamente cero comparada con cualquier coste de remediación.
Perfil afectadoCoste medioTiempo medio de recuperaciónProbabilidad de pérdida de datos
Usuario doméstico800 - 5.000 €3 - 14 días🟠 Alta
Autónomo / Freelance3.000 - 25.000 €5 - 21 días🔴 Muy alta
Pyme (10-50 empleados)15.000 - 150.000 €10 - 60 días🔴 Muy alta
Empresa mediana150.000 - 1.000.000 €30 - 120 días🔴 Crítica
Infraestructura crítica1.000.000 € +60 - 365 días🔴 Catastrófica

Otro riesgo poco comentado es la persistencia de los atacantes: una vez dentro, suelen instalar TeamViewer, AnyDesk o RustDesk en modo desatendido como backdoor secundaria, comprometiendo aún más esta conexión ya vulnerada. Esto se detalla en la guía técnica sobre backdoor: qué es, cómo detectarlo y cómo eliminarlo. Por eso, una postura defensiva seria incluye también la auditoría periódica de qué herramientas RAT están instaladas.

Más allá de mantener el acceso, los grupos profesionales no se quedan en la cuenta del usuario que entró: necesitan SYSTEM para desactivar Defender y desplegar el payload final. El análisis completo de escalación de privilegios en Windows: técnicas, detección y cómo prevenirla detalla paso a paso cómo ocurre este proceso.

🦠 RAT modernos más usados como backdoor secundaria

  • 🎯 TeamViewer Host en modo desatendido sin contraseña conocida por el usuario.
  • 🎯 AnyDesk en modo silencioso con acceso aprobado por el atacante.
  • 🎯 RustDesk autohospedado, ideal para atacantes porque evita registros corporativos.
  • 🎯 ScreenConnect (ConnectWise) usado masivamente tras la vulnerabilidad CVE-2024-1709.
  • 🎯 Supremo con configuración portable que no deja huella en el menú Inicio.
  • 🎯 NetSupport Manager distribuido como falsa actualización de Adobe.
  • 🎯 Atera RMM y SimpleHelp abusados para persistencia LotL.
  • 🎯 UltraVNC / TightVNC con puerto camuflado en 5901-5910.

Cómo configurar el acceso remoto Windows seguro paso a paso

🛡️ Cómo configurar el acceso remoto a Windows seguro

🔍 ¿Cómo configurar correctamente el acceso remoto a Windows?

Ocho medidas de acceso remoto a Windows seguro ordenadas por prioridad:

  1. Desactiva RDP si no lo usas: elimina toda la superficie de ataque
  2. Contraseñas únicas de 16+ caracteres: primera barrera contra fuerza bruta
  3. 2FA en toda cuenta crítica: bloquea el acceso aunque la contraseña esté comprometida
  4. RDP siempre detrás de VPN (WireGuard, OpenVPN, Tailscale): oculta el equipo de internet
  5. Firewall con restricción por IP: bloquea el 3389 en TCP y UDP
  6. Windows y herramientas remotas actualizadas: cierra CVEs como BlueKeep y DejaBlue
  7. Detecta procesos RAT no autorizados: TeamViewer, AnyDesk, VNC en modo silencioso
  8. Monitoriza eventos 4625 fallidos: detección de fuerza bruta activa

El orden importa: cada capa cubre lo que la anterior deja expuesto.

🔌 1. Desactiva el escritorio remoto si no lo usas

La primera medida defensiva es la más simple: si no lo necesitas, desactívalo. Windows tiene RDP disponible pero desactivado por defecto en versiones domésticas. Además, este script crea tareas programadas para que el bloqueo se reaplique solo si algo lo revierte (por ejemplo, un malware o una actualización de Windows). Esta es la base para blindar esta conexión sin renunciar a la comodidad cuando realmente lo necesites.

📝 Cómo guardar y ejecutar este script paso a paso

1. Cómo guardar el script como .ps1
  1. Abre el Bloc de notas (tecla Windows → escribe "Bloc de notas" → Enter).
  2. Pega dentro el código del script (lo tienes al final de esta sección).
  3. Ve a Archivo → Guardar como. Se abre una ventana con tres campos que tienes que rellenar bien:
    • Dónde guardarlo: en el panel de la izquierda, haz clic en Escritorio.
    • Nombre de archivo: borra lo que haya y escribe RemoteAccess-Guard.ps1 (con el .ps1 al final, escrito por ti).
    • Tipo: justo debajo hay un desplegable que por defecto pone "Documentos de texto (*.txt)". Tienes que cambiarlo a "Todos los archivos (*.*)". Este paso es el que más falla: si no lo cambias, el archivo se guarda como RemoteAccess-Guard.ps1.txt aunque hayas escrito ".ps1", porque Notepad añade su extensión por defecto.
  4. Pulsa Guardar.
  5. Comprueba que salió bien: en el Escritorio, el icono debe verse como una pantalla de consola azul, no como una hoja de papel. Si se ve como hoja de papel, repite el paso 3.
2. Cómo se ejecuta desde el Escritorio

Nunca hagas doble clic sobre el archivo. Si haces doble clic, Windows abre una ventana, ejecuta el script y la cierra sola en cuanto termina, no te da tiempo a ver nada, ni siquiera si hubo un error. Es un comportamiento de Windows, no del script.

La forma correcta:

  1. Pulsa la tecla Windows, escribe PowerShell.
  2. Verás "Windows PowerShell" en la lista. Haz clic derecho sobre él (no clic normal, no doble clic).
  3. Elige "Ejecutar como administrador".
  4. Sale una ventana pidiendo permiso → pulsa .
  5. Se abre una ventana azul vacía. Esta ventana la controlas tú, no se cierra sola.
  6. Escribe esta línea y pulsa Enter: cd $env:USERPROFILE\Desktop
  7. Escribe esta otra línea y pulsa Enter: powershell -NoExit -ExecutionPolicy Bypass -File "RemoteAccess-Guard.ps1"
  8. Verás texto en verde (bien), amarillo (avisos) o rojo (error). Como abriste tú la ventana manualmente, no se cierra aunque el script termine o falle, puedes leer todo con calma.
  9. Al final te pedirá pulsar Enter para cerrar. Hazlo cuando ya hayas leído el resultado.
3. Alternativas si la ventana no se abre o algo falla
  • Si al hacer clic derecho no aparece "Ejecutar como administrador": asegúrate de que estás buscando "Windows PowerShell" (la app), no dentro de una carpeta. Prueba también con "Terminal" en vez de "PowerShell", en Windows 11 a veces se llama así.
  • Si te sale "la ejecución de scripts está deshabilitada": el comando del paso 7 anterior ya incluye -ExecutionPolicy Bypass, no debería pasar. Si aun así aparece, escribe primero esto y pulsa Enter, confirmando con "S": Set-ExecutionPolicy RemoteSigned -Scope Process y repite el paso 7.
  • Si la ventana se cierra igualmente pase lo que pase: puede haber un antivirus o control parental bloqueando PowerShell. Prueba a copiar y pegar exactamente esta línea completa (cambia "TuUsuario" por tu nombre de usuario real de Windows): powershell -NoExit -ExecutionPolicy Bypass -Command "& 'C:\Users\TuUsuario\Desktop\RemoteAccess-Guard.ps1'"
  • Si nada de esto funciona: anota exactamente qué ves en pantalla en el momento en que falla, para poder identificar la causa con datos concretos.
⚠️ No hagas doble clic sobre el archivo .ps1. Windows abre y cierra la ventana automáticamente al terminar, sin darte tiempo a leer si hubo algún error. Ejecútalo siempre desde una ventana de PowerShell abierta como administrador, como se explica arriba.
Script para bloquear el acceso remoto a un sistema operativo Windows

Script para bloquear el acceso remoto a un sistema operativo Windows

Este script desactiva RDP (fDenyTSConnections), fuerza NLA, desactiva la Asistencia Remota, bloquea el puerto 3389 en TCP y UDP, detecta procesos RAT conocidos (TeamViewer, AnyDesk, VNC, RustDesk) sin detenerlos, y crea las cuatro tareas programadas RemoteAccess-Guard-* descritas más abajo. Con esto queda resuelto, en un solo paso, el acceso remoto a Windows no autorizado.

# ============================================
# RemoteAccess-Guard: bloqueo y monitorizacion de acceso remoto en Windows
# Desactiva RDP, Asistencia Remota, bloquea el puerto 3389 TCP/UDP
# y detecta procesos RAT no autorizados (TeamViewer, AnyDesk, VNC, RustDesk)
# Mantenimiento con 4 tareas programadas: Inicio, Logon, Horaria y Red
# Requiere: PowerShell como Administrador
# Ruta fija: C:\Scripts\RemoteAccess-Guard.ps1
# ============================================
try {
    # 0. Verificar privilegios de administrador
    if (-not ([Security.Principal.WindowsPrincipal] `
        [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
        [Security.Principal.WindowsBuiltInRole]::Administrator)) {
        Write-Host "[X] Ejecuta este script como Administrador." -ForegroundColor Red
        exit
    }
    # 1. Asegurar que el script vive en C:\Scripts (ruta que usaran las tareas programadas)
    $carpetaScripts = "C:\Scripts"
    if (-not (Test-Path $carpetaScripts)) {
        New-Item -ItemType Directory -Path $carpetaScripts -Force | Out-Null
    }
    $rutaFinal = "$carpetaScripts\RemoteAccess-Guard.ps1"
    if ($PSCommandPath -and ($PSCommandPath -ne $rutaFinal)) {
        Copy-Item -Path $PSCommandPath -Destination $rutaFinal -Force
        Write-Host "[i] Copia del script guardada en $rutaFinal para uso de las tareas programadas." -ForegroundColor Cyan
    }
    $carpetaLogs = "C:\Logs"
    if (-not (Test-Path $carpetaLogs)) {
        New-Item -ItemType Directory -Path $carpetaLogs -Force | Out-Null
    }
    $log = "$carpetaLogs\remote-access-guard.log"
    $csv = "$carpetaLogs\remote-access-guard-historico.csv"
    Start-Transcript -Path $log -Append | Out-Null
    $disparador = if ($args[0]) { $args[0] } else { "Manual" }
    Write-Host "=== RemoteAccess-Guard ===" -ForegroundColor Cyan
    Write-Host "Fecha: $(Get-Date) | Disparador: $disparador" -ForegroundColor Gray
    $cambios = 0
    # 2. Punto de restauracion (solo en la primera ejecucion manual)
    $marcaRestauracion = "$carpetaLogs\.restore-point-creado"
    if ($disparador -eq "Manual" -and -not (Test-Path $marcaRestauracion)) {
        try {
            Enable-ComputerRestore -Drive "C:\" -ErrorAction SilentlyContinue
            Checkpoint-Computer -Description "RemoteAccess-Guard antes de bloquear RDP" -RestorePointType "MODIFY_SETTINGS" -ErrorAction Stop
            New-Item -Path $marcaRestauracion -ItemType File -Force | Out-Null
            Write-Host "[OK] Punto de restauracion creado." -ForegroundColor Green
        } catch {
            Write-Host "[AVISO] No se pudo crear el punto de restauracion: $($_.Exception.Message)" -ForegroundColor Yellow
        }
    }
    function Set-RegPolicy {
        param($Ruta, $Nombre, $Valor, $Tipo = "DWord")
        if (-not (Test-Path $Ruta)) { New-Item -Path $Ruta -Force | Out-Null }
        $actual = (Get-ItemProperty -Path $Ruta -Name $Nombre -ErrorAction SilentlyContinue).$Nombre
        if ($actual -ne $Valor) {
            Set-ItemProperty -Path $Ruta -Name $Nombre -Value $Valor -Type $Tipo -Force
            Write-Host "[!] $Nombre : $actual -> $Valor" -ForegroundColor Yellow
            return 1
        }
        return 0
    }
    # -------------------------------------------------------
    # 3. Desactivar RDP (fDenyTSConnections) y forzar NLA
    # -------------------------------------------------------
    Write-Host "--- Terminal Server ---" -ForegroundColor Yellow
    $ts = "HKLM:\System\CurrentControlSet\Control\Terminal Server"
    $tsNLA = "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp"
    $cambios += Set-RegPolicy $ts "fDenyTSConnections" 1
    $cambios += Set-RegPolicy $tsNLA "UserAuthentication" 1
    Write-Host "[OK] RDP desactivado y NLA forzado." -ForegroundColor Green
    # -------------------------------------------------------
    # 4. Desactivar Asistencia Remota
    # -------------------------------------------------------
    Write-Host "--- Asistencia Remota ---" -ForegroundColor Yellow
    $ra = "HKLM:\SYSTEM\CurrentControlSet\Control\Remote Assistance"
    $cambios += Set-RegPolicy $ra "fAllowToGetHelp" 0
    Write-Host "[OK] Asistencia Remota desactivada." -ForegroundColor Green
    # -------------------------------------------------------
    # 5. Bloquear el puerto 3389 en el Firewall (TCP y UDP, todos los perfiles)
    # -------------------------------------------------------
    Write-Host "--- Firewall ---" -ForegroundColor Yellow
    $reglaTCP = Get-NetFirewallRule -DisplayName "Bloquear RDP" -ErrorAction SilentlyContinue
    if (-not $reglaTCP) {
        New-NetFirewallRule -DisplayName "Bloquear RDP" -Direction Inbound -Protocol TCP -LocalPort 3389 -Action Block -Profile Any | Out-Null
        New-NetFirewallRule -DisplayName "Bloquear RDP UDP" -Direction Inbound -Protocol UDP -LocalPort 3389 -Action Block -Profile Any | Out-Null
        Write-Host "[!] Reglas de firewall 'Bloquear RDP' creadas (TCP y UDP)." -ForegroundColor Yellow
        $cambios++
    } else {
        if ($reglaTCP.Enabled -ne "True" -or $reglaTCP.Action -ne "Block") {
            Set-NetFirewallRule -DisplayName "Bloquear RDP" -Enabled True -Action Block
            Write-Host "[!] Regla 'Bloquear RDP' corregida." -ForegroundColor Yellow
            $cambios++
        } else {
            Write-Host "[i] Reglas de firewall ya activas." -ForegroundColor Cyan
        }
    }
    # -------------------------------------------------------
    # 6. Detectar procesos RAT no autorizados (solo deteccion, no los detiene)
    # -------------------------------------------------------
    Write-Host "--- Deteccion de RAT ---" -ForegroundColor Yellow
    $procesosRAT = @("TeamViewer", "TeamViewer_Service", "AnyDesk", "vncserver", "winvnc", "tvnserver", "rustdesk", "ScreenConnect", "ConnectWiseControl")
    $ratActivos = Get-Process | Where-Object { $procesosRAT -contains $_.ProcessName } | Select-Object -ExpandProperty ProcessName -Unique
    if ($ratActivos) {
        Write-Host "[AVISO] Procesos de acceso remoto detectados: $($ratActivos -join ', ')" -ForegroundColor Yellow
    } else {
        Write-Host "[OK] Ningun proceso RAT conocido en ejecucion." -ForegroundColor Green
    }
    # -------------------------------------------------------
    # Resumen y CSV historico
    # -------------------------------------------------------
    $resumen = [PSCustomObject]@{
        Fecha = (Get-Date -Format "yyyy-MM-dd HH:mm:ss")
        Disparador = $disparador
        CambiosAplic = $cambios
        RATDetectados = if ($ratActivos) { $ratActivos -join ";" } else { "Ninguno" }
    }
    $intentos = 0
    $escrito = $false
    while (-not $escrito -and $intentos -lt 5) {
        try {
            if (-not (Test-Path $csv)) {
                $resumen | Export-Csv -Path $csv -NoTypeInformation -Encoding UTF8
            } else {
                $resumen | Export-Csv -Path $csv -Append -NoTypeInformation -Encoding UTF8
            }
            $escrito = $true
        } catch {
            $intentos++
            Start-Sleep -Seconds 2
        }
    }
    if (-not $escrito) {
        Write-Host "[AVISO] No se pudo escribir en el CSV historico tras 5 intentos (en uso por otro proceso)." -ForegroundColor Yellow
    }
    Write-Host "[OK] Cambios aplicados: $cambios" -ForegroundColor Green
    Write-Host "  Log: $log" -ForegroundColor Gray
    # -------------------------------------------------------
    # Tareas programadas (Inicio, Logon, cada hora, al conectar a red nueva)
    # -------------------------------------------------------
    $carpetaTareas = "\SeguridadEnMiPC\RemoteAccess-Guard\"
    function Crear-Tarea {
        param($Nombre, $Disp, $Trigger)
        if (-not (Get-ScheduledTask -TaskName $Nombre -TaskPath $carpetaTareas -ErrorAction SilentlyContinue)) {
            $a = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$rutaFinal`" $Disp"
            $p = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
            $s = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable -ExecutionTimeLimit (New-TimeSpan -Minutes 5) -MultipleInstances IgnoreNew
            Register-ScheduledTask -TaskName $Nombre -TaskPath $carpetaTareas -Action $a -Trigger $Trigger -Principal $p -Settings $s | Out-Null
            Write-Host "[OK] Tarea '$Nombre' creada." -ForegroundColor Green
        } else {
            Write-Host "[i] Tarea '$Nombre' ya existia." -ForegroundColor Yellow
        }
    }
    Crear-Tarea "RemoteAccess-Guard-Inicio" "Inicio" (New-ScheduledTaskTrigger -AtStartup)
    Crear-Tarea "RemoteAccess-Guard-Logon" "Logon" (New-ScheduledTaskTrigger -AtLogOn)
    Crear-Tarea "RemoteAccess-Guard-Horaria" "Horaria" (New-ScheduledTaskTrigger -Once -At (Get-Date).AddMinutes(10) -RepetitionInterval (New-TimeSpan -Hours 1) -RepetitionDuration (New-TimeSpan -Days 3650))
    # La tarea "al conectar a red nueva" usa el evento 10000 del log NetworkProfile
    # y se crea con schtasks.exe porque requiere un disparador de evento (no soportado
    # directamente por New-ScheduledTaskTrigger en PowerShell 5.1)
    $tareaRed = "RemoteAccess-Guard-Red"
    $existeTareaRed = Get-ScheduledTask -TaskName $tareaRed -TaskPath $carpetaTareas -ErrorAction SilentlyContinue
    if (-not $existeTareaRed) {
        $argumentoRed = "-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$rutaFinal`" Red"
        schtasks /create /tn "$($carpetaTareas)$tareaRed" /tr "PowerShell.exe $argumentoRed" /sc onevent /ec "Microsoft-Windows-NetworkProfile/Operational" /mo "*[System[(EventID=10000)]]" /ru SYSTEM /rl highest /f | Out-Null
        Write-Host "[OK] Tarea '$tareaRed' creada (disparador: evento 10000 de red)." -ForegroundColor Green
    } else {
        Write-Host "[i] Tarea '$tareaRed' ya existia." -ForegroundColor Yellow
    }
    # Verificacion final
    Write-Host "`n=== Tareas programadas activas ===" -ForegroundColor Cyan
    Get-ScheduledTask -TaskName "RemoteAccess-Guard-*" | Select-Object TaskName, TaskPath, State | Format-Table -AutoSize
    Write-Host "[OK] RemoteAccess-Guard activo con 4 tareas programadas." -ForegroundColor Green
    Write-Host "  Script principal: $rutaFinal" -ForegroundColor Gray
    Write-Host "  Log: $log" -ForegroundColor Gray
    Write-Host "  CSV historico: $csv" -ForegroundColor Gray
    Write-Host "`n[i] Verifica el resultado con:" -ForegroundColor Yellow
    Write-Host "  Get-ScheduledTask -TaskName 'RemoteAccess-Guard-*' | Select-Object TaskName, TaskPath, State" -ForegroundColor Gray
}
catch {
    Write-Host "`n[X] Error: $($_.Exception.Message)" -ForegroundColor Red
}
finally {
    Stop-Transcript | Out-Null
    Read-Host "`nPulsa Enter para salir"
}

Nota: las tareas programadas se ejecutan como SYSTEM en segundo plano y registran cada verificación en C:\Logs\remote-access-guard.log. Si más adelante necesitas volver a usar RDP, elimina estas tareas (Unregister-ScheduledTask -TaskName "RemoteAccess-Guard-*" -TaskPath "\SeguridadEnMiPC\RemoteAccess-Guard\" -Confirm:$false) y reactiva fDenyTSConnections a 0, o el bloqueo se reaplicará automáticamente en la siguiente ejecución programada.

RDP es solo uno de los servicios de red que Windows mantiene activos por defecto. Cerrar el puerto 3389 deja sin tocar otros servicios de compartición que también escuchan en LAN: SMBv1 (vector de WannaCry), LLMNR y NetBIOS (captura de hashes NTLM), Print Spooler (PrintNightmare) y Remote Registry.

🔑 Contraseñas robustas y únicas

Contraseña de al menos 16 caracteres, combinando mayúsculas, minúsculas, números y símbolos, única para cada servicio. Consulta la guía técnica para crear contraseñas seguras y difíciles de hackear. Una contraseña fuerte es la primera línea de defensa de cualquier conexión remota, pero por sí sola no basta para garantizar una conexión remota segura.

📱 Activa la autenticación de dos factores (2FA)

El doble factor es la medida más efectiva: aunque un atacante consiga tu contraseña, sin el segundo factor no puede conectarse. Sumar 2FA detiene los ataques de fuerza bruta y de credential stuffing aunque la contraseña haya sido comprometida en una filtración previa. Aprende a configurarlo en la guía maestra de autenticación de dos factores: qué es, tipos y cómo activarla paso a paso. Combinada con contraseñas robustas, el 2FA cierra una de las brechas más comunes del acceso remoto a Windows.

🌐 Usa siempre una VPN para conexiones remotas

Estas son las razones por las que la VPN es indispensable para el acceso remoto a Windows:

  • ✅ La VPN cifra todo el tráfico entre cliente y equipo remoto.
  • ✅ Oculta el equipo remoto de los escaneos de internet.
  • ✅ Añade una capa de autenticación previa.
  • ✅ Permite restringir el acceso por IP o grupo de usuarios.

El escritorio remoto nunca debe publicarse directamente en internet. Si necesitas RDP, debe ir siempre dentro de una VPN, WireGuard, OpenVPN, Tailscale o la VPN de tu router, que actúe como antesala autenticada y cifrada.

Un firewall bien configurado es el segundo pilar de esta protección: aunque el atacante conozca la contraseña, sin la IP de origen autorizada el firewall descarta la conexión en capa 3. Consulta la guía para restringir el acceso por IP en Windows paso a paso. Combinar esta restricción con VPN y MFA forma la triple barrera que define una protección de nivel profesional.

🔄 Mantén todo actualizado

BlueKeep (CVE-2019-0708) y DejaBlue explotaron vulnerabilidades conocidas en versiones desactualizadas de RDP. Sin parches al día no hay conexión remota segura que valga: un solo CVE sin parchear puede saltarse contraseñas, MFA y firewalls. Activa las actualizaciones automáticas de Windows y mantén TeamViewer, AnyDesk y cualquier herramienta de acceso remoto al día.

Detectar software RAT no autorizado es uno de los pasos más infravalorados. Muchos usuarios no recuerdan haber instalado TeamViewer o AnyDesk porque vinieron como dependencias de otro software, dejando una puerta trasera permanente. Una postura defensiva sólida obliga a inventariar mensualmente qué RAT comerciales no autorizados están en ejecución.

El evento 4625 es la señal más clara de que alguien está intentando entrar por fuerza bruta. Para llevar este punto a su forma completa, consulta la guía avanzada de monitorización de logins en Windows con eventos 4624 y 4625 para detectar credential stuffing. Esa guía añade tareas programadas que generan un CSV histórico permanente y reducen el tiempo medio de detección de intrusiones de 207 días a minutos.

📊 Configuración recomendada según escenario de uso

La configuración de acceso remoto a Windows debe adaptarse a tu escenario de uso real, como muestra la siguiente tabla:

EscenarioRDPVPN2FARAT externos
PC doméstico sin uso remoto🔴 Desactivado🔴 Ninguno
Teletrabajador puntual🟡 Solo bajo VPN🟢 Obligatoria🟢 Obligatorio🟡 Solo si necesario
Autónomo con soporte técnico🔴 Desactivado🟡 Opcional🟢 Obligatorio🟢 Bajo demanda + MFA
Administrador IT pyme🟢 Bajo VPN + IP fija🟢 Obligatoria🟢 Llave física🟢 RMM con auditoría
Servidor expuesto a internet🔴 Nunca directo🟢 Obligatoria + bastion🟢 Llave + cert🔴 Ninguno

⚠️ Antes de ejecutar: Este script modifica el registro de Windows, el firewall y crea cuatro tareas programadas persistentes. Es completamente reversible mediante el script de reversión. Crea un punto de restauración automáticamente en su primera ejecución. Genera log en C:\Logs\remote-access-guard.log y CSV histórico en C:\Logs\remote-access-guard-historico.csv.

📅 Tareas programadas que crea este script

Nombre de la tareaDisparadorFrecuenciaPropósito
RemoteAccess-Guard-InicioAl iniciar Windows (-AtStartup)Cada arranque del equipoReaplica el bloqueo de RDP, Asistencia Remota y la regla del firewall por si una actualización de Windows ha revertido alguna configuración
RemoteAccess-Guard-LogonAl iniciar sesión (-AtLogOn)Cada login (incluye reinicios)Verifica el bloqueo cuando un usuario inicia sesión y detecta procesos de TeamViewer, AnyDesk o VNC lanzados por un instalador silencioso
RemoteAccess-Guard-HorariaCada hora (-RepetitionInterval 1h)24 veces al díaVigilancia continua: si malware reactiva RDP, elimina la regla del firewall o instala un RAT, el script lo detecta y lo revierte en menos de una hora
RemoteAccess-Guard-RedAl conectar a una red (evento 10000)Cada vez que cambia la conexión de redRevisa el bloqueo al conectar a WiFi o LAN nueva; momento en el que Windows puede cambiar de perfil de firewall y reabrir puertos
Por qué añadimos la tarea "al conectar a red nueva": Cuando Windows identifica una red nueva (evento 10000 del log Microsoft-Windows-NetworkProfile/Operational), puede cambiar automáticamente de perfil de firewall (privado a público o viceversa), y ese cambio puede reactivar reglas que expongan RDP. Esta tarea verifica que el puerto 3389 sigue bloqueado en todos los perfiles. Especialmente útil en portátiles que cambian de red con frecuencia.

⚠️ Riesgos y efectos reales del script

Función del sistema¿Se ve afectada?Detalle técnico
Inicio de sesión local🟢 NoNo modifica LSASS, SAM ni políticas de cuenta
Inicio de Windows🟢 NoLas tareas se ejecutan en background tras el arranque
Reinicio / apagado🟢 NoNo modifica el subsistema de apagado ni BCD
UEFI / arranque seguro🟢 NoNo afecta BCD, Secure Boot ni particiones EFI
Banca, Gmail y plataformas web🟢 NoSolo bloquea entrada 3389, la navegación sale por 80/443
Cambio de red (WiFi / LAN)🟢 Sí (positivo)La tarea Red verifica el bloqueo al cambiar de red
Conexiones RDP entrantes🔴 Sí (a propósito)Puerto 3389 TCP y UDP bloqueado en todos los perfiles
Asistencia Remota🔴 Sí (a propósito)Se desactiva fAllowToGetHelp
TeamViewer / AnyDesk / VNC🟡 Solo detecta, no detieneEl script registra qué RAT están activos; no los mata ni desinstala
Carga de CPU (4 tareas)🟡 MínimaCada ejecución consume pocos segundos; total < 2 min/día
🚨 Casos en los que NO debes ejecutar el script sin consultar antes:
  • Si tu equipo es gestionado por el departamento de IT de una empresa.
  • Si utilizas RDP habitualmente para teletrabajo o soporte técnico.
  • Si tienes un NAS, servidor o backup que accede al PC por el puerto 3389.
  • Si usas TeamViewer o AnyDesk legítimamente: el script los detecta pero no los detiene; aparecerán en el CSV como procesos remotos activos.
  • Si tu antivirus o EDR corporativo ya aplica hardening similar.
En estos casos, comenta las líneas correspondientes del script o ejecuta el script de reversión si surge algún problema.

🔎 ¿Cómo verificar que el bloqueo está activo?

Tres comprobaciones en PowerShell (cada comando en su propia línea) confirman que el acceso remoto a Windows está realmente bloqueado:

  1. Registro: Get-ItemProperty "HKLM:\System\CurrentControlSet\Control\Terminal Server" -Name fDenyTSConnections debe devolver fDenyTSConnections = 1
  2. Regla de firewall: Get-NetFirewallRule -DisplayName "Bloquear RDP" | Select-Object DisplayName, Enabled, Action debe mostrar Enabled = True y Action = Block
  3. Tareas programadas: Get-ScheduledTask -TaskName "RemoteAccess-Guard-*" | Select-Object TaskName, TaskPath, State debe listar las tareas en estado Ready
Get-ItemProperty "HKLM:\System\CurrentControlSet\Control\Terminal Server" -Name fDenyTSConnections
Get-NetFirewallRule -DisplayName "Bloquear RDP" | Select-Object DisplayName, Enabled, Action
Get-ScheduledTask -TaskName "RemoteAccess-Guard-*" | Select-Object TaskName, TaskPath, State

⚡ Checklist de auditoría rápida en 5 minutos

Sin instalar nada, audita en 5 minutos el estado real de tu acceso remoto a Windows seguro:

  • RDP desactivado: registro fDenyTSConnections = 1
  • Puerto 3389 cerrado: Test-NetConnection localhost -Port 3389 debe fallar
  • Reglas de firewall activas: TCP y UDP, habilitadas, Action=Block
  • Asistencia Remota desactivada: fAllowToGetHelp = 0
  • NLA forzado: UserAuthentication = 1
  • Sin procesos RAT activos: no aparece TeamViewer, AnyDesk, VNC, RustDesk, etc.
  • Las 4 tareas programadas presentes y en Ready con LastTaskResult = 0
  • Eventos 4625 estables: menos de 20 intentos fallidos en últimas 24 h
  • Windows actualizado a la última build estable
  • Sin redirecciones de puerto 3389 en el router

✔ 10/10 = endpoint protegido a nivel corporativo · ✘ menos de 7 = exposición activa


Señales de que tu acceso remoto en Windows ha sido comprometido

🧠 Señales de que tu acceso remoto a Windows ha sido comprometido

🔍 ¿Cómo saber si alguien ha comprometido el acceso remoto a Windows de mi PC?

Diez señales de compromiso del acceso remoto Windows ordenadas por urgencia:

  1. El cursor se mueve solo o aparecen ventanas que no has abierto, urgencia máxima
  2. Han cambiado tu contraseña o configuración sin que lo hayas hecho tú, urgencia máxima
  3. El antivirus o Windows Update dejaron de funcionar repentinamente, urgencia máxima
  4. Eventos 4624 (login exitoso) en horario en el que no usas el equipo
  5. Reglas nuevas en el firewall que no recuerdas haber creado
  6. Servicios nuevos en ejecución relacionados con software RMM
  7. Aparecen o desaparecen archivos sin tu intervención
  8. La luz de la cámara se enciende sola
  9. El equipo está lento con alta CPU o uso de red sin razón aparente
  10. Tus contactos reciben mensajes que tú no has enviado
  • 🖱️ El cursor se mueve solo o aparecen ventanas que no has abierto.
  • ⚡ El equipo está lento con alta CPU o uso de red sin razón aparente.
  • 🔒 Han cambiado tu contraseña o configuración sin que lo hayas hecho tú.
  • 📁 Aparecen o desaparecen archivos sin tu intervención.
  • 🌐 El antivirus o Windows Update dejaron de funcionar repentinamente.
  • 💡 La luz de la cámara se enciende sola.
  • 📧 Tus contactos reciben mensajes que tú no has enviado.
  • 🌍 Eventos 4624 (login exitoso) en horario en el que no usas el equipo.
  • 🚪 Reglas nuevas en el firewall que no recuerdas haber creado.
  • 🔧 Servicios nuevos en ejecución relacionados con software RMM.

⏱️ Checklist de respuesta post-compromiso (orden estricto)

Si confirmas que tu equipo ha sido controlado remotamente, actúa en este orden:

  1. 0-2 min: Desconecta el cable Ethernet y desactiva WiFi del equipo afectado.
  2. 2-5 min: NO apagues el equipo si sospechas movimiento lateral activo: la RAM puede contener IOCs.
  3. 5-10 min: Desde OTRO dispositivo limpio, cambia contraseña del correo principal y activa 2FA.
  4. 10-20 min: Revoca sesiones activas en banco, Outlook, Gmail, M365, redes sociales, gestor.
  5. 20-40 min: Revisa reglas de reenvío de correo (vector clásico de persistencia post-RDP).
  6. 40-60 min: Avisa al banco de posible fraude; revisa los movimientos de los últimos 30 días.
  7. 1-2 h: Documenta los eventos 4624/4625 y exporta el log de Security a un USB nuevo.
  8. 2-4 h: Análisis con Malwarebytes + Defender Offline; identifica RAT instalados.
  9. 4-8 h: Denuncia INCIBE (017) y, si hay delito económico, GDT (062).
  10. Después: Reinstalación limpia desde USB creada en otro equipo si el incidente fue grave.

🆚 Equipo sin protección vs equipo blindado

CaracterísticaSin protecciónCon RemoteAccess-Guard
Puerto RDP expuesto🔴 Sí, visible en internet🟢 No, bloqueado TCP y UDP en todos los perfiles
Contraseñas🔴 Débiles o reutilizadas🟢 Únicas, 16+ caracteres
Doble factor (2FA)🔴 No activo🟢 Obligatorio
Persistencia del bloqueo🔴 Un malware puede revertir la configuración🟢 Cuatro tareas programadas lo restauran
Cambio de red🔴 Cambio de perfil puede reabrir 3389🟢 Verificación automática al cambiar
Monitorización de RAT🔴 Sin alertas🟢 Detección de TeamViewer/AnyDesk/VNC
Riesgo de ransomware🔴 Muy alto🟢 Muy bajo

❓ Preguntas frecuentes

¿Cómo sé si alguien está controlando mi ordenador ahora mismo?

👉 Los indicios más claros son: movimiento del cursor sin que lo muevas, ventanas que se abren solas, equipo muy lento con alta actividad de red y cambios en configuraciones. Verifica conexiones activas con netstat -an | findstr ESTABLISHED. Si ves conexiones en el puerto 3389, 5900 o a IPs desconocidas, tu equipo puede estar siendo controlado. Cuando el script de acceso remoto a Windows seguro está activo, registra automáticamente los procesos RAT y los intentos fallidos en el CSV histórico.

¿Es seguro usar TeamViewer o AnyDesk?

👉 Sí, siempre que se usen correctamente. Ambas cifran sus conexiones con AES-256 y TLS. El riesgo aparece con contraseñas débiles, acceso concedido a desconocidos por teléfono, o software desactualizado. Activa 2FA y revisa el historial de conexiones. El script RemoteAccess-Guard los detecta y registra en el CSV, pero no los detiene automáticamente: bien configuradas, son alternativas razonables de acceso remoto a Windows.

¿Las cuatro tareas programadas ralentizan el equipo?

👉 No de forma perceptible. Cada ejecución dura menos de 5 segundos, se realiza en background como SYSTEM en modo oculto. El script es idempotente: comprueba cada configuración antes de modificarla y solo actúa si detecta desviación. La carga combinada suma menos de 2 minutos de CPU al día.

¿Por qué hay una tarea específica para "al conectar a red nueva"?

👉 Porque cuando Windows identifica una red nueva puede cambiar automáticamente de perfil de firewall, y ese cambio puede reactivar reglas que reabran RDP. La tarea RemoteAccess-Guard-Red se dispara con el evento 10000, verifica el bloqueo y lo reaplica si detecta desviación. Especialmente útil en portátiles que cambian de red con frecuencia.

¿Cómo desactivo las tareas si quiero volver a usar RDP?

👉 Ejecuta el script de reversión: elimina las cuatro tareas y reactiva RDP en un solo paso. Si solo quieres una excepción puntual, la vía recomendada es dejar el script activo y abrir RDP bajo una VPN con restricción de IP, NLA y 2FA.

¿En qué se diferencia el acceso remoto a Windows del hardening del sistema operativo?

👉 El hardening del SO actúa sobre LSASS, SMB, UAC y servicios; este artículo se centra en el acceso remoto a Windows: RDP, Asistencia Remota, NLA y herramientas RAT. Son complementarios. Para aplicar el hardening completo del sistema, consulta la guía de hardening de cuentas Windows: protege administrador local, UAC y políticas de contraseñas.

¿Puedo aplicarlo en un equipo doméstico sin Active Directory?

👉 Sí. Toda esta guía está pensada para equipos sin GPO ni Intune: usa el registro local, el Firewall de Windows y el Programador de tareas, disponibles en Windows 10 y 11 Home. Es el enfoque ideal para quienes gestionan el acceso remoto a Windows de forma personal, sin infraestructura corporativa: autónomos, freelances y particulares.

¿Qué diferencia hay entre RDP, una VPN y un proxy?

👉 RDP proporciona control gráfico completo de un escritorio Windows remoto. VPN crea un túnel cifrado que oculta tráfico y direcciones IP, sin controlar escritorios. Proxy reenvía peticiones HTTP/HTTPS a través de un intermediario, sin cifrar todo el tráfico. La configuración óptima combina los tres: VPN para acceder a la red, RDP dentro de esa VPN para controlar el equipo, y proxy corporativo para auditar el tráfico de salida.

¿Con qué frecuencia debo revisar mi configuración?

👉 Como mínimo cada trimestre, y siempre tras una actualización mayor de Windows. La revisión consiste en abrir el CSV histórico, comprobar que las cuatro tareas están en Ready y verificar que CambiosAplic no sube de forma anómala.


🏁 Conclusión: Acceso remoto a Windows seguro

El acceso remoto a Windows seguro no es una opción reservada para grandes empresas: es una necesidad para cualquier usuario. El puerto 3389 expuesto, una contraseña débil o un TeamViewer sin 2FA son suficientes para que un atacante tome el control total de tu equipo en minutos.

Estas medidas no requieren conocimientos avanzados. Desactivar RDP si no lo usas, bloquear el puerto 3389, usar una VPN y activar el 2FA son acciones que cualquier usuario puede aplicar con un solo comando en PowerShell. Combinadas y protegidas con las cuatro tareas programadas, eliminan la inmensa mayoría de los vectores de ataque que los ciberdelincuentes explotan a diario, dentro de las guías de ciberseguridad para proteger tus dispositivos y tu red doméstica.

🔒 Checklist final de acceso remoto a Windows seguro

  • RDP desactivado o restringido a IPs de confianza
  • Puerto 3389 bloqueado en firewall TCP y UDP (todos los perfiles)
  • VPN activa antes de cualquier conexión remota
  • Contraseñas de 16+ caracteres únicas por equipo
  • 2FA activado en todas las herramientas remotas
  • Refuerzo de cuentas locales con la guía de hardening de cuentas Windows (administrador local, UAC y políticas de contraseñas)
  • Windows y software de acceso remoto actualizados
  • RemoteAccess-Guard instalado con sus 4 tareas programadas
  • RemoteAccess-Guard con revisión mensual del CSV histórico

Autor

Entusiasta de la seguridad informática con años de experiencia en protección de sistemas Windows y defensa contra amenazas digitales. Apasionado por la tecnología y la privacidad, comparto en este blog consejos prácticos, análisis detallados y guías paso a paso para que cualquier usuario pueda fortalecer la seguridad de su PC y su vida digital

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Tu puntuación: Útil

Subir