Computer >> คอมพิวเตอร์ >  >> ระบบ >> Windows Server

RDP Brute Force Protection พร้อมกฎ PowerShell และ Windows Firewall

ฉันมีความคิดที่จะเขียนสคริปต์ PowerShell อย่างง่ายเพื่อบล็อกที่อยู่ IP (บัญชีดำ) โดยอัตโนมัติ ซึ่งตรวจพบความพยายามอย่างดุเดือดของ RDP หรือการโจมตี RDP อย่างต่อเนื่องใน Windows Firewall แนวคิดมีดังนี้:สคริปต์ PowerShell วิเคราะห์บันทึกเหตุการณ์ของระบบ และหากมีการพยายามตรวจสอบสิทธิ์ผ่าน RDP ที่ล้มเหลวมากกว่า 5 ครั้งจากที่อยู่ IP เดียวกันในช่วงสามชั่วโมงที่ผ่านมา ที่อยู่ IP จะถูกเพิ่มโดยอัตโนมัติในกฎการบล็อกไฟร์วอลล์ Windows .

จึงมีเครือข่ายสำนักงานขนาดเล็ก ในการเข้าถึง พอร์ต RDP จะถูกส่งต่อผ่าน NAT ไปยังคอมพิวเตอร์ในสำนักงานเครื่องใดเครื่องหนึ่งผ่านทางอินเทอร์เน็ตเกตเวย์ที่ใช้ Linux (TCP 15221 กำลังตอบรับจากภายนอก และพอร์ต RDP 3389 เริ่มต้นจะถูกส่งต่อภายใน) ในบางครั้ง บัญชีผู้ใช้ที่รู้จักจะถูกล็อคโดยนโยบายรหัสผ่านของโดเมนเนื่องจากการพยายามตรวจสอบสิทธิ์บนคอมพิวเตอร์ผ่าน RDP ไม่สำเร็จ งานของเราคือปิดกั้นที่อยู่ IP โดยอัตโนมัติที่ใช้บังคับเซิร์ฟเวอร์ RDP ของเราอย่างดุร้าย

ก่อนอื่น สร้างกฎไฟร์วอลล์บนคอมพิวเตอร์เพื่อบล็อกการเชื่อมต่อ RDP ขาเข้าจากที่อยู่ IP ที่ระบุ:

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

RDP Brute Force Protection พร้อมกฎ PowerShell และ Windows Firewall

เราจะเพิ่มที่อยู่ IP เพิ่มเติม ซึ่งตรวจพบการพยายามบังคับแบบดุร้ายของ RDP ให้กับไฟร์วอลล์กฎนี้

คุณสามารถเขียนกฎการอนุญาตเพิ่มเติมเพื่อที่สคริปต์ PowerShell จะไม่บล็อกที่อยู่ IP หรือเครือข่ายย่อยที่คุณต้องการ

จากนั้น คุณจะต้องรวบรวมรายการที่อยู่ IP ซึ่งตรวจพบการพยายามตรวจสอบสิทธิ์ที่ล้มเหลวมากกว่า 5 ครั้งในช่วง 3 ชั่วโมงที่ผ่านมา จากบันทึกเหตุการณ์ของ Windows โดยค้นหากิจกรรมที่มี EventID 4625 (ล้มเหลวในการเข้าถึง — บัญชีล้มเหลวในการเข้าสู่ระบบ และ LogonType =3 ให้ตรวจสอบบทความ RDP Event Log Forensics) ในบันทึกความปลอดภัย ในเหตุการณ์ที่คุณพบ ให้ค้นหาที่อยู่ IP ของผู้ใช้ที่พยายามเชื่อมต่อ และตรวจสอบให้แน่ใจว่าปรากฏในบันทึกเหตุการณ์มากกว่า 5 ครั้ง

ฉันใช้รหัส PowerShell ต่อไปนี้เพื่อเลือกที่อยู่ IP ของผู้โจมตีจากรายการเหตุการณ์ในช่วง 3 ชั่วโมงที่ผ่านมา (คุณสามารถเปลี่ยนช่วงเวลาได้):

$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

หากต้องการแสดงรายการที่อยู่ IP ที่พบ ให้ใช้:$getip

ตอนนี้เพิ่มที่อยู่ IP ทั้งหมดที่พบของผู้โจมตีไปยังกฎไฟร์วอลล์ BlockRDPBruteForce ที่สร้างไว้ก่อนหน้านี้ ในการจัดการ Windows Firewall เราจะใช้โมดูล PowerShell ในตัว NetSecurity ก่อนอื่น รับรายการที่อยู่ IP ที่ถูกบล็อกในปัจจุบันและเพิ่มที่อยู่ใหม่เข้าไป

$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

RDP Brute Force Protection พร้อมกฎ PowerShell และ Windows Firewall

ตรวจสอบให้แน่ใจว่าได้เพิ่มที่อยู่ IP ใหม่ให้กับกฎการบล็อกในไฟร์วอลล์ Windows Defender แล้ว

RDP Brute Force Protection พร้อมกฎ PowerShell และ Windows Firewall

ตอนนี้คุณเพียงแค่ต้องคัดลอกโค้ด PowerShell นี้ไปยังไฟล์ c:\ps\block_rdp_attack.ps1 และเพิ่มลงใน Task Scheduler เพื่อให้ทำงานทุกๆ 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 ได้หาก EventID 4625 ปรากฏในบันทึก (ตรวจสอบบล็อกโพสต์ Windows Event Triggers) ดังนั้นคุณจะตอบสนองต่อการโจมตี RDP brute-force ได้เร็วขึ้น

คุณสามารถแก้ไขสคริปต์นี้ตามความต้องการของคุณและใช้เพื่อบล็อกการโจมตี RDP