Tatort Internet: Matrjoschka in Flash

Seite 3: Das dreckige Dutzend

Inhaltsverzeichnis

Also „Zurück auf Los und ziehe keine DMˇ4000 ein!“ – aber ich krieg dich schon noch. Doch zuerst brauch ich einen Kaffee. Als ich meiner Frau bei der Gelegenheit erkläre, dass das mit dem iPhone-Video wohl wieder nichts wird und ich den Rechner wohl noch eine Zeit lang blockieren werde, ernte ich überraschenderweise nur ein „Ja, ja, mach nur – ich seh dich dann morgen früh …“ Na ja, mir soll's recht sein.

Wie ich beim obligatorischen ersten Blick im Hex-Editor am CWS am Anfang erkenne, handelt es sich um eine komprimierte Flash-Datei; abcdump schluckt sie natürlich trotzdem anstandslos. Gleich beim ersten Durchblättern der abcdump-Ausgabe springen mir mehrere pushstring-Befehle ins Auge.

   16    pushstring        "4657530825060000300A00A000
0C03034411080000004302..." // truncated very long string
18 coerce String
20 setlocal1
21 pushstring "4657530825060000300A00..."
23 coerce String
25 setlocal2
...
79 pushstring "4657530825060000300A00..."
81 coerce String
83 setlocal 12

Ganze zwölf Mal wird da also eine ziemlich lange Zeichenkette auf den Stack geschoben. Erst beim zweiten Hinsehen stelle ich fest, dass sich die Strings in den Details weiter hinten doch zumindest geringfügig unterscheiden. Als Nächstes ermittelt der P-Code die Version des aktuellen Flash-Players:

93    getlex            flash.system::Capabilities
95 getproperty version

und unterscheidet dann sogar zwischen einem Browser-Plug-in, wie es Mozilla & Co verwenden

103   pushstring        "PlugIn"
105 ifne L2

und einem ActiveX-Control

192   pushstring        "ActiveX"
194 ifne L8

das auf den Internet Explorer hinweist. Ich glaub, ich weiß schon, wohin das führt. Und richtig – da werden Versionsnummern verglichen. Genau sechs Strings sind ihm genehm:

  1. "WIN 9,0,115,0"
  2. "WIN 9,0,16,0"
  3. "WIN 9,0,28,0"
  4. "WIN 9,0,45,0"
  5. "WIN 9,0,47,0"
  6. "WIN 9,0,64,0"

Sechs Flash-Versionen auf zwei Plattformen macht zwölf!

Findet dieser Master-Exploit dann eine dieser zwölf Kombinationen vor, entpackt er den String, indem er ihn als hexadezimal-kodierte Byte-Folge interpretiert und lädt das dann erneut via loader.loadBytes() als Flash-Datei. Ich fasse es nicht: Eine dynamisch dekodierte und dann geladene Flash-Datei lädt erneut eine dynamisch erstellte Flash-Datei aus einem Repertoire von zwölf Strings. Aber es ist wahr. Als ich den ersten String in meinen Hex-Editor kopiere, erkenne ich deutlich die Struktur einer diesmal unkomprimierten Flash-Datei.

Das nenn’ ich professionelle Arbeit! Die verschiedenen Versionen der Flash-Umgebung unterscheiden sich so sehr, dass Exploits, die sich auf bestimmte Adressen verlassen, den Player einfach nur zum Absturz bringen. Damit ist dem Angreifer nicht gedient. Das heißt, er muss entweder sehr generischen Shellcode schreiben – was ziemlich schwierig ist. Oder er legt sich eben ein Arsenal von sehr speziellen Exploits zu und wählt jeweils den zum aktuellen Player passenden. Unser kleiner Bastard hier hat ganz offensichtlich den einfacheren Weg gewählt und trägt ein ganzes Waffenarsensal mit sich herum.

Die Uhr ist schon nach eins und ich sollte langsam ins Bett – aber wenigstens einen der Exploits schau ich mir noch an. Also starte ich IDA Pro und werfe den Disassembler an.

Gleich am Anfang findet sich da ein kleiner Decryptor, der den Rest des Codes entpacken soll. Der Befehl call $+5 schiebt die Rücksprungadresse 0xF0 auf den Stack und springt genau auf den nächsten Befehl. Der holt sie sich mit pop EBP ins Base-Pointer-Register und schiebt den Zeiger danach noch 20 Bytes weiter. Damit zeigt er genau auf den Anfang eines verschlüsselten Datenblocks. Das Register ECX erhält mit 395 die Zahl der auszupackenden Bytes und AL den Wert mit 0x3D für die XOR-Maske.

Das ist für die eingebauten Dekodierfunktionen von IDA Pro ein Kinderspiel, und wenige Momente später hab ich den Code ausgepackt, abgespeichert, erneut geladen und disassembliert.

Und siehe da – der Shellcode sieht letztlich fast genau so aus, wie der von gestern Nacht. Letztlich lädt er eine Datei vom Web-Server des Angreifers nach und startet diese, um das System unter seine Kontrolle zu bringen.

Eigentlich hätte ich mir ja denken können, dass es keine gute Idee ist, mich mal eben durch die Suchmaschinen-Ergebnisse eines so heißen Themas zu klicken. Denn längst haben die kriminellen Banden ihre eigenen Suchmaschinen-Experten, die kontinuierlich Google-Trends beobachten. Kocht ein neues Thema hoch, benutzen sie ihre Legionen aus kompromittierten Systemen, um die eigenen Seiten mit den Web-Exploits in den Suchergebnissen nach oben zu pushen. Dass sie damit beim Kapern aktueller Themen derart erfolgreich sind, überrascht mich doch.

Und dass die Malware-Autoren jetzt die von herkömmlichen Win32-Schädlingen bekannten Verschleierungsstrategien in virtuellen Umgebungen wie der von Flash umsetzen, ist eine schlechte Nachricht für die Antiviren-Hersteller. Denn letztlich bedeutet es, dass sie zukünftig auch noch die Laufzeitumgebungen von JavaScript, dem .NET-Framework und Adobe Action Script emulieren müssen, um Schädlinge zu erkennen. Ach, die Welt ist schlecht – höchste Zeit, ins Bett zu gehen und mir die Bettdecke über den Kopf zu ziehen. (ju)

Die Serie "Tatort Internet" wurde ursprünglich im c't magazin ab Heft 13/2010 veröffentlicht. In den Artikeln können Sie Experten über die Schulter schauen, wie sie verdächtige Dateien analysieren und Schädlingen auf die Schliche kommen. Alle in der Serie vorgestellten Malware-Samples stammen aus echten Angriffen und wurden unter anderem mit den hier vorgestellten Methoden entlarvt. Die Geschichten "drumherum" wurden durch reale Vorkommnisse inspiriert ;-)

Der Autor dieser Folge, Sergei Shevchenko, kann mehr als 10 Jahre praktische Erfahrung in der Analyse von Schädlingen vorweisen. Er ist einer der Autoren des automatisierten Bedrohungsanalysesystems ThreatExpert , von dem unter anderem auch die Verhaltenserkennung Threatfire abstammt. Sergei arbeitet als „Leading Malware Analyst“ bei PC Tools in Sydney, Australien. Mit dieser Folge ist das vorläufige Ende der Serie erreicht. Wenn es ausreichend Nachfrage geben sollte, lassen wir uns jedoch vielleicht zu einer zweiten Staffel überreden ;-)

Übersicht aller Folgen:

  1. Alarm beim Pizzadienst
  2. Zeig mir das Bild vom Tod
  3. PDF mit Zeitbombe
  4. Angriff der Killervideos
  5. Matrjoschka in Flash