Bereits im späten März 2018 identifizierten ESET-Forscher ein interessantes PDF Malware-Sample. Eine eingehende Untersuchung offenbarte, dass die Malware zwei noch unbekannte Schwachstellen (0day Exploits) ausnutzte. Es handelte sich um eine Sicherheitslücke in Adobe durch Remote Code Execution sowie um eine Sicherheitslücke in Windows durch Privilege Escalation (Rechteerhöhung).

Der Nutzen aus der Kombination beider Schwachstellen ist extrem wirkmächtig. Ein Angreifer kann beliebigen Code auf dem Ziel-Computer mit den größtmöglichen Rechten und minimalstem Zutun des Besitzers ausführen.

Auf APT-Angriffe spezialisierte Gruppen gebrauchen regelmäßig solche Schwachstellenkombinationen, um ihre Attacken zu vollziehen – wie beispielsweise die Sednit-Gruppe im letzten Jahr.

Als die ESET-Forscher die Schwachstelle aufdeckten, alarmierten sie umgehend das Microsoft Security Response Center, das Windows Defender ATP Research Team und das Adobe Product Security Incident Response Team, damit die Sicherheitslücken so schnell wie möglich geschlossen werden konnten.

Patches und Gutachten von Adobe und Microsoft sind unter den folgenden Links zu finden:

Betroffene Software-Produkte sind:

  • Acrobat DC (2018.011.20038 und frühere Versionen)
  • Acrobat Reader DC (2018.011.20038 und frühere Versionen)
  • Acrobat 2017 (011.30079 und frühere Versionen)
  • Acrobat Reader DC 2017 (2017.011.30079 und frühere Versionen)
  • Acrobat DC (Classic 2015) (2015.006.30417 und frühere Versionen)
  • Acrobat Reader DC (Classic 2015) (2015.006.30417 und frühere Versionen)
  • Windows 7 / 32-bit Systems Service Pack 1
  • Windows 7 / x64-based Systems Service Pack 1
  • Windows Server 2008 /32-bit Systems Service Pack 2
  • Windows Server 2008 /Itanium-Based Systems Service Pack 2
  • Windows Server 2008 /x64-based Systems Service Pack 2
  • Windows Server 2008 R2 /Itanium-Based Systems Service Pack 1
  • Windows Server 2008 R2 /x64-based Systems Service Pack 1

In diesem Beitrag behandeln wir die technischen Details des schädlichen Malware-Samples und die Schwachstellen (0day Exploits), die es ausnutzte.

Prolog

PDF (Portable Document Format) ist ein Dateiformat für elektronische Dokumente und kann wie andere gängige Dateiformate von Angreifern verwendet werden, um Malware auf den Computer eines Opfers zu übertragen. Dazu müssen die Angreifer eine Sicherheitslücke in der PDF-Software finden und diese mit ihrem eigenen bösartigen Code ausnutzen. Es gibt diverse Programme, um sich PDFs anzusehen. Ein beliebtes ist der Adobe Reader.

Die Adobe Reader Software besitzt eine eingebaute Sandbox – auch bekannt als geschützte Ansicht für PDF-Dateien. Adobe bietet detaillierte technische Informationen im Unternehmensblog, aufgeteilt in vier Abschnitte (Part 1Part 2Part 3Part 4). Die Sandbox erschwert normalerweise das Ausnutzen einer Schwachstelle. Selbst wenn die Ausführung von Schadcode glückt, muss der Attackierende immer noch an der Sandbox vorbei, um auf das Betriebssystem zu gelangen. Ein Sandbox-Bypass kann gewöhnlich nur durch das Ausnutzen einer Schwachstelle im Betriebssystem erreicht werden.

In unserem raren Fall waren die Angreifer in der Lage, solche Sicherheitslücken zu finden und dann Zero-Day Exploits (Malware-Programme, die unbekannte Schwachstellen ausnutzen) für den Adobe Reader und Windows Betriebssysteme zu schreiben.

CVE-2018-4990 – RCE in Adobe Reader

Das schädliche PDF (unser Malware-Sample) enthielt einen JavaScript-Code, der den gesamten Prozess der "Sicherheitslückenausnutzung" kontrolliert. Sobald das PDF-Dokument geöffnet ist, beginnt die Ausführung des eingebetteten JavaScript-Codes.

Als erstes manipuliert der Schadcode das Button1 Objekt. Dieses Objekt beinhaltet ein speziell gefertigtes JPEG2000 Bild, was die double-free Sicherheitslücke im Adobe Reader ansteuert.

Abbildung 1: JavaScript Schadcode manipuliert das Button1 Objekt.

Das JavaScript benutzt Heap-Spray Techniken, um interne Datenstrukturen zu korrumpieren. Mit Hilfe dieser Manipulation erreichen die Angreifer ihr Hauptziel: Lese- und Schreibrechte durch den JavaScript-Code.

Abbildung 2: JavaScript Schadcode zur Erlangung von Lese- und Schreibrechten.

Durch diese beiden Primitives lokalisieren die Angreifer die Speicheradresse des EScript.api Plugins, was die Adobe JavaScript Engine darstellt. Mithilfe von Assemblierungsanweisungen (ROP-Gadgets) aus diesem Modul richtet das schädliche JavaScript eine ROP-Kette ein, was letztendlich auf die Ausführung von systemeigenem Shellcode hinausläuft.

Abbildung 3: Schädliches JavaScript moduliert eine ROP-Kette.

Im letzten Schritt initialisiert der Shellcode eine in dem PDF-Dokument eingebettete PE-Datei und übergibt die Ausführung an sie.

CVE-2018-8120 – Privilege escalation in Microsoft Windows

Nach dem Ausnutzen der Adobe Reader Schwachstelle müssen die Angreifer noch die Sandbox durchbrechen. Genau an diesem Punkt kommt die zweite Schwachstelle ins Spiel.

Die Ursache für diese unbekannte Schwachstelle / 0day Exploit, liegt in der NtUserSetImeInfoEx Funktion der win32k Windows Kernel-Komponente. Genauer gesagt, validiert die SetImeInfoEx Subroutine von NtUserSetImeInfoEx einen Data Pointer nicht, wodurch eine NULL Pointer Dereferenzierung erlaubt wird.

Abbildung 4: Aufgeschlüsselte SetImeInfoEx Routine

Wie in Abbildung 4 ersichtlich, erwartet die SetImeInfoEx-Funktion einen Pointer auf ein initialisiertes WINDOWSTATION-Objekt als erstes Argument. Die spklList könnte gleich Null sein, wenn der Angreifer ein neues WINDOWSTATION-Objekt erstellt und es dem aktuellen Prozess im Benutzermodus zuweist. Durch das Zuordnen der NULL Page und das Setzen eines Pointers auf Offset 0x2C kann der Angreifer diese Sicherheitslücke ausnutzen, um an eine beliebige Adresse im Kernel-Bereich zu schreiben. Es sollte beachtet werden, dass seit Windows 8 ein Benutzerprozess die NULL Page nicht mehr zuordnen darf.

Da der Angreifer über ein beliebiges Write Primitive verfügt, könnte er verschiedene Techniken anwenden. In unserem Fall entschied man sich für eine, die von Ivanlef0u and Mateusz “j00ru” Jurczyk und Gynvael Coldwin beschrieben wurde. Der Attackierende richtet sich ein Call Gate für Ring 0 ein, indem er die Global Descriptor Table (GDT) neu schreibt. Mit Hilfe der SGDT-Assembly-Anweisung erhält der Angreifer die Adresse der ursprünglichen GDT. Diese Tabelle schreibt er dann unter Ausnutzung der oben erwähnten Schwachstelle neu.

Das Exploit greift auf die CALL FAR Anweisung zurück, um einen inter-privilege level call durchzuführen.

Abbildung 5: Aufgeschlüsselte CALL FAR Anweisung

Sobald der Schadcode im Kernelmodus ausgeführt wird, ersetzt der Exploit das Token des aktuellen Prozesses durch das Systemtoken.

Fazit

Die ESET-Forscher entdeckten das schädliche PDF in einem sehr frühen Stadium auf einer öffentlichen Plattform für Schadcode. Glücklicherweise enthält unser Malware-Sample keinen finalen Payload. Das bringt uns zu dem Schluss, dass die Entwicklung der Malware noch nicht abgeschlossen war. Nichts­des­to­we­ni­ger bewiesen die Malware-Entwickler ein hohes Maß technisches Verständnis in Bezug auf das Aufspüren von Sicherheitslücken und das Schreiben von Exploits.

ESET detection names
JS/Exploit.Pdfka.QNV trojan
Win32/Exploit.CVE-2018-8120.A trojan
SHA-1 hashes
C82CFEAD292EECA601D3CF82C8C5340CB579D1C6
0D3F335CCCA4575593054446F5F219EBA6CD93FE