Schlagwort-Archive: MySQL

WordPress-Blog vor Attacken schützen

WordPress erfreut sich grösster Beliebtheit bei Bloggern. Aufgrund der hohen Verbreitung im Web ist es auch gleichzeitig ein beliebtes Angriffsziel. Aktuell vermehren sich Hinweise und Meldungen über Botnetze welche WordPress-Blogs weltweit attackieren.

Dieser Beitrag beschreibt die Absicherung der WordPress-Installation um gegen Angriffe zu schützen, einige einfache Massnahmen die jeder umsetzen kann.

Angreifer gehen fast immer nach dem selben Muster vor. Anhand von automatisierten Tools wird versucht Zugang in schlecht geschützte Bereiche zu erlangen oder nutzt Schwachstellen in WordPress und Plugins um Schadcode einzuschleusen.

logwatch - httpd brute-force attachs
logwatch – httpd brute-force attacks

Brute-Force Angriffe werden vom Webserver geloggt und durch Logwatch ausgewertet.

WordPress 4 bietet die Möglichkeit bei einer Neuinstallation einen individuellen Benutzernamen anzulegen. Frühere WordPress Versionen legten noch automatisch den Benutzer Admin an. Damit hatte man bereits schon das erste Sicherheitsleck.

Möchte ein Angreifer Zugang zum System erlangen verwendet er meist Benutzernamen wie admin, Administrator oder root, Namen die üblicherweise für Logins die über erhöhte Rechte verfügen. Ändert man Standard Benutzernamen, erschwert dies einem Angreifer den Zugriff. Er benötigt neben dem korrekten Passwort nun auch noch den Benutzername. Dieser Umstand gilt nicht nur für WordPress sondern für alle Systeme die Authentifizierung aus dem Internet ermöglichen.

Benutzt Du den Admin für deine Postings ?

Folgende schritte helfen ein WordPress-Blog vor Angreifer zu schützen. An dieser stelle sei noch erwähnt das jetzt der richtige Zeitpunkt ist ein aktuellen Backup anzulegen.

  1. Im WordPress Dashboard unter Benutzer legt man ein zusätzlichen Admin an. Verwendet dabei einen Benutzername wie zum Beispiel superadm-blog14.
  2. Danach wieder abmelden.
  3. Mit diesem soeben erstellen Admin wieder anmelden.
  4. Zusätzlich legen wir einen weiteren Benutzer an, dieser mit der Rolle Autor.
  5. Anschliessend löscht man den Benutzer mit dem Name Admin. Beim Löschvorgang fragt WordPress was mit den Beiträgen des Benutzers Admin passieren soll, jetzt überträgt man alle Beiträge an den neu angelegten Benutzer mit der Rolle Autor.

WordPress Benutzer Loeschen

Von nun an erstellt man alle Beiträge mit dem neu angelegten Autor. Der Admin-Account „superadm-blog14“ dient lediglich für die Wartung und Verwaltung von WordPress.

Die jetzt publizierten oder kommentierten Beiträge erscheinen lediglich mit dem Benutzername des Autors. Es wird damit vermeiden dass der Admin-Account irgendwo auf der Seite erwähnt wird oder über einen Link abgreifbar ist, ein Angreifer soll keine Informationen finden. Nun muss er neben dem Passwort auch noch alle möglichen Kombinationen von Benutzernamen durchprobieren, bevor er sich Zugriff in den Admin-Bereich verschaffen kann. Somit laufen die meisten Angriffsversuche ins Leere, der Benutzer admin existiert nicht.

Damit nun bei Brute-Force Attacken der Benutzername des Autors in den Beiträgen und in den Links nicht preisgegeben wird, muss noch eine Anpassung in der SQL-DB vorgenommen werden, da WordPress standardmässig der Name bei user_login auch bei user_nicename verwendet, wird hier der Name im SQL geändert, der Name der bei user_login steht, soll nicht der selbe wie bei user_nicename sein, da dieser in den Links vorkommt, somit wird mit phpMyAdmin unter wp_user der Name im Feld user_nicename editiert und mit dem Name des Feldes display_name ersetzt, dies bedeutet auch das man als display_name nicht jener von user_login verwendet.

wp_users _ phpMyAdmin

Weiter sichert das LockDown Plugin vor Angriffe, dieses blockiert IP-Adressen von diesen eine erhöhte Anzahl fehlgeschlagene Logins gemacht wurde.

lockdown_1

Standardmässig lässt WordPress bei fehlerhaften Anmeldeversuche einem nicht im ungewissen, ob man gerade das Passwort für ein existierenden Benutzer eingegeben hat, mit der LockDown Option Mask Login Errors lässt sich verhindern das bei fehlerhaften Anmeldeversuche sich das Passwort nicht auf den Benutzername in der Error Meldung bezieht. Invalid username or incorrect password resultiert unabhängig von falschen Benutzer oder Passwort.

invalid username or incorect password
invalid username or incorrect password
LockDown Option Mask Login Errors
LockDown Option Mask Login Errors

Natürlich wurde hier nicht alles ausgeschöpft was zur Absicherung von WordPress nötig wäre, es sol vielmehr als Arbeitsgrundlage und zur Sensibilisierung dienen, dabei wird ein Blog mit höherem Ranking und guter Bekanntheit die meisten Angriffe abwehren können. Auch spielt eine wichtige rolle wie der Webserver selbst abgesichert ist, und welche WordPress Plugins und Themes installiert sind. Das ein sicheres Passwort verwendet wird braucht an dieser stelle nicht weiter erwähnt zu werden. Zu viele Gimmicks und nicht wirklich benötigte features sollten nicht auf kosten der Sicherheit gehen, auch hier gilt, weniger ist oft mehr.

Ein weiter wichtiger Punkt abschliessend. Halte die WordPress-Installation stehts auf dem neusten Stand. WordPress macht es hier einem besonders einfach. Sicherheitsupdates für den WordPress-Core werden automatisch eingespielt, die Plugins und Themes sollten ebenfalls regelmässig aktualisiert werden.

MySQL Server Backup auf Synology DS

Im folgenden wird in wenigen Schritten beschrieben wie die MySQL Datenbank auf die Synology Diskstation gesichert wird. Das auf dem Linux host gesicherte Wordpress wird anschliessend mit scp auf die DS übertragen.

Auf dem NAS wird der SSH und SFTP Daemon aktiviert.

SSH Aktivieren
SSH Aktivieren
SFTP Aktivieren
SFTP Aktivieren
SFTP Port
SFTP Port

Auf dem Linux host als root mit „su -“ oder „sudo su -“ anmelden und aus dem bash shell die folgenden Dateien zu erzeugen.

Wobei PASSWORD dein MySQL Passwort ist, 10.1.1.2 ist hier die IP der Synology DS, „volume1“ ist in der regel die erste Partition und „backup“ ist unser angelegtes Backup Verzeichnis.

Nun auf dem Linux host ein RSA Schlüsselpaar erzeugen, damit wird beim kopieren mit scp auf die DS kein Passwort verlangt.

Im Verzeichnis /root/.ssh/ wurde nun ein Privater und ein Öffentlicher Schlüssel erzeugt:

Der Öffentliche Schlüsssel id_rsa.pub wird nun auf unsere DS kopiert und im Pfad /root/.ssh/ in die Datei authorized_keys zu liegen kommen, hierbei wird das root Passwort gepromptet.

Fertig! nun wird wenn alles klappt um 00:00 Uhr dein Backup erstellt und automatisch (ohne Passwort Prompt) auf die Diskstation transferiert.

Dieses Howto wurde auf CentOS GNU/Linux gemacht, mit Debian sollten ebenfalls keine Anpassungen nötig sein, andernfalls wäre dein Kommentar mit deiner disto jederzeit willkommen.

Der System crontab liegt in /etc/crontab, Du kannst auch den Befehl crontab -e verwenden oder das durch run-parts angelegte cron.daily Verzeichnis als Batch Folder nehmen.