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

¿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?
| Protocolo / Herramienta | Uso principal | Puerto por defecto | Cifrado |
|---|---|---|---|
| RDP (Microsoft) | Escritorio remoto Windows | 3389 TCP | TLS |
| VNC | Multiplataforma, open source | 5900 TCP | Opcional |
| TeamViewer | Soporte técnico y teletrabajo | 443 / 5938 | AES-256 |
| AnyDesk | Soporte y trabajo remoto | 443 / 7070 | TLS 1.2 |
| SSH | Administración de servidores | 22 TCP | AES-256 |
| Chrome Remote Desktop | Acceso personal ocasional | 443 HTTPS | TLS |
🏆 Ranking de protocolos por nivel de seguridad nativo
| Protocolo | Seguridad nativa | Recomendado para | Combinar con |
|---|---|---|---|
| SSH | 🟢 Excelente | Administración Linux/servidores | Claves públicas + MFA |
| RDP + VPN | 🟢 Muy buena | Teletrabajo profesional Windows | NLA + 2FA + restricción IP |
| TeamViewer | 🟡 Buena con MFA | Soporte técnico puntual | MFA + dispositivos confianza |
| AnyDesk | 🟡 Buena con MFA | Soporte técnico puntual | MFA + lista blanca |
| Chrome Remote Desktop | 🟡 Aceptable | Uso doméstico ocasional | Cuenta Google con 2FA |
| RDP expuesto sin VPN | 🔴 Mala | Nunca recomendable | Solo si imposible alternativa |
| VNC sin tunelizar | 🔴 Pésima | Nunca recomendable | Solo dentro de SSH/VPN |
⚠️ Riesgos de un escritorio remoto mal configurado
Los cinco riesgos principales del RDP mal configurado ordenados por frecuencia:
- Fuerza bruta RDP (muy alta): bots rastrean el puerto 3389 y lanzan diccionarios de credenciales automáticamente
- Ransomware vía RDP (muy alta): grupos como LockBit y BlackCat entran por RDP expuesto y cifran todos los archivos
- Estafa de soporte técnico falso (alta): el atacante llama haciéndose pasar por Microsoft y convence a la víctima de instalar TeamViewer
- Credential stuffing (alta): contraseñas reutilizadas de brechas anteriores abren acceso a todas las cuentas vinculadas
- 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.
- 🔓 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 ataque | Vector de entrada | Impacto | Frecuencia |
|---|---|---|---|
| Fuerza bruta RDP | Puerto 3389 expuesto | Control total del equipo | 🔴 Muy alta |
| Ransomware vía RDP | Credenciales comprometidas | Cifrado de archivos | 🔴 Muy alta |
| Estafa soporte técnico | Ingeniería social | Robo de datos y dinero | 🟠 Alta |
| Credential stuffing | Contraseñas reutilizadas | Acceso a cuentas vinculadas | 🟠 Alta |
| Man-in-the-Middle | Conexión no cifrada | Interceptación de sesión | 🟡 Media |
💸 Coste real de un incidente por RDP comprometido
| Perfil afectado | Coste medio | Tiempo medio de recuperación | Probabilidad de pérdida de datos |
|---|---|---|---|
| Usuario doméstico | 800 - 5.000 € | 3 - 14 días | 🟠 Alta |
| Autónomo / Freelance | 3.000 - 25.000 € | 5 - 21 días | 🔴 Muy alta |
| Pyme (10-50 empleados) | 15.000 - 150.000 € | 10 - 60 días | 🔴 Muy alta |
| Empresa mediana | 150.000 - 1.000.000 € | 30 - 120 días | 🔴 Crítica |
| Infraestructura crítica | 1.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 a Windows seguro
Ocho medidas de acceso remoto a Windows seguro ordenadas por prioridad:
- Desactiva RDP si no lo usas: elimina toda la superficie de ataque
- Contraseñas únicas de 16+ caracteres: primera barrera contra fuerza bruta
- 2FA en toda cuenta crítica: bloquea el acceso aunque la contraseña esté comprometida
- RDP siempre detrás de VPN (WireGuard, OpenVPN, Tailscale): oculta el equipo de internet
- Firewall con restricción por IP: bloquea el 3389 en TCP y UDP
- Windows y herramientas remotas actualizadas: cierra CVEs como BlueKeep y DejaBlue
- Detecta procesos RAT no autorizados: TeamViewer, AnyDesk, VNC en modo silencioso
- 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
- Abre el Bloc de notas (tecla Windows → escribe "Bloc de notas" → Enter).
- Pega dentro el código del script (lo tienes al final de esta sección).
- 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.ps1al 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.txtaunque hayas escrito ".ps1", porque Notepad añade su extensión por defecto.
- Pulsa Guardar.
- 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:
- Pulsa la tecla Windows, escribe
PowerShell. - Verás "Windows PowerShell" en la lista. Haz clic derecho sobre él (no clic normal, no doble clic).
- Elige "Ejecutar como administrador".
- Sale una ventana pidiendo permiso → pulsa Sí.
- Se abre una ventana azul vacía. Esta ventana la controlas tú, no se cierra sola.
- Escribe esta línea y pulsa Enter:
cd $env:USERPROFILE\Desktop - Escribe esta otra línea y pulsa Enter:
powershell -NoExit -ExecutionPolicy Bypass -File "RemoteAccess-Guard.ps1" - 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.
- 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 Processy 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.

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:
| Escenario | RDP | VPN | 2FA | RAT 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 |
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 tarea | Disparador | Frecuencia | Propósito |
|---|---|---|---|
RemoteAccess-Guard-Inicio | Al iniciar Windows (-AtStartup) | Cada arranque del equipo | Reaplica 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-Logon | Al 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-Horaria | Cada hora (-RepetitionInterval 1h) | 24 veces al día | Vigilancia 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-Red | Al conectar a una red (evento 10000) | Cada vez que cambia la conexión de red | Revisa el bloqueo al conectar a WiFi o LAN nueva; momento en el que Windows puede cambiar de perfil de firewall y reabrir puertos |
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 | 🟢 No | No modifica LSASS, SAM ni políticas de cuenta |
| Inicio de Windows | 🟢 No | Las tareas se ejecutan en background tras el arranque |
| Reinicio / apagado | 🟢 No | No modifica el subsistema de apagado ni BCD |
| UEFI / arranque seguro | 🟢 No | No afecta BCD, Secure Boot ni particiones EFI |
| Banca, Gmail y plataformas web | 🟢 No | Solo 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 detiene | El script registra qué RAT están activos; no los mata ni desinstala |
| Carga de CPU (4 tareas) | 🟡 Mínima | Cada ejecución consume pocos segundos; total < 2 min/día |
- 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.
🔎 ¿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:
- Registro:
Get-ItemProperty "HKLM:\System\CurrentControlSet\Control\Terminal Server" -Name fDenyTSConnectionsdebe devolverfDenyTSConnections = 1 - Regla de firewall:
Get-NetFirewallRule -DisplayName "Bloquear RDP" | Select-Object DisplayName, Enabled, Actiondebe mostrarEnabled = TrueyAction = Block - Tareas programadas:
Get-ScheduledTask -TaskName "RemoteAccess-Guard-*" | Select-Object TaskName, TaskPath, Statedebe listar las tareas en estadoReady
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 3389debe 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 a Windows ha sido comprometido
Diez señales de compromiso del acceso remoto Windows ordenadas por urgencia:
- El cursor se mueve solo o aparecen ventanas que no has abierto, urgencia máxima
- Han cambiado tu contraseña o configuración sin que lo hayas hecho tú, urgencia máxima
- El antivirus o Windows Update dejaron de funcionar repentinamente, urgencia máxima
- 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
- Aparecen o desaparecen archivos sin tu intervención
- La luz de la cámara se enciende sola
- El equipo está lento con alta CPU o uso de red sin razón aparente
- 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:
- 0-2 min: Desconecta el cable Ethernet y desactiva WiFi del equipo afectado.
- 2-5 min: NO apagues el equipo si sospechas movimiento lateral activo: la RAM puede contener IOCs.
- 5-10 min: Desde OTRO dispositivo limpio, cambia contraseña del correo principal y activa 2FA.
- 10-20 min: Revoca sesiones activas en banco, Outlook, Gmail, M365, redes sociales, gestor.
- 20-40 min: Revisa reglas de reenvío de correo (vector clásico de persistencia post-RDP).
- 40-60 min: Avisa al banco de posible fraude; revisa los movimientos de los últimos 30 días.
- 1-2 h: Documenta los eventos 4624/4625 y exporta el log de Security a un USB nuevo.
- 2-4 h: Análisis con Malwarebytes + Defender Offline; identifica RAT instalados.
- 4-8 h: Denuncia INCIBE (017) y, si hay delito económico, GDT (062).
- Después: Reinstalación limpia desde USB creada en otro equipo si el incidente fue grave.
🆚 Equipo sin protección vs equipo blindado
| Característica | Sin protección | Con 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
Deja una respuesta