Das Abwehren von Brute-Force-Angriffen auf RDP-Verbindungen ist ziemlich lästig, besonders wenn man nicht möchte, dass der eigene Server oder PC alle paar Minuten angegriffen wird. Diese Anleitung hilft dabei, das Blockieren dieser hartnäckigen IP-Adressen zu automatisieren, die immer wieder versuchen, sich Zugang zu Ihrem Windows-Rechner zu verschaffen. Die Idee ist, fehlgeschlagene Anmeldeversuche (Ereignis-ID 4625) zu erkennen, zu zählen und die gefährlichsten Angreifer automatisch per Firewall-Regel zu blockieren. Das ist zwar nicht perfekt, aber besser als nichts – vor allem, wenn man keine Sicherheitssoftware von Drittanbietern installieren möchte.
Wie man RDP-Brute-Force-Angriffe mit PowerShell erkennt und blockiert
Warum das hilft
Wenn Ihre Windows-Protokolle eine Häufung fehlgeschlagener RDP-Anmeldeversuche von bestimmten IP-Adressen anzeigen und Sie einen Anstieg unautorisierter Zugriffsversuche feststellen, kann dieses Skript Abhilfe schaffen. Es überwacht die Einträge im Ereignisprotokoll und erstellt automatisch eine Firewall-Regel, um diese IP-Adresse zu blockieren, sobald eine IP-Adresse genügend Versuche unternommen hat (z. B.fünf fehlgeschlagene Versuche innerhalb weniger Stunden).So müssen Sie nicht nur darauf hoffen, dass die Zugriffe von selbst verschwinden, sondern unterbrechen die Verbindung aktiv. Da alle Aktionen protokolliert werden, erhalten Sie außerdem einen Nachweis darüber, was blockiert wurde.
Wenn es zutrifft
Diese Methode ist hilfreich, wenn Sie wiederholt fehlgeschlagene RDP-Anmeldeversuche von unbekannten IP-Adressen feststellen, insbesondere wenn diese wiederholt auftreten. Wenn Sie viele 4625-Ereignisse von derselben IP-Adresse bemerken, versucht höchstwahrscheinlich jemand oder etwas, Ihre RDP-Anmeldeinformationen per Brute-Force-Angriff zu knacken. In diesem Fall kann Ihnen diese Methode viel Ärger ersparen.
Was Sie erwartet
Nach der Einrichtung steht Ihnen ein Skript zur Verfügung, das die aktuellen Protokolle durchsucht, IPs mit wiederholten fehlgeschlagenen Zugriffsversuchen identifiziert und diese IPs automatisch durch Aktualisierung der Firewall-Regeln blockiert. Das funktioniert nicht von allein – Sie können den Schwellenwert anpassen oder einen Zeitplan einrichten, um das Skript regelmäßig auszuführen. Beachten Sie außerdem, dass vertrauenswürdige IPs (z. B.aus Ihrem internen Netzwerk oder VPN-Verbindungen) auf die Whitelist gesetzt werden sollten, damit sie nicht versehentlich blockiert werden.
Schritt-für-Schritt-Einrichtung
Laden Sie das Skript herunter und richten Sie es ein.
- Laden Sie zunächst das Skript von diesem GitHub-Link herunter. Speichern Sie es an einem Ort wie `C:\PS\` – stellen Sie einfach sicher, dass dieser Ordner existiert, oder erstellen Sie ihn mit PowerShell:
New-Item -ItemType Directory -Path 'C:\PS\'. - Verwenden Sie den PowerShell-
Invoke-WebRequestBefehl, um das Skript direkt von GitHub herunterzuladen, damit Sie nicht alles kopieren und einfügen müssen. Zum Beispiel so:$path = "C:\PS\"; if(!(Test-Path -Path $path)){ New-Item -ItemType Directory -Path $path} $url = "https://raw.githubusercontent.com/maxbakhub/winposh/main/RDS/block-rdp-brute-force.ps1" $output = "$path\block-rdp-brute-force.ps1" Invoke-WebRequest -Uri $url -OutFile $output - Sie können dieses Skript nun bei Bedarf manuell ausführen oder, noch besser, es durch die Erstellung einer geplanten Aufgabe automatisieren (mehr dazu später).
Automatische Blockierung mit dem Aufgabenplaner konfigurieren
- Öffnen Sie PowerShell als Administrator (dies ist für die geplante Aufgabe erforderlich).Erstellen Sie anschließend eine neue Aufgabe, die bei jedem fehlgeschlagenen RDP-Anmeldeversuch (Ereignis-ID 4625) ausgelöst wird. Hier ein kurzes Beispiel:
$taskname="Block_RDP_Brute_Force_Attacks_PS" $scriptPath="C:\PS\block-rdp-brute-force.ps1" $trigger = New-ScheduledTaskTrigger -AtLogOn $trigger. Subscription = @" <QueryList><Query Id="0" Path="Security"><Select Path="Security">*[System[(EventID=4625)]]</Select></Query></QueryList> "@ $action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -File `"$scriptPath`"" Register-ScheduledTask -TaskName $taskname -Trigger $trigger -User "SYSTEM" -Action $action -RunLevel Highest -Force - Dadurch wird das Skript so konfiguriert, dass es bei jedem fehlgeschlagenen RDP-Anmeldevorgang automatisch ausgeführt wird. Bei einer Konfiguration funktionierte es, bei einer anderen musste ich den Auslöser etwas anpassen, damit es zuverlässig funktionierte.
Schwellenwerte und vertrauenswürdige IPs anpassen
- Falls das Skript Sie oder legitime interne IP-Adressen blockiert, aktualisieren Sie das Array `$trustedIPs` im Skript, um Ihre Netzwerkadressen hinzuzufügen. Um festzulegen, wie viele Zugriffsversuche eine Blockierung auslösen, passen Sie die Werte für `$badAttempts` und `$intervalHours` an.
- Behalten Sie die Protokolldatei (`c:\ps\rdp_block.log`) im Auge, um zu sehen, welche IPs wann blockiert wurden. Dies hilft Ihnen gegebenenfalls, den Prozess zu optimieren.
Etwas ungewöhnlich, aber nach der Einrichtung läuft das Skript unauffällig im Hintergrund. Auf manchen Rechnern brauchte es ein paar Durchläufe, bis die Wiederholungstäter gefunden wurden, aber es ist ein Fortschritt, anstatt einfach darauf zu hoffen, dass sie aufgeben.