Es ist nicht das erste Mal, dass die asiatische Gaming-Branche von Cyber-Angreifern überfallen wird. Spiele-Entwickler werden kompromittiert und ihre Entwicklungsumgebungen mit Backdoors versehen. Im April 2013 berichtete Kaspersky Lab, dass im Jahr 2011 ein populäres Spiel mit Hintertürchen ausgestattet war. Kaspersky schreibt der Winnti Group den Cyber-Angriff zu.

Nun erregen neue Supply-Chain-Angriffe die Aufmerksamkeit der ESET-Forscher. In zwei Spielen und einer Gaming Plattform konnten wieder einmal Hintertüren eingeschleust werden. Allgemein richten sich die Cyber-Angriffe gegen Asien und die Spiele-Branche.

Dieselbe Backdoor in drei Fällen

Obwohl die Malware-Konfigurationen für alle drei Fälle unterschiedlich waren, beinhalteten die drei Software-Produkte denselben Backdoor-Code. Die Hintertürchen starteten auch jeweils auf dieselbe Weise. Zwei der einst kompromittierten Produkte haben die Backdoor mittlerweile nicht mehr an Bord. Der andere betroffener Spiele-Entwickler verbreitet aber immer noch eine schädliche Version des Spiels „Infestation“. ESET versuchte den thailändischen Spiele-Entwickler Electronics Extreme seit Anfang Februar mehrmals über verschiedene Kanäle zu kontaktieren, jedoch ohne ersichtlichen Erfolg.

Im weiteren Verlauf blicken wir auf die schädliche Payload; wie sie implementiert und aufgebaut ist.

Die Implementierung der Winnti-Payload

Die Payload (=Nutzlast der Malware) startet während der frühen Ausführungsphase der Backdoor verseuchten Executable. Direkt nach dem PE-Einstiegspunkt wird der Standardaufruf der C-Runtime-Initialisierung (__scrt_common_main_seh in Abb. 1) eingehängt, um die schädliche Nutzlast vor allem anderen zu starten (Abb. 2). Das kann darauf hindeuten, dass die Cyber-Kriminellen die Build-Konfiguration und nicht den Quellcode selbst geändert haben.

Abbildung 1: Sauberer Einstiegspunkt der ausführbaren Datei

Abbildung 1: Sauberer Einstiegspunkt der ausführbaren Datei

Abbildung 2:Kompromittierter Einstiegspunkt der ausführbaren Datei

Abbildung 2:Kompromittierter Einstiegspunkt der ausführbaren Datei

Der zur ausführbaren Datei hinzugefügte Code entschlüsselt und startet die Backdoor-In-Memory-Funktion, bevor die normale Ausführung des C-Laufzeit-Initialisierungscodes und nachfolgenden Codes der Hostanwendung wieder aufgenommen wird. Die eingebettete Payload hat eine spezifische Struktur (siehe Abb. 3), die vom hinzugefügten Entpackungscode aufgeteilt wird.

Abbildung 3: Embedded Payload-Struktur

Abbildung 3: Embedded Payload-Struktur

Darin enthalten ist auch ein RC4-Schlüssel (der X37 XOR-verknüpft ist), mit dem ein Dateiname und die eingebettete DLL-Datei entschlüsselt werden.

Die schädliche Payload von Winnti

Tatsächlich ist die bösartige Nutzlast nur sehr klein und enthält Code im Umfang von nur etwa 17 KB.

Winnti-Konfigurierung

Wie in Abb. 4 dargestellt, besteht die Konfigurationsdatei lediglich aus einer durch Leerzeichen separierten Auflistung von Zeichenketten.

Abbildung 4: Payload Konfigurationsdatei

Abbildung 4: Payload Konfigurationsdatei

Die Konfiguration lässt sich in vier Bereiche unterteilen:

  1. C&C-Server-URL
  2. Variable (t), welche die Sleep-Time in Millisekunden bestimmt, bevor die Ausführung fortsetzt. Die Wartezeit wird wahllos gewählt und bewegt sich zwischen 2/3 tund 5/3 t.
  3. Eine Zeichenfolge, welche die Kampagne identifiziert.
  4. Eine durch Semikolons getrennte Liste ausführbarer Programme. Ist eines der Programme aus Liste aktiv, stoppt die Backdoor die Ausführung.

ESET-Forscher ermittelten fünf Versionen der Payload:

Truncated SHA-1 PE Compile time (UTC) C&C server URL
a045939f 2018-07-11 15:45:57 https://bugcheck.xigncodeservice[.]com/Common/Lib/Common_bsod.php
a260dcf1 2018-07-11 15:45:57 https://bugcheck.xigncodeservice[.]com/Common/Lib/Common_Include.php
dde82093 2018-07-11 15:45:57 https://bugcheck.xigncodeservice[.]com/Common/Lib/common.php
44260a1d 2018-08-15 10:59:09 https://dump.gxxservice[.]com/common/up/up_base.php
8272c1f4 2018-11-01 13:16:24 https://nw.infestexe[.]com/version/last.php

Bei den ersten drei Varianten wurde der Code nicht rekompiliert, aber die Konfigurationsdatei in der DLL selbst. Der Rest des Inhalts ist eine Byte-für-Byte-Kopie.

Die C&C-Infrastruktur hinter Winnti

Alle Domain-Namen wurden sorgfältig ausgewählt, um wie dem Spiel zugehörig auszusehen und um beim Publisher keine Skepsis hervorzurufen. Die Apex-Domain ist so konfiguriert, dass sie mit Hilfe des Namecheap Redirection Service zu einer legitimen Seite umleitet. Die Subdomains zeigen allerdings auf den bösartigen C&C-Server.

Domain name Registration date Redirection target
xigncodeservice.com 2018-07-10 09:18:17 https://namu.wiki/[w]/XIGNCODE
gxxservice.com 2018-08-14 13:53:41 None or unknown
infestexe.com 2018-11-07 08:46:44 https://www.facebook.com/infest.[in].[th]

Subdomain name IP addresses Provider
bugcheck.xigncodeservice.com 167.99.106[.]49, 178.128.180[.]206 DigitalOcean
dump.gxxservice.com 142.93.204[.]230 DigitalOcean
nw.infestexe.com 138.68.14[.]195 DigitalOcean

Hinweis: Zum Zeitpunkt der Erstellung dieses Artikels löste keine Domain unter der Adresse auf und auch die C&C-Server antworteten nicht.

Aufklärungsbericht

Aus der MAC-Adresse des Geräts wird eine Bot-ID generiert. Die Backdoor meldet dem C&C-Server Informationen über das System, wie beispielsweise Benutzer- und Computername, die Windows-Version und die System-Sprache. Dann wartet die Hintertür auf Befehle. Die Daten werden mit *&b0i0rong2Y7un1 XOR-verschlüsselt und base64-codiert. Auf die vom C&C-Server empfangenen Daten trifft das ebenfalls zu.

Folgende Befehle versteht Winnti:

Cyber-Angreifer können nur vier Befehle an die Backdoor schicken:

  • DownUrlFile
  • DownRunUrlFile
  • RunUrlBinInMem
  • UnInstall

Die Befehle sind recht selbsterklärend. Sie ermöglichen dem Angreifer, zusätzliche ausführbare Dateien von einer bestimmten URL auszuführen.

Der letzte Befehl ist weniger nahe liegend. Der UnInstall-Befehl entfernt die Malware nicht vom System, da sie in eine legitime Executable eingebunden ist. Deshalb deaktiviert man den schädlichen Code, in dem in der Registry folgender Wert auf 1 gesetzt wird:

  • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\ImageFlag

Beim Start der Winnti-Payload wird der Registry-Wert abgefragt und die Ausführung abgebrochen, falls der Wert 1 beträgt. Womöglich versuchen die Cyber-Kriminellen damit auch die Last für die C&C-Server zu reduzieren. Die Malware wird vor allem auf Systemen von uninteressanten Opfern deaktiviert.

Second Stage

Aus den ESET Telemetrie-Daten ergibt sich, dass eine der Second Stage Payload  Win64/Winnti.BN an die Opfer verbreitet. Unserem Urteil nach, wurde der Dropper über HTTPS von api.goallbandungtravel[.]com heruntergeladen. Wir sahen, dass dieser als Windows-Dienst und als DLL in C:\Windows\System32 unter folgenden Dateinamen installiert wurde:

  • cscsrv.dll
  • dwmsvc.dll
  • iassrv.dll
  • mprsvc.dll
  • nlasrv.dll
  • powfsvc.dll
  • racsvc.dll
  • slcsvc.dll
  • snmpsvc.dll
  • sspisvc.dll

Die von uns analysierten Malware-Samples waren sehr groß – um die 60 MB. Je nach Version beträgt die Dateigröße der Payload aber nur 63 bis 72 KB. Der Rest gilt nur der „äußeren Erscheinung“. Den bösartigen Dateien werden einfach viele saubere Dateien angehängt. Das wird wahrscheinlich durch die Komponente realisiert, welche den schädlichen Dienst ablegt und installiert.

Läuft der Dienst, hängt dieser die .mui-Erweiterung an seinen DLL-Pfad, liest und entschlüsselt die Datei mit Hilfe von RC5. Die entschlüsselte MUI-Datei enthält am Offset 0 einen positionsunabhängigen Code. Der RC5-Schlüssel wird von der Seriennummer der Festplatte und der Zeichenfolge f@Ukd!rCto R$. abgeleitet. Wir konnten keine MUI-Dateien oder Code, der diese installiert, abfangen. Deshalb ist uns der genaue Zweck dieses schädlichen Dienstes nicht bekannt.

Aktuelle Malware-Versionen enthalten ein „Auto-Update“ vom C&C-Server http://checkin.travelsanignacio[.]com.

Der C&C-Server stellte die neusten MUI-Dateiversionen (mit statischem RC5-Key verschlüsselt) bereit. Während unserer Analyse antwortete der C&C-Server allerdings nicht mehr.

Ziele von Winnti

Zunächst möchten wir festhalten, wer nicht zur Zielgruppe der Cyber-Angreifer gehört. Recht früh im Payload-Code überprüft die Malware, ob die Systemsprache Russisch oder Chinesisch ist (Abb. 5). In beiden Fällen stoppt die Schadsoftware an dieser Stelle. Daran führt kein Weg vorbei: Die Angreifer interessieren schlichtweg keine Computer-Systeme, die mit diesen Sprachen konfiguriert sind.

Abbildung 5: Sprachen-Check bevor die Payload ausgeführt wird

Abbildung 5: Sprachen-Check bevor die Payload ausgeführt wird

Verbreitungsstatistik

Laut der ESET-Telemetriedaten befinden sich die Opfer hauptsächlich in Asien – die allermeisten in Thailand. Angesichts der beliebten aber immer noch kompromittierten Anwendung, die weiterverbreitet wird, sollte es nicht überraschen, wenn die Zahl der infizierten Computersysteme in die zehn- oder hunderttausende geht.

Fazit

Supply-Chain-Attacken sind für Verbraucher nur sehr schwer zu erkennen. Es ist unmöglich, jede Software zu analysieren, die man ausführt. Das gilt auch für alle Updates. Wir vertrauen darauf, dass Software-Entwickler keine Malware verseuchten Programme vertreiben. Vielleicht ist das der Grund, warum mehrere Cyber-Gangs auf Software-Entwickler abzielen: Durch gehackte Software des Anbieters werden Botnets geschaffen. Die Verwendung der Methode hat jedoch einen entscheidenden Nachteil. Sobald die Sabotage auffliegt, werden die Hintertürchen via Update geschlossen und die Botnets verlieren ihre Bots.

Die Motive der Hacker-Gruppe Winnti kennen wir nicht. Vielleicht geht es um Profite? Gibt es Gründe, warum die drei betroffenen Software-Produkte von asiatischen Entwicklern stammen und für den asiatischen Markt bestimmt waren? Verwenden die Cyber-Angreifer das Botnet als Teil einer größeren Spionageoperation? Viele Fragen bleiben ungeklärt.

ESET Sicherheitsprodukte erkennen die Bedrohungen als Win32/HackedApp.Winnti.A, Win32/HackedApp.Winnti.B und die Payload als Win32/Winnti.AG, und die Second Stage als Win64/Winnti.BN.

Indicators of Compromise (IoCs)

Compromised file samples (Win32/HackedApp.Winnti.A and B)

SHA-1 Compile Time (UTC) RC4 key Payload SHA-1
474b1c81de1eafe93602c297d701418658cf6feb Mon Jul 16 07:37:14 2018 207792894 a045939f
47dd117fb07cd06c8c6faa2a085e0d484703f5fd Wed Jul 25 06:44:09 2018 207792894 a045939f
54b161d446789c6096362ab1649edbddaf7145be Tue Sep 4 08:02:38 2018 165122939 a260dcf1
67111518fe2982726064ada5b23fd91d1eb3d48e Wed Sep 19 09:51:44 2018 17858542 dde82093
0f31ed081ccc18816ca1e3c87fe488c9b360d02f Fri Sep 28 05:32:30 2018 17858542 dde82093
5e2b7b929471ac3ba22a1dfa851fac1044a698dc Tue Oct 16 05:09:15 2018 17858542 dde82093
132e699e837698ef090e3f5ad12400df1b1e98fa Thu Oct 18 02:53:03 2018 17858542 dde82093
d4eaf47253fe59f11a06517bb9e2d5e8b785abf8 Thu Nov 1 07:00:55 2018 17858542 dde82093
7cf41b1acfb05064518a2ad9e4c16fde9185cd4b Tue Nov 13 10:12:58 2018 1729131071 8272c1f4
7f73def251fcc34cbd6f5ac61822913479124a2a Wed Nov 14 03:50:18 2018 19317120 44260a1d
dac0bd8972f23c9b5f7f8f06c5d629eac7926269 Tue Nov 27 03:05:16 2018 1729131071 8272c1f4

Einige Hashes wurden auf Anfrage eines Anbieters geändert. Wer sie aus einem bestimmten Grund benötigt, wendet sich bitte an threatintel@eset.com.

Payload Samples (Win32/Winnti.AG)

SHA-1 C&C server URL
a045939f53c5ad2c0f7368b082aa7b0bd7b116da https://bugcheck.xigncodeservice[.]com/Common/Lib/Common_bsod.php
a260dcf193e747cee49ae83568eea6c04bf93cb3 https://bugcheck.xigncodeservice[.]com/Common/Lib/Common_Include.php
dde82093decde6371eb852a5e9a1aa4acf3b56ba https://bugcheck.xigncodeservice[.]com/Common/Lib/common.php
8272c1f41f7c223316c0d78bd3bd5744e25c2e9f https://nw.infestexe[.]com/version/last.php
44260a1dfd92922a621124640015160e621f32d5 https://dump.gxxservice[.]com/common/up/up_base.php

Second stage samples (Win64/Winnti.BN)

Dropper geliefert von api.goallbandungtravel[.]com.

SHA-1 Compile Time (UTC) C&C server URL prefix
4256fa6f6a39add6a1fa10ef1497a74088f12be0 2018-07-25 10:13:41 None
bb4ab0d8d05a3404f1f53f152ebd79f4ba4d4d81 2018-10-10 09:57:31 http://checkin.travelsanignacio[.]com

MITRE ATT&CK matrix

ID Description
T1195 Supply Chain Compromise
T1050 New Service
T1022 Data Encrypted
T1079 Multilayer Encryption
T1032 Standard Cryptographic Protocol (RC4, RC5)
T1043 Commonly Used Port (80,443)
T1009 Binary Padding