Защита от RDP срещу отгатване на парола с блокиране на IP от правилата на защитната стена на Windows

Имаше идея да се напише прост скрипт PowerShell, който автоматично да блокира IP адресите от защитната стена на Windows, от които да се записват опити за търсене на парола чрез RDP (или дългосрочни RDP атаки). Идеята е следната: скриптът PowerShell анализира системния дневник на събитията и ако повече от 5 неуспешни опита за оторизация чрез RDP са записани от конкретен IP адрес през последните 2 часа, този IP адрес автоматично се добавя към правилото за блокиране на вградената защитна стена на Windows.

И така, има малка мрежа с домейн, RDP порт се препраща към един от компютрите в интернет шлюза с Linux чрез NAT (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 неуспешни опита за разрешаване. За да направите това, в дневника за сигурност трябва да изберете събития с EventID 4625 (неуспешно влизане - акаунтът не успя да влезе в системата и LogonType = 3, вижте статията RDP Log Analysis в Windows). В намерените събития трябва да намерите IP адреса на свързващия потребител и да проверите дали този IP адрес е срещан в дневниците повече от 5 пъти.

Използвам този код, за да избера IP адресите на нападателите от събития през последните 2 часа (можете да промените времето):

$ Last_n_Hours = [DateTime] :: Now.AddHours (-2)
$ badRDPlogons = Get-EventLog -LogName 'Сигурност' -после $ Last_n_Hours -InstanceId 4625 | ? $ _. Съобщение -матч 'Вход тип: \ s + (3) \ s' | Select-Object @ n = 'IpAddress'; e = $ _. ReplacementStrings [-2]
$ getip = $ badRDPlogons | група-обект-собственост IpAddress | където $ _. Брой -gt 5 | Изберете -име на собственост

Можете да изброите намерените IP адреси: $ getip

Сега всички открити IP адреси на атакуващия трябва да бъдат добавени към правилото за защитна стена BlockRDPBruteForce, което създадохме по-рано. За да управляваме защитната стена на Windows ще използваме вградения модул вграден PowerShell модул NetSecurity. Първо, вземете списък с понастоящем блокираните IP адреси и добавете към тях нови..

$ log = "C: \ ps \ блокиран_ip.txt"
$ current_ips = (Get-NetFirewallRule -DisplayName "BlockRDPBruteForce" | Get-NetFirewallAddressFilter) .RemoteAddress
foreach ($ ip в $ getip)

$ current_ips + = $ ip.name
(Get-Date) .ToString () + "+ $ ip.name + 'IP е блокиран за" + ($ badRDPlogons | където $ _. IpAddress -eq $ ip.name). Брой + "опити за 2 часа" >> $ log # напиши събитие за блокиране на IP адрес в лог файла

Set-NetFirewallRule -DisplayName "BlockRDPBruteForce" -RemoteAddress $ current_ips

Проверяваме дали са добавени нови IP адреси към правилото за блокиране на защитната стена на Windows Defender.

Просто трябва да копирате този PowerShell код във файла c: \ ps \ block_rdp_attack.ps1 и да го добавите към задачата за планиране, за да стартирате по график. Например на всеки 2 часа.

Можете да създадете задача за планиране с помощта на скрипта PowerShell или ръчно:

$ repe = (New-TimeSpan -Hourrs 2)
$ продължителност = ([timeSpan] :: maxvalue)
$ Trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) .Date -RetentionInterval $ повторение-повторениеDuration $ продължителност
$ User = "NT AUTHORITY \ SYSTEM"
$ Action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C: \ PS \ block_rdp_attack.ps1"
Регистрация-ScheduledTask -TaskName "BlockRDPBruteForce_PS" -Trigger $ Trigger -User $ User -Action $ Action -RunLevel Highest -Force

Или можете да стартирате скрипта PowerShell, когато събитието 4625 се появи в дневника, така че по-бързо ще отговорите на атаката за познаване на паролата от RDP.

Можете да модифицирате този скрипт според вашите реалности и да го използвате за блокиране на RDP атаки.