PowerShell ve Windows Güvenlik Duvarı Kuralları ile RDP Kaba Kuvvet Koruması


RDP kaba kuvvet girişimlerinin veya sürekli RDP saldırılarının algılandığı IP adreslerini Windows Güvenlik Duvarı'nda otomatik olarak engellemek (kara listeye almak) için basit bir PowerShell betiği yazma fikrim var. Fikir şu şekildedir: PowerShell betiği, sistem olay günlüğünü analiz eder ve son üç saat içinde aynı IP adresinden RDP aracılığıyla 5'ten fazla başarısız kimlik doğrulama girişimi olursa, IP adresi otomatik olarak Windows Güvenlik Duvarı engelleme kuralına eklenir. .

Yani küçük bir ofis ağı var. Erişmek için, bir RDP bağlantı noktası NAT üzerinden Linux çalıştıran İnternet ağ geçidi aracılığıyla ofis bilgisayarlarından birine iletilir (TCP 15221 dışarıdan yanıt verir ve varsayılan RDP bağlantı noktası 3389 içeriye iletilir). Zaman zaman bilinen kullanıcı hesapları, bilgisayarda RDP aracılığıyla başarısız kimlik doğrulama girişimleri nedeniyle etki alanı parola ilkesi tarafından kilitlenir. Görevimiz, RDP sunucumuza kaba kuvvet uygulamak için kullanılan IP adreslerini otomatik olarak engellemektir.

Her şeyden önce, belirtilen IP adreslerinden gelen RDP bağlantılarını engellemek için bilgisayarda bir güvenlik duvarı kuralı oluşturun:

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

Ayrıca RDP kaba kuvvet girişimlerinin tespit edildiği IP adreslerini de bu kural güvenlik duvarına ekleyeceğiz.

PowerShell betiğinin ihtiyacınız olan IP adreslerini veya alt ağları engellememesi için ek bir izin verme kuralı yazabilirsiniz.

Ardından, son 3 saat içinde 5'ten fazla başarısız kimlik doğrulama girişiminin tespit edildiği IP adreslerinin listesini Windows olay günlüğünden toplamanız gerekecektir. Bunu yapmak için EventID 4625 (başarısız erişim girişimi — Bir hesap oturum açamadı ve LogonType=3) ile olayları bulun, kontrol edin Güvenlik günlüğünde RDP Olay Günlüğü Adli Tıp makalesi). Bulduğunuz olaylarda, bağlanmaya çalışan kullanıcının IP adresini bulun ve olay günlüğünde 5 defadan fazla göründüğünden emin olun.

Saldırganların IP adreslerini son 3 saatteki olaylar listesinden seçmek için aşağıdaki PowerShell kodunu kullanıyorum (süreyi değiştirebilirsiniz):

$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

Bulunan IP adreslerinin listesini görüntülemek için şunu kullanın:

$getip

Şimdi, saldırganların bulunan tüm IP adreslerini daha önce oluşturulan BlockRDPBruteForce güvenlik duvarı kuralına ekleyin. Windows Güvenlik Duvarı'nı yönetmek için yerleşik PowerShell modülü NetSecurity'yi kullanacağız. Her şeyden önce, şu anda engellenen IP adreslerinin listesini alın ve yenilerini ekleyin.

$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

Windows Defender Güvenlik Duvarı'ndaki engelleme kuralına yeni IP adreslerinin eklendiğinden emin olun.

Şimdi bu PowerShell kodunu dosyaya kopyalamanız yeterli

c:\ps\block_rdp_attack.ps1

ve örneğin her 2 saatte bir çalışması için Görev Zamanlayıcınıza ekleyin.

Bir PowerShell betiği kullanarak veya manuel olarak bir Zamanlayıcı görevi oluşturabilirsiniz:

$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

Veya günlükte EventID 4625 görünüyorsa PowerShell betiğinizi çalıştırabilirsiniz (Windows Olay Tetikleyicileri blog gönderisini kontrol edin), böylece bir RDP kaba kuvvet saldırısına daha hızlı yanıt verirsiniz.

Bu betiği ihtiyaçlarınıza göre değiştirebilir ve RDP saldırılarını engellemek için kullanabilirsiniz.

İlgili makaleler