Die xmlrpc.PHP-Datei- und Site-Sicherheit

In der header.php -Vorlage der meisten WordPress-Themes ist ein wichtiger Hook namens wp_head enthalten. Dieser essentielle Hook ermöglicht es WordPress-Funktionen, Inhalte im <head> -Bereich Ihrer Webseiten an den Browser auszugeben1.

In neueren Versionen von WordPress beispielsweise wp_head() ermöglicht WordPress die Ausgabe der folgenden drei Zeilen an <head> Ihres Themas:

<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://digwp.com/xmlrpc.php?rsd" /><link rel="wlwmanifest" type="application/wlwmanifest+xml" href="https://digwp.com/wp-includes/wlwmanifest.xml" /> <link rel='index' title='Digging into WordPress' href='https://digwp.com/' /><meta name="generator" content="WordPress 2.8" />

Wie Sie sehen können, werden viele Dinge hinzugefügt, einschließlich Feed-Links, XML-RPC- und WLW-Links und einigen anderen Elementen. Während es bei all diesen Einschlüssen viel zu besprechen gibt, geht es hier hauptsächlich um den Link zur xmlrpc.php -Datei. WordPress enthält diesen Link für seine XML-RPC-Schnittstelle, mit der Remote-Anwendungen mit WordPress kommunizieren und interagieren können.

Was bedeutet xmlrpc.php tun? Brauche ich es?

Während die Dokumentation zu WordPress ‚XML-RPC ziemlich dünn ist, können wir ein teilweises Verständnis der Funktionsweise von xmlrpc.php erhalten, indem wir den Code in der Datei selbst durchgehen. Keine Sorge, wir werden Sie hier nicht langweilen, aber es genügt zu sagen, dass xmlrpc.php für Dinge wie erforderlich ist:

  • Direktes Posten in Ihrem Blog mit TextMate, Flock und anderen Clients
  • Direktes Posten in Ihrem Blog mit Eudora, Thunderbird und anderen Apps
  • Empfangen von Pingbacks und Trackbacks zu Ihrer Website von anderen Blogs

Nicht jeder nutzt die Remote-Posting-Funktionalität, die ihnen in WordPress zur Verfügung steht, aber ich denke, dass viele Blogs verwendung des XML-RPC-Protokolls für die Pingback- und Trackback-Funktionalität.

Macht den xmlrpc.PHP-Datei ein Sicherheitsrisiko darstellen?

Einige von Ihnen erinnern sich vielleicht an das Sicherheitsrisiko, das mit dem xmlrpc.php -Skript in den guten alten Tagen von WordPress 2.1.2 verbunden war, wobei:

WordPress kann es einem remote authentifizierten Angreifer ermöglichen, Sicherheitsbeschränkungen zu umgehen, die durch eine unsachgemäße Validierung durch das xmlrpc-Skript verursacht werden. Ein entfernter Angreifer mit Beitragsberechtigungen kann diese Sicherheitsanfälligkeit ausnutzen, um Beiträge auf der Website zu veröffentlichen.

Diese Sicherheitsanfälligkeit wurde in Version 2.1.3 umgehend behoben, jedoch kurz darauf (in Version 2.3.1) ein weiteres Sicherheitsproblem wurde entdeckt, als festgestellt wurde, dass die XML-RPC-Implementierung Informationen verliert.

Obwohl dies in Version 2.3.2 behoben wurde, führten die Sicherheitsbedenken im Zusammenhang mit dem XML-RPC-Protokoll schließlich dazu, dass die WordPress-Entwickler den Remotezugriff in Version 2.6 standardmäßig deaktivierten. Die xmlrpc.php -Datei ist immer noch im Dokument <head> enthalten (vermutlich aus Gründen von Pingbacks und Trackbacks), aber die Remotezugriffsfunktionalität ist erst dann betriebsbereit, wenn sie explizit aktiviert2.

Weitere Informationen zum xmlrpc finden Sie in diesen verwandten Beiträgen bei Perishable Press.PHP-Datei- und Site-Sicherheit:

  • Schutz für WordPress Pingback Vulnerability
  • Schutz vor WordPress Brute Force Amplification Attack

Sicherheitstipps für den xmlrpc Ihrer Site.php-Datei

Zum Zeitpunkt des Schreibens dieses Artikels sind keine Sicherheitslücken im Zusammenhang mit dem XML-RPC-Protokoll von WordPress bekannt. Trotzdem gab es in der Vergangenheit Sicherheitsprobleme mit dem Skript xmlrpc.php, und es könnte sicherlich sowohl jetzt als auch in Zukunft neue Probleme geben. Um auf der sicheren Seite zu sein, finden Sie hier einige verschiedene Strategien und Tipps, um maximale Sicherheit für Ihr Blog zu gewährleisten.

Wenn Sie es nicht benötigen, löschen Sie es

Der sicherste Weg, potenzielle Sicherheitslücken zu beseitigen, besteht darin, das betreffende Skript einfach zu entfernen. Wenn Sie kein Remote-Posting, Pingbacks oder Trackbacks benötigen, ist es möglicherweise am einfachsten, die xmlrpc.php -Datei einfach von Ihrem Server zu entfernen. Anstatt es tatsächlich zu löschen, möchten Sie es vielleicht einfach in etwas Rätselhaftes umbenennen. So oder so, wenn das Skript einem Angreifer nicht zur Verfügung steht, ist es schwierig, es auszunutzen.

Update: Wenn Sie die xmlrpc.php -Datei aus Ihrer WordPress-Installation entfernen (oder umbenennen), sollten Sie auch die im nächsten Abschnitt beschriebene Funktion implementieren, um eine Lawine von 404-Fehlern zu vermeiden (weitere Erläuterungen finden Sie in diesem Kommentar).

Entfernen Sie die Links zu xmlrpc.php und wlwmanifest.xml

Wenn Sie alternativ keine Fernzugriffs- oder Pingback-Funktionalität benötigen, können Sie es vorziehen, einfach die zugehörigen Header-Links zu entfernen, anstatt Kerndateien von Ihrem Server zu löschen. Dies lässt sich leicht mit der folgenden Funktion in der functions.php -Datei Ihres aktiven Themas erreichen:

function removeHeadLinks() {remove_action('wp_head', 'rsd_link');remove_action('wp_head', 'wlwmanifest_link');}add_action('init', 'removeHeadLinks');

Dadurch wird verhindert, dass diese beiden Dateien im Header verknüpft werden, die Dateien selbst bleiben jedoch auf Ihrem Server verfügbar. Stellen Sie auf jeden Fall sicher, dass die standardmäßige Deaktivierung der Remoteveröffentlichung wirksam wird, wenn Sie diese Methode implementieren.

Deaktivieren Sie die Remote-Publishing-Funktionalität

Wenn Sie keine Remote-Veröffentlichung durchführen, aber dennoch Pingbacks und Trackbacks erhalten möchten, befolgen Sie den Rat von WordPress und lassen Sie die Remote-Zugriffsfunktion standardmäßig deaktiviert. Dieser Schritt allein scheint eine großartige Möglichkeit zu sein, die Sicherheit Ihres Blogs zu verbessern. Die Datei ist weiterhin auf Ihrem Server verfügbar, aber Angreifer können viel weniger damit anfangen.

Böswillige xmlrpc verhindern.php directory scanning

Für diejenigen unter Ihnen, die Ihre Serverzugriffs- und Fehlerprotokolle sorgfältig im Auge behalten, haben Sie wahrscheinlich in letzter Zeit einen Anstieg der Anzahl bösartiger xmlrpc.php Verzeichnisscans festgestellt. Aus irgendeinem Grund sind die Bösewichte plötzlich sehr an xmlrpc.php -Dateien interessiert und scannen jedes Verzeichnis, in das sie ihre Bots bringen können, um sie zu finden. Ich habe in letzter Zeit Tonnen dieser Art von Aktivität gesehen:

http://domain.tld/2009/xmlrpc.phphttp://domain.tld/2009/06/xmlrpc.phphttp://domain.tld/2009/06/01/xmlrpc.phphttp://domain.tld/2009/06/01/permalink/xmlrpc.phphttp://domain.tld/2009/06/02/permalink/xmlrpc.phphttp://domain.tld/2009/06/03/permalink/xmlrpc.php...

Unabhängig davon, ob die Angreifer ihr Ziel lokalisieren oder nicht, verbraucht diese Art von Verhalten Systemressourcen, verbraucht Bandbreite und verhindert, dass Ihre Site mit maximaler Kapazität betrieben wird. Um zu verhindern, dass dieses bösartige Verhalten Ihre Website beschädigt, habe ich die folgende HTAccess-Lösung entwickelt:

<IfModule mod_alias.c>RedirectMatch 301 /(.*)/xmlrpc\.php$ http://domain.tld/xmlrpc.php</IfModule>

Wenn diese einfache Direktive in der für das Web zugänglichen Root-HTAccess-Datei für Ihre Site platziert wird, werden alle Anforderungen für die xmlrpc.php -Datei Ihres Blogs an die eigentliche Datei umgeleitet. Ich benutze diese Methode seit einigen Wochen bei Perishable Press und habe dadurch Tausende von fehlgeleiteten Anfragen eliminiert.

Verlassen Sie den xmlrpc.php-Datei, aber verhindern Sie den Zugriff darauf

Last but not least ist eine einfache Methode, mit der Sie die Datei auf Ihrem Server belassen, aber den Zugriff darauf verhindern können. Perfekt, wenn Sie das Skript nicht benötigen und so faul wie möglich sein möchten, um es sicher zu halten (denken Sie an keine Wartung). Fügen Sie einfach den folgenden Code in Ihre Root-HTAccess-Datei ein und fertig:

<IfModule mod_alias.c>RedirectMatch 403 /(.*)/xmlrpc\.php$</IfModule>

Anmerkungen

  • 1 Oder irgendwo befindet sich der wp_head() -Hook.
  • 2 Um diese Funktion zu aktivieren, gehen Sie zu: Einstellungen ▸ Schreiben ▸ Remote Publishing

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.