Die Stantinko-Botnet-Betreiber erweiterten ihr Toolset um eine neue Möglichkeit, von den Bots zu profitieren – durch einen Monero-Coinminer. Das etwa eine halbe Millionen Computer umfassende Bot-Netzwerk besteht seit dem Jahr 2012 und richtet sich hauptsächliche gegen Russland, Ukraine, Weißrussland und Kasachstan.
Das Schürfen von Monero, einer Kryptowährung mit Kursschwankungen im Jahr 2019 zwischen 50 – 100 US-Dollar, sichert seit mindestens August 2018 die Monetarisierung des Botnets. Davor nährte sich das illegale Rechnernetz von Click Fraud, Ad Injection, Social Network Fraud und Password Stealing Attacks.
In diesem Artikel beschreiben wir das Cryptomining-Modul von Stantinko und stellen eine Funktionsanalyse bereit.
Das beeindruckendste Merkmal des Coinmining-Moduls ist die Verschleierungstaktik, um Analysen und Erkennungen zu vereiteln. Zufällige Obfuskation auf Source-Ebene und die Tatsache, dass die Stantinko-Operatoren dieses Modul für jedes Opfer individuell zusammenstellen, macht jedes untersuchte Sample zum Unikat.
Auf die Verschleierungstechnik soll hier im Artikel näher eingegangen werden, in einem separaten Artikel stellen wir dann einen möglichen Ansatz zur Umgehung der Verschleierung vor.
Stantinko entwickeln ständig neue Malware-Module für ihr Botnet oder aktualisieren bestehende. Die starke Obfuskation jedes einzelnen Moduls macht es dabei nahezu unmöglich, jede kleine Änderung zu verfolgen. Deshalb haben wir uns dazu entschieden, nur die aus unserer Sicht relevanten Updates von Stantinko-Modulen im Vergleich zu vorherigen zu präsentieren.
Modifizierter Open-Source Cryptominer
Stantinkos Rechenleistung-intensives Cryptomining-Modul ist eine stark modifizierte Version des xmr-stak Open-Source Cryptominers. Jede unnötigen Zeichenketten und sogar ganze Funktionen entfernte man, um Erkennungen durch Antivirenprogramme zu vermeiden. Übriggebliebene Strings und Funktionen sind stark verschleiert. ESET-Sicherheitsprodukte erkennen die Malware dennoch als Win{32,64}/CoinMiner.Stantinko.
Stantinko Mining Proxys
CoinMiner.Stantinko kommuniziert nicht direkt mit seinem Mining-Pool, sondern über Proxys, deren IP-Adressen aus dem Beschreibungstext von YouTube-Videos abgerufen werden. Auch die Banking-Malware Casbaneiro versteckte Informationen in YouTube Videobeschreibungen. Zwar verwendet Casbaneiro etwas „vertrauenswürdigere“ Channels und Beschreibungen, allerdings zum gleichen Zweck – dem Verstecken von verschlüsselten C&C-Serveradressen.
Der in der Videobeschreibung stehende String einer Mining Proxy IP-Adresse liegt im Hexadezimalformat vor. Das in Abbildung 1 gezeigte YouTube-Video hat beispielsweise die Beschreibung „03101f1712dec626“, was zwei IP-Adressen im hexadezimalen Format entspricht – 03101f17 entspricht 3.16.31[.]23 im Decimal Dotted-Quad Format und 12dec626 ist 18.222.198[.]38.
Zum Zeitpunkt des Schreibens wurde das Format leicht angepasst. Die IP-Adressen sind derzeit von "!!!!" umschlossen, was den Prozess des Parsens vereinfacht und verhindert, dass mögliche Änderungen der HTML-Struktur des YouTube-Videos den Parser funktionsunfähig machen.
In früheren Versionen wurde die YouTube-URL fest in die CoinMiner.Stantinko Binary geschrieben. Derzeit erhält das Modul stattdessen eine Video-ID als Befehlszeilenparameter. Dieser Parameter wird dann verwendet, um die YouTube-URL in der Form https://www.youtube.com/watch?v=%PARAM% zu erstellen. Das Cryptomining-Modul wird entweder von Stantinkos BEDS-Komponente oder durch rundll32.exe über eine Batchdatei, die wir nicht erfassten, von einem lokalen Dateisystemspeicherort der Form % TEMP% \% RANDOM% \% RANDOM_GUID%.dll geladen.
Wir haben YouTube über diesen Missbrauch informiert. Alle Kanäle mit den schädlichen Videobeschreibungen wurden entfernt.
Cryptomining-Funktionen
Wir unterteilten das Cryptomining-Modul in vier logische Entitäten. Jede stellt eine andere Funktion dar. Eine Entität übernimmt das eigentliche Cryptomining, die anderen erfüllen zusätzliche Funktionen:
- Aussetzen anderer Cryptominer auf dem Rechnersystem
- Aufspüren von Security-Software
- Anhalten der Mining-Funktion, wenn der PC mit Akku betrieben oder ein Task-Manager entdeckt wird
Cryptomining
Das Herzstück der Cryptomining-Funktion ist der Hash-Prozess und die Kommunikation mit dem Proxy. Die Methode zum Abrufen der Liste der Mining-Proxys ist oben beschrieben. CoinMiner.Stantinko stellt die Kommunikation mit dem zuerst gefundenen Mining-Proxy her.
Die Kommunikation findet via TCP statt und ist RC4-verschlüsselt. Der dazugehörige Schlüssel setzt sich aus den ersten 26 Ziffern der Zahl Pi zusammen. Dieser wird dann base64 codiert. In allen von uns untersuchten Samples taucht derselbe Schlüssel auf.
Der Code des Hashing-Algorithmus wird zu Beginn der Kommunikation vom Mining-Proxy herunter- und in den Speicher geladen – in früheren Versionen aus der libcr64.dll Bibliothek, die auf der Festplatte abgelegt wurde.
Die Stantinko-Operatoren können durch das Herunterladen des Hashing-Codes diesen im laufenden Betrieb ändern. Diese Änderung ermöglicht es beispielsweise, sich an Anpassungen von Algorithmen in vorhandenen Währungen einzustimmen und auf das Mining anderer Kryptowährungen umzuschalten, um immer die rentabelste Kryptowährung zu schürfen.
Der Hauptvorteil des Herunterladens des Kernteils des Moduls von einem Remote-Server und des direkten Ladens in den Speicher besteht darin, dass dieser Teil des Codes niemals auf die Festplatte gespeichert wird. Die in früheren Versionen nicht vorhandenen Anpassungen sollen einer Erkennung als Schadprogramm vorbeugen.
Alle von uns analysierten Stantinko Cryptomining Instanzen schürfen Monero. Das leiten wir von den Jobs ab, die vom Mining-Proxy und dem Hashing-Algorithmus bereitgestellt werden.
Beispielsweise ist in Abbildung 2 ein Auftrag dargestellt, der einer der Proxys übermittelte.
{"error":null,"result":{"status":"OK"}}
{"method":"job","params":{"blob":"0b0bbfdee1e50567042dcfdfe96018227f25672544521f8ee2564cf8b4c3139a6a88c5f0b32664000000a1c8ee5c185ed2661daab9d0c454fd40e9f53f0267fe391bdb4eb4690395deb36018","job_id":"281980000000000a10","target":"67d81500","height":1815711}}
Abbildung 2. Beispiel für einen Miningjob, den ein Miningpool-Proxy empfing
Wir analysierten den verwendeten Hashing-Algorithmus und stellten fest, dass es sich um CryptoNight R handelte. Da mehrere Kryptowährungen existieren, die auf diesen Algorithmus zurückgreifen, ist diese Erkenntnis allein nicht ausreichend – es verkürzt nur die Liste. Man kann am bereitgestellten Job erkennen, dass die Höhe der Blockchain zu der Zeit 1815711 betrug. Wir mussten also nur die zugehörige Währung mit Hilfe eines Block Explorers finden, was uns zu Monero führte.
Das Zerlegen des String
0b0bbfdee1e50567042dcfdfe96018227f25672544521f8ee2564cf8b4c3139a6a88c5f0b32664000000a1c8ee5c185ed2661daab9d0c454fd40e9f53f0267fe391bdb4eb4690395deb36018
zeigte, dass der Hash des vorherigen Blocks
67042dcfdfe96018227f25672544521f8ee2564cf8b4c3139a6a88c5f0b32664
und Zeitstempels (1555590859) tatsächlich in Moneros Blockchain der Höhe 1815711 passt.
Man kann die Struktur des BLOBs finden, indem man die Generatorfunktion im Quellcode von Monero untersucht. Die Generatorfunktion stellt eine andere Struktur zur Verfügung, die als Blockheader bezeichnet wird und sowohl den Hash des vorherigen Blocks als auch den Zeitstempel enthält.
Im Gegensatz zum Rest von CoinMiner.Stantinko ist der Hashing-Algorithmus nicht verschleiert, da eine Verschleierung die Geschwindigkeit der Hash-Rate und damit die Gesamtleistung und Rentabilität erheblich beeinträchtigen würde. Die Malware-Entwickler haben jedoch gut darauf geachtet, keine enthüllenden Zeichenfolgen oder Artefakte zurückzulassen.
Ausschalten anderer Cryptominer
Die Malware untersucht ständig alle laufenden Prozesse auf andere Cryptominer. Wird ein „Wettbewerber“ aufgespürt, setzt Stantinko alle seine Threads aus.
CoinMiner.Stantinko betrachtet einen Prozess als Cryptominer, wenn seine Befehlszeile eine bestimmte Zeichenfolge oder eine Kombination enthält, die von Sample zu Sample unterschiedlich ist; beispielsweise:
• 3.16.150[.]123
• 3.16.152[.]201
• 3.16.152[.]64
• 3.16.167[.]92
• 3.16.30[.]155
• 3.16.31[.]23
• 3.17.167[.]43
• 3.17.23[.]144
• 3.17.25[.]11
• 3.17.59[.]6
• 3.17.61[.]161
• 3.18.108[.]152
• 3.18.223[.]195
• 13.58.182[.]92
• 13.58.22[.]81
• 13.58.77[.]225
• 13.59.31[.]61
• 18.188.122[.]218
• 18.188.126[.]190
• 18.188.249[.]210
• 18.188.47[.]132
• 18.188.93[.]252
• 18.191.104[.]117
• 18.191.173[.]48
• 18.191.216[.]242
• 18.191.230[.]253
• 18.191.241[.]159
• 18.191.47[.]76
• 18.216.127[.]143
• 18.216.37[.]78
• 18.216.55[.]205
• 18.216.71[.]102
• 18.217.146[.]44
• 18.217.177[.]214
• 18.218.20[.]166
• 18.220.29[.]72
• 18.221.25[.]98
• 18.221.46[.]136
• 18.222.10[.]104
• 18.222.187[.]174
• 18.222.198[.]38
• 18.222.213[.]203
• 18.222.253[.]209
• 18.222.56[.]98
• 18.223.111[.]224
• 18.223.112[.]155
• 18.223.131[.]52
• 18.223.136[.]87
• 18.225.31[.]210
• 18.225.32[.]44
• 18.225.7[.]128
• 18.225.8[.]249
• 52.14.103[.]72
• 52.14.221[.]47
• 52.15.184[.]25
• 52.15.222[.]174
Die Strings gehören zu folgenden Cryptominern: https://github.com/pooler/cpuminer, https://minergate.com/, https://github.com/xmrig, und selbst https://github.com/fireice-uk/xmr-stak, auf dem Stantinkos Cryptominer basiert. Die Zeichenfolgen führen auch zu verschiedenen, von uns nicht weiter beachteten, Malware-Samples mit Verschlüsselungsfunktionen.
Interessanterweise versuchten die Stantinko-Operatoren in der Vergangenheit, konkurrierenden Code zu beseitigen. Dafür setzten sie auf das legitime AVZ Antiviral Toolkit, das mit einem eigenen Script versehen wurde.
Erkennungsschutz
CoinMiner.Stantinko kann das Schürfen vorübergehend einstellen, wenn die Malware feststellt, dass keine Stromversorgung angeschlossen ist; das System sich also Akkubetrieb befindet. Diese Maßnahme verhindert das schnelle Entladen von Laptop-Akkus, um keinen Verdacht zu erwecken.
Außerdem wird das Mining vorübergehend angehalten, wenn festgestellt wird, dass eine Task-Manager-Anwendung (Prozess mit dem Namen procexp64.exe, procexp.exe oder taskmgr.exe) ausgeführt wird.
Weiterhin scannt die Malware laufende Prozesse, um Antivirenprogramme aufzuspüren. Es berechnet die CRC-32 des Prozessnamens und vergleicht sie mit einer einprogrammierten Liste von CRC-32-Prüfsummen, die im Anhang enthalten ist. Generell kann diese Methode dazu beitragen, Erkennungen zu umgehen, da die Prozessnamen der Sicherheitsprodukte nicht in der Binary auftauchen. Für Malware-Analysten ist es schwierig, herauszufinden, wonach die Cyberkriminellen mit Hilfe ihres Codes suchen, da die CRC-32-Prüfsummen geknackt werden müssten – das ist in etwa die gleiche Problematik wie mit Passwörtern.
Sollte es eine CRC-32-Übereinstimmung geben, wird der Hash in eine Protokolldatei (api-ms-win-crt-io-l1-1-0.dll) geschrieben. Diese Log-Datei wird später wahrscheinlich später von einer anderen Stantinko-Komponente herausgefiltert.
Fazit
Unsere Entdeckung zeigt, dass die hinter Stantinko stehenden Cyberkriminellen, ihre Möglichkeiten zur Nutzung des von ihnen kontrollierten Botnetzes weiter ausbauen. Frühere Attacken richteten sich gegen Joomla- und Wordpress-Webseiten. Mit Hilfe von BruteForcing sammelte man Server-Anmeldedaten, um diese an andere Kriminelle zu verkaufen. Das noch aktive Stantinko Cryptomining-Modul zeigt, wie elaboriert die Cybergang mittlerweile ist. Neben der Cryptomining-Funktion verwendet das neue Stantinko-Modul einige interessante Verschleierungstechniken, die wir zusammen mit einigen möglichen Gegenmaßnahmen in einem kommenden Artikel darlegen werden.
Indicators of Compromise (IoCs)
ESET detection names
Win32/CoinMiner.Stantinko
Win64/CoinMiner.Stantinko
SHA-1
Eine vollständige Liste mit mehr als 1.000 Hashes finden Sie in unserem GitHub-Repository
00F0AED42011C9DB7807383868AF82EF5454FDD8
01504C2CE8180D3F136DC3C8D6DDDDBD2662A4BF
0177DDD5C60E9A808DB4626AB3161794E08DEF74
01A53BAC150E5727F12E96BE5AAB782CDEF36713
01BFAD430CFA034B039AC9ACC98098EB53A1A703
01FE45376349628ED402D8D74868E463F9047C30
Filenames
api-ms-win-crt-io-l1-1-0.dll
libcr64.dll
C:\Windows\TEMP\%RANDOM%\%RANDOM_GUID%.dll
Mutex Name und RC4-Key
“3,141592653589793238462643”
YouTube-URLs mit Mining-Proxy-Konfigurationsdaten
- https://www.youtube[.]com/watch?v=kS1jXg99WiM
- https://www.youtube[.]com/watch?v=70g4kw2iRGo
- https://www.youtube[.]com/watch?v=cAW1xEpyr7Y
- https://www.youtube[.]com/watch?v=6SSKQdE5Vjo
- https://www.youtube[.]com/watch?v=fACKZewW22M
- https://www.youtube[.]com/watch?v=FDQOa5zCv3s
- https://www.youtube[.]com/watch?v=TpyOURRvFmE
- https://www.youtube[.]com/watch?v=2fpiR4NIpsU
- https://www.youtube[.]com/watch?v=TwnD0Kp_Ohc
- https://www.youtube[.]com/watch?v=wJsbj8zPPNs
IP-Adressen der Mining-Proxys
- 16.150[.]123
- 16.152[.]201
- 16.152[.]64
- 16.167[.]92
- 16.30[.]155
- 16.31[.]23
- 17.167[.]43
- 17.23[.]144
- 17.25[.]11
- 17.59[.]6
- 17.61[.]161
- 18.108[.]152
- 18.223[.]195
- 58.182[.]92
- 58.22[.]81
- 58.77[.]225
- 59.31[.]61
- 188.122[.]218
- 188.126[.]190
- 188.249[.]210
- 188.47[.]132
- 188.93[.]252
- 191.104[.]117
- 191.173[.]48
- 191.216[.]242
- 191.230[.]253
- 191.241[.]159
- 191.47[.]76
- 216.127[.]143
- 216.37[.]78
- 216.55[.]205
- 216.71[.]102
- 217.146[.]44
- 217.177[.]214
- 218.20[.]166
- 220.29[.]72
- 221.25[.]98
- 221.46[.]136
- 222.10[.]104
- 222.187[.]174
- 222.198[.]38
- 222.213[.]203
- 222.253[.]209
- 222.56[.]98
- 223.111[.]224
- 223.112[.]155
- 223.131[.]52
- 223.136[.]87
- 225.31[.]210
- 225.32[.]44
- 225.7[.]128
- 225.8[.]249
- 14.103[.]72
- 14.221[.]47
- 15.184[.]25
- 15.222[.]174
MITRE ATT&CK Techniken
Tactic | ID | Name | Description |
---|---|---|---|
Execution | T1085 | Rundll32 | The module can be executed by rundll32.exe. |
T1035 | Service Execution | The malware can be executed as a service. | |
Defense Evasion | T1140 | Deobfuscate/Decode Files or Information | The module deobfuscates strings in its code during the execution process. |
T1027 | Obfuscated Files or Information | The module obfuscates its code and strings in an apparent attempt to make analysis and detection difficult. | |
T1102 | Web Service | The malware acquires configuration data from description of YouTube videos. | |
Discovery | T1063 | Security Software Discovery | The malware acquires a list of running security products. |
Command and Control | T1090 | Connection Proxy | The module uses proxies between itself and the mining pool. |
T1008 | Fallback Channels | The module connects to another mining proxy if the initial one is inaccessible. | |
T1095 | Standard Non-Application Layer Protocol | The malware uses TCP for its communications. | |
T1043 | Commonly Used Port | The malware communicates over port 443. | |
T1132 | Data Encoding | The module encrypts then base64 encodes some network traffic. | |
T1032 | Standard Cryptographic Protocol | The module encrypts traffic with RC4. | |
T1071 | Standard Application Layer Protocol | Acquires configuration data from description of YouTube videos via HTTPS. | |
Impact | T1496 | Resource Hijacking | The module mines cryptocurrency. |
Appendix
CRC-32 Checksums, die CoinMiner.Stantinko prüfte und die dazugehörigen Dateinamen:
0xB18362C7 | afwserv.exe |
---|---|
0x05838A63 | ashdisp.exe |
0x36C5019C | ashwebsv.exe |
0xB3C17664 | aswidsagent.exe |
0x648E8307 | avastsvc.exe |
0x281AC78F | avastui.exe |
0xAA0D8BF4 | avgcsrva.exe |
0x71B621D6 | avgcsrvx.exe |
0x7D6D668A | avgfws.exe |
0x1EF12475 | avgidsagent.exe |
0x010B6C80 | avgmfapx.exe |
0x6E691216 | avgnsa.exe |
0xB5D2B834 | avgnsx.exe |
0x36602D00 | avgnt.exe |
0x222EBF57 | avgrsa.exe |
0xF9951575 | avgrsx.exe |
0x2377F90C | avgsvc.exe |
0x37FAB74F | avgsvca.exe |
0xEC411D6D | avgsvcx.exe |
0x0BED9FA2 | avgtray.exe |
0x168022D0 | avguard.exe |
0x99BA6EAA | avgui.exe |
0x7A77BA28 | avguix.exe |
0x0D22F74A | avgwdsvc.exe |
0x98313E09 | avira.servicehost.exe |
0x507E7C15 | avira.systray.exe |
0xFF934F08 | avp.exe |
0x9AC5F806 | avpui.exe |
0xBD07F203 | avshadow.exe |
0x64FDC22A | avwebg7.exe |
0x0BC69161 | avwebgrd.exe |
0xBACF2EAC | cureit.exe |
0x8FDEA9A9 | drwagntd.exe |
0xE1856E76 | drwagnui.exe |
0xF9BF908E | drwcsd.exe |
0xC84AB1DA | drwebcom.exe |
0x183AA5AC | drwebupw.exe |
0xAC255C5E | drwupsrv.exe |
0x23B9BE14 | dwantispam.exe |
0xDAC9F2B7 | dwarkdaemon.exe |
0x7400E3CB | dwengine.exe |
0x73982213 | dwnetfilter.exe |
0x1C6830BC | dwscanner.exe |
0x86D81873 | dwservice.exe |
0xB1D6E120 | dwwatcher.exe |
0xD56C1E6F | egui.exe |
0x69DD7DB4 | ekrn.exe |
0xFB1C0526 | guardgui.exe |
0x5BC1D859 | ipmgui.exe |
0x07711AAE | ksde.exe |
0x479CB9C4 | ksdeui.exe |
0x6B026A91 | nod32cc.exe |
0xCFFC2DBB | nod32krn.exe |
0x59B8DF4D | nod32kui.exe |
0x998B5896 | procexp.exe |
0xF3EEEFA8 | procexp64.exe |
0x81C16803 | sched.exe |
0x31F6B864 | spideragent.exe |
0x822C2BA2 | taskmgr.exe |
0x092E6ADA | updrgui.exe |
0x09375DFF | wsctool.exe |