ESET-Forscher haben eine Linux-Variante der SideWalk-Backdoor entdeckt. Dies ist eines der zahlreichen Custom-Tools, die von der APT-Gruppe SparklingGoblin verwendet werden. Diese neue Variante wurde im Februar 2021 gegen eine Universität in Hongkong eingesetzt. Es handelt sich dabei um dieselbe Hochschule, die bereits während der Studentenproteste im Mai 2020 von SparklingGoblin angegriffen wurde. Ursprünglich nannten wir diese Backdoor StageClient, haben uns aber mittlerweile für die Umbennung in SideWalk Linux entschieden. Wir haben außerdem herausgefunden, dass eine bereits bekannte Linux-Backdoor - das Specter RAT, das zuerst von 360 Netlab dokumentiert wurde - ebenfalls eine SideWalk Linux-Variante ist, die mehrere Gemeinsamkeiten mit den von uns identifizierten Samples aufweist.

SparklingGoblin ist eine APT-Gruppe, deren Taktiken, Techniken und Verfahren (TTPs) sich teilweise mit APT41 und BARIUM überschneiden. Sie nutzt Motnug- und ChaCha20-basierte Loader, die CROSSWALK- und SideWalk-Backdoors sowie Korplug (alias PlugX) und Cobalt Strike. SparklingGoblin zielt vor allem auf Ost- und Südostasien ab, hat aber auch ein breites Spektrum an Organisationen und Branchen auf der ganzen Welt ins Visier genommen, wobei der akademische Sektor einen besonderen Schwerpunkt bildet. SparklingGoblin ist eine der Gruppen, die Zugriff auf die ShadowPad-Backdoor haben.

Dieser Blogpost dokumentiert SideWalk Linux, seine Viktimologie und seine zahlreichen Ähnlichkeiten mit der ursprünglich entdeckten SideWalk-Backdoor.

Attribution

Die SideWalk-Backdoor ist exklusiv für SparklingGoblin. Zusätzlich zu den zahlreichen Code-Ähnlichkeiten zwischen den Linux-Varianten von SideWalk und verschiedenen SparklingGoblin-Tools verwendet eines der SideWalk-Linux-Samples eine C&C-Adresse (66.42.103[.]222), die zuvor von SparklingGoblin verwendet wurde.

In Anbetracht all dieser Faktoren können wir SideWalk Linux mit hoher Wahrscheinlichkeit der SparklingGoblin APT-Gruppe zuordnen.

Opfer

Obwohl verschiedene SideWalk-Linux-Samples auf VirusTotal zu finden sind, haben wir in unserer Telemetrie nur ein Opfer gefunden, das mit dieser SideWalk-Variante kompromittiert wurde: eine Universität in Hongkong, die inmitten von Studentenprotesten zuvor sowohl von SparklingGoblin (unter Verwendung des Motnug-Loaders und der CROSSWALK-Backdoor) als auch von Fishmonger (unter Verwendung der ShadowPad- und Spyder-Backdoors) ins Visier genommen worden war. An dieser Stelle weisen wir darauf hin, dass wir damals diese beiden unterschiedlichen Aktivitätsgruppen unter der umfassenderen Bezeichnung Winnti-Gruppe zusammengefasst haben.

SparklingGoblin kompromittierte diese Universität erstmals im Mai 2020, und wir entdeckten die Linux-Variante von SideWalk im Februar 2021 im Netzwerk der Universität. Die Gruppe nahm diese Organisation über einen langen Zeitraum hinweg ins Visier und kompromittierte erfolgreich mehrere wichtige Server. Darunter waren ein Druckserver, ein E-Mail-Server und ein Server, der zur Verwaltung von Stundenplänen und Kursanmeldungen verwendet wird.

Der Weg zu SideWalk Linux

SideWalk, die wir erstmals in ihrer Windows-Form in unserem Blogpost vom 24. August 2021 beschrieben haben, ist eine Mehrzweck-Backdoor, die zusätzliche Module laden kann, die vom C&C-Server gesendet werden. Sie nutzt Google Docs als Dead-Drop-Resolver und Cloudflare Worker als C&C-Server. Sie kann die Kommunikation sogar hinter einem Proxy handhaben.

Die Kompromittierungskette ist derzeit nicht bekannt, aber wir denken, dass der ursprüngliche Angriffsvektor die Ausnutzung der Schwachstelle gewesen sein könnte. Diese Hypothese basiert auf dem Artikel von 360 Netlab, in dem das Specter-Botnet beschrieben wird, das auf IP-Kameras, NVR- und DVR-Geräte abzielt, sowie auf der Tatsache, dass das Opfer in Hongkong einen anfälligen WordPress-Server verwendet hat, da es viele Versuche gab, verschiedene Webshells zu installieren.

Wir haben die Linux-Variante von SideWalk zum ersten Mal am 2. Juli 2021 als StageClient dokumentiert, ohne damals die Verbindung zu SparklingGoblin und seiner benutzerdefinierten SideWalk-Backdoor herzustellen. Der ursprüngliche Name wurde aufgrund des wiederholten Auftretens der Zeichenfolge StageClient im Code verwendet.

Bei unseren Recherchen über StageClient sind wir auf einen Blogpost über das Specter-Botnet gestoßen, das von 360 Netlab beschrieben wurde. Dieser Blogpost beschreibt eine modulare Linux-Backdoor mit flexibler Konfiguration, die eine ChaCha20-Verschlüsselungsvariante verwendet - im Grunde eine Teilmenge der StageClient-Funktionalität. Weitere Untersuchungen bestätigten diese Hypothese. Außerdem fanden wir eine große Überschneidung bei den Funktionen, der Infrastruktur und den Symbolen, die in allen Binärdateien vorhanden sind.

Wir haben das StageClient-Sample E5E6E100876E652189E7D25FFCF06DE959093433 mit dem Specter-Sample 7DF0BE2774B17F672B96860D013A933E97862E6C verglichen und zahlreiche Ähnlichkeiten festgestellt, von denen wir einige im Folgenden auflisten.

Erstens gibt es eine Überschneidung bei den C&C-Befehlen. Außerdem haben die Samples die gleiche Struktur der Konfiguration und Verschlüsselungsmethode (siehe Abbildung 1 und Abbildung 2).

Abbildung 1. Konfiguration von StageClient mit geänderten Symbolen

Abbildung 2. Konfiguration von Specter mit geänderten Symbolen

Außerdem werden die Module der Samples fast auf die gleiche Weise verwaltet, und die meisten Schnittstellen sind identisch; die Module von StageClient müssen nur einen zusätzlichen Handler implementieren, der zum Schließen des Moduls dient. Drei der fünf bekannten Module sind fast identisch.

Schließlich konnten wir auffällige Überschneidungen bei den Netzwerkprotokollen der verglichenen Samples feststellen. Eine Variante von ChaCha20 wird zweimal für die Verschlüsselung mit LZ4-Kompression auf die gleiche Weise verwendet. Sowohl StageClient als auch Specter erstellen eine Reihe von Threads (siehe Abbildung 3 und Abbildung 4), um das Senden und Empfangen von asynchronen Nachrichten zusammen mit Heartbeats zu verwalten.

Abbildung 3. Ein Teil der StageClient-Funktion StageClient::StartNetwork

Abbildung 4. Ein Teil der StartNetwork-Funktion von Specter

Trotz all dieser auffälligen Ähnlichkeiten gibt es einige Änderungen. Die bemerkenswertesten sind die folgenden:

  • Die Autoren wechselten von der Sprache C zu C++. Der Grund dafür ist unbekannt, aber es könnte einfacher sein, eine solche modulare Architektur in C++ zu implementieren, da es Polymorphismus unterstützt.
  • Eine Option zum Austausch von Nachrichten über HTTP wurde hinzugefügt (siehe Abbildung 5 und Abbildung 6).

Abbildung 5. Versenden einer Nachricht in StageClient

Abbildung 6. Versenden einer Nachricht in Specter

  • Herunterladbare Plugins wurden durch vorkompilierte Module ersetzt, die den gleichen Zweck erfüllen; eine Reihe neuer Befehle und zwei neue Module wurden hinzugefügt.
  • Neues Modul TaskSchedulerMod, das als eingebautes Cron-Dienstprogramm arbeitet. Seine Cron-Tabelle wird im Speicher abgelegt; die Aufträge werden über das Netzwerk empfangen und als Shell-Befehle ausgeführt.
  • Neues Modul SysInfoMgr, das Informationen über das zugrundeliegende System liefert, wie z.B. die Liste der installierten Pakete und Hardware-Details.

Diese Ähnlichkeiten überzeugen uns davon, dass Specter und StageClient zur gleichen Malware-Familie gehören. In Anbetracht der zahlreichen Code-Überschneidungen zwischen der StageClient-Variante, die im Februar 2021 gegen die Universität in Hongkong eingesetzt wurde, und SideWalk für Windows, wie im nächsten Abschnitt beschrieben, glauben wir nun, dass Specter und StageClient beide Linux-Varianten von SideWalk sind, weshalb wir beschlossen haben, sie als SideWalk Linux zu bezeichnen.

Ähnlichkeiten mit der Windows-Variante

SideWalk Windows und SideWalk Linux haben zu viele Gemeinsamkeiten, um sie im Rahmen dieses Blogposts zu beschreiben, daher werden hier nur die auffälligsten behandelt.

ChaCha20

Eine offensichtliche Ähnlichkeit ist in den Implementierungen der ChaCha20-Verschlüsselung zu erkennen: Beide Varianten verwenden einen Zähler mit einem Anfangswert von 0x0B, der bereits in unserem Blogpost als eine Besonderheit der ChaCha20-Implementierung von SideWalk erwähnt wurde.

Software-Architektur

Eine Besonderheit von SideWalk ist die Verwendung von mehreren Threads zur Ausführung einer bestimmten Aufgabe. Wir haben festgestellt, dass in beiden Varianten genau fünf Threads gleichzeitig ausgeführt werden, von denen jeder eine bestimmte Aufgabe hat. Die folgende Liste beschreibt die Funktion jedes Threads; die Thread-Namen stammen aus dem Code:

  • StageClient::ThreadNetworkReverse
    Wenn noch keine Verbindung zum C&C-Server besteht, versucht dieser Thread in regelmäßigen Abständen, die lokale Proxy-Konfiguration und den Standort des C&C-Servers vom Dead-Drop-Resolver abzurufen. Wenn der vorhergehende Schritt erfolgreich war, versucht er, eine Verbindung zum C&C-Server zu initiieren.
  • StageClient::ThreadHeartDetect
    Wenn die Backdoor in der angegebenen Zeit keinen Befehl erhalten hat, kann dieser Thread die Verbindung mit dem C&C-Server beenden oder in einen "Nickerchen"-Modus wechseln, der geringfügige Änderungen am Verhalten vornimmt.
  • StageClient::ThreadPollingDriven
    Wenn keine anderen Daten in der Warteschlange stehen, sendet dieser Thread in regelmäßigen Abständen einen Heartbeat-Befehl an den C&C-Server, der zusätzlich die aktuelle Uhrzeit enthalten kann.
  • StageClient::ThreadBizMsgSend
    Dieser Thread prüft in regelmäßigen Abständen, ob in den von allen anderen Threads benutzten Nachrichtenwarteschlangen Daten vorhanden sind, und verarbeitet sie, falls ja.
  • StageClient::ThreadBizMsgHandler
    Dieser Thread prüft in regelmäßigen Abständen, ob noch Nachrichten vom C&C-Server ausstehen und bearbeitet sie gegebenenfalls.

Konfiguration

Wie in SideWalk Windows wird die Konfiguration mit ChaCha20 entschlüsselt.

Checksumme

Vor der Entschlüsselung erfolgt zunächst eine Prüfung der Datenintegrität. Diese Prüfung ist in beiden SideWalk-Implementierungen ähnlich (siehe Abbildung 7 und Abbildung 8): Aus der ChaCha20-Nonce, die mit den verschlüsselten Konfigurationsdaten verkettet ist, wird ein MD5-Hash berechnet. Dieser Hashwert wird dann mit einem vordefinierten Wert verglichen, und wenn er nicht gleich ist, wird SideWalk beendet.

Abbildung 7. SideWalk Linux: Prüfung der Konfigurationsintegrität

Abbildung 8. SideWalk Windows: Prüfung der Konfigurationsintegrität

Layout

Abbildung 9 zeigt Auszüge entschlüsselter Konfigurationen aus den von uns analysierten Samples.

Figure 9. Configuration parts from E5E6E100876E652189E7D25FFCF06DE959093433 (left) and FA6A40D3FC5CD4D975A01E298179A0B36AA02D4E (right)

Die SideWalk Linux-Konfiguration enthält weniger Informationen als die SideWalk Windows-Konfiguration. Dies ist sinnvoll, da die meisten Konfigurationsartefakte in SideWalk Windows als Kryptographie- und Netzwerkparameter verwendet werden, während die meisten davon in SideWalk Linux intern sind.

Entschlüsselung mit ChaCha20

Wie bereits erwähnt, verwendet SideWalk eine globale Hauptstruktur, um seine Konfiguration zu speichern. Diese Konfiguration wird zunächst mit der modifizierten Implementierung von ChaCha20 entschlüsselt, wie in Abbildung 10 zu sehen ist.

Abbildung 10. ChaCha20-Entschlüsselungsaufruf in SideWalk Windows (links) und in SideWalk Linux (rechts)

Beachten Sie, dass der ChaCha20-Schlüssel in beiden Varianten genau derselbe ist, was die Verbindung zwischen beiden weiter hervorhebt.

Dead-Drop-Resolver

Die Dead-Drop-Resolver-Nutzdaten sind in beiden Samples identisch. Zur Erinnerung an unseren Blogpost über SideWalk zeigt Abbildung 11 das Format der Nutzdaten, die vom Dead-Drop-Resolver abgerufen werden.

Abbildung 11. Format der im Google Docs-Dokument gehosteten Zeichenfolge

Beim ersten Begrenzungszeichen fällt auf, dass der Teil PublicKey: der Zeichenfolge ignoriert wird; die Zeichenfolge AE68[...]3EFF wird direkt durchsucht, wie in Abbildung 12 dargestellt.

Abbildung 12. SideWalk Linux's erste Begrenzungsroutine (links), Endbegrenzer und mittlere Begrenzungsroutinen (rechts)

Die Begrenzungszeichen sind identisch, ebenso wie der gesamte Dekodierungsalgorithmus.

Eindeutige Opfer-Identifikation

Um einen "Fingerabdruck" des Opfers zu erstellen, werden verschiedene Artefakte auf dem Rechner des Opfers gesammelt. Wir haben festgestellt, dass die abgerufenen Informationen genau gleich sind und sogar in der gleichen Reihenfolge abgerufen werden.

Da die Boot-Zeit in beiden Fällen ein Windows-kompatibles Zeitformat ist, können wir annehmen, dass der Controller der Betreiber unter Windows läuft und dass der Controller für Linux- und Windows-Opfer derselbe ist. Ein weiteres Argument für diese Hypothese ist, dass die in beiden Implementierungen von SideWalk verwendeten ChaCha20-Schlüssel identisch sind.

Kommunikationsprotokoll

Serialisierung der Daten

Das Kommunikationsprotokoll zwischen dem infizierten Rechner und dem C&C ist je nach Konfiguration HTTP oder HTTPS, aber in beiden Fällen werden die Daten auf die gleiche Weise serialisiert. Nicht nur die Implementierung ist sehr ähnlich, sondern auch der identische Verschlüsselungsschlüssel wird in beiden Implementierungen verwendet, was wiederum die Ähnlichkeit zwischen den beiden Varianten unterstreicht.

POST Requests

In den POST-Requests, die SideWalk zum Abrufen von Befehlen und Nutzdaten vom C&C-Server verwendet, fällt die Verwendung der beiden Parameter gtsid und gtuvid auf, wie in Abbildung 13 zu sehen ist. Die gleichen Parameter werden in der Linux-Variante verwendet.

POST /M26RcKtVr5WniDVZ/5CDpKo5zmAYbTmFl HTTP/1.1
Cache-Control: no-cache
Connection: close
Pragma: no-cache
User-Agent: Mozilla/5.0 Chrome/72.0.3626.109 Safari/537.36
gtsid: zn3isN2C6bWsqYvO
gtuvid: 7651E459979F931D39EDC12D68384C21249A8DE265F3A925F6E289A2467BC47D
Content-Length: 120
Host: update.facebookint.workers[.]dev

Abbildung 13. Beispiel für einen von SideWalk Windows verwendeten POST-Request

Ein weiterer interessanter Punkt ist, dass die Windows-Variante als vollständig positionsunabhängiger Shellcode läuft, während die Linux-Variante eine gemeinsam genutzte Bibliothek ist. Wir sind jedoch der Meinung, dass die Autoren der Malware einen zusätzlichen Schritt hätten machen können, indem sie ein Tool wie sRDI verwendet hätten, um eine kompilierte SideWalk PE in Shellcode zu konvertieren, anstatt den Shellcode manuell zu schreiben.

Befehle

Nur vier Befehle sind in der Linux-Variante nicht oder anders implementiert, wie in Tabelle 1 aufgeführt. Alle anderen Befehle sind vorhanden - sogar mit den gleichen IDs.

Tabelle 1. Befehle mit unterschiedlicher oder fehlender Implementierung in der Linux-Version von SideWalk

Command ID (from C&C) Windows variants Linux variants
0x7C Load a plugin sent by the C&C server. Not implemented in SideWalk Linux.
0x82 Collect domain information about running processes, and owners (owner SID, account name, process name, domain information). Do nothing.
0x8C Data serialization function. Commands that are not handled, but fall in the default case, which is broadcasting a message to all the loaded modules.
0x8E Write the received data to the file located at %AllUsersProfile%\UTXP\nat\<filename>, where <filename> is a hash of the value returned by VirtualAlloc at each execution of the malware. #rowspan#

Versionierung

Bei der Linux-Variante haben wir eine Besonderheit festgestellt, die bei der Windows-Variante nicht zu finden war: Es wird eine Versionsnummer berechnet (siehe Abbildung 14).

Abbildung 14. Versionierungsfunktion in SideWalk Linux

Das fest kodierte Datum könnte der Beginn oder das Ende der Entwicklung dieser Version von SideWalk Linux sein. Die endgültige Berechnung erfolgt aus dem Jahr, dem Tag und dem Monat, ausgehend von dem Wert 26. Oktober 2020. In diesem Fall lautet das Ergebnis 1171798691840.

Plugins

In den SideWalk-Linux-Varianten sind die Module eingebaut; sie können nicht vom C&C-Server abgerufen werden. Dies ist ein bemerkenswerter Unterschied zur Windows-Variante. Einige dieser eingebauten Funktionen, wie das Sammeln von Systeminformationen (z. B. SysInfoMgr) und die Netzwerkkonfiguration, werden in der Windows-Variante direkt von speziellen Funktionen ausgeführt. Bei der Windows-Variante können einige Plugins über die C&C-Kommunikation hinzugefügt werden.

Umgehung der Verteidigung

Die Windows-Variante von SideWalk gibt sich große Mühe, die Ziele ihres Codes zu verschleiern. Sie hat alle Daten und den Code, die für die Ausführung nicht erforderlich sind, entfernt und den Rest verschlüsselt. Die Linux-Varianten hingegen enthalten Symbole und lassen einige eindeutige Authentifizierungsschlüssel und andere Artefakte unverschlüsselt, was die Erkennung und Analyse erheblich erleichtert.

Außerdem deutet die viel höhere Anzahl von Inline-Funktionen in der Windows-Variante darauf hin, dass der Code mit einem höheren Maß an Compiler-Optimierungen kompiliert wurde.

Fazit

Die Backdoor, mit der im Februar 2021 eine Universität in Hongkong angegriffen wurde, gehört zur gleichen Malware-Familie wie die SideWalk-Backdoor und ist eigentlich eine Linux-Variante der Backdoor. Diese Linux-Version weist einige Ähnlichkeiten mit ihrem Windows-Pendant auf, hat aber auch einige Neuerungen zu bieten.

Wenn Sie Fragen zu unseren auf WeLiveSecurity veröffentlichten Studien haben, kontaktieren Sie uns bitte unter threatintel@eset.com.
ESET Research bietet jetzt auch private APT Intelligence-Berichte und Daten-Feeds an. Wenn Sie Fragen zu diesem Service haben, besuchen Sie die ESET Threat Intelligence-Seite.

IoCs

Eine umfassende Liste von Angriffsindikatoren (Indicators of Compromise - IoC) und Samples finden Sie in unserem GitHub-Repository.

SHA-1 Filename ESET detection name Description
FA6A40D3FC5CD4D975A01E298179A0B36AA02D4E ssh_tunnel1_0 Linux/SideWalk.L SideWalk Linux (StageClient variant)
7DF0BE2774B17F672B96860D013A933E97862E6C hw_ex_watchdog.exe Linux/SideWalk.B SideWalk Linux (Specter variant)

Netzwerk

Domain IP First seen Notes
rec.micosoft[.]ga 172.67.8[.]59 2021-06-15 SideWalk C&C server (StageClient variant)
66.42.103[.]222 2020-09-25 SideWalk C&C server (Specter variant from 360 Netlab’s blogpost)

MITRE ATT&CK Techniken

Diese Tabelle wurde mit Version 11 des MITRE ATT&CK Framework erstellt.

Tactic ID Name Description
Resource Development T1587.001 Develop Capabilities: Malware SparklingGoblin uses its own malware arsenal.
Discovery T1016 System Network Configuration Discovery SideWalk Linux has the ability to find the network configuration of the compromised machine, including the proxy configuration.
Command and Control T1071.001 Application Layer Protocol: Web Protocols SideWalk Linux communicates via HTTPS with the C&C server.
T1573.001 Encrypted Channel: Symmetric Cryptography SideWalk Linux uses ChaCha20 to encrypt communication data.

 

Haben Sie Fragen und Anregungen zu diesem, anderen oder zukünftigen Themen, die Sie gern betrachtet sehen wollen?
Dann nutzen Sie gern die Kommentarfunktion unter diesem Artikel oder nutzen unser Kontaktformular!