Perlindungan RDP terhadap tebakan kata sandi dengan pemblokiran IP oleh aturan Windows Firewall

Ada ide untuk menulis skrip PowerShell sederhana untuk secara otomatis memblokir alamat IP dari firewall Windows dari mana upaya menebak kata sandi melalui RDP (atau serangan RDP jangka panjang) direkam. Idenya adalah ini: skrip PowerShell menganalisis log peristiwa sistem, dan jika lebih dari 5 upaya otorisasi yang gagal melalui RDP direkam dari alamat IP tertentu dalam 2 jam terakhir, alamat IP ini secara otomatis ditambahkan ke aturan pemblokiran firewall Windows bawaan..

Jadi, ada jaringan kecil dengan domain, port RDP diteruskan ke salah satu komputer di gateway Internet dengan Linux melalui NAT (port TCP 13211 dijawab di luar, dan standar 3389 diarahkan ke dalam). Secara berkala di komputer, akun yang dikenal diblokir oleh kebijakan kata sandi domain karena upaya yang gagal untuk masuk ke komputer melalui RDP. Tugas kami adalah secara otomatis memblokir alamat IP yang melaluinya kata sandi dipilih dalam RDP .

Pertama, buat aturan firewall di komputer yang memblokir koneksi RDP yang masuk dari alamat IP yang ditentukan:

New-NetFirewallRule -DisplayName "BlockRDPBruteForce" -RemoteAddress 1.1.1.1 -Pengalihan Arah -Protocol TCP -LocalPort 3389 -Aksi Blok

Di masa depan, kami akan menambahkan alamat IP ke aturan ini dari mana upaya untuk menebak kata sandi oleh RDP direkam.

Anda dapat membuat aturan perbolehkan tambahan agar skrip tidak memblokir alamat IP atau subnet yang diperlukan.

Sekarang Anda perlu mengumpulkan dari log komputer daftar alamat IP yang selama 2 jam terakhir lebih dari 5 upaya otorisasi yang gagal dicatat. Untuk melakukan ini, di log Keamanan Anda harus memilih acara dengan EventID 4625 (gagal masuk - Akun gagal masuk dan LogonType = 3, lihat artikel Analisis Log RDP di Windows). Dalam acara yang ditemukan, Anda perlu menemukan alamat IP pengguna yang menghubungkan dan memverifikasi bahwa alamat IP ini telah ditemukan dalam log lebih dari 5 kali.

Saya menggunakan kode ini untuk memilih alamat penyerang IP dari peristiwa dalam 2 jam terakhir (Anda dapat mengubah waktu):

$ Last_n_Hours = [DateTime] :: Now.AddHours (-2)
$ badRDPlogons = Get-EventLog -LogName 'Security' - setelah $ Last_n_Hours -InstanceId 4625 | ? $ _. Message -match 'logon type: \ s + (3) \ s' | Select-Object @ n = 'IpAddress'; e = $ _. ReplacementStrings [-2]
$ getip = $ badRDPlogons | grup-objek -properti IpAddress | where $ _. Count -gt 5 | Pilih Nama Properti

Anda dapat mencantumkan alamat IP yang ditemukan: $ getip

Sekarang, semua alamat IP yang terdeteksi dari penyerang harus ditambahkan ke aturan firewall BlockRDPBruteForce yang kami buat sebelumnya. Untuk mengelola firewall Windows, kita akan menggunakan modul PowerShell modul NetShecurity bawaan. Pertama, dapatkan daftar alamat IP yang saat ini diblokir dan tambahkan yang baru ke dalamnya..

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

$ current_ips + = $ ip.name
(Get-Date) .ToString () + "+ $ ip.name + 'IP diblokir untuk' + ($ badRDPlogons | mana $ _. IpAddress -eq $ ip.name). Hitung + 'percobaan dalam 2 jam' >> $ log # tulis acara pemblokiran alamat IP ke file log

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

Kami memeriksa bahwa alamat IP baru telah ditambahkan ke aturan pemblokiran Windows Defender Firewall.

Anda hanya perlu menyalin kode PowerShell ini ke file c: \ ps \ block_rdp_attack.ps1 dan menambahkannya ke tugas scheduler untuk berjalan sesuai jadwal. Misalnya setiap 2 jam.

Anda dapat membuat tugas penjadwal menggunakan skrip PowerShell atau secara manual:

$ repeat = (New-TimeSpan -Hours 2)
$ duration = ([timeSpan] :: maxvalue)
$ Trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) .Tanggal -RepetitionInterval $ repeat -RepetitionDuration $ durasi
$ User = "NT AUTHORITY \ SYSTEM"
$ Action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C: \ PS \ block_rdp_attack.ps1"
Registrasi-ScheduledTask -TaskName "BlockRDPBruteForce_PS" -Trigger $ Trigger -User $ User -Action $ Action -RunLevel Tertinggi -Force

Atau, Anda dapat menjalankan skrip PowerShell ketika acara 4625 muncul di log, sehingga Anda akan lebih cepat merespons serangan tebak kata sandi oleh RDP.

Anda dapat memodifikasi skrip ini menjadi kenyataan dan menggunakannya untuk memblokir serangan RDP.