Am 27. Juni 2017 wurden viele Computersysteme in der Ukraine und in anderen Ländern durch eine Backdoor-Cyberattacke kompromittiert. ESET Antivirenprogramme erkennen die Malware als Diskcoder.C (aka ExPetr, PetrWrap, Petya oder NotPetya). Die Schadsoftware tarnt sich als typische Ransomware: Sie verschlüsselt Daten auf dem Computer und verlangt 300 US-Dollar in Bitcoin für die Wiederherstellung. Tatsächlich hatten die Malware-Entwickler aber nur eines im Sinn, nämlich möglichst viel Schaden anzurichten. Deshalb unternahmen sie alles, um die Datenwiederherstellung so schwierig wie möglich zu gestalten.

In unserem bestehenden Blogpost stellten wir fest, dass der massive Cyber-Angriff der TeleBots-Gruppe zuzuschreiben ist. Außerdem haben wir Parallelen zu ähnlichen Supply-Chain-Cyberattacken gegen die Ukraine gesehen. Dieser Artikel erläutert nun den initialen Verteilungsvektor, der für die Diskcoder.C-Angriffswelle verwendet wurde.

Ein Backdoor in einem bösartigen Update

Die Cyber-Abteilung der ukrainischen Nationalpolizei erklärte über ihren Facebook-Account ebenso wie ESET und andere Informationssicherheitsfirmen, dass die Buchhaltungssoftware M.E.Doc von Cyber-Kriminellen benutzt wurde, um die Diskcoder.C-Malware zu verbreiten. Bis jetzt waren allerdings keine Details darüber bekannt, wie ihnen das gelang.

Während unserer Forschungen, identifizierten wir eine sehr gut versteckte und listige Hintertür, welche die Angreifer in eines der M.E.Doc Softwaremodule einschleusten.

Das Backdoor-Modul trägt den Dateinamen ZvitPublishedObjects.dll. Es wurde mit .NET Framework geschrieben, ist eine fünf Megabyte große Datei und enthält eine Menge plausiblen Code, den andere Komponenten aufrufen, einschließlich der Haupt-M.E.Doc Executable ezvit.exe.

Wir untersuchten alle 2017 veröffentlichten M.E.Doc Updates und stießen auf mindestens drei Updates, die das Modul mit eingebauter Hintertür enthielten:

  • 175-10.01.176, veröffentlicht am 14. April 2017
  • 180-10.01.181, veröffentlicht am 15. Mai 2017
  • 188-10.01.189, veröffentlicht am 22. Juni 2017

Der Vorfall mit Win32/Filecoder.AESNI.C geschah drei Tage nach dem 10.01.180-10.01.181 Update und die Diskcoder.C-Angriffswelle passierte fünf Tage nach dem 10.01.188-10.01.189 Update. Interessanterweise enthielten vier Updates vom 24. April 2017 bis zum 10. Mai 2017 und sieben Software-Updates vom 17. Mai 2017 bis zum 21. Juni 2017 das Backdoor-Modul nicht.

Der Umstand, dass das 15. Mai Update das Backdoor-Modul enthält und das 17. Mai Update nicht, könnte erklären, wieso es verhältnismäßig wenige Kompromittierungen mit Win32/Filecoder.AESNI.C gibt. Die Freigabe des 17. Mai Updates war für die Malware-Operatoren ein wohl unerwartetes Ereignis. Sie brachten ihr Ransomware-Update am 18. Mai auf den Weg. Da hatte die Mehrheit der M.E.Doc User allerdings schon aktualisiert und ist dem Backdoor-Modul damit aus dem Weg gegangen.

Die PE Erstellungsstempel der analysierten Daten suggerieren, dass sie zum selben Datum wie das Update oder bereits am Vortag kompiliert wurden.

Abbildung 1 - Kompilierungszeitstempel des kompromittierten Moduls, am 15. Mai aktualisiert

Abbildung 2 zeigt den Unterschied zwischen der kompromittierten und der normalen Version des Moduls mithilfe von ILSpy .NET Decompiler.

Abbildung 2 - Liste der Klassen im Backdoor-Modul (links) und im normalen (rechts)

Die Hauptklasse der Backdoor heißt MeCom und befindet sich im ZvitPublishedObjects.Server Namespace, wie in Abbildung 2 zu sehen.

Abbildung 3 - Die MeCom-Klasse mit schädlichem Code, Anzeige von ILSpy .NET Decompiler

Die Methoden der MeCom-Klasse werden von der IsNewUpdate-Methode von UpdaterUtils im ZvitPublishedObjects.Server-Namespace aufgerufen. Die IsNewUpdate-Methode wird periodisch aufgerufen, um zu prüfen, ob ein neues Update verfügbar ist. Das Backdoor-Modul vom 15. Mai wurde anders umgesetzt und hat weniger Features als das vom 22. Juni.

Jedes in der Ukraine tätige Unternehmen besitzt eine einzigartige Geschäftseinheitenkennung, welche auch unter der EDRPOU-Nummer bekannt ist (Код ЄДРПОУ). Für die Angreifer ist diese Nummer von enormer Bedeutung. Mit der EDRPOU-Nummer können die Malware-Operatoren die exakte Organisation bestimmen, welche die kompromittierte M.E.Doc Software benutzt. Ist das Unternehmen erst einmal identifiziert, sind die Cyber-Kriminellen in der Lage, taktisch gegen das Computernetzwerk vorzugehen, je nachdem welche Ziele sie verfolgen.

Da M.E.Doc eine in der Ukraine sehr verbreitete Buchhaltungssoftware ist, kann die EDRPOU-Nummer in Anwendungsdaten von Computern gefunden werden, welche diese Software benutzen. Der Code, der in die IsNewUpdate-Methode injiziert wurde, sammelt alle EDRPOU-Werte aus Anwendungsdaten: Eine M.E.Doc-Instanz kann dazu verwendet werden, Buchhaltungsoperationen für mehrere Organisationen durchzuführen, so dass der Code mit Hintertür alle möglichen EDRPOU-Nummern sammelt.

Abbildung 4 - Code, der EDRPOU-Nummern sammelt

Zusätzlich zu den EDRPOU-Nummern sammelt die Hintertür Proxy- und E-Mail-Einstellungen, einschließlich Benutzernamen und Passwörter, aus der Anwendung M.E.Doc.

Achtung! Wir empfehlen, Passwörter für Proxies und für E-Mail-Konten für alle Benutzer von M.E.Doc Software zu ändern.

Der Schadcode schreibt die in der Windows-Registry gesammelten Informationen in HKEY_CURRENT_USER\SOFTWARE\WC mit mit Cred- und Prx-Wertenamen. Wenn also diese Werte auf einem Computer vorhanden sind, ist es sehr wahrscheinlich, dass das Backdoor-Modul tatsächlich auf diesem Computer läuft.

Und hier kommt der listige Teil. Das Backdoor-Modul verwendet keine externen C&C-Server. Die Hintertür benutzt den regulären M.E.Doc Software Update-Check, um Anfragen an den offiziellen M.E.Doc Server upd.me-doc.com[.]ua zu senden. Der einzige Unterschied zur legitimen Serveranfrage ist der, dass der Code mit Hintertürchen die gesammelten Informationen in Cookies sendet.

Abbildung 5 - HTTP-Anforderung des Backdoor-Moduls, das EDRPOU-Nummer in Cookies enthält

Wir haben keine forensische Analyse auf dem M.E.Doc Server durchgeführt. Allerdings gibt es Anzeichen dafür, dass der Server kompromittiert wurde. Wir gehen aber davon aus, dass die Angreifer Server-Software implementiert hatten, die es ihnen ermöglichte, zwischen Anfragen von sauberen und kompromittierten Computern zu unterscheiden.

Abbildung 6 - Code der Hintertür, der Cookies zur Anfrage hinzufügt

Und natürlich haben die Angreifer sich die Möglichkeit geschaffen, die kompromittierten Computer zu kontrollieren. Der Code empfängt einen Binärblob vom offiziellen M.E.Doc Server, entschlüsselt es mit dem Triple DES-Algorithmus und dekomprimiert es anschließend mit GZip. Das Ergebnis ist eine XML-Datei, die mehrere Befehle gleichzeitig enthalten könnte. Dieses Fernsteuerungsfeature macht die Backdoor zu einem voll funktionsfähigen Cyberspionage- und Cybersabotage-Tool zu gleich.

Abbildung 7 - Code der Hintertür, welcher die eingehenden Befehle der Malware-Operatoren entschlüsselt

Die folgende Tabelle zeigt mögliche Befehle:

Befehl Zweck
0 – RunCmd Führt den bereitgestellten Shell-Befehl aus
1 – DumpData Decodes lieferte Base64-Daten und speichert sie in einer Datei
2 – MinInfo Sammelt Informationen über OS-Version, 32- oder 64-bit, aktuelle Privilegien, UAC-Einstellungen, Proxy-Einstellungen, E-Mail-Einstellungen inklusive Login und Passwort
3 – GetFile Sammelt Datei vom kompromittierten Computer
4 – Payload Decodes lieferte Base64-Daten, speichert sie als ausführbare Datei und führt sie aus
5 – AutoPayload Wie vorher, aber die mitgelieferte Datei sollte eine DLL sein, wird gelöscht und aus Windows-Ordner mit rundll32.exe ausgeführt. Darüber hinaus wird versucht, die gelöschte DLL zu überschreiben und zu löschen.

Wir weisen darauf hin, dass der Befehl Nummer 5, der von den Malware-Entwicklern als AutoPayload benannt wurde, perfekt mit der Art und Weise übereinstimmt, in der Diskcoder.C initial auf "patient zero"-Maschinen ausgeführt wurde.

Abbildung 8 – verwandte AutoPayload-Methode, um Diskcoder.C Malware auszuführen

Schlussfolgerung

Wie unsere Analysen zeigen, wurde die Operation durchaus gut geplant und durchgeführt. Wir gehen davon aus, dass die Angreifer Zugriff auf den M.E.Doc-Anwendungsquellcode hatten. Sie hatten Zeit, den Code genauer kennenzulernen und eine heimliche und listige Hintertür zu integrieren. Die Größe der vollständigen M.E.Doc Installation beträgt ungefähr 1.5GB. Derzeitig können wir nicht überprüfen, ob Angreifer nicht noch weitere Backdoors in die ukrainische Buchhaltungssoftware eingeschleust haben.

Einige Fragen bleiben offen. Wie lange war die Hintertür im Gebrauch? Welche Befehle und Malware außer Diskcoder.C oder Win32/Filecoder.AESNI.C wurden über diesen Weg verbreitet? Welche anderen Software-Updates könnte die Gang hinter diesem Angriff bereits kompromittiert haben (und demnächst als Cyber-Waffe einsetzen)?

Herzlichen Dank an meine Kollegen Frédéric Vachon und Thomas Dupuy für ihre Hilfe bei dieser Forschung.

 

Indicators of Compromise (IoC)

ESET detection names:

MSIL/TeleDoor.A

Legitimate servers abused by malware authors:

upd.me-doc.com[.]ua

SHA-1 hashes:

7B051E7E7A82F07873FA360958ACC6492E4385DD
7F3B1C56C180369AE7891483675BEC61F3182F27
3567434E2E49358E8210674641A20B147E0BD23C