Computer >> Máy Tính >  >> Hệ thống >> máy chủ Windows

RDP Brute Force Protection với PowerShell và Windows Firewall Rules

Tôi đã có ý tưởng viết một tập lệnh PowerShell đơn giản để tự động chặn (danh sách đen) các địa chỉ IP, nơi phát hiện các nỗ lực brute-force RDP hoặc các cuộc tấn công RDP liên tục, trong Tường lửa của Windows. Ý tưởng như sau:tập lệnh PowerShell phân tích nhật ký sự kiện hệ thống và nếu có hơn 5 lần thử xác thực không thành công qua RDP từ cùng một địa chỉ IP trong ba giờ qua, địa chỉ IP sẽ tự động được thêm vào quy tắc chặn Tường lửa của Windows .

Vì vậy, có một mạng lưới văn phòng nhỏ. Để truy cập nó, một cổng RDP được chuyển tiếp qua NAT tới một trong các máy tính văn phòng thông qua cổng Internet chạy Linux (TCP 15221 đang trả lời từ bên ngoài và cổng RDP mặc định 3389 được chuyển tiếp bên trong). Đôi khi, các tài khoản người dùng đã biết bị khóa bởi chính sách mật khẩu miền do các nỗ lực xác thực trên máy tính thông qua RDP không thành công. Nhiệm vụ của chúng tôi là tự động chặn các địa chỉ IP được sử dụng để buộc máy chủ RDP của chúng tôi.

Trước hết, hãy tạo quy tắc tường lửa trên máy tính để chặn các kết nối RDP đến từ các địa chỉ IP được chỉ định:

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

RDP Brute Force Protection với PowerShell và Windows Firewall Rules

Chúng tôi sẽ thêm các địa chỉ IP mà các nỗ lực brute-force RDP được phát hiện, vào tường lửa quy tắc này.

Bạn có thể viết quy tắc cho phép bổ sung để tập lệnh PowerShell sẽ không chặn địa chỉ IP hoặc mạng con bạn cần.

Sau đó, bạn sẽ phải thu thập danh sách các địa chỉ IP, trên đó có hơn 5 lần xác thực không thành công đã được phát hiện trong 3 giờ qua, từ nhật ký sự kiện của Windows. Để làm điều đó, hãy tìm các sự kiện với EventID 4625 (cố gắng truy cập không thành công - Một tài khoản không đăng nhập được LogonType =3 , kiểm tra bài viết RDP Event Log Forensics) trong Nhật ký bảo mật. Trong các sự kiện bạn đã tìm thấy, hãy tìm địa chỉ IP của người dùng đang cố gắng kết nối và đảm bảo rằng địa chỉ IP đó đã xuất hiện trong nhật ký sự kiện hơn 5 lần.

Tôi đang sử dụng mã PowerShell sau để chọn địa chỉ IP của những kẻ tấn công từ danh sách các sự kiện trong 3 giờ qua (bạn có thể thay đổi khoảng thời gian):

$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

Để hiển thị danh sách các địa chỉ IP được tìm thấy, hãy sử dụng:$getip

Bây giờ, hãy thêm tất cả các địa chỉ IP được tìm thấy của những kẻ tấn công vào quy tắc tường lửa mà BlockRDPBruteForce đã tạo trước đó. Để quản lý Tường lửa của Windows, chúng tôi sẽ sử dụng mô-đun PowerShell tích hợp NetSecurity . Trước hết, hãy lấy danh sách các địa chỉ IP hiện bị chặn và thêm các địa chỉ IP mới vào đó.

$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 với PowerShell và Windows Firewall Rules

Đảm bảo rằng các địa chỉ IP mới đã được thêm vào quy tắc chặn trong Tường lửa của Bộ bảo vệ Windows.

RDP Brute Force Protection với PowerShell và Windows Firewall Rules

Bây giờ bạn chỉ cần sao chép mã PowerShell này vào tệp c:\ps\block_rdp_attack.ps1 và thêm nó vào Bộ lập lịch tác vụ của bạn để chạy 2 giờ một lần, chẳng hạn.

Bạn có thể tạo tác vụ của Bộ lập lịch sử dụng tập lệnh PowerShell hoặc theo cách thủ công:

$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

Hoặc bạn có thể chạy tập lệnh PowerShell nếu EventID 4625 xuất hiện trong nhật ký (kiểm tra bài đăng trên blog của Windows Event Trigger), vì vậy bạn sẽ phản ứng với cuộc tấn công brute-force RDP nhanh hơn.

Bạn có thể sửa đổi tập lệnh này theo nhu cầu của mình và sử dụng để chặn các cuộc tấn công RDP.