WordPress – Botnetz und Brute-Force-Attacken zur Ermittlung von Logins abwehren
Angriffsszenario
Zum Knacken von WordPress-Seiten (zunächst zum Verschaffen von Zugängen) werden massenhafte Login-Versuche auf bestimmte Seiten einer WordPress-Installation gesendet. Einfallstore: Wenn man eine Site www.xyz.de betreibt
- ergibt sich bei WordPress der Admin- bzw. User-Zugriff via www.xyz.de/wp-login.php und
- die Konfigurationsdaten liegen auf in einer Datei namens www.xyz.de/wp-login.php.
Auf die Datei bzw. den Link www.xyz.de/wp-login.php muss ein Angreifer nun nur noch ein Lexikon mit gängigen Login/Passwort-Kombinationen loslassen um mit hoher Wahrscheinlichkeit einen Zugriff zu erhalten.
- Im Falle eines Angriffs via Botnetz hilft ein IP-basierter Zähler-Schutz (Blocken der IP-Adresse nach n Angriffen in einem bestimmten Zeitintervall o.ä.) wie ihn einige Security-Tools anbieten wenig, da der ausführende Rechner nach jedem Login wechselt
- Eine einfache Sicherheit bietet hier eine vorgeschaltete Zugriffsprüfung, die den Angreifer gar nicht erst zur PHP-Ebene vorlässt
Apache mit .htaccess-Datei scharfmachen
- Der Apache-Webserver macht eigentlich nichts als Dateien, die auf einem Rechnerlaufwerk liegen, im Falle von Anfragen (z.B. via http) auszuliefern. Das kann über Dateien mit dem Namen .htaccess (Konvention) gesteuert werden.
- In diesen Dateien kann über Kommandos beschrieben werden, ob, wie oder unter welchen Bedingungen der Apacher-Server Dateien im betreffenden Ordner über den Webserver ausliefert.
Schritt 1 – Account anlegen
Für den hier angestrebten Schutz muss zunächst ein technischer Account (nur für den Webserver, kein voller Unix-Account) angelegt werden, auf den die .htaccess-Datei später zugreift.
- Per SCP/FTP im Ordner /usr/share/ einen Unterordner namens WordPress anlegen
- Dann via putty/SSH/Linux-Shell folgenden Befehl eingeben:
htpasswd -c /usr/share/wordpress/.htpasswd
- Für einen eigenen Accountnamen frei wählen
- Nach Eingabe des Befehl erfolgt normalerweise die Abfrage des gewünschten Passworts in zwei Schritten (Eingabe + Verifikation, wie üblich bei Passworten)
Wenn alles funktioniert hat, sieht das wie folgt aus:
Schritt 2 – Inhalt der .htaccess-Datei
- Im WordPress-Verzeichnis muss nun eine Datei namens .htaccess (ja – mit dem Punkt am Anfang) auf dem Servers angelegt werden und der unten stehende Code eingetragen werden
- Falls so eine Datei schon vorhanden ist, dann den unten stehenden Code in die vorhandene Datei eintragen
# .htaccess-Border <FilesMatch "(wp-config.php|wp-login.php)"> AuthName "HTAccess" AuthType Basic AuthUserFile /usr/share/wordpress/.htpasswd require valid-user <FilesMatch>
Ergebnis: ein Apache-Login vor dem WordPress-Login. Das genügt häufig, um einfachen Gelegenheits-Angreifern – auch via Botnetz – die Lust zu nehmen. Natürlich wirkt auch diese Hürde nur, wenn keine allzu simplen User-ID/Passwort-Kombinationen wie demo/demo etc. verwendet werden.