Einblicke in die SophosLabs: Auf den Spuren von Rootkits und anderer Malware

Wenn es eine neue Malware-Form in die Schlagzeilen schafft, lauten die ersten Fragen meistens „Wie funktioniert sie?“ und „Was kann ich dagegen tun?“. In den guten alten Zeiten, als wir es mit nicht mehr als sein paar hundert neuen Schädlingen pro Jahr zu tun hatten, konnten wir uns einen ersten, analytischen Zugang verschaffen, indem wir einfach den Code selbst zerlegt oder dekompiliert haben. Nachdem wir wussten, welche Operationssequenzen die Malware ausführt, zum Beispiel das Scannen von Laufwerken und das Andocken an jede .COM-Datei, haben wir die Schadsoftware noch einmal auf einem neu konfigurierten Computer ausgeführt, um unsere Analyse zu bestätigen.

Diese Zeiten sind lange vorbei und wir sehen uns heutzutage mit hunderttausenden neuer Malware-Formen jeden Tag konfrontiert, die in verschiedensten Programmiersprachen geschrieben und auf die unterschiedlichste Art und Weise „ausgeliefert“ werden. Dabei ist jedoch entscheidend, dass ein Großteil der neuen Samples nicht wirklich neu im eigentlichen Sinne des Wortes ist. Sie sind lediglich im strikt technischen Sinne einzigartig, da sie Byte-Sequenzen beinhalten, die uns so zuvor noch nicht untergekommen sind. Also etwa so, wie „Guten Morgen“ und „GUTEN MORGEN“ nicht genau dasselbe ist. Tatsächlich ist es so, dass die meisten neuen Schädlinge, die Tag für Tag auf uns einprasseln, mehr oder weniger abgewandelte Varianten von Malware sind, die wir schon enttarnt haben oder die verschlüsselt, beziehungsweise neu gepackt wurden. Trotz all dieser Übereinstimmungen bleiben dabei noch jede Menge Samples übrig, die wir unter die Lupe nehmen müssen.

Um dieser Masse Herr zu werden, starten wir unsere Analysen normalerweise mit einer dynamisch-deduktiven, also schlussfolgernden Methode, auf Basis bekannter Daten. Dazu nutzen wir automatisierte Systeme, die die Malware in einer kontrollierten Umgebung ausführen und Gemeinsamkeiten suchen. So müssen wir nicht mehr versuchen, jedes einzelne Sample manuell zu dekonstruieren, wie es in den 80er Jahren der Fall war. Und das führt uns zu den zwei Fragen hinter der Fragestellung, die wir zu Beginn des Artikels gestellt haben: „Wie bekommt man heraus, wie die Malware funktioniert“ und „Wie kann man die Aktionen der Malware nachverfolgen?“

Der Malware auf der Spur

Zu den gängigen Monitoring-Techniken zur Überwachung verdächtiger Programme gehören das Snapshotting und System Call Tracing. Bei ersterem unterziehen wir das System einem „Vorher“-Snapshot, der den kompletten Status inklusive Dateinahmen und Checksummen sowie Registry-Inhalten sichert. Dann starten wir die Malware, machen erneut einen Snapshot und vergleichen die beiden Abbilder miteinander. Bei System Call Tracing verfolgen wir alle System-Aufrufe wie CreateFile(), CreateProcess() oder URLDownloadToFile() und zeichnen die genutzten Parameter auf. Die Snapshot-Technik sagt uns also, was die Malware anrichtet und das Tracing zeigt auf, wie die Malware vorgeht. So können wir zum Beispiel feststellen, welche Dateien heruntergeladen wurden und im Idealfall gleichzeitig die Herkunftsquelle identifizieren. Aber natürlich leben wir in keiner perfekten Welt, und es tauchen verschiedenen Probleme auf, die uns die Snapshot-Tracing-Logik mit Vorsicht nutzen lassen. Dazu gehören:

  • Störrauschen. Eine neue Datei, die als einzelnes Element in einem Snapshot abgebildet wird, kann evtl. durch hunderttausende Byte-by-Byte-Aufrufe an WriteFile() entstanden sein.
  • Timing. Wie lange sollen wir zwischen den Snapshots warten? Dauert die Pause zu lange, kann die Malware schon wieder verschwunden sein, checken wir zu früh, taucht die Malware vielleicht erst später auf, um ihr Werk zu beginnen.
  • Gewissheit. Da wir unsere Messungen innerhalb eines Betriebssystems vornehmen, besteht immer die Chance, dass die Malware uns bewusst mit Falschinformationen füttert.

Außerdem stellt sich uns natürlich auch immer die Frage, ob die Malware geheime Aktionen unterhalb unseres Radars vorgenommen hat. So könnte der Schädling beispielsweise ein Rootkit installieren, das ungenutzte Teile der Festplatte via System-Aufrufe nutzt, die wir nicht überwachen. Oder einfach noch nicht dokumentierte Features und Exploits anwenden.

Effektive Malware-Jagd dank Virtualisierung

In den oben aufgeführten Fällen kann uns die Virtualisierung helfen. Solange wir es nicht mit einer Schadsoftware zu tun haben, die sich absichtlich anders verhält, wenn sie in einer virtualisierten Umgebung (z.B. VMWare, Xen, VirtualBox) aktiviert wird, arbeiten wir mittlerweile am liebsten mit sogenannten Software-Computern, die einige Vorteile bieten:

  • Ein physikalischer PC kann nun viele verschiedene Starting Images ausführen, um Malware auszuprobieren.
  • Mehrere Malware Samples können gleichzeitig analysiert werden, indem mehrere virtuelle PCs zum Einsatz kommen.
  • Virtual Disk Images sind als normale Dateien gespeichert und können so sehr einfach gesichert oder wiederhergestellt werden.

Vor allem der letzte Punkt ist extrem hilfreich, um Veränderungen im System festzustellen, da wir den Zustand des Disk Images vor und nach der Malwareattacke vergleichen können. Der Abgleich erfolgt dabei über den Hauptcomputer selbst während der virtuelle PC gestoppt ist. Auf diese Weise verhindern wir, dass die Malware sich auf dem befallenen Rechner mit falschen Ergebnissen „verstecken“ kann. Augenzwinkernd sprechen wir hier von Anti-Anti-Virus. Auf jeden Fall bekommen wir mit diesem Vorgehen letztendlich eine sehr detaillierten Sektor-Level-Snapshot von allen Einzelheiten, die sich im Virtual Disk Image geändert haben. Dazu gehören Daten, die auf Temporary- und Swap-Files, Boot- und Partitionssektoren oder sogar offiziell ungenutzte Bereiche der Festplatte geschrieben wurden. Diesen Trick nutzen einige Rootkits mit großem Erfolg aus. Sie implementieren eine proprietäres Filing System und verstecken es in den leeren Sektoren der Festplatte. Dort können die bösen Buben nun in aller Seelenruhe Programme, Daten und Konfigurationsdateien speichern, die alle nahezu unsichtbar für das Betriebssystem sind. Der Sektor-Level-Report zeigt glücklicherweise auch genau diese Bereiche außerhalb des Betriebssystem-Aktionsradius‘ an und lässt uns verdächtige Aktivitäten aufdecken.

Die Geschwindigkeit ist wichtig

Ein großes Problem beim Sektor-Level-Snapshot ist die recht zeitaufwändige Vergleichsprozedur vor und nach dem simulierten Malwarebefall. Das Virtual Disk Image einer normalen Windows-8.1-Installation beläuft sich auf 8GB oder sogar mehr. Das bedeutet also in unserem Fall, dass mindestens 16GB Rohdaten, also vor und nach der Simulation, gelesen werden müssen. Und dass selbst dann, wenn vielleicht nur eine Handvoll Sektoren geändert wurden.

SophosLabs_Tab1x

Zum Glück können wir eine praktische Abkürzung nutzen. Die meisten Virtualisierungssysteme liefern nämlich schon ein Snapshot-Tool mit, um es den Nutzern einfacher zu machen, durchgeführte Änderungen wieder rückgängig zu machen, wenn der virtuelle PC bereits eine Weile gelaufen ist. Dieser Service ist sehr hilfreich, wenn es darum geht, neue Software zu testen – oder eben Malware zu analysieren. Anstatt potentielle Änderungen immer über das Master Disk Image laufen zu lassen, wird ein separates „Difference Image“ erstellt, um die Veränderungen zu speichern. Wenn wir nun wieder von der Festplatte lesen, checkt die Virtualisierungssoftware zunächst, ob der benötigte Sektor im Difference Image ist. Nur wenn das nicht der Fall ist, wird tatsächlich auch auf das Master Disk Image zugegriffen. Auf unseren Fall bezogen lassen wir die Malware also auf einem virtuellen PC im Differencing-Modus laufen und bekommen so automatisch eine Liste, was geändert wurde und wo. Ein netter Nebeneffekt ist außerdem, dass wir so nicht von Selbstschutz- oder Stealth-Features des Schädlings hereingelegt werden können. Natürlich zeigt uns das Difference Image nur an, welche Sektoren tatsächlich verändert wurden. Die Suche nach den Dateien, in denen die Sektoren liegen, bleibt weiterhin an uns hängen. Das Gute ist allerdings, dass Veränderungen, die nicht zu Dateien gehören, zum Beispiel weil sie Teil eines Rootkits sind, das außerhalb des Betriebssystems aktiv ist, hervorstechen und schnell zu lokalisieren sind.

Was uns Veränderungen im System verraten

Der offensichtlichste Vorteil beim Aufdecken von Veränderungen durch Schädlinge mit Hilfe von Difference Images ist die Einfachheit und Verlässlichkeit dieser Strategie; vor allem beim Aufdecken von unautorisierten Festplattenmodifikationen, auf die unter anderem Low-Level-Rootkits spezialisiert sind. Zusätzlich können wir aber auch Änderungen auf Dateilevel aufdecken. Indem wir uns vom Difference Image durch den NTFS File Allocation Table (Master Filie Table MFT) zurückarbeiten, können wir sehr schnell feststellen, welche Dateien zu welchen modifizierten Bereichen auf der Festplatte gehören.

SophosLabs_Tab2x

So bekommen wir im Handumdrehen eine Liste aller Veränderungen, ohne das komplette virtualisierte Master Disk Image bearbeiten zu müssen. Wenn eines der geänderten Objekte unser Interesse weckt, können wir es direkt von den virtuellen Disk-Image-Dateien extrahieren und umfangreicher analysieren. Für manche mag es sich das jetzt nach einer Menge Arbeit anhören – vor allem im Vergleich zum relativ einfach durchführbaren Scannen der Directory Listings eines virtuellen Disk Images. Und tatsächlich kann es im Worst Case dazu kommen, dass jede Datei durch die Malware geändert wurde und das Difference Image dann genauso groß ist wie das Master Image. In der Praxis hat sich für uns aber das Differencing bewährt, wenn wir die Snapshots richtig timen und die Menge der Veränderungen damit minimieren. Auf diese Weise arbeiten wir erheblich schneller als mit den traditionellen Methoden. In Zahlen ausgedrückt sogar bis zu 60 Mal schneller, wir benötigen also nun nur noch eine Sekunde für die gleiche Arbeit, die uns zuvor 1 Minute aufgehalten hat. Also das perfekte Beispiel dafür, wie wir smarter und zugleich schneller arbeiten können!