Analyse bösartiger Codes

In einem früheren Artikel haben wir eine bösartige E-Mail untersucht und festgestellt, dass der Code beim Öffnen von Anhängen ausgeführt werden kann. Heute widmen wir uns den bösartigen Codes, die ausgeführt werden. Sie werden erfahren, was die Codes tun und welche Techniken eingesetzt werden, um die Arbeit der Analysten zu erschweren und Schutzmaßnahmen zu umgehen.

Bevor wir jedoch beginnen, lassen Sie uns ein paar Schlüsselworte durchgehen:

  • Ein Downloader ist eine Datei, die es erlaubt, Malware herunterzuladen und auszuführen.
  • Ein Dropper ist eine Datei, die die Malware direkt im Code enthält und ihn verschleiert, sodass er nicht erkannt wird. Er installiert Malware auf dem Computer und führt sie dann aus.
  • Ein Makro ist in Office-Dokumenten (Word, Excel, PowerPoint …) eine Gruppe aus Befehlen und Anweisungen, die beim Öffnen des Makros ausgeführt wird.

 

Heutzutage verwenden Hacker sehr häufig dieselben Angriffsmethoden für Downloader und Dropper, das heißt Makros in Office-Dokumenten und JavaScript-Code in PDF-Dateien. Ein Analyst oder ein Programm kann diesen Code erkennen, extrahieren und analysieren, um seine Funktionsweise zu verstehen und die Bedrohung auf diese Weise rasch zu blockieren. Deshalb sind die Angreifer gezwungen, Techniken einzusetzen, anhand derer die Erkennung ihrer bösartigen Dateien so lange wie möglich verzögert wird. Die Obfuskation des Codes ist eine der am häufigsten eingesetzten Methoden, und genau das werden wir uns heute ansehen.

 

Was ist Code-Obfuskation und wozu dient sie?

Obfuskation bedeutet in der Informatik, ein ausführbares Programm oder einen Quellcode unlesbar und für Menschen schwer verständlich zu machen, während die Funktion gleichzeitig aufrechterhalten bleibt. Das Ziel besteht nicht nur darin, so viele statische Code-Analysatoren wie möglich zu umgehen, sondern auch die Zeit der Analysten zu verschwenden, die den Code untersuchen. Die Obfuskation von Zeichenketten ist eine der häufigsten Techniken von Malware-Entwicklern. Bei diesem Verfahren werden die Zeichenketten mithilfe eines Algorithmus, der die Daten bei der Ausführung des Codes decodiert, verschleiert oder unverständlich gemacht. Dieser Artikel dreht sich hauptsächlich um diese Obfuskationstechnik mithilfe von Downloadern.

 

Wir untersuchen zwei Code-Beispiele, die wir in den letzten Monaten in Downloadern gefunden haben. Wir beginnen zunächst mit einem einfachen Beispiel, um die Funktionsweise und das Ziel der Obfuskation zu verstehen, danach werden wir einen komplizierteren Fall untersuchen, denn, nun ja…. Es ist selten, dass die Malware-Analyse einfach ist, und wenn es dann doch einmal der Fall ist, müssen wir die Gunst der Stunde nutzen. Hier ist ein perfektes Beispiel für den Anfang.

Eine nicht so obfuskierte Obfuskation

 

Datei TypSHA1VirusTotalVirusBay
PDF39809b0836b3198e472e9e5a4f15f5e75ab49265

Lien

Lien

 

Lassen Sie uns ohne Umschweife zum Thema kommen und uns dieses kleine Stückchen schädlichen Code anschauen, der aus der bösartigen PDF-Datei oben stammt.

Auf den ersten Blick ist schwer zu verstehen, was dieser Code macht, obwohl Zeile 1 uns einen sehr deutlichen Hinweis mit einer URL gibt, die auf eine EXE-Datei verweist… Bei der Analyse von bösartigem Code besteht der erste Schritt darin, ihn so gut wie möglich lesbar zu machen, zum Beispiel durch Hinzufügen von Zeilenumbrüchen, Leerstellen und durch Aufteilen des Codes in mehrere Teile.

Hier das Ergebnis, es ist ein wenig besser lesbar und verständlich, oder?

code malveillant

Der Code wurde in 6 Blöcke unterteilt, die durch eine Leerzeile getrennt sind:

  1. Start der  Windows-Eingabeaufforderung, die es erlaubt, Befehle im System auszuführen, danach gehen wir in unser temporäres Verzeichnis.
  2. Variablendeklaration.
  3. Deklaration und Verwendung eines ersten Objekts.
  4. Deklaration und Verwendung eines zweiten Objekts.
  5. Funktionsdeklaration.
  6. Ausführen und Löschen der Datei.

 

Man sieht schnell, dass die Teile 2, 3, 4 und 5 mit „&@echo“ beginnen und mit „>>N2o.vbs“ enden. Was bedeutet das wohl?

  • Das „&“ gibt an, dass ein weiterer Befehl ausgeführt wird. „Befehl1 & Befehl2“ bedeutet zum Beispiel, dass Befehl1 ausgeführt wird und danach Befehl2.
  • Das „@echo“ ist der Befehl, der es erlaubt, in die Windows-Eingabeaufforderung zu schreiben.
  • Das „>> N2o.vbs“ leitet das, was in die Windows-Eingabeaufforderung geschrieben wird, in die Datei „N2o.vbs“ um, ohne das zu löschen, was sich dort bereits befindet (der Inhalt wird jedes Mal an das Ende der Datei angehängt).

 

Um es zusammenzufassen, die Teile 2, 3, 4 und 5 sind nur Befehle, die in die Datei „N2o.vbs“ schreiben.

Hier ist das, was wir zurzeit wissen, sowie die Schritte, die der Code ausführt:

  1. Die erste Zeile führt eine Windows-Eingabeaufforderung aus uns bringt uns in das temporäre Verzeichnis der aktuellen Sitzung.
  2. Dann werden mehrere Befehle in die Datei „N2o.vbs“ geschrieben.
  3. Die Datei „N2o.vbs“ wird ausgeführt (Zeile 27).
  4. Die Datei wird im Anschluss gelöscht (Zeile 28).
  5. Eine Datei mit der Bezeichnung „ITL.EXE“ wird ausgeführt (Zeile 29).

 

Um zu verstehen, was der Code tut, müssen wir die Datei „N2o.vbs“ analysieren:

analyse code malveillant

Wir stellen fest, dass die Funktion „K4d“ mehrfach mit einer unverständlichen Zeichenkette aufgerufen wird (Zeilen 2, 4, 5 und 8). Angesichts der Funktion und des Codes kann man ableiten, dass die anfängliche Zeichenkette zu einer verständlichen Kette umgewandelt wird, die danach verwendet wird. Es ist übrigens sehr erstaunlich, dass die interessanteste Zeichenkette im Code, die URL, nicht verschleiert wurde. Wahrscheinlich hat man es vergessen…

Lassen Sie uns ansehen, was diese Funktion genau macht:

  • Zeile 17: Es wird eine Schleife erzeugt, die proportional zur Länge der Eingangszeichenkette durchlaufen wird, wenn die Eingangszeichenkette zum Beispiel „toto“ lautet, gibt es 4 Schleifendurchläufe.
  • Zeile 18: Die Funktion „MID()“ erlaubt die Ausgabe einer Teilzeichenkette, die an einer Position mit einer bestimmten Größe beginnt, zum Beispiel MID(„toto“, 2, 3) gibt die Teilzeichenkette „oto“ aus. Die 2 bestimmt die Position des Anfangs der Kette und die 3 ihre Länge.
  • Zeile 19: Hier wird die Teilzeichenkette aus der vorherigen Zeile mehrfach umgewandelt.
    1. Die Funktion „Asc()“ gibt die dezimale Darstellung eines Zeichens zurück, Asc(„A“) liefert zum Beispiel die Zahl 65.
    2. Im Anschluss wird 35 von der Zahl abgezogen, die die Funktion „Asc()“ zurückgibt.
    3. Zum Abschluss verwendet die Funktion „Chr()“ das Ergebnis der beiden vorangegangenen Operationen, um ein Zeichen auszugeben, Chr(65) liefert zum Beispiel den Buchstaben A.
  • Zeile 20: Das berechnete Zeichen aus Zeile 19 wird zur Kette „Z4o“ hinzugefügt.
  • Zeile 22: Es wird die neue Zeichenkette ausgegeben, die von der die Schleife erstellt wurde.

 

Wir fahren Schritt für Schritt mit der Verwendung der Funktion K4d aus Zeile 5 fort, die als Eingangszeichenkette „jhw“ liefert. Die Eingangszeichenkette hat eine Länge von 3, es gibt also 3 Schleifendurchläufe.

  1. Schleifendurchlauf
  • Zeile 18: MID(„jhw“, 1, 1) → „j“
  • Zeile 19:
    1. Asc(„j“) → 106
    2. 106 – 35 → 71
    3. Chr(71) → G
  • Zeile 20: Z4o = „G“
  1. Schleifendurchlauf
  • Zeile 18: MID(„jhw“, 2, 1) → „h“
  • Zeile 19:
    1. Asc(„h“) → 104
    2. 104 – 35 → 69
    3. Chr(69) → E
  • Zeile 20: Z4o = „GE“
  1. Schleifendurchlauf
  • Zeile 18: MID(„jhw“, 3, 1) → „w“
  • Zeile 19:
    1. Asc(„w“) → 119
    2. 119 – 35 → 84
    3. Chr(84) → T
  • Zeile 20: Z4o = „GET“

 

Nach 3 Schleifendurchläufen liefert die Funktion die Zeichenkette „GET“. Der Aufruf dieser Funktion in den Zeilen 2, 4 und 8 liefert die Zeichenketten „ITL.EXE“, „MSXML2.XMLHTTP“ sowie „ADODB.STREAM“.

Wir können jetzt also alle Zeichenketten, Variablen ersetzen und die nicht mehr benötigte Funktion löschen, um den Code soweit wie möglich zu vereinfachen. Hier ist das Endergebnis, viel einfacher zu lesen und zu verstehen, oder?

analyse d'un code malveillant

Der verbleibende Code ist in 2 Teile aufgeteilt. Teil 1 (Zeilen 1 bis 3) liest die Daten aus der Datei „albert.exe“ aus, dann schreibt Teil 2 (Zeilen 5 bis 11) die gewonnenen Daten in eine Datei namens „ITL.EXE“.

Wir kennen jetzt alle Schritte, die der bösartige Code durchführt:

  1. Schreiben von Code in eine Datei
  2. Ausführen der Datei
  3. Löschen der Datei
  4. Ausführen des heruntergeladenen Programms

 

URLURL Scan
hxxp://ultimatefifa[ . ]com/po/albert[ . ]exe

Lien

 

FileSHA1VirusTotalVirusBay
albert.exe33985325dd64e06a3e3af0c540073eefd07d9596

Lien

Lien

 

Wir sind ans Ende dieses Beispiels gekommen, und wie wir sehen konnten, ist die Verschleierung des Codes wirklich sehr simpel. Hinzu kommt noch, dass die URL der heruntergeladenen Datei von Anfang an lesbar war (wahrscheinlich ein Fehler…), im Gegensatz zu den anderen Zeichenketten, die im Code vorliegen.

Im zweiten Teil werden wir sehen, was derzeit passiert und welcher Verschleierungsgrad erreicht werden kann.

2018-12-10T11:01:44+00:00

Über den Autor: Thomas Gendron

Thomas Gendron ist IT-Sicherheitsingenieur. Bei Vade Secure konzentriert sich seine Forschung als Mitglied des Innovation Lab-Teams auf Malware, Spambots und Phishing-Analysen.