Захист 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

Надалі в це правило ми будемо додавати IP адреси, з яких фіксується спроби підбору паролів по RDP.

Можна зробити додаткове дозволяє правило, щоб скрипт не блокував потрібні IP адреси або підмережі.

Тепер потрібно зібрати з журналів комп'ютера список IP адрес, з яких за останні 2 години фіксувалося більше 5 невдалих спроб авторизації. Для цього в журналі Security потрібно вибрати події з EventID 4625 (Невдалий вхід - 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

Перевіряємо, що в блокуючу правило Windows Defender Firewall додалися нові 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 атак.