Защита RDP от подбора паролей с блокировкой IP правилами Windows Firewall

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

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

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

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

создать правило блокировки RDP с с IP адресов ведущих RDP атаку

В дальнейшем в это правило мы будем добавлять IP адреса, с которых фиксируется попытки подбора паролей по RDP.

Можно сделать дополнительное разрешающее правило, чтобы скрипт не блокировал нужные IP адреса или подсети.

Теперь нужно собрать из журналов компьютера список IP адресов, с которых за последние 2 часа фиксировалось более 5 неудачных попыток авторизации. Для этого в журнале Security нужно выбрать события с EventID 4652 (неудачный вход — An account failed to log on и LogonType = 3, см. статью Анализ RDP логов в Windows). В найденных событиях нужно найти IP адрес подключающегося пользователя и проверить, что этот IP адрес встречался в логах более 5 раз.

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

$Last_n_Hours = [DateTime]::Now.AddHours(-2)
$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\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 + ' IP заблокирован за ' + ($badRDPlogons | where {$_.IpAddress -eq $ip.name}).count + ' попыток за 2 часа'>> $log # запись события блокировки IP адреса в лог файл
}
Set-NetFirewallRule -DisplayName "BlockRDPBruteForce" -RemoteAddress $current_ips

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

Проверяем, что в блокирующее правило Windows Defender Firewall добавились новые IP адреса.

блокировка IP адресов правилами брандмауэра

Вам осталось скопировать данный 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 при появлении события 4625 в журнале, таким образом вы будете более быстро реагировать на атаку подбора пароля по RDP.

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


Предыдущая статья Следующая статья


Комментариев: 30 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)