Tatort Internet: Zeig mir das Bild vom Tod

Seite 3: Zugabe

Inhaltsverzeichnis

Mein Instinkt sagt mir, dass da noch mehr zu holen sein muss. Dabei fällt mir ein, dass Shellcode sehr häufig kodiert ist – zum einen um verdächtigen Code zu verbergen, zum anderen aus praktischen Gründen. So kann man in vielen Fällen bestimmte Zeichen nicht verwenden, etwa das Null-Zeichen, das das Ende eines Strings signalisiert und damit den Rest des Codes abschneidet. Andererseits enthalten viele Befehlssequenzen beziehungsweise Speicheradressen den Wert 0. Als Workaround verknüpft man seinen Code etwa via XOR zeichenweise mit einem bestimmten Wert und packt eine passende Dekodier-Routine davor, die das wieder rückgängig macht. Dabei muss man nur ein Zeichen verwenden, das im Code nicht vorkommt, weil es sonst wieder eine Null ergäbe.

Jetzt könnte ich mich zwar auf die Suche nach diesen Dekodierschleifen machen. Doch diesmal ziehe ich die Brute-Force-Keule dem Heuristik-Florett vor, lade das komplette Dokument in den Speicher und probiere einfach alle Byte-Werte systematisch durch. Nach jedem Durchlauf schaue ich erneut nach, ob sich jetzt eine PE- oder OLE-Signatur findet. Das dauert selbst bei dieser Datei mit knapp einem MByte nicht länger als eine Minute.

Bingo! Mit „scan brute“ spuckt mir mein Scanner gleich vier Dateien aus: eine eingebettete OLE-Datei und drei PE-Files. Alle vier waren via XOR mit 0x85 kodiert. Bei der OLE-Datei handelt es sich um die „Celebrities Without Makeup“, die ich schon vorher via Procmon zu Gesicht bekommen hatte. Und als ich die PE-Dateien bei Virustotal hochlade, erhalte ich prompt einige Trojaner- beziehungsweise Downloader Erkennungen.

Damit bin ich mit meiner Analyse fast fertig. Allerdings würde ich gern noch etwas besser verstehen, was der Shellcode eigentlich macht. Normalerweise befindet sich der FS:30-Code ziemlich am Anfang. Das wäre also bei 0x506e. Kurz davor, bei 0x5004 zeigt DisView einen typischen Funktionsprolog:

sub esp, 00000120h  
mov edi, esp

Nach der Umwandlung in eine EXE-Datei kann man den Shellcode komfortabel im Debugger ausführen.

Den nehme ich jetzt einfach mal als Start des Codes an. Doch eine statische Analyse des Assembler-Codes ist mir zu mühselig. Selbst mit einem richtig guten Disassembler wie IDA Pro ist das wegen der dynamisch geladenen Import-Namen und selbstmodifizierender Codeteile kein reines Vergnügen. Schöner wäre es, wenn ich den Code gleich live im Debugger beobachten könnte. Moment mal – ich hatte da doch mal ein Tool geschrieben, das Shellcode mit einer funktionierenden EXE-Hülle versieht. Da müsste man doch eigentlich nur…

Kurze Zeit später baut mir MalHost-Setup aus dem Shellcode ab 0x5004 die EXE-Datei evil.exe, die ich direkt starten kann. Damit das Teil dann nicht gleich unkontrolliert losrennt, lasse ich MalHost-Setup über den Parameter wait die ersten zwei Bytes noch mit 0xEB 0xFE überschreiben. In der Intel-Maschinensprache stehen die für

jmp eip 

also einen Sprung auf den Inhalt des Instruction Pointers eip, was eine kompakte Endlossschleife erzeugt. Das lässt mir genug Zeit, nach dem Start noch einen Kaffee zu holen. Soll er ruhig ein paar Runden drehen.

Dann kommt OllyDbg zum Einsatz. Mit File/Attach hänge ich mich mit dem Debugger an den Prozess evil.exe und lande nach Run/Pause (F9/F12) auch prompt auf meiner Endlosschleife. Um den Code zu untersuchen, muss ich ihn wieder in den Originalzustand zurückpatchen. Das geht schnell via rechte Maustaste und „Follow in Dump/Selection“. CTRL-E für den Edit-Modus und schon werden aus 0xEBFE die Original-Bytes 0x81EC; im Code-Fenster des Debuggers erscheint wieder der bekannte Funktionsprolog.

Ein Trojaner im Selbstfindungsprozess

Jetzt kann es losgehen. Im Live-Debugging gibt der Code seine Geheimnisse schnell preis. So verbirgt sich hinter dem call [ebp+4] bei 0x50ae der dynamische Import von GetFileSize. Der Shellcode durchläuft hier eine Art Selbstfindungsprozess: In einer Schleife probiert er alle File-Handles durch, bis er eines findet, das mit einer Datei der Größe 968.192 Bytes verbunden ist – also exakt der der Powerpoint-Datei. Danach springt er an bestimmte Stellen dieser Datei, entpackt die dort eingebetteten Programme, schreibt sie auf die Platte und startet sie.

Mission erfüllt! Damit gebe ich mich für diesmal zufrieden. Zwar musste ich letztlich eine komplette Scan-Suite schreiben, um dieser Powerpoint-Datei ihre Geheimnisse zu entlocken. Doch ich bin mir sicher, dass mir die noch gute Dienste leisten wird. Denn Unrat im Office-Format gibt es wie Sand am Meer.
Den Bedarf für bessere Tools zur Analyse von Office-Dateien hat übrigens auch Microsoft erkannt und kurze Zeit später das Office Visualization Tool (OffVis) zur öffentlichen Benutzung freigegeben. Es analysiert die Dateistruktur und gibt dabei auch Hinweise auf potenzielle Exploits. In meiner Powerpoint-Datei erkennt es unter anderem einen Exploit für eine der Powerpoint-Sicherheitslücken, die Microsoft vor einem Jahr zusammen mit 13 weiteren geschlossen hat (CVE-2009-0556 in MS09-17). Da es jedoch keine Möglichkeit bietet, Shellcode zu identifizieren oder eingebettete Executables aufzuspüren, kann es in meiner Werkzeugbox die OfficeMalScanner-Suite nicht ersetzen.

PS: Einige Antiviren-Produkte schlagen beim Download der OfficeMalScanner-Suite an. Dabei handelt es sich um Fehlalarme; die Hersteller wurden benachrichtigt.

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 ;-)

In unserer Serie „Tatort Internet“ untersuchen Experten verdächtige Dateien nach allen Regeln der Kunst. Schauen Sie Ihnen dabei über die Schulter, wie sie den echten Schädlingen auf die Schliche kommen – denn das Ganze hätte sich genau so abspielen können.

Der Experte dieser Folge, Frank Boldewin arbeitet als IT-Security-Architekt bei der GAD eG in Münster. In seiner spärlichen Freizeit beschäftigt er sich mit Analysen neuer Rootkit- und Trojaner-Technologien und veröffentlicht Tools und Whitepapers zu diesen Themen auf seiner Seite reconstructer.org. Dort hat er auch die im Artikel vorgestellte Suite zum Untersuchen von Office-Dateien veröffentlicht, die im Übrigen tatsächlich so ähnlich wie im Artikel entstanden ist. Die nächste Folge von Tatort Internet beschäftigt sich mit einer PDF-Datei mit Zeitbombe.

Ü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

(ju)