{

Tobias Scheible
Autor, Referent & IT-Sicherheitsexperte
Sicherheit von WordPress Systemen

Datum: Freitag, 07. MĂ€rz 2014

Autor: Tobias Scheible

Kommentar(e): 1 Kommentare

Kategorie: Aktuelles

Tags: Sicherheit, PHP

WordPress mit Hausmitteln absichern

FĂŒr WordPress gibt es eine große Anzahl an Plugins, um die Sicherheit zu erhöhen. Bekannte Vertreter sind zum Beispiel Better WP Security, WP Security Scan und Limit Login Attempts. Ich habe mir ein paar Gedanken gemacht, wie eine neue WordPress Installation manuell abgesichert werden kann.

WordPress ist ein sehr weit verbreitetes Blog-System, was natĂŒrlich die AttraktivitĂ€t fĂŒr potentielle Angreifer steigert. Die grundsĂ€tzliche Sicherheit des Systems ist hoch, wie eine Studie (PDF) des BSI – Bundesamt fĂŒr Sicherheit in der Informationstechnik – im Juni 2013 ergeben hat. Trotzdem waren im April 2013 viele WordPress Installationen Ziel einer groß angelegten Angriffsaktion.

Dass dieser Angriff so erfolgreich war, liegt daran, dass viele Benutzer das System nicht individuell anpassen. Dadurch sind einem Angreifer viele Parameter bekannt, wie zum Beispiel der Pfad zum Login. Wird dann noch der Benutzernamen admin verwendet, kennt der Angreifer bereits zwei von drei Faktoren fĂŒr einen erfolgreichen Login.

Bei dem oben genannten Angriff wurde genau dies ausgenutzt. Ein Botnetz hat gezielt nach WordPress-Systemen gesucht und es wurden Anmeldeversuche mit Benutzernamen admin durchgefĂŒhrt. Da WordPress keinen Schutz gegen zu oft falsch eingegebene Passwörter bietet, war es nur eine Frage der Zeit, bis die Angreifer sich anmelden konnten.

Daher habe ich mir Gedanken gemacht, wie eine neue WordPress-Installation manuell besser abgesichert werden kann:

SicherheitsschlĂŒssel generieren

WordPress verwendet mehrere SicherheitsschlĂŒssel, um zum Beispiel Werte in Cookies zu schĂŒtzen und als Salt fĂŒr Sessions. Die SicherheitsschlĂŒssel werden in der Konfigurationsdatei wp-config.php, die sich im Hauptverzeichnis befindet, eingetragen. In der Beispiel-Datei von WordPress befinden sich schon die entsprechenden Platzhalter. Damit die SchlĂŒssel nicht selbst generiert werden mĂŒssen, bietet WordPress dafĂŒr einen Dienst an. Das nachfolgende Beispiel zeigt solche SicherheitsschlĂŒssel (nicht verwenden – auf jeden Fall selber generieren):

define('AUTH_KEY', '2fv{),q=+5rHBz[]3aX@J_EK,~nN^H-)y8BV?6!kyVx8:3U');
define('SECURE_AUTH_KEY', 'R+pwJ9~+4i5E3oWJ2P`fcy-O6KXN+&v[5F.Oy2x/');
define('LOGGED_IN_KEY', 'q-T%h/1L9Rl8I=b/ubSiwP?J*ss5)O)F1^8h65ae9f');
define('NONCE_KEY', 'hNlwHx3L`7:X aPia3he?m`H*+)ke5E6%c[ua3s{@[iAl-');
define('AUTH_SALT', '&$VcU1/rneH~sU(?3o<%$Um61+(EY8c7NDQ#g2Ho}^v%h-h^/k&lQLh]#,C/Z}VLw6Zyx1*w}n');

Datenbanktabellen-PrÀfix Àndern

Eine hĂ€ufige Angriffsmethode ist das unerlaubte Einschleusen eines SQL-Befehls – auch SQL-Injection genannt. Wird solch eine LĂŒcke von einem Angreifer gefunden, kann dieser darĂŒber zum Beispiel das Passwort eines Benutzers Ă€ndern. Dieser Angriff gelingt aber nur, da der Tabellennamen wp_users bekannt ist. Um diese AngriffsflĂ€che zu reduzieren, sollte das TabellenprĂ€fix wp_ geĂ€ndert werden. Dazu muss der folgende Eintrag in der wp-config.php angepasst werden:

$table_prefix  = 'wp_';
$table_prefix  = 'beliebigerpraefix_';

Je komplizierter, und damit nicht mehr zu erraten, desto besser. Aber das gilt ja eigentlich fĂŒr alles 😉

HTTPS fĂŒr den Admin-Bereich erzwingen

Der Adminisitrationsbereich wird ĂŒblicherweise unverschlĂŒsselt ĂŒber HTTPS aufgerufen. Das ist besonders bei unsicheren Verbindungen, wie in einem öffentlichen W-LAN, sehr schlecht. Hier kann ein Angreifer (Stichwort ARP-Spoofing) oder ein böswilliger Hotspot-Betreiber den Benutzernamen und das Passwort abfangen. Daher sollte immer per HTTPS auf das Backend zugegriffen werden. In WordPress gibt es eine Funktion, damit die Verwendung von HTTPS fĂŒr den Admin-Bereich erzwungen wird. Dieser Eintrag muss ebenfalls in die wp-config.php und kann direkt unterhalb des Datenbanktabellen-PrĂ€fixes eingetragen werden.

define('FORCE_SSL_ADMIN', true);

Login mit zusÀtzlichem Passwortschutz

Wie oben beschrieben, war das Ziel des Angriffes der Login-Mechanismus. Die einfachste Variante, um den Login zu schĂŒtzen, ist die Verwendung eines zusĂ€tzlichen Passwortschutzes. Dies kann ganz einfach ĂŒber die Standardfunktion des Webservers Apache realisiert werden. Dazu muss im Hauptverzeichnis die Datei .htaccess erstellt werden (normalerweise wird sie nach der Installation automatisch erstellt) und die folgenden EintrĂ€ge hinzugefĂŒgt werden:

AuthName "Login"
AuthType Basic
AuthUserFile /server/pfad/.htpasswd
require valid-user

In einer zusĂ€tzlichen .htaccess-Datei im wp-admin Ordner wird der folgende Eintrag hinzugefĂŒgt:

AuthName "Login"
AuthType Basic
AuthUserFile /server/pfad/.htpasswd
require valid-user

Die .htpasswd-Datei mit dem Benutzernamen und dem Passwort kann zum Beispiel mit einem Generator erstellt werden und sieht dann beispielsweise so aus:

test:$1$WLNhPj@z$bM29xHYjseSZApc1YQ.hU/

Kann kein Passwortschutz per .htaccess eingerichtet werden, sollte zumindest keine Fehlermeldung bei einem fehlerhaften Anmeldeversuch ausgegeben werden. Wird die Fehlermeldung angezeigt, kann ein Angreifer erkennen, ob ein bestimmter Benutzernamen existiert. Die Meldung lÀsst sich durch einen Eintrag in der functions.php des verwendeten Themes deaktivieren:

add_filter('login_errors',create_function('$a', "return null;"));

Außerdem sollte in diesem Fall noch das Plugin Limit Login Attempts installiert werden. Damit kann die Anzahl der möglichen Versuche beschrĂ€nkt werden, womit ein Ausprobieren des Passworts (Stichwort Bruteforce) nicht mehr möglich ist.

WordPress Generator Tag entfernen

Normalerweise steht im HTML-Quellcode einer generierten Seite von WordPress ein Meta-Tag-Eintrag mit der Version von WordPress. Angreifer können anhand dieses Eintrags die Version auslesen. Wenn es eine Ă€ltere, nicht aktualisierte Version von WordPress ist, kann der Angreifer nach bekannten und veröffentlichten SicherheitslĂŒcken fĂŒr diese Version suchen. Daher sollte der Eintrag der Versionsnummer entfernt werden. Dies geschieht ĂŒber einen Eintrag in der functions.php des jeweiligen Themes.

remove_action('wp_head', 'wp_generator');

readme.html löschen

Eine weitere Datei, die noch entfernt werden muss, ist die readme.html. Sie liegt direkt im Hauptverzeichnis einer WordPress-Installation. In dieser Datei steht auch die Versionsnummer. Da die Datei license.txt nicht im Produktiveinsatz benötigt wird, kann sie entfernt werden. In der deutschen Version sollte noch die deutsche Übersetzung der Datei, die liesmich.html, entfernt werden.

Zwar kann immer noch die WordPress-Version herausgefunden werden, z. B. ĂŒber das Vorhandensein von bestimmten Dateien, die in einer speziellen Version hinzugefĂŒgt worden sind, aber zumindest fĂŒr Skriptkiddies ist es ein weiteres Hindernis.

Benutzername und Passwort

Nach einer erfolgreichen Installation sollte ein neuer Benutzer mit Administrations-Zugriffsrechten angelegt werden. Um die Sicherheit zu erhöhen, sollte als Benutzernamen ein individueller Name und nicht „admin“ oder Ă€hnliches verwendet werden. NatĂŒrlich sollte noch ein sicheres Passwort gewĂ€hlt werden. Jetzt muss noch der ursprĂŒngliche Admin-Benutzer gelöscht werden. Damit ist der bekannte Benutzernamen „admin“ nicht mehr vorhanden und die standardmĂ€ĂŸige Benutzer-ID „1“ wird nicht mehr verwendet. Dies reduziert wieder die mögliche AngriffsflĂ€che.

Fazit WordPress Sicherheit

Wurden alle Schritte umgesetzt, nur sichere Passwörter verwendet und werden WordPress und alle Erweiterungen regelmĂ€ĂŸig aktualisiert, sind Standard-Angriffe wie im April keine Gefahr mehr. Hier wird der neue automatisierte Update-Mechanismus der Version 2.7 sicher einige Angriffsszenarien aushebeln. Absolute Sicherheit gibt es zwar nicht, aber als Blog-Betreiber kann man es Angreifern möglichst schwer machen. Denn auch fĂŒr Angreifer gilt, Aufwand und Nutzen mĂŒssen zueinander passen.

Hier gibt es noch weitere Tipps, um WordPress sicherer zu machen:

Sicherheit in WordPress: 10 Schritte zum Schutz des Admin-Bereichs
WordPress mit wenigen Kniffen absichern
Mehr Sicherheit fĂŒr WordPress
Tipps zur Sicherheit von WordPress
Mehr Sicherheit fĂŒr WordPress Software – WordPress sicher machen

  • Artikel teilen:

Über Tobias Scheible

Tobias Scheible

Tobias Scheible arbeitet als wissenschaftlicher Mitarbeiter an der Hochschule Albstadt-Sigmaringen. Dort ist er als Autor und e-Tutor im Masterstudiengang Digitale Forensik tĂ€tig und leite im Bachelorstudiengang IT Security Praktika rund um das Thema Informationssicherheit. DarĂŒber hinaus ist er Mitinitiator des Kompetenzzentrums Cyber Security Lab, welches Forschungsprojekte auf dem Gebiet der IT-Sicherheit koordiniert. ZusĂ€tzlich hĂ€lt er VortrĂ€ge und Workshops zu aktuellen Themen der IT-Sicherheit.

Alle Blog-Artikel Website Facebook Twitter Xing

Kommentare

Sarah

Danke fĂŒr die guten Hausmittelchen 🙂
Bin immer offen fĂŒr sowas und tu mich dennoch sehr schwer mit dem Implementieren… doch du hast das echt gut erklĂ€rt!
Top Artikel, Schicker Blog, was will man mehr ?
GrĂŒĂŸe Sarah

Schreibe einen Kommentar!

Hilfe zum Kommentieren

Um kommentieren zu können, geben sie bitte mindestens ihren Namen und ihre E-Mail-Adresse an. Bitte nutzen Sie die Kommentarfunktion nicht dazu, andere zu beleidigen oder Spam zu verbreiten. Trolle und Spammer sind hier unerwĂŒnscht! Unangemessene Kommentare, die zum Beispiel gegen geltendes Recht verstoßen oder eine GefĂ€hrdung anderer Besucher darstellen, werden gelöscht oder angepasst.

Name: Ihr Name, der oberhalb des Kommentars steht, gerne auch Ihren echten Namen, das erleichtert die Kommunikation fĂŒr alle. Sollte ein Spam-Keyword als Name verwendet werden, kann dieses entfernt oder korrigiert werden.

E-Mail: Ihre E-Mail Adresse dient zur Identifizierung weiterer Kommentare und sie haben die Möglichkeit, ein Avatar-Bild zu verwenden. Dazu mĂŒssen Sie mit Ihrer E-Mail Adresse bei Gravatar angemeldet sein. Die E-Mail Adresse wird natĂŒrlich nicht veröffentlicht und nicht weitergegeben.

Website: Hier können Sie ihren eigenen Blog bzw. ihre eigene Website eintragen, dadurch wird Ihr Name und Ihr Avatar-Bild verlinkt. Werden rein kommerzielle Angebote offensichtlich beworben, setze ich den Link auf nofollow und unangemessene werden einfach entfernt.

Erlaubte HTML-Tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <hr> <big> <small> <sub> <sup> <u>

nach oben