Was sind Brute Force Angriffe, wozu nutzen Angreifer sie und wie kannst du diese Angriffe auf dein WordPress verhindern? Solche Fragen stellst du dir sicherlich, wenn du dich mit dem Thema auseinandersetzt. Wir haben Antworten auf diese Fragen gesammelt.
Was sind Brute Force Attacken?
Brute Force Attacken sind Versuche, sich Zugang zu deinem System (in deinem Fall vermutlich dein WordPress) zu verschaffen. Dies geschieht durch den Versuch, einen Benutzernamen und das zugehörige Passwort zu erraten. Dieser Account hat schließlich bereits Zugang zum System.
Es ist eine sehr einfache und primitive Methode (das sagt schon der Name – Brute Force = stumpfe Gewalt) welche aber immer noch sehr wirksam ist. Gleichzeitig ist sie aber auch sehr einfach zu verhindern.
Welche Arten von Brute Force Attacken gibt es?
Es gibt kleine, aber feine Unterschiede zwischen Brute Force Attacken und ihren Angriffsszenarien. Die häufigsten Arten lassen sich in 5 Kategorien aufteilen:
- Simple brute force attack
- Dictionary Attack
- Hybrid Brute Force Attack
- Reverse Brute Force Attack / Password Spraying
- Credential Stuffing
Im Folgenden stellen wir dir jede dieser Kategorien detailliert vor.
„*“ zeigt erforderliche Felder an
1. Simple Brute Force Attack
Dies ist die reinste Form der Brute Force Attacke. Sie probiert jegliche Zeichenkombination nach und nach aus – ohne Recherche oder gesonderte Prozedur, außer einfachem Hoch- oder Runterzählen von Zeichen.
Diese Methode ist einfach, kostet aber Zeit beziehungsweise sehr viel Rechenleistung. Dennoch ist sie bei immer stärker werdenden Prozessoren oder der Möglichkeit, viele verschiedene Systeme gleichzeitig auf ein Angriffsziel loszulassen (zum Beispiel mithilfe von Botnets oder Cloud-Servern), immer noch eine valide Methode.
Es gibt sowohl Laborversuche als auch Anwendungen in der realen Welt, die ein 8 Zeichen Passwort in weniger als 12 Minuten knacken können. Mit fortschreitender Technologie wird es noch schneller und einfacher werden, zum Ziel zu kommen. Daher bleibt diese Methode eine beliebte bei Angreifer:innen, die es speziell auf ein bestimmtes Ziel abgesehen haben.
Vorteil: Es können jegliche Passwörter erraten werden.
Nachteil: Es kann unter Umständen sehr lange dauern und erfordert hohen Rechenaufwand.
Gute Abwehrmethoden: Benutze lange Passwörter mit einer großen Auswahl an Zeichen.
2. Dictionary Attack
Anders als bei der Simple Brute Force Methode, nutzt die Dictionary Attack einen vorhandenen Datensatz zum Austesten.
Dies können Daten aus unterschiedlichen Quellen sein:
- Tatsächliche Dictionaries (Wörterbücher) also beispielsweise alle Wörter aus dem Duden.
- Passwortlisten wie die 10.000 am häufigsten verwendeten Passwörter.
- Passwörter aus vergangenen Breaches (Usernamen und Passwörter aus vorherigen Hacks von Websites und Applikationen).
Die erste Variante verliert zunehmend an Bedeutung, die letzten zwei jedoch sind über die Jahre immer stärker geworden, denn mit zunehmenden Cyberangriffen steigt natürlich auch die Menge der Daten in diesen Listen.
Vorteil: Da Nutzer:innen gerne Passwörter verwenden, die auch merkbar sind, machen sie es sich oft einfach und verwenden einzelne Wörter aus dem Wörterbuch oder Namen und das immer wieder auf allen Services, Websites und Apps. Daher ist die Erfolgswahrscheinlichkeit recht hoch, damit an einen Zugang zu kommen und die Methode ist deutlich schneller als ein Simple Brute Force.
Nachteil: Erfolgswahrscheinlichkeit ist nicht mehr bei 100 %.
Gute Abwehrmethoden: Verwende keine einzelnen Wörter aus dem Wörterbuch oder Namen, Gegenstände oder dergleichen. Verwende auch dasselbe Passwort nur für einen Account und nicht für mehrere.
3. Hybrid Brute Force Attack
Bei dem Hybrid Brute Force Angriff handelt es sich um eine Kombination aus der Simple Brute Force Attack und der Dictionary Attack.
Hierbei wird ein Wort aus der Simple Brute Force genommen und mit potentiellen Zahlen kombiniert, welche oft genutzt werden, wie zum Beispiel ein Geburtsjahr oder Hochzeitstag. Das limitiert die Anzahl der potentiellen Versuche drastisch und vereinfacht so den Angriffsprozess.
Vorteil: Diese Methode hat denselben Vorteil wie die Dictionary Brute Force, nur wird hier die Versuchsanzahl erhöht und mit einfacher Addition von Zeichen wie Smileys in Textform oder Jahreszahlen (Maga2020 ist ein berühmtes Beispiel) um eine hohe Anzahl an Versuchen erweitert.
Nachteil: Erfolgswahrscheinlichkeit ist wie beim Dictionary Brute Force nicht mehr bei 100 %.
Gute Abwehrmethoden: Verzichte darauf, für dich wichtige Daten oder Zahlen in Passwörtern zu verwenden.
4. Reverse Brute Force Attack oder Password Spraying
Hierbei versuchen Angreifer, ein Passwort mit verschiedenen Benutzernamen zu kombinieren. Der Benutzername variiert also, das Passwort bleibt gleich.
Vorteil: Wie schon weiter oben beschrieben, sind Menschen dazu geneigt, ihre Passwörter wiederzuverwenden und möglichst merkbare zu nehmen. Das trifft auch auf diese Art der Attacke zu. Hinzu kommt, dass man hiermit einen Lock Out (Loginsperre für den Account) bei zu vielen Versuchen auf dasselbe Benutzerkonto umgeht.
Nachteil: Diese Methode kann zu vielen Zugängen führen, aber vielleicht nicht zu den Konten, die man möchte.
Gute Abwehrmethoden: Da auch hier meistens Standardlisten für Benutzerkonten genutzt werden (insofern diese nicht ausgelesen werden können), empfiehlt es sich wie beim Passwort einen schwer zu erratenden Benutzernamen mit vielen alphanumerischen Zeichen und Sonderzeichen zu wählen.
5. Credential Stuffing
Auch hier spielen Daten aus vergangenen Breaches (Siehe Dictionary Attack, Punkt 2) eine Rolle. Credential Stuffing macht nichts anderes, als die Logindaten von vorhandenen Breaches wiederzuverwenden.
Hast du also beispielsweise irgendwo auf einer Website oder einer App
den Benutzername [email protected] und das Passwort Cola123
verwendet und diese Daten sind durch einen Breach herausgekommen, werden Angreifer diese benutzen, um sich auch bei anderen Diensten und Applikationen einzuloggen.
Diese Attacke hat eine sehr hohe Erfolgschance und wird immer beliebter. Daher zählt sie auch zum aktuellen Zeitpunkt zu den gefährlichsten.
Ob einer deiner Accounts schon in einem Breach war, kannst du auf der Website haveibeenpwned.com nachschauen.
Raidboxes und Breaches
Beim Anlegen eines neuen Nutzeraccounts überprüft Raidboxes, ob das Passwort schon mal in einem Breach war (anonym und nicht zurückverfolgbar).
Vorteil: Auch hier kommt zum Tragen, dass Menschen Gewohnheitstiere sind. Die meisten Personen nutzen dieselbe E-Mail Adresse und dasselbe Passwort für viele Services. Auch wird hier ein Lock Out für Accounts wie beim Reverse Brute Force verhindert.
Nachteil: Bei diesem Angriff muss wieder vorher ausgekundschaftet werden, ob die Person, in dessen Konto man möchte, auch den Service/Website/App nutzt. Wenn man aber einfach nur überhaupt einen Zugang möchte, ist es eine sehr erfolgreiche Methode.
Gute Abwehrmethoden: Benutze niemals dieselben Logindaten mehrmals. Halte sie einzigartig, überall wo du dich registrierst.
Wie schütze ich meine WordPress Website vor Brute Force Attacken?
Oft lese und höre ich den Ratschlag: „Benutze einfach sichere Passwörter.“
Das mag im Grundsatz stimmen, aber mit genug Zeit und Ressourcen lässt sich jede Loginkombination via Brute Force knacken, wenn man keine weiteren Schutzmaßnahmen verwendet.
Auch bedeuten diese Angriffe vermeidbare Last auf deinem Server – und diese schadet nicht nur der Ladezeit deiner Website, sondern auch deinem Geldbeutel, wenn dein Hoster nach Traffic abrechnet.
Die beste Methode ist immer noch, diese Angriffe gar nicht erst zu ermöglichen und den Zugang komplett abzublocken.
Auf Serverebene
Maßnahme 1: Blocke unautorisierte Anfragen an dein Loginformular
Du kannst eine noch so sichere Loginkombination verwenden, sie würde mit viel Zeit, Rechenleistung und ohne weiteren Schutz geknackt werden.
Der effizienteste Weg ist es tatsächlich, einen Schutz zu erstellen, welcher jegliche unautorisierte Anfrage an dein WordPress Login Formular komplett blockiert. So kommen die automatisierten und manuellen Angriffe gar nicht erst durch. Dies schont letztendlich auch deinen Server.
Hierfür gibt es mehrere Möglichkeiten. Nicht jede Möglichkeit passt, dies hängt davon ab, wie technisch versiert du bist und wie viele Einstellungsmöglichkeiten du in Bezug auf deine DNS- und Servereinstellungen hast.
Tipp: IP Allow List erstellen
Schutz: 🔒🔒🔒🔒🔒
Technischer Aufwand: 🛠️🛠️🛠️
Wenn du immer mit derselben IP-Adresse auf das Internet zugreifst, weil du beispielsweise einen eigenen VPN besitzt oder eine feste IP in deiner Agentur hast, ist die sicherste Methode, eine Allow List für diese IP auf die /wp-admin und /wp-login zu erstellen.
Apache
Falls dein Webserver auf Apache läuft, füge diesen Teil zu deiner .htaccess hinzu:
RewriteEngine on
RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$ [OR]
RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123$
RewriteRule ^(.*)$ – [R=403,L]
Wichtig: Beachte, dass du in den Zeilen, die REMOTE_ADDR beinhalten, nur die ZAHLEN mit den jeweiligen Zahlen deiner IP ersetzen muss.
Wenn deine IP Beispielsweise 95.217.228.176 wäre, müsste die Zeile lauten:
RewriteCond %{REMOTE_ADDR} !^95\.217\.228\.176$
Für jede erlaubte IP-Adresse, füge eine eigene Zeile hinzu. Starte dann deinen Apache Service neu, damit die Änderungen übernommen werden.
Nginx
Füge dieses Snippet in deinen Serverblock der virtuellen Host Datei ein. Auch hier gilt wieder: Für jede erlaubte IP-Adresse musst du eine allow Zeile hinzufügen.
location = /wp-login.php {
allow 192.168.1.1; #IP-Adresse 1 für jede erlaubte IP-Adresse eine Zeile
allow 172.16.1.1; #IP-Adresse 2
deny all;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
Starte deinen nginx Service neu, damit die Änderungen übernommen werden.
Tipp: CDN-Firewall nutzen
Schutz: 🔒🔒🔒🔒🔒
Technischer Aufwand: 🛠️
CDNs können einen sehr guten Schutz bieten, indem man die Firewall so konfiguriert, dass sie eine Captcha Abfrage vor dem Login Formular schaltet.
Hier ein Tutorial für Cloudflare. Im kostenlosen Cloudflare Plan kannst du bis zu 5 Regeln anlegen.
1. Logge dich in dein Cloudflare-Dashboard ein, gehe auf Firewall und lege eine neue Firewallregel an.
2. Die Daten der Regel lauten:
Das war es auch schon.
Tipp: Blockliste erstellen über Fail2Ban
Schutz: 🔒🔒🔒🔒
Technischer Aufwand: 🛠️🛠️🛠️🛠️
Wenn du keine feste IP hast und keinen CDN nutzt, kannst du eine Blockliste über Fail2Ban erstellen. Gute Tutorials dazu findest du hier:
Beachte aber hierbei, dass du dies speziell auf die /wp-login URL anpassen musst.
Tipp: Raidboxes Dashboard nutzen
Schutz: 🔒🔒🔒🔒🔒
Technischer Aufwand: 🛠️
In Kombination mit sicherem Usernamen und Passwort und Raidboxes Single Sign On.
Raidboxes Kund:innen haben auf jeder ihrer Instanzen schon ein konfigurierbares Anti Brute Force Modul.
Zusammen mit dem Single Sign On ist dies eine der höchsten Sicherheitseinstellungen, die du haben kannst, ohne jeglichen technischen Aufwand.
In WordPress selbst
Wenn du diese Schritte durchgeführt hast, bist zu sehr gut vor Attacken geschützt.
Wenn es dir aber nicht möglich ist, diese Lösung(en) anzuwenden, weil du vielleicht keinen Zugriff auf deine Servereinstellungen oder DNS Records für die Einrichtung eines CDNs hast, habe ich hier noch ein paar andere Schritte für dich.
Maßnahme 2: Username Enumeration verhindern
Bevor wir uns den sicheren Passwörtern widmen, fangen wir vorne an: beim Usernamen.
Benutzernamen machen 50 Prozent des Zugangs aus – und WordPress macht es leider sehr einfach, den Benutzer(Login)namen für alle angelegten Accounts mit Adminrechten auszulesen. Und das automatisiert. Dies kannst du verhindern, indem du entweder selbst Hand anlegst und dein WordPress absicherst – oder indem du die folgenden Plugins installierst.
Tipp: Lösung via Plugins
Schutz: 🔒🔒🔒
Technischer Aufwand: 🛠️
Plugin 1: Unified Login Error Messages
Dieses Plugin unterdrückt die Ausgabe von unterschiedlichen Fehlermeldungen bei fehlerhaften Loginversuchen. Denn WordPress gibt aktuell eine andere Fehlermeldung aus, wenn ein Benutzername existiert oder eben nicht. Das macht es einfach zu erkennen, ob der eingegebene Benutzer vorhanden ist.
Plugin 2: Stop User Enumeration
Stop User Enumeration macht genau das, was es sagt: Es blockiert unautorisierte Anfragen an dein WordPress, um beispielsweise über das Autorenarchiv Nutzernamen auszulesen.
Tipp: Lösung via functions.php
Schutz: 🔒🔒🔒
Technischer Aufwand: 🛠️🛠️
Wenn du lieber selbst die Kontrolle übernimmst, kannst du die functions.php deines aktiven Themes (bitte vorher ein Backup machen) anpassen.
Füge folgenden Code hinzu:
PHP Code
// If the user is not authenticated as an admin
if (!is_admin()) {
// RegEx to check if the request went to an “/author=INT” endpoint
if (preg_match('/author=([0-9]*)/i', $_SERVER['QUERY_STRING'])) die(); add_filter('redirect_canonical', 'stop_user_enum', 10, 2);
}
function stop_user_enum($redirect, $request) {
// // RegEx to check if the the request went to an “/author=INT” endpoint but with the permalink furl format
if (preg_match('/\?author=([0-9]*)(\/*)/i', $request)) die(); else return $redirect;
}
Tipp: Raidboxes Dashboard nutzen
Schutz: 🔒🔒🔒
Technischer Aufwand: 🛠️
Raidboxes Kund:innen profitieren von bereits fertigen Lösungen im Raidboxes Dashboard. Hier gibt es nichts Weiteres zu tun, als diese anzustellen.
Maßnahme 3: „Benutze einfach sichere Passwörter“
Hinweis: Bei Raidboxes fragen wir bei der Registrierung eines neuen Kontos bei der Passwortvergabe Dinge ab, die Brute Force Abfragen deutlich schwieriger machen. Dies beinhaltet:
- Vorgegebene Minimallänge
- Komplexität
- ob das Passwort im Wörterbuch (Englisch oder Deutsch) zu finden ist
- ob es ein Datum beinhaltet
- ob es schon einmal in einem bekannten Passwortbreach (anonym und nicht zurückverfolgbar) war
Passwörter sind defizitär: Denn sie sind erratbar (Brute Force), mitlesbar (Key Logger etc), auslesbar (wegen keiner oder schlechter Verschlüsselung/Speicherung in Datenspeichern), erkennen lediglich die Autorisierung eines Endgeräts, aber nicht die Identität der Person dahinter und sind meist schwer zu merken (wenn sie „sicher“ sind).
Für das letztere Problem gibt es Passwortmanager wie 1Password, BitWarden, KeePass und mehr.
Wenn wir im WordPress Umfeld sind, müssen wir uns damit abfinden, dass wir Passwörter nutzen müssen.
Was also ist ein „sicheres“ Passwort?
Ein sicheres Passwort ist ein langes Passwort, welches einen gewissen Grad an Komplexität besitzt.
Ja, Passwortlänge ist wichtiger als Komplexität. Ein 8-Zeichen Passwort kann für 25$USD innerhalb von 12 Minuten erraten werden, selbst wenn es aus lauter Sonderzeichen, Groß-Kleinbuchstaben und Zahlen besteht.
Das folgende GIF veranschaulicht sehr gut, warum die Länge mehr Gewicht hat, als Komplexität:
Auch haben Hacker keine Lust viel Geld oder Zeit für intensive Berechnungen von langen Passwörtern zu investieren. Daher ist die Faustregel: Je länger dein Passwort, desto besser!
Aber lange und komplexe Passwörter sind schwer zu merken!
Das stimmt, aber in Zeiten von Passwortmanagern brauchen wir uns nur ein langes und komplexes Passwort merken und die restlichen von diesen Managern erstellen und speichern lassen.
Wenn wir dieses eine Passwort haben und es im besten Falle auch gelegentlich mal ändern, sind wir auf der sicheren Seite.
Hier ein offenes Geheimnis, wie man sich lange, komplexe Passwörter erstellt und auf Anhieb merken kann:
Das bedeutet, wir können uns diesen XKCD Comic Strip zu Herzen nehmen und ein langes Passwort nach einem der folgenden Muster erstellen:
Zugsitz+Feldweg-7Augenschlag
Oder wir verwenden ganze Sätze mit ein wenig extra Komplexität:
Ich_Mag_Spinat_nur-3-_Mal_am_Tag
Wir haben einen relativ sinnlosen Satz mit Sonderzeichen und einer Zahl erstellt, welcher sehr sehr schwer zu erraten ist und zugleich doch merkbar (Pluspunkte für den Reim). Dies nennt man auch Passphrase.
Viele Passwortmanager wie zum Beispiel BitWarden erstellen solche merkbaren aber komplexen Passphrasen für dich.
Zusatz: Nutze einen sicheren Benutzernamen
Wie oben erwähnt: 50 Prozent deines Zugangs ist der Benutzername.
Wenn eine angreifende Person diesen Teil des Zugangs weiß, dann ist die Hälfte geschafft. Bleibt nur noch das Passwort. Verzichte also auf Nutzernamen wie admin, Administrator oder deinem Namen, benutze nicht den Namen der Website oder die Domain oder irgendwas, was mit der Seite an sich zu tun hat.
Beispiel
Wenn deine Seite www.ireallylovecats.com heißt, nimm keinen Namen, welcher irgendetwas mit Katzen beinhaltet.
Besser noch, nimm denselben Passwort-Trick von oben und nutze einen langen Satz und addiere Komplexität wie Asphalt/kann/auch/mit/7/Gewürzen.
Passwort erstellen bei Raidboxes
Erstelle dir ein Passwort und Benutzernamen mit Maximallänge (in WordPress aktuell 60 Zeichen für den Benutzernamen und 64 Zeichen für das Passwort, siehe Datenbank-Eigenschaften) und vielen Buchstaben, Zahlen und Sonderzeichen – benutze dann einfach den Single Sign On im Dashboard. Sicheres Einloggen mit einem Klick.
Maßnahme 4: Security Plugins
Tipp: Alleskönner Plugins
Schutz: 🔒🔒🔒🔒
Technischer Aufwand: 🛠️🛠️ bis 🛠️🛠️🛠️
Es gibt eine Menge WordPress Security Plugins auf dem Markt, beispielsweise:
All diese Security Plugins bieten einen eingebauten Brute Force Schutz und vieles mehr. Bei den meisten WordPress Websites wird die Installation und Wartung dieser Plugins als Schutz ausreichen. Ebenso ist die Konfiguration und Wartung minimal.
Trotzdem haben Plugins einen (in den meisten Fällen kleinen) Nachteil: die Last des Servers durch Brute Force kann durch solche Plugins nicht verringert werden. Diese Plugins brauchen einen PHP Prozess für die Checks, ob es sich um einen validen Zugriff handelt, ob die IP nicht auf der Blocklist ist
Das alles belastet den Server pro Request. Natürlich immer noch weniger als ein Loginversuch selbst – und bis der Server wirklich in Mitleidenschaft gezogen wird, muss die Attacke schon fast D/DOS Dimensionen annehmen – aber es ist nicht außer Acht zu lassen.
Zurück aber zu den vielen Vorteilen der Plugins: Werden diese immer up to date gehalten, werden auch neuartige Attacken dadurch schnell erkannt und mitigiert, ohne dass du selbst Hand anlegen musst.
Tipp: WP-Login verstecken
Schutz: 🔒
Technischer Aufwand: 🛠️
“Security through obscurity” ist ein in der Security oft genannter Satz für diese Methode.
Es bedeutet letztendlich, dass man versucht, durch reine Verschleierung eines Problems Attacken abzuhalten. Dies funktioniert in wenigen Fällen gut, da Brute Force Attacken nicht über das Login Formular gehen, sondern Query Parameter verwenden, um die Loginversuche zu starten.
Nur weil die Standard URL wie /wp-admin oder /wp-login.* nicht aufrufbar ist, werden diese Attacken nicht aufhören.
Fazit
Ich hoffe, ich konnte dir die verschiedenen Arten von Brute Force Angriffen erklären und dir Tipps geben, wie du dein WordPress zukünftig davor schützt. Wenn du dazu weitere Fragen hast, freuen wir uns über deinen Kommentar!
Danke für die ausführliche Liste, gerne auch noch mit mehr Tiefe.
Wo ich wirklich noch etwas grüble ist dass
Ich_Mag_Spinat_nur-3-_Mal_am_Tag
extrem sicher sein soll? Können die password guesser nicht auch natürliche Phrasen nachbilden?
Grüße
Hi, sehr schöne Aufstellung. Danke dafür. Ich nutze aufgrund einer heftigen Brute Force Attacke die Lösung mittels htpasswd. Und das seit fast 4 Jahren.
http://www.henning-uhle.eu/in-eigener-sache/in-eigener-sache-diese-webseite-wurde-angegriffen-und-wird-nun-geschuetzt
Ich habe Limit Login Attempts getestet, das war aber nicht das, was mir so vorschwebt. Die 2FA erscheint mir aber sinnvoll.
Hi Henning,
tatsächlich ist das zweite Passwort vor dem Login-Bereich wahrscheinlich die komfortablere Lösung. Insbesondere, wenn immer das Smartphone zum Scannen von Codes etc. benötigt wird. Die 2FA ist allerdings die Methode, die wir empfehlen würden. Es gibt ja mittlerweile auch Lösungen die eine 2FA ohne Smartphone ermöglichen (ich meine Yubico heißt eine der Firmen/Produkte hierzu). Limit Login Attempts wiederum hat ja ganz klar die Schwachstelle, dass es keine Rotationen bzw. IP-Wechseln antizipieren kann. Hier sind wir sehr gespannt, was sich in nächster Zeit tut.
Hat man bei Raidboxes shreibenden Zugriff auf die .htaccess-Datei?
Hi Erich 🙂
Sorry erstmal für die späte Antwort! Jain 😉 Denn unsere Seiten laufen auf NGINX Webservern. D.h. es existiert zwar eine .htaccess, diese hab aber keinen Einfluss auf die Webserverkonfiguration. Wenn deine Seite auf einem Apache Webserver läuft, kannst du über die .htaccess aber alle relevanten Einstellungen vornehmen.
Viele Grüße aus Münster!