Ochrona RDP przed zgadywaniem hasła z blokowaniem adresów IP przez reguły Zapory systemu Windows

Pomysł polegał na napisaniu prostego skryptu PowerShell, aby automatycznie blokować adresy IP z zapory systemu Windows, z których rejestrowane są próby zgadywania haseł poprzez RDP (lub długoterminowe ataki RDP). Pomysł jest następujący: skrypt PowerShell analizuje dziennik zdarzeń systemowych, a jeśli więcej niż 5 nieudanych prób autoryzacji przez RDP zostanie zarejestrowanych z określonego adresu IP w ciągu ostatnich 2 godzin, adres ten zostanie automatycznie dodany do reguły blokowania wbudowanej zapory systemu Windows.

Tak więc istnieje mała sieć z domeną, port RDP jest przekazywany do jednego z komputerów w bramie internetowej z Linuksem przez NAT (port TCP 13211 jest odbierany na zewnątrz, a standardowy 3389 jest przekierowywany do wewnątrz). Okresowo na komputerze znane konta są blokowane przez zasady haseł domeny z powodu nieudanych prób zalogowania się do komputera za pośrednictwem protokołu RDP. Naszym zadaniem jest automatyczne blokowanie adresów IP, przez które hasła są wybierane w RDP .

Najpierw utwórz regułę zapory na komputerze, która blokuje przychodzące połączenie RDP z określonych adresów IP:

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

W przyszłości dodamy adresy IP do tej reguły, na podstawie której rejestrowane są próby odgadnięcia haseł przez RDP.

Możesz utworzyć dodatkową regułę zezwolenia, aby skrypt nie blokował niezbędnych adresów IP lub podsieci.

Teraz musisz zebrać z dzienników komputera listę adresów IP, z których w ciągu ostatnich 2 godzin zarejestrowano ponad 5 nieudanych prób autoryzacji. Aby to zrobić, w dzienniku zabezpieczeń należy wybrać zdarzenia o identyfikatorze zdarzenia 4625 (logowanie nie powiodło się - zalogowanie konta nie powiodło się i LogonType = 3, zobacz artykuł Analiza dzienników RDP w systemie Windows). W znalezionych zdarzeniach musisz znaleźć adres IP łączącego się użytkownika i sprawdzić, czy ten adres IP został napotkany w dziennikach więcej niż 5 razy.

Używam tego kodu, aby wybrać adresy IP atakujących z wydarzeń w ciągu ostatnich 2 godzin (możesz zmienić czas):

$ Last_n_Hours = [DateTime] :: Now.AddHours (-2)
$ badRDPlogons = Get-EventLog -LogName „Bezpieczeństwo”-po $ Last_n_Hours -InstanceId 4625 | ? $ _. Typ dopasowania wiadomości: typ logowania: \ s + (3) \ s ' | Select-Object @ n = 'IpAddress'; e = $ _. ReplacementStrings [-2]
$ getip = $ badRDPlogons | grupa-obiekt-właściwość IpAddress | gdzie $ _. Count -gt 5 | Wybierz -property Nazwa

Możesz wyświetlić listę znalezionych adresów IP: $ getip

Teraz wszystkie wykryte adresy IP atakującego muszą zostać dodane do reguły zapory BlockRDPBruteForce, którą utworzyliśmy wcześniej. Do zarządzania zaporą systemu Windows użyjemy wbudowanego modułu wbudowanego modułu PowerShell NetSecurity. Najpierw uzyskaj listę aktualnie zablokowanych adresów IP i dodaj do nich nowe..

$ log = "C: \ ps \ zablokowany_ip.txt"
$ current_ips = (Get-NetFirewallRule -DisplayName „BlockRDPBruteForce” | Get-NetFirewallAddressFilter) .RemoteAddress
foreach ($ ip w $ getip)

$ current_ips + = $ ip.name
(Get-Date) .ToString () + "+ $ ip.name + 'Adres IP jest zablokowany dla' + ($ badRDPlogons | gdzie $ _. IpAddress -eq $ ip.name). Policz +„ próby w ciągu 2 godzin ” >> $ log # zapisz zdarzenie blokujące adres IP do pliku dziennika

Set-NetFirewallRule -DisplayName „BlockRDPBruteForce” -RemoteAddress $ current_ips

Sprawdzamy, czy nowe adresy IP zostały dodane do reguły blokowania Zapory systemu Windows Defender.

Wystarczy skopiować ten kod programu PowerShell do pliku c: \ ps \ block_rdp_attack.ps1 i dodać go do zadania harmonogramu, aby uruchomić zgodnie z harmonogramem. Na przykład co 2 godziny.

Możesz utworzyć zadanie harmonogramu za pomocą skryptu PowerShell lub ręcznie:

$ repeat = (New-TimeSpan -Hours 2)
$ duration = ([timeSpan] :: maxvalue)
$ Trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) .Date -RepetitionInterval $ repeat -RepetitionDuration $ czas trwania
$ 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

Możesz też uruchomić skrypt PowerShell, gdy w dzienniku pojawi się zdarzenie 4625, dzięki czemu szybciej zareagujesz na atak zgadywania hasła przez RDP.

Możesz zmodyfikować ten skrypt do swoich potrzeb i użyć go do blokowania ataków RDP.