Anti-Reverse-Technologie in JavaScript

Vor kurzem sind wir auf eine äußerst interessante verdächtige Webpage gestoßen. In den HTML-Text der Originalpage war Schadcode integriert, der eine selbstständige HTML-Page darstellte. Das wiederum bedeutet, dass die Autoren dieses Codes den HTML-Standard verletzt und einen zusätzlichen Containereingefügt haben.

Erstaunlicherweise haben die Browser (wir haben diesbezüglich Internet Explorer, Firefox und Opera getestet) keinerlei Probleme, diese inkorrekte Page zu verarbeiten. Doch wer erwartet andererseits auch von Hackern, dass sie sich an geltende Standards halten?

Doch darum geht’s hier eigentlich gar nicht. Uns interessiert vielmehr das Script, das die Hacker in die Webpage integriert haben. Das Script ist natürlich so beschaffen, das die Analyse so weit wie möglich erschwert wird, und zwar unter Einsatz einer Methode zur Obfuskation von JavaScript.

Das Script selbst sieht in etwa so aus:

art_pic1

Hier gibt es eigentlich keine besonderen Überraschungen – die Mehrzahl solcher Scripts kann entschlüsselt werden, ohne dass alle Schritte zur Manipulation des Codes analysiert werden müssen. Man muss lediglich den Teil des Codes finden, der die Original-Webpage ausgibt, um die Payload zu starten. In diesem Fall ist es die Funktion document.write():

art_pic4

Modifiziert man diese, so erscheint der entschlüsselte Code für die Payload. Man ändert zu diesem Zweck document.write(P7E87DE2) in textarea1.innerHTML=P7E87DE2, wobei textarea1 der HTML textarea Container auf der Kopie der infizierten Page ist, die wir eigens auf einer lokalen Festplatte erstellt haben. Nun wir sichtbar, was das Script im Feld textarea bewirkt hat und es erschein das Folgende:

art_pic5

Es scheint, als würde das Script rein gar nichts ausgeben, doch der erste Eindruck täuscht. Guckt man sich das Script genauer an, so stößt man auf den folgenden String:

art_pic2

Was hat das zu bedeuten? Ganz einfach: Diese Funktion erhält ihren eigenen Code und verwandelt ihn in einen „Key“-Text-String, der sich aus Buchstaben und Zahlen zusammensetzt. Innerhalb der Funktion wird der String dazu verwendet, die Payload zu erzeugen, d.h. also, dass die Eingabe in das Textfeld vom Körper der Funktion selbst abhängig ist!

Daraus folgt nun, dass eine leichte Modifikation des Codes das erzeugte Ergebnis vollkommen verändert und kompletter Nonsens dabei heraus kommen kann – wie bei unserem ersten Versuch. Es handelt sich hier um eine Art Schutzmechanismus vor Modifizierung der JavaScript-Funktion. Etwas Derartiges ist mir in JavaScript bisher noch nicht untergekommen – ausgesprochen clever.

Doch diese Beschränkung lässt sich ganz einfach umgehen, indem man den gleichen String außerhalb der Funktion erhält und dem Ergebnis die Variable q2854da60 zuweist, die im Key-String enthalten sein sollte.

Ist man nun Virenanalytiker und versucht herauszukriegen, was sich innerhalb des verschlüsselten Codes verbirgt, kann es passieren dass sich in dem Moment, in dem man eine korrekt gebaute Page öffnet, um an die versteckten Inhalte des Scripts zu gelangen, der Browser aufhängt. Ich gehe jede Wette ein, dass genau in diesem Moment der Computer infiziert wird.

Die von Analysten innerhalb des Tags &lttextarea&gt&lt/textarea&gt verwendete Konstruktion ist nicht nur auf die Infizierung gewöhnlicher Anwendercomputer ausgerichtet, sondern auch auf die Infizierung des Computers desjenigen Virenanalytikers, der versucht, an den Payload-Code zu kommen, indem er ihn in textarea ausgibt! Die Konstruktion sieht folgendermaßen aus:

art_pic3

Wird der Code also innerhalb des textarea-Containers platziert, schließt der Code den Tag textarea und fügt einen iframe-Container hinzu, mit Hilfe dessen der Browser ein externes Script lädt, das wiederum einen Trojaner mit Exploit enthält, der das System infiziert.

Dieses Beispiel zeigt sehr deutlich, wie Virenschreiber sich gegen Antivirus-Experten zur Wehr setzen, die versuchen gewöhnliche User zu schützen. Begeht der Virenanalytiker nur den geringsten Fehler, so wird der eigene Computer infiziert. Aber auch gerade deswegen mag ich meinen Job so, denn mir wird immer wieder gezeigt, dass man sich einfach keine Fehler erlauben kann.

Ähnliche Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.