Ist das Malware oder kann das weg? Heute: ein Badpdf.pdf

malware

Nachdem wir letztes Mal ein technisch gesehen eher harmloses PDF File untersucht haben, schauen wir uns heute ein PDF an, dass seine Absichten nicht im Kleingedruckten versteckt, sondern in Form von JavaScript Code eingebettet innerhalb des PDF Files.

Disclaimer: Die hier gezeigten Techniken dienen ausschließlich Schulungszwecken. Öffne NIEMALS Links oder E-Mail-Anhänge von Dir unbekannten Absendern. Wenn Du das Beispiel nachmachen möchtest, nutze unbedingt eine VM dafür.

Zuerst schauen wir mit dem File Befehl, ob es sich wirklich um ein PDF File handelt:

ist-das-malware-oder-kann-das-weg-heute-ein-badpdf-pdf

 

Dann bilden wir den Hashwert der Datei, um ihn anschließend im Web auf bekannte Malware hin zu prüfen:

ist-das-malware-oder-kann-das-weg-heute-ein-badpdf-pdf

 

Der Check auf Virustotal.com zeigt sofort Alarmstufe Rot:

ist-das-malware-oder-kann-das-weg-heute-ein-badpdf-pdf

 

Wir haben es hier wohl mit einem Trojaner zu tun.

Ein anderes Tool, das noch weitere Informationen zu dem File liefern kann, ist die Seite Hybrid-Analysis.com – Ein interessanter Punkt ist, dass Du Dir die Anwendung oder die Datei anschauen kannst, wie sie “live” aussieht, ohne dass Du sie öffnen oder starten musst:

 

Die beiden Webseiten liefern wirklich gute und ausführliche Informationen über die Files.

Ich will Dir heute zeigen, wie Du dieses PDF File selber untersuchen kannst und wie Du an den JS Code herankommst, um ihn weiter zu analysieren.

Das Tool pdfid.py untersucht das PDF File auf enthaltenen JavaScript Code, Dateien und ob das File verdächtige Systemoperationen ausführen kann:

ist-das-malware-oder-kann-das-weg-heute-ein-badpdf-pdf

 

Die Ausgabe zeigt uns 5 Objekte, die Javascript/JS Code enthalten und eine OpenAction Funktion, was i.d.R ein Anzeichen für enthaltenen Schadcode sein kann.

Wie kommen wir jetzt an den JS Code heran? Eine Möglichkeit bietet das Tool pdf-parser.py

Ein Aufruf ohne Optionen analysiert die einzelnen Objekte des PDFs. Das kann je nach Umfang eine lange Liste werden. Wir können die Ausgabe mit dem –search Parameter etwas eingrenzen, in dem wir nur die Objekte anzeigen lassen, die Javascript enthalten:

ist-das-malware-oder-kann-das-weg-heute-ein-badpdf-pdf

 

Wir sehen hier 2 Objekte, die Javascript enthalten bzw. ausführen sollen und die auf ein jeweils weiteres Objekt verweisen, welches dann vermutlich den eigentlichen JS Code enthält. Starten wir mit dem ersten Objekt, auf das verwiesen wird: Objekt 10

ist-das-malware-oder-kann-das-weg-heute-ein-badpdf-pdf

 

Und wir erhalten eine Kette an Verweisen: Objekt 7 zeigt auf 10, 10 auf 12 und 12 auf 13. Das Keyword “Contains stream” zeigt an, dass wir fündig geworden sind. Den Inhalt können wir uns mit der Option -f anzeigen lassen (-f weil der Inhalt per FlateDecode Algorithmus komprimiert ist)

ist-das-malware-oder-kann-das-weg-heute-ein-badpdf-pdf

 

Da ist er ja – Wir können den Code per Copy Paste in unseren Lieblingseditor kopieren oder mit der Option -d <FileName.js> in eine neue Datei exportieren:

ist-das-malware-oder-kann-das-weg-heute-ein-badpdf-pdf

 

Und diese dann mit einem Editor öffnen:

ist-das-malware-oder-kann-das-weg-heute-ein-badpdf-pdf

 

Das ist ein typischer Ansatz von Data Obfuscation, Verschleiern von Daten. Durch verschiedene Ansätze, wie zufällig gewählte (komplexe) Variablennamen und umwandeln von PlainText in z.B. HexCode soll die Funktion des Codes nicht auf den ersten Blick ersichtlich sein.

Was bei diesem Code auffällt ist die Anweisung %u0909%u0909 – eine sogenannte NOP (no-operation) instruction: Das ist ein Hinweis darauf, dass das Programm Shellcode auf dem Rechner ausführen wird.

Wir können uns daran machen und den Code versuchen zu verstehen und in ein etwas verständlicheres Format umzuwandeln, aber das wird Teil eines weiteren Beitrags sein.

Dafür haben wir noch ein weiteres Tool, was uns diese Arbeit abnimmt und den Quelltext analysiert und bestimmte Informationen liefert: PeePDF

PeePDF vereint alle Funktionen, um ein PDF auf schadhaften Code zu untersuchen in einem Tool. Manchmal benötigt man aber doch Spezialwerkzeug, wie z.B. pdf-parser um z.B. den JS Code zu extrahieren. Darum sind wir am Anfang auf die 2 anderen Tools eingegangen.

Der Aufruf erfolgt aus dem Terminal heraus mit der Option -i für den interaktiven Mode:

ist-das-malware-oder-kann-das-weg-heute-ein-badpdf-pdf

 

Ähnlich wie bei pdf-parser bekommen wir eine Übersicht mit den enthaltenen Objekten und Aufrufen angezeigt. Es werden auch gleich die 2 ObjektIDs angegeben, die Code (stream) enthalten [11,13], aber auch die Information, dass Probleme beim Dekodieren dieser 2 Objekte aufgetreten sind.

Da wir im interaktiven Mode sind (erkennbar an der Eingabeaufforderung PPDF>) können wir direkt weitere Funktionen aufrufen. Eine Übersicht der Funktionen bekommen wir mit help:

ist-das-malware-oder-kann-das-weg-heute-ein-badpdf-pdf

 

Eine großartige Funktion von PeePDF ist die Analyse von JavaScript Code mithilfe der Funktion js_analyse. So kann der Code direkt nach URLs, IPs und anderen Aufrufen untersucht werden:

ist-das-malware-oder-kann-das-weg-heute-ein-badpdf-pdf

 

Funktioniert in unserem Beispiel nicht, weil PeePdf den enthaltenen Stream nicht Decoden kann und daher keinen JS Code erkennt. Aber wir haben ja noch die Datei mit dem JS Code aus dem PDF-Parser Beispiel. PeePDF kann auch anderer Files untersuchen. Aufgerufen wird das mit dem Parameter file und dem Filenamen:

ist-das-malware-oder-kann-das-weg-heute-ein-badpdf-pdf

 

Ok, erstmal nichts Neues, aber spannend wird es am Ende der Ausgabe:

ist-das-malware-oder-kann-das-weg-heute-ein-badpdf-pdf

Hier wird die gefundene URL direkt ausgegeben. Damit können wir

  • Weiter untersuchen, was genau da heruntergeladen werden soll, bzw. was sich hinter der URL verbirgt
  • Die Log-Dateien prüfen, ob bereits Verkehr zu dieser IP stattgefunden hat bzw. stattfindet und die entsprechenden Clients im Netzwerk identifizieren
  • Den Zugriff auf die IP-Adresse sperren und die Intrusion Detection Systeme mit dem Hash des Files und der IP-Adresse zu “füttern”

Fazit: Eingebetteter JavaScript Code in PDF Files ist eine gängige Praxis von Angreifern, um über Phishing E-Mail Kampagnen in (Firmen) Netzwerke einzudringen. Darum ist es so wichtig diese Angriffe zu erkennen, aber auch zu verstehen, um sich ein Bild von den Absichten des Angreifers zu machen und um geeignete Gegen- und Abwehrmaßnahmen zu ergreifen.

Links:

Malware Sample: https://www.4en6.de/dl/badpdf.zip (Password: malware)

PeePDF als Docker mit installierter PyV8 Java Script Engine: https://github.com/wilketob/peepdf

Der Artikel wurde zuerst auf LinkedIn veröffentlicht.