Schlagwort-Archive: fail2ban

Fail2ban ist ein in Python geschriebenes Intrusion Prevention System, das auf allen POSIX-Betriebssystemen läuft, die ein manipulierbares Paketfiltersystem oder eine Firewall besitzen.

WordPress vor Brute-Force Attacken schützen

WordPress Server vor Brute-Force Login versuche durch fail2ban schützen.

WordPress Schutz bietet sich durch mehrere Methoden an, neben LockDown Plugins, die IP-Adressen und Zeitstempel jedes fehlgeschlagenen Anmeldeversuchs aufzeichnen und blockieren, wird mit fail2ban die Kernel Firewall gesteuert, und damit der host für eine vorgegebene Zeit gesperrt.

  Zur Installation von fail2ban auf CentOS 7 muss das EPEL Repository hinzugefügt werden:

Die Installation hier wie folgt als root, es wird eine Standard Konfiguration bereitgestellt, und erfordert keine weiteren Anpassungen:

Nachdem fail2ban auf dem Server ist, sollen die Apache access_log Dateien nach Anmeldeversuche untersucht werden.

Damit fail2ban weiss nach welchen parser in der Logdatei gesucht werden soll, wird ein Filter erzeugt, durch editieren mit vim oder anderen bevorzugten Editor, erstellen wir die Filter Datei mit vi /etc/fail2ban/filter.d/wp-auth.conf:

Die Hauptkonfiguration von fail2ban befindet sich in der Datei /etc/fail2ban/jail.conf, diese kann kopiert werden als jail.local, oder es genügt nur die zusätzliche Filter Einstellung einzutragen, die Konfiguration hinzufügen mit vi /etc/fail2ban/jail.local

Nach 6 Anmeldeversuche (maxretry) wird für 30 min. blockiert.

Bevor fail2ban genutzt wird, ist ein blick in /etc/fail2ban/jail.conf gegeben, unter der Sektion [INCLUDES] sind die Pfade der eingesetzten Linux Distribution definiert, bei before = paths-distro.conf, wir verwenden bei CentOS7 die Datei /etc/fail2ban/paths-fedora.conf :

Die Datei paths-fedora.conf   kopieren zu paths-centos.conf. Es werden alle Logs unter /home/web/*/logs ausgelesen, die Pfade zu den Apache Logs ggf. anpassen:

Nun fail2ban neu starten um den Filter zu aktivieren.

fail2ban Status überprüfen wie folgt.

Der iptables Status des Filters in der Kette ausgeben.

Die iptables Ausgabe des Filter AuthFailures in etwa viel folgt.

Hat man sich selber durch zu viel Fehlversuche und Tests ausgesperrt, kann man sich mit folgendem Command wieder entsperren.

  Der vorteil dieser Methode ist es, durch fail2ban wird der host und alle Dienste blockiert, der Bot wird in der regel zur nächsten Webseite gehen, um die Attacken fortzusetzen, auch ssh und ftp anfragen gehen ins leere, und ICMP anfragen bleiben für die IP-Adresse unbeantwortet.

Schütze dein WordPress vor unerwünschten Login Versuche

Botnet greifen derzeit WordPress-Blogs weltweit an

 

Der Angriff selbst ist dabei denkbar einfach, es wird versucht, sich mit „admin“ einzuloggen. Um das Passwort herauszufinden, wird schlichtweg eine entsprechende Vorlage aus tausenden Einträgen sehr schnell abgearbeitet. Es kommt deshalb bei den betroffenen Blogs in der Folge zu einer massiv erhöhten Anzahl von Login-Versuchen – „Brute Force Attack“. Was die Angriffswelle in diesem Fall so problematisch macht, ist die riesen Menge an infizierten PCs, die zum Einsatz kommt.

Gemäss Experten geht es am Ende darum, aus den Servern ein neues Botnet aufzubauen. Das wäre dann um ein Vielfaches mächtiger als das jetzige, weil die Server beispielsweise eine wesentlich bessere Internetanbindung haben als infizierte PCs.

Die wichtigsten Massnahmen um ein WordPress-Blog zu schützen.

Den Account „admin“ nach Möglichkeit ganz vermeiden. Er ist bei WordPress-Blogs so verbreitet, dass er – so wie auch in diesem Fall – als Hebel für den Angriff genutzt wird. In diesem Blog wird ebenfalls aufgezeigt, wie man den „admin“-Loginname ändert.

Eine weitere Möglichkeit ist es, den Admin-Bereich von WordPress selbst mit einem Passwort zu schützen. Ohne dieses „Master-Passwort“ kommt man gar nicht erst auf die Login-Seite fürs back-end. Das kann gerade bei Brute-Force-Attacken sehr sinnvoll sein, da der automatische Angriff sehr früh abgefangen wird und den Server dadurch weniger belastet. Auch sollte das MySQL front-end nicht über „phpMyAdmin“ oder „MyAdmin“ in der URL abrufbar sein, hier sollte ein Apache Alias oder ein Symlink, z.B. „db_manager“ angelegt werden, damit ist man aus der Schusslinie von Brute-Force-Attacken, zusätzlich schützt auch ein htaccess-Passwort.

Noch effizienter und den Server nicht belastend, wirkt sich das abfangen der Angriffe durch den Einsatz von fail2ban aus.

 

Dazu wird fail2ban installiert, hier bei CentOS 5.x.

Nach der Installation wird die Filter Definition für WordPress-„wp-login.php“ erstellt.

vi /etc/fail2ban/filter.d/wp-auth.conf

Und nun die jail-Konfiguration hinzufügen.

vi /etc/fail2ban/jail.conf

Die Änderungen aktivieren mit service fail2ban restart

Es wird nun die Brute Force Attacke nach 6 fehlerhaften Login-Versuche, den Zugang für eine Stunde von der Firewall blockiert, geht die Attacke nach einer Stunde weiter, beginnt die Blockierung erneut.

Denial of Service Angriff auf xmlrpc.php

Blogger und System Administratoren ist es bekannt, Bruteforce-Angriffe auf den Admin-Bereich sind sich die meisten schon gewohnt und behelfen sich mit Security-Plugins oder durch Restriktionen in der .htaccess Datei. Dabei sollte man die XMLRPC-Schnittstelle nicht ausser acht lassen, die zwei Hauptfunktionen ermöglicht: Pingback-API ermöglicht eine Vernetzung zwischen den Blogs und dient gleichzeitig als Schnittstelle, um WordPress über externe Programme verwalten zu können.

 

Aufgrund ihres Funktionsumfangs ist xmlrpc.php nicht nur beliebt bei den Blogger, sondern stellt auch für Angreifer ein attraktives Ziel dar, Angreifer fokussieren ihre Attacken daher zunehmend auf xmlrpc.php. Dabei kann ein DDOS-Angriff durch eine Vielzahl an Anfragen pro Sekunde den Server zur Überlastung bringen, oder durch hohe Datentraffic die dabei entsteht, das Netzwerk zum erliegen bringen.

Denial of Service Datatraffic
Denial of Service Datatraffic

Die vollständige Deaktivierung der WordPress XMLRPC-Schnittstelle geschieht über functions.php:

Wer die Deaktivierung über den Apache Webserver vornehmen will, kann dies in der /etc/httpd/conf/httpd.conf (Red Hat), bei debian /etc/apache2/apache2.conf vornehmen:

Danach den Webserver neu starten mit service httpd restart, die Überprüfung geschieht in dem die Blog-URL mit anstehender xmlrpc.php aufgerufen wird, Beispiel:

Es wird nun 403 Forbidden ausgegeben.

Wer die XMLRPC-Schnittstelle nutzen möchte, ohne auf eine Schutzmassnahme verzichten zu müssen, für den eignet sich fail2ban, das Tool untersucht und filtert Attacken aus dem Apache Protokoll und blockiert die IP-Adresse des angreifenden Host für einige Zeit, die dauer der Blockierung kann bestimmt werden, fail2ban steuert die Kernel-Firewall, in dem iptables angewiesen wird die Angreifer IP zu blockieren (DROP) und verhindert so das keine schädliche Traffic und Systemauslastung entsteht. fail2ban verhindert nicht nur das der Angreifer kein Zugriff auf die xmlrpc.php hat, vielmehr wird der Host ganz blockiert und der POST durch DROP ins leere läuft, dadurch werden auch andere mögliche Attacken verhindert, was bei den zuvor geschilderten Schutzmassnahmen nicht zutrifft.

Die Installation von fail2ban auf CentOS 5.x (Red Hat) läuft wie folgt:

Nun die fail2ban Konfiguration für das logging vornehmen mit vi /etc/fail2ban/fail2ban.conf

Die Filter Definition geschieht mit dem erstellen einer neuen Datei unter /etc/fail2ban//filter.d/apache-xmlrpc.conf und fügt dabei folgende Zeilen ein:

In der Konfigurationsdatei jail.conf den Filter unten am Dateiende einfügen, vi /etc/fail2ban/jail.conf

Nun die Änderungen aktivieren mit service fail2ban restart

Überprüfen wie fail2ban arbeitet, lässt sich anhand der Logdatei ermitteln mit tail -f /var/log/fail2ban.log, falls bereits DDOS-Angriffe stattgefunden haben, wird die Eingabe iptables -vnL | grep fail2ban die Source-IP der geblockten Hosts ausgeben.