Поиск по сайту:

Защита от перебора RDP с помощью PowerShell и правил брандмауэра Windows


У меня возникла идея написать простой сценарий PowerShell для автоматической блокировки (черного списка) IP-адресов, на которых обнаруживаются попытки перебора RDP или непрерывные атаки RDP, в брандмауэре Windows. Идея заключается в следующем: скрипт PowerShell анализирует журнал системных событий и если за последние три часа было более 5 неудачных попыток аутентификации по RDP с одного и того же IP-адреса, IP-адрес автоматически добавляется в правило блокировки брандмауэра Windows. .

Итак, есть небольшая офисная сеть. Для доступа к нему порт RDP пробрасывается через NAT на один из офисных компьютеров через интернет-шлюз под управлением Linux (TCP 15221 отвечает снаружи, а порт RDP по умолчанию 3389 пробрасывается внутрь). Время от времени известные учетные записи пользователей блокируются политикой паролей домена из-за неудачных попыток аутентификации на компьютере через RDP. Наша задача — автоматически блокировать IP-адреса, используемые для брутфорса нашего RDP-сервера.

Прежде всего создайте на компьютере правило брандмауэра, чтобы блокировать входящие RDP-соединения с указанных IP-адресов:

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

Далее в это правило брандмауэра мы добавим IP-адреса, на которых обнаруживаются попытки RDP-брутфорса.

Вы можете написать дополнительное разрешающее правило, чтобы сценарий PowerShell не блокировал нужные вам IP-адреса или подсети.

Затем вам придется собрать из журнала событий Windows список IP-адресов, на которых за последние 3 часа обнаружено более 5 неудачных попыток аутентификации. Для этого найдите события с EventID 4625 (неудачная попытка доступа — Не удалось войти в учетную запись и LogonType=3), установите флажок статью Анализ журнала событий RDP) в журнале безопасности. В найденных вами событиях найдите IP-адрес пользователя, пытающегося подключиться, и убедитесь, что он появился в журнале событий более 5 раз.

Я использую следующий код PowerShell для выбора IP-адресов злоумышленников из списка событий за последние 3 часа (период времени можно изменить):

$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

Чтобы отобразить список найденных IP-адресов, используйте:

$getip

Теперь добавьте все найденные IP-адреса злоумышленников в созданное ранее правило межсетевого экрана BlockRDPBruteForce. Для управления брандмауэром Windows мы будем использовать встроенный в PowerShell модуль NetSecurity. Прежде всего, получим список заблокированных на данный момент IP-адресов и добавим в него новые.

$log = "C:\ps\rdp_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

Убедитесь, что новые IP-адреса добавлены в правило блокировки брандмауэра Защитника Windows.

Теперь вам просто нужно скопировать этот код PowerShell в файл

c:\ps\block_rdp_attack.ps1

и добавьте его в свой планировщик задач, чтобы он запускался, например, каждые 2 часа.

Вы можете создать задачу планировщика с помощью сценария PowerShell или вручную:

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

Или вы можете запустить сценарий PowerShell, если в журнале появляется EventID 4625 (проверьте публикацию в блоге «Триггеры событий Windows»), чтобы вы быстрее отреагировали на атаку грубой силы RDP.

Вы можете изменить этот скрипт в соответствии со своими потребностями и использовать его для блокировки атак RDP.

Статьи по данной тематике