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.
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.
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.
Die Konfiguration lässt sich in vier Bereiche unterteilen:
- C&C-Server-URL
- 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.
- Eine Zeichenfolge, welche die Kampagne identifiziert.
- 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.
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 |