Protección de fuerza bruta RDP con PowerShell y reglas de firewall de Windows

Tuve la idea de escribir un script de PowerShell simple para bloquear automáticamente (lista negra) las direcciones IP, en las que se detectan intentos de fuerza bruta de RDP o ataques de RDP continuos, en el Firewall de Windows. La idea es la siguiente: el script de PowerShell analiza el registro de eventos del sistema y si ha habido más de 5 intentos fallidos de autenticarse a través de RDP desde la misma dirección IP en las últimas tres horas, la dirección IP se agrega automáticamente a la regla de bloqueo del Firewall de Windows. .

Entonces, hay una pequeña red de oficinas. Para acceder a él, se envía un puerto RDP a través de NAT a una de las computadoras de la oficina a través de la puerta de enlace de Internet que ejecuta Linux (TCP 15221 responde desde el exterior y el puerto RDP predeterminado 3389 se envía al interior). De vez en cuando, las cuentas de usuarios conocidos están bloqueadas por la política de contraseña de dominio debido a intentos fallidos de autenticarse en la computadora a través de RDP. Nuestra tarea es bloquear automáticamente las direcciones IP que se utilizan para hacer fuerza bruta en nuestro servidor RDP.

En primer lugar, cree una regla de firewall en la computadora para bloquear las conexiones RDP entrantes de las direcciones IP especificadas:

New-NetFirewallRule -DisplayName "BlockRDPBruteForce" –RemoteAddress 1.1.1.1 -Direction Inbound -Protocol TCP –LocalPort 3389 -Action Block

Además, agregaremos las direcciones IP, en las que se detectan intentos de fuerza bruta RDP, a esta regla de firewall.

Puede escribir una regla de autorización adicional para que el script de PowerShell no bloquee las direcciones IP o subredes que necesita.

Luego, deberá recopilar la lista de direcciones IP, en las que se han detectado más de 5 intentos de autenticación fallidos durante las últimas 3 horas, del registro de eventos de Windows. Para hacerlo, busque los eventos con EventID 4625 (intento de acceso fallido – Una cuenta no pudo iniciar sesión y LogonType = 3, consulte el artículo Análisis forense del registro de eventos de RDP) en el registro de seguridad. En los eventos que ha encontrado, busque la dirección IP del usuario que intenta conectarse y asegúrese de que apareció en el registro de eventos más de 5 veces.

Estoy usando el siguiente código de PowerShell para seleccionar las direcciones IP de los atacantes de la lista de eventos durante las últimas 3 horas (puede cambiar el período de tiempo):

$Last_n_Hours = [DateTime]::Now.AddHours(-3)
$badRDPlogons = Get-EventLog -LogName 'Security' -after $Last_n_Hours -InstanceId 4625 | ?{$_.Message -match 'logon type:s+(3)s'} | Select-Object @{n='IpAddress';e={$_.ReplacementStrings[-2]} }
$getip = $badRDPlogons | group-object -property IpAddress | where {$_.Count -gt 5} | Select -property Name

Para mostrar la lista de direcciones IP encontradas, use: $getip

Ahora agregue todas las direcciones IP encontradas de los atacantes a la regla de firewall que BlockRDPBruteForce creó anteriormente. Para administrar el Firewall de Windows, usaremos el módulo de PowerShell integrado NetSecurity. En primer lugar, obtenga la lista de direcciones IP actualmente bloqueadas y agregue otras nuevas.

$log = "C:psrdp_blocked_ip.txt"
$current_ips = (Get-NetFirewallRule -DisplayName "BlockRDPBruteForce" | Get-NetFirewallAddressFilter ).RemoteAddress
foreach ($ip in $getip)
{
$current_ips += $ip.name
(Get-Date).ToString() + ' ' + $ip.name + ' The IP address has been blocked due to ' + ($badRDPlogons | where {$_.IpAddress -eq $ip.name}).count + ' attempts for 2 hours'>> $log # writing the IP blocking event to the log file
}
Set-NetFirewallRule -DisplayName "BlockRDPBruteForce" -RemoteAddress $current_ips

Asegúrese de que se hayan agregado nuevas direcciones IP a la regla de bloqueo en el Firewall de Windows Defender.

bloquear ataques rdp por dirección IP en el firewall de Windows

Ahora solo tiene que copiar este código de PowerShell al archivo c:psblock_rdp_attack.ps1 y agréguelo a su Programador de tareas para que se ejecute cada 2 horas, por ejemplo.

Puede crear una tarea del Programador mediante un script de PowerShell o manualmente:

$repeat = (New-TimeSpan -Hours 2)
$duration = ([timeSpan]::maxvalue)
$Trigger= New-ScheduledTaskTrigger -Once -At (Get-Date).Date -RepetitionInterval $repeat -RepetitionDuration $duration
$User= "NT AUTHORITYSYSTEM"
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:PSblock_rdp_attack.ps1"
Register-ScheduledTask -TaskName "BlockRDPBruteForce_PS" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force

O puede ejecutar su secuencia de comandos de PowerShell si el EventID 4625 aparece en el registro (consulte la publicación de blog Desencadenadores de eventos de Windows), de modo que responderá a un ataque de fuerza bruta RDP más rápidamente.

Puede modificar este script según sus necesidades y utilizarlo para bloquear ataques RDP.

Deja un comentario

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