मेरे पास एक सरल PowerShell स्क्रिप्ट लिखने का विचार था जो स्वचालित रूप से उन IP पतों को ब्लॉक (ब्लैकलिस्ट) करती है जिन पर Windows Firewall में RDP ब्रूट-फोर्स प्रयासों या निरंतर RDP हमलों का पता चलता है। विचार इस प्रकार है: PowerShell स्क्रिप्ट सिस्टम इवेंट लॉग का विश्लेषण करती है और यदि पिछले तीन घंटों में एक ही IP पते से RDP के माध्यम से प्रमाणित करने के 5 से अधिक विफल प्रयास हुए हैं, तो IP पता स्वचालित रूप से Windows Firewall ब्लॉकिंग नियम में जोड़ दिया जाता है।
तो, एक छोटा ऑफिस नेटवर्क है। इसे एक्सेस करने के लिए, एक RDP पोर्ट NAT के माध्यम से Linux पर चल रहे इंटरनेट गेटवे के माध्यम से ऑफिस कंप्यूटर में से एक को फॉरवर्ड किया जाता है (बाहर से TCP 15221 जवाब देता है, और डिफ़ॉल्ट RDP पोर्ट 3389 अंदर फॉरवर्ड किया जाता है)। समय-समय पर, ज्ञात उपयोगकर्ता खाते डोमेन पासवर्ड नीति के कारण RDP के माध्यम से कंप्यूटर पर प्रमाणित करने के विफल प्रयासों के कारण लॉक हो जाते हैं। हमारा कार्य RDP सर्वर को ब्रूट फोर्स करने के लिए उपयोग किए जाने वाले IP पतों को स्वचालित रूप से ब्लॉक करना है।
सबसे पहले, निर्दिष्ट IP पतों से इनबाउंड RDP कनेक्शन ब्लॉक करने के लिए कंप्यूटर पर एक फ़ायरवॉल नियम बनाएं:
New-NetFirewallRule -DisplayName "BlockRDPBruteForce" –RemoteAddress 1.1.1.1 -Direction Inbound -Protocol TCP –LocalPort 3389 -Action Block

हम इस फ़ायरवॉल नियम में उन IP पतों को आगे जोड़ेंगे जिन पर RDP ब्रूट-फोर्स प्रयासों का पता चला है।
आप एक अतिरिक्त अनुमति नियम लिख सकते हैं ताकि PowerShell स्क्रिप्ट उन IP पतों या सबनेट को ब्लॉक न करे जिनकी आपको आवश्यकता है।
फिर आपको पिछले 3 घंटों के लिए Windows इवेंट लॉग से उन IP पतों की सूची एकत्र करनी होगी जिन पर 5 से अधिक विफल प्रमाणीकरण प्रयासों का पता चला है। ऐसा करने के लिए, इवेंट ID 4625 (विफल एक्सेस प्रयास — An account failed to log on और LogonType = 3, लेख RDP Event Log Forensics देखें) के साथ इवेंट को Security लॉग में ढूंढें। आपके द्वारा पाए गए इवेंट्स में, कनेक्ट करने का प्रयास करने वाले उपयोगकर्ता का IP पता ढूंढें और सुनिश्चित करें कि यह इवेंट लॉग में 5 से अधिक बार दिखाई दिया।
मैं पिछले 3 घंटों के लिए इवेंट्स की सूची से हमलावरों के IP पतों का चयन करने के लिए निम्न PowerShell कोड का उपयोग कर रहा हूं (आप समय अवधि बदल सकते हैं):
$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
अब पहले बनाए गए फ़ायरवॉल नियम BlockRDPBruteForce में पाए गए सभी हमलावरों के IP पते जोड़ें। 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 # IP ब्लॉकिंग इवेंट को लॉग फ़ाइल में लिखना
}
Set-NetFirewallRule -DisplayName "BlockRDPBruteForce" -RemoteAddress $current_ips

सुनिश्चित करें कि नए IP पते Windows Defender Firewall में ब्लॉकिंग नियम में जोड़े गए हैं।

अब आपको बस इस PowerShell कोड को फ़ाइल c:\ps\block_rdp_attack.ps1 में कॉपी करना है और इसे हर 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 स्क्रिप्ट चला सकते हैं यदि लॉग में इवेंट ID 4625 दिखाई देता है (ब्लॉगपोस्ट Windows Event Triggers देखें), ताकि आप RDP ब्रूट-फोर्स हमले का अधिक तेजी से जवाब दे सकें।
आप इस स्क्रिप्ट को अपनी आवश्यकताओं के अनुसार संशोधित कर सकते हैं और RDP हमलों को ब्लॉक करने के लिए उपयोग कर सकते हैं।