Denial of Service Angriff auf xmlrpc.php

WordPress XMLRPC for Brute-Force-Angriffe schützen

Blogger und System Administratoren ist es bekannt, Brute-Force-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

xmlrpc.php mit Apache 2.4+ schützen

Die vollständige Deaktivierung der WordPress XMLRPC-Schnittstelle bei einem Apache 2.4+ Webserver unter /etc/httpd/conf/httpd.conf:

# Apache 2.4+
<Files xmlrpc.php>
    <RequireAll>
        Require all denied
    </RequireAll>
</Files>

xmlrpc.php mit Apache 2.2 schützen

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

# Apache 2.2
<Files "xmlrpc.php">
    Order Deny,Allow
    Deny from all
</Files>

Danach den Webserver neu starten mit service httpd restart, oder systemctl restart httpd.service.

Die Apache Direktive kann auch in die .htaccess-Datei in der Docroot eingefügt werden.

Die Überprüfung geschieht in dem die Blog-URL mit anstehender xmlrpc.php aufgerufen wird, Beispiel:

https://<dein_blog>/xmlrpc.php

Es wird nun 403 Forbidden ausgegeben.

XMLRPC schützen mit fail2ban

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. Die Installation für CentOS 7 hier.

wget https://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
rpm -ivh epel-release-5-4.noarch.rpm
yum repolist
yum install fail2ban
chkconfig --add fail2ban
chkconfig fail2ban on
service fail2ban start

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

[Definition]
loglevel = 3
logtarget = /var/log/fail2ban.log

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:

[Definition]
failregex = ^<HOST> .*POST .*xmlrpc\.php.*
ignoreregex =

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

[apache-xmlrpc]

enabled = true
port = http,https
filter = apache-xmlrpc
action = iptables[name=xmlrpc, port=http, protocol=tcp]
logpath = /home/www/*/web/logs/access_log
maxretry = 6

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.

 

FortiGate subnet overlapping remapping

Bei einer Site-to-Site-VPN-Konfiguration kann es oft vorkommen, dass die privaten IPv4 Subnet-Adressen an jedem terminierten Ende die selben sind. Das Problem kann durch Remapping der privaten IPv4-Adressen mithilfe von virtuellen IP-Adressen (VIP) gelöst werden.

Durch VIPs können Computer in dessen überlappenden privaten Subnets jeweils einen anderen IP-Adressbereich zugewiesen werden, die Subnets können transparent verwendet werden. Die FortiGate Appliance bildet die VIP-Adressen zu den ursprünglichen Adressen um. Dies bedeutet, wenn PC1 eine Sitzung mit PC2 bei 10.31.101.10 beginnt, leitet FortiGate_2 die Sitzung zu PC2, dieser tatsächliche die IP-Adresse 10.11.101.10 besitzt.

Abbildung zeigt – Finance Netzwerk VIP ist 10.21.101.0/24 und das HR-Netzwerk hat 10.31.101.0/24.

Überlappende Subnetze Beispiel
Überlappende Subnetze Beispiel

Konfiguration einer Route-basierten VPN Lösung:

Eine IPsec Phase 1 und Phase 2 erstellen, wie du es normalerweise für ein Route-basierten VPN tun würdest. In diesem Beispiel wird die resultierende IPsec-Schnittstelle mit IPsec_FGT1_2_FGT2 bezeichnet.

Konfigurieren des virtuellen IP (VIP) Mapping, unter Policy & Objects > Virtual IPs > Create New

New Virtual IP
New Virtual IP

IP Pool für Subnet Remmaping erstellen, unter Objects – IP Pools.

New IP Pool

Konfigurieren einer Outbound Policy auf beiden FortiGate, unter Policy & Objects > IPv4 Policy > Create New, Lasse den Policy Type auf Firewall und die Policy Subtype als Adresse:

Policy outbound
Policy outbound

Konfigurieren der inbound Policy:

Policy inbound
Policy inbound

Konfigurieren der Static Route:

Static Route
Static Route

Wiederhole diesen Vorgang auf beiden FortiGate, FGT1 und FGT2, unter berücksichtigung der entsprechenden Subnets, 10.21.101.0/24 und 10.31.101.0/24.