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.

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.

Installation fail2ban

Brute-Force Attacken blockieren mit fail2ban

fail2ban
fail2ban

Fail2ban scannt Log-Dateien (zB. /var/log/apache/error_log) und verbietet IPs, die verwundbare anfragen enthalten und verhindert die suche nach Exploits, um Systeme zu infizieren und zu kompromittieren versuchen. Im Allgemeinen wird fail2ban verwendet um Firewall-Regeln zu aktualisieren, um die Herkunfts IP-Adressen für eine bestimmte Zeitdauer abzulehnen, wobei andere Dienste ihre Funktion wie zB. der Mail Transport Agent weiterhin Emails verarbeiten können.

Fail2Ban ist freie Software unter GNU General Public License Version 2 und kommt Out-of-the-Box, der Filter ist für verschiedene Dienste wie Apache, Bind, Postfix, SSH etc. einsetzbar. fail2ban ist in der Lage, die Rate der falsch-Authentifizierungen zu reduzieren, versucht aber nicht das Risiko schwacher Authentifizierung zu beseitigen.

Als erstes wird das Packet aus dem Fedora repo installiert und gleich gestartet, hier auf einem CentOS 5.

Falls nicht schon vorhanden die Log-Datei erstellen:

Nun editieren wir die fail2ban Konfiguration:

Hier in diesem Beispiel der Bind Daemon:

service named restart

Im  security-Log von named werden nun ggf. abgelehnte anfragen protokolliert.

Die durch fail2ban eingefügten iptables ketten ausgeben.