Im Juni 2023 veröffentlichten die Bitdefender Labs einen detaillierten Forschungsbericht über eine Spionageoperation in Ostasien. Diese Operation, die seit mindestens Anfang 2022 lief, zeigte ein hohes Maß an Raffinesse, das typischerweise mit staatlich unterstützten Gruppen assoziiert wird. Trotz verschiedener Ermittlungsmethoden konnten die genauen Akteure nicht eindeutig identifiziert werden, jedoch passt das Zielprofil zu den Interessen chinesischer Akteure.
Besonders hervorzuheben ist dabei eine neue, speziell entwickelte Schadsoftware, die von Bitdefender als RDStealer bezeichnet wurde. Dieser serverseitige Implantat überwacht eingehende Remotedesktopverbindungsprotokoll (RDP)-Verbindungen, insbesondere wenn die Client-Laufwerkzuordnung aktiviert ist. Angesteckte RDP-Clients werden mit dem Logutil-Backdoor, einer weiteren benutzerdefinierten Schadsoftware, infiziert. Sensible Daten wie Anmeldeinformationen oder private Schlüssel werden dann exfiltriert.
Die DLL-Sideloading-Technik hat sich in den letzten Jahren zu einer der verbreitetsten Tarnmethoden entwickelt. Die in dieser Kampagne beobachtete Verkleidung übertrifft jedoch bisherige Erkenntnisse. Mehrere DLL-Bibliotheken sind Teil eines komplexen Sideloading-Angriffs, die ausgewählten Speicherorte fügen sich nahtlos in das System ein, und der eigentliche Sideloading-Prozess wird durch die clevere Nutzung des WMI-Subsystems (Windows Management Instrumentation) initiiert.
Sowohl RDStealer als auch Logutil sind in der Programmiersprache Go geschrieben. Go ist bekannt für seine starke plattformübergreifende Unterstützung, was es Malware-Autoren ermöglicht, bösartigen Code zu erstellen, der auf verschiedenen Betriebssystemen läuft. Bei der Analyse von Domänen, die mit diesem Angriff in Verbindung gebracht wurden, wurden Referenzen auf Linux und ESXi gefunden, was darauf hindeutet, dass der Logutil-Backdoor ein plattformübergreifendes Werkzeug ist.
Obwohl das theoretische Konzept dieser Angriffsmethode bereits länger bekannt ist, markiert dies den ersten konkreten Fall von Malware, die sie nutzt. Angesichts des Potenzials dieser Methode, mit minimalen oder keinen Änderungen auf verschiedene Endbenutzer-Computing-(EUC)-Plattformen angewendet zu werden, und der verstärkten Einführung solcher Lösungen während der COVID-19-Pandemie, wird diese Forschung geteilt, um die öffentliche Aufmerksamkeit zu erhöhen.
Dies ist eine zusammengefasste Version der RedClouds-Spionageoperation. Die vollständige Forschungsarbeit “Exposing RDStealer – Deep Dive into a Targeted Cyber-Attack Against East-Asia Infrastructure” enthält weitere Details, einschließlich der vollständigen Liste der Indikatoren für eine Kompromittierung und zusätzlicher technischer Einblicke.
Die Anatomie eines Angriffs
Basierend auf der Analyse von passiven DNS-Informationen, VirusTotal-Samples und gefundenen Artefakten wurde festgestellt, dass die Bedrohungsakteure mindestens seit 2020 aktiv sind. Ursprünglich setzten sie auf frei verfügbare Tools wie AsyncRat oder Cobalt Strike. Ab Ende 2021 oder Anfang 2022 wechselten sie jedoch zu selbst entwickelter Schadsoftware. Dieser Übergang zu benutzerdefinierter Malware steht im Einklang mit einem wachsenden Trend anderer Bedrohungsakteure, die ihre Taktiken zur Umgehung von Erkennungssoftware (wie EDR oder XDR) anpassen.
Der primäre Zweck des Angriffs schien der Diebstahl von Anmeldeinformationen und die Datenexfiltration zu sein. Als Teil einer Umgehungsstrategie nutzten die Angreifer Ordner, die typischerweise weniger verdächtig sind und oft von Sicherheitsscans ausgeschlossen werden:
%WinDir%System32%WinDir%System32wbem%WinDir%securitydatabase%PROGRAM_FILES%f-securepsbdiagnostics%PROGRAM_FILES_x86%dellcommandupdate%PROGRAM_FILES%dellmd storage softwaremd configuration utility
Die Pfade %PROGRAM_FILES% und %PROGRAM_FILES_x86% wurden wahrscheinlich gewählt, um legitime Software zu imitieren. Es konnte zwar nicht eindeutig bestimmt werden, ob die Ordnernamen zufällig gewählt wurden, doch nach Überprüfung der Hardware-Inventare wurde bestätigt, dass die infizierten Maschinen tatsächlich von Dell hergestellt wurden.
Schadsoftware wurde auch im zusätzlichen Ordner %WinDir%securitydatabase gefunden, der als Speicherort für Sicherheitsdatenbanken in Windows dient. Microsoft hat Anleitungen zur Ausschließung spezifischer Dateien innerhalb dieses Speicherorts von Scans durch Endpunktsicherheitsprodukte bereitgestellt. Die Angreifer vermuteten möglicherweise, dass einige Administratoren oder Sicherheitslösungen den gesamten Ordner ausschließen würden, anstatt präzisere und granularere Ausschlüsse zu implementieren.
RDStealer
Die erste analysierte benutzerdefinierte Malware spezialisiert sich auf die Datenerfassung, einschließlich der Erfassung von Zwischenablageinhalten und Keylogging-Fähigkeiten. Interessanter war jedoch die Fähigkeit, eingehende RDP-Verbindungen zu überwachen und eine Remote-Maschine zu kompromittieren, wenn die Client-Laufwerkzuordnung aktiviert ist.
Die Client-Laufwerkzuordnung (CDM) ist ein virtueller Kanal, der Teil des RDP-Protokolls ist und die Übertragung von Daten zwischen dem RDP-Client und dem RDP-Server ermöglicht. CDM ist speziell dafür verantwortlich, die lokalen Laufwerke des Client-Computers (von dem aus die RDP-Sitzung initiiert wird) innerhalb der Remote-Desktop-Sitzung anzuzeigen.
Eine Grafik, die den Prozess der Client-Laufwerkzuordnung bei RDP zeigt
Diese Funktion ermöglicht es Benutzern, Dateien zwischen ihrem lokalen Computer und dem entfernten Server oder Desktop, mit dem sie über RDP (aber auch andere Protokolle) verbunden sind, zu greifen und zu übertragen. Diese Funktion wird häufig von Administratoren verwendet, um Dateien zwischen entfernten Servern und ihren Admin-Workstations zu übertragen.
Eine Darstellung von Laufwerken in einem Remote-Desktop-Sitzung
Die CDM wird jedoch auch häufig von normalen Endbenutzern in EUC-Umgebungen sowohl für virtuelle Desktops als auch für Anwendungsvirtualisierung verwendet. Im EUC-Kontext haben Endbenutzer normalerweise keine direkte Kontrolle über diese Funktion, da sie zentral über Richtlinien konfiguriert wird. Sowohl die Server- als auch die Client-Seite müssen diese Funktion aktiviert haben, damit sie funktioniert. Es ist jedoch üblich, dass Clients (dezentral) diese dauerhaft aktiviert haben, während die Konfiguration ausschließlich auf der Serverseite (zentral) verwaltet wird. Dies ist eine gute Erinnerung daran, dass Zero Trust nicht nur Netzwerke oder Authentifizierung umfasst, sondern ein umfassenderes Prinzip ist – Server in einem internen Netzwerk sind nicht unbedingt vertrauenswürdiger als remote verbundene Clients.
Obwohl spezifische Details zum Infektionsvektor fehlen und nicht eindeutig bestätigt werden kann, ob das kompromittierte System für administrativen Zugriff oder normale Benutzerinteraktionen genutzt wurde, ist es wichtig zu beachten, dass diese Technik in beiden Szenarien anwendbar ist. Darüber hinaus ist zu erwähnen, dass andere Lösungen, die CDM verwenden, anfällig für Schwachstellen sein könnten, wenn sie tsclient für die Host-zu-Client-Umleitung verwenden. Selbst Lösungen, die nicht auf tsclient basieren, aber ihre eigene Implementierung virtueller Kanäle verwenden, können mit geringfügigen Codeänderungen angegriffen werden.
Auf kompromittierten Maschinen befand sich RDStealer unter „%PROGRAM_FILES%dellmd storage softwaremd configuration utilitymodular disk service daemon.exe“. RDStealer ist in Go geschrieben, und nach der Codeanalyse wurden folgende Pakete (Codebibliotheken) identifiziert:
| Paketname | Beschreibung |
|---|---|
cli | Implementiert die Erfassung von Zwischenablageinhalten mithilfe von Windows-APIs wie OpenClipboard und GetClipboardData. |
key | Implementiert die Erfassung von Tastatureingaben zusammen mit dem Fensternamen. |
main | Fungiert als Orchestrator und verwendet das Paket modules, um die Persistenz einzurichten und die Datensammlung zu starten, wenn bestimmte Bedingungen erfüllt sind. |
modules | Implementiert verschiedene Funktionen zur Sammlung und Vorbereitung von Daten für die weitere Exfiltration. |
utils | Implementiert Ver- und Entschlüsselungsfunktionen, die Manipulation von Dateiattributen und Protokollfunktionen. |
Nach dem Start beginnt die Hauptfunktion mit der Sammlung von Zwischenablagedaten und Tastatureingaben vom Host. Diese Daten werden periodisch in der Protokolldatei C:userspubliclog.log in Form von verschlüsselten Zeichenketten gespeichert. Nach Beginn der Datenerfassung erstellt RDStealer eine Endlosschleife, die die Funktion diskMounted aufruft. Die Funktion diskMounted prüft periodisch die Verfügbarkeit einer tsclient-Verbindung und eines der Laufwerke C, D, E, F, G oder H. Diese Freigaben werden automatisch erstellt, wenn CDM aktiviert ist und stellen die einzelnen Laufwerke des verbundenen RDP-Clients dar.
Darstellung von gemounteten Laufwerken in einem RDP-Sitzung
Wenn eine dieser Freigaben erkannt wird, werden folgende Funktionen ausgelöst:
- main.notifyMaster – Benachrichtigt den Befehls- und Kontrollserver (C2), dass ein Client verbunden ist.
- Main.DiskEnum – Beginnt mit der Exfiltration von Daten vom verbundenen RDP-Client.
- main.writePersist – Stellt den Logutil-Backdoor auf dem verbundenen RDP-Client bereit.
notifyMaster – C2-Kommunikation
Die Funktion notifyMaster sendet eine GET-Anfrage an einen anderen Server im selben Netzwerk, der als Proxy für die Kommunikation mit der C2-Infrastruktur der Angreifer fungiert.
Die URL-Adresse, an die diese Anfrage gesendet wird, hat das Format https://<proxy-adresse>:7443/pdr.php?name=<host>&ip=. Dieser Alarm dient den Angreifern als Hinweis, dass einer der kompromittierten RDP-Hosts versucht hat, Daten von einem verbundenen Client zu exfiltrieren, und die Daten nun zur manuellen Sammlung durch die böswilligen Akteure bereitstehen.
DiskEnum – Datenexfiltration
Die Funktion DiskEnum sucht nach wertvollen Informationen auf dem verbundenen RDP-Client zur Datenexfiltration.
Das erste Ziel sind einige sehr spezifische Ordner, darunter mRemoteNG (ein Multi-Protokoll-Remote-Verbindungsmanager), KeePass (Passwortmanager) und der Verlauf von Google Chrome. Wenn einer dieser Ordner gefunden wird, wird ein ZIP-Archiv erstellt und auf dem RDP-Host gespeichert als C:UsersPublicDocuments<id><timestamp>.dat.
| Speicherort | ID |
|---|---|
\tsclientcusers\appdataroamingmremoteng | mre |
\tsclientcusers\appdataroamingkeepass | keyp |
\tsclientcusers\appdatalocal\GoogleChromeUser DataDefaultHistory | chro |
Dies unterstreicht die Tatsache, dass die Angreifer aktiv nach Anmeldeinformationen und gespeicherten Verbindungen zu anderen Systemen suchen. Dieser Trend zeigt sich auch im nächsten Schritt, bei dem ein Client nach Dateien mit spezifischen Erweiterungen in folgenden Speicherorten durchsucht wird: %AppData%, %LocalAppData%, Desktop, Documents, Downloads, %ProgramFiles% und %ProgramFiles(x86)%.
| Dateien | ID | Details |
|---|---|---|
.kdb, .kdbx | kdb | KeePass-Passwortdatenbank |
confCons.xml | mre | mRemoteNG-Verbindungen |
.rdg | rdg | Remote Desktop Connection Manager-Verbindungen |
id_rsa | idrsa | SSH-Privatschlüssel |
.xsh | xsh | NetSarang Xshell-Verbindungen |
.tlp, .bscp | tlp | Bitvise SSH-Client |
.mxtsessions | mxts | MobaXterm-Verbindungen |
Alle gefundenen Dateien werden in einem ZIP-Archiv auf dem RDP-Host am folgenden Speicherort gespeichert: C:UsersPublicDocuments<id><timestamp>.dat.
Nach Abschluss der Datenexfiltration von der Remote-C-Festplatte beginnt RDStealer mit der Suche auf den Laufwerken D, E, F, G und H, jedoch mit einem leicht anderen Ansatz. Anstatt spezifische Ordner zu durchsuchen, werden alle Ordner mit den folgenden Ausnahmen rekursiv gescannt:
| Ausgeschlossene Ordner |
|---|
windows, datareporting, libreoffice, node_modules, all user, default user, user data, .rust, download, desktop, document, assembly, .git, microsoft, winsxs, en-us, mui, .net, dotnet, visual, cache, recycle, systemapp, driverstore, catroot, package, prefetch, installer, fonts, cursors |
Da dieser rekursive Scan viel Zeit in Anspruch nehmen kann, gibt es einen Mechanismus, der die Ausführung auf einmal pro Woche beschränkt. Die Datei userspublicVideosvcache.dat wird modifiziert, wenn die Datenexfiltration abgeschlossen ist, und das letzte Änderungsdatum wird mit der aktuellen Zeit verglichen, um zu bestimmen, ob es Zeit für eine weitere Systemdurchsuchung ist. Es ist erwähnenswert, dass diese Funktionalität nicht wie beabsichtigt funktioniert – der Speicherort dieser Datei ist ungültig, da sie als Zeichenkette ohne Laufwerksbuchstaben oder Freigabeort definiert ist. Es ist höchstwahrscheinlich, dass die Angreifer beabsichtigten, diese Datei auf dem kompromittierten RDP-Client (\tsclientc-Speicherort) zu erstellen.
WritePersist – Nachgeschaltete Kompromittierung
Die Funktion WritePersist ist für die Bereitstellung des Logutil-Backdoors auf dem verbundenen RDP-Client verantwortlich.
Zuerst wird eine Liste von Benutzern von \tsclientcusers abgerufen. Für das Home-Verzeichnis jedes Benutzers werden die folgenden bösartigen Dateien vom kompromittierten RDP-Host auf den verbundenen RDP-Client übertragen.
| Quelle | Ziel |
|---|---|
C:UsersPublicDownloadst1lnk.dat | \tsclientcusers<user>AppDataRoamingMicrosoftWindowsStart MenuProgramsStartupt1lnk.dat.lnk |
C:UsersPublicDownloadsmsengine.exe | \tsclientcUsersPublicDocumentsmsengine.exe |
C:UsersPublicDownloadsEvent.dll | \tsclientcUsersPublicDocumentsEvent.dll |
C:UsersPublicDownloadsevent.sdb | \tsclientcUsersPublicDocumentsevent.sdb |
C:UsersPublicDocumentsn.dat | \tsclientcwindowssystem32wbemNCObjAPI.dll |
C:UsersPublicDocumentsw.dat | \tsclientcwindowssystem32wbemWBEMWork.dll |
Für die ersten 4 Dateien wurden keine Samples auf den betroffenen Maschinen gefunden, aber es scheint, dass t1lnk.dat.lnk der Auslöser für die Persistenz beim Systemstart war.
Die letzten beiden Dateien sind der Loader und der Logutil-Backdoor. Wie im nächsten Abschnitt beschrieben, wird Logutil durch die clevere Nutzung des WMI-Subsystems initiiert, was auch durch den Namen der Funktion, die diesen Backdoor bereitstellt – WorkWithWbem (WMI ist Microsofts Implementierung von WBEM) – angedeutet wird.
Logutil
Der in Go geschriebene Logutil-Backdoor implementiert die üblichen Fähigkeiten, die für die Aufrechterhaltung des Zugriffs im Netzwerk des Opfers erforderlich sind, wie z.B. Datei-Download/Upload und Befehlsausführung.
Was Logutil besonders faszinierend macht, ist das Ausmaß, in dem es DLL-Sideloading-Techniken zur Umgehung der Erkennung nutzt, gekoppelt mit der Verwendung von WMI als Auslöser für die Aktivierung.
Es wurde eine Kombination aus passiven (eigenständige Binärdateien) und aktiven (vorinstallierte Binärdateien) DLL-Sideloading-Exploits beobachtet. Einige Samples basierten auf dem traditionelleren DLL-Sideloading – eine geplante Aufgabe, die eine ausführbare Datei startet, die eine Bibliothek lädt. Die interessantere Variante missbrauchte jedoch den Windows Management Instrumentation-Dienst (Winmgmt), was zur Ausführung der bösartigen Binärdatei bithostw.dll (=Logutil) führte.
Um dieses Ziel zu erreichen, platzierten die Angreifer einen bösartigen Loader namens ncobjapi.dll in den Ordner %WinDir%System32wbem. Dieser bösartige Implantat imitiert die legitime ncobjapi.dll-Bibliothek, die sich im übergeordneten Ordner %WinDir%System32 befindet, indem er dieselben Funktionen exportiert und die Aufrufe an die ursprüngliche Bibliothek weiterleitet. Da der Unterordner wbem vor System32 auf die Existenz dieser Bibliothek geprüft wird, wird die bösartige Bibliothek zuerst geladen.
Eine Darstellung der DLL-Sideloading-Technik mit WMI
Dieser Implantat ist sehr effektiv, um Persistenz auf dem System zu etablieren. Er kann entweder durch den WMI-Dienst (automatisch mit mehreren Wiederherstellungsaktionen gestartet) oder durch den WMI-Host-Prozess ausgelöst werden. Oft laufen mehrere Instanzen des WMI-Host-Prozesses (WmiPrvSE.exe), und es gibt mehrere Möglichkeiten, wie dieser Prozess gestartet wird (einschließlich über die DCOM-Schnittstelle für Remote-WMI-Aufrufe). Die Bibliothek ncobjapi.dll wurde bereits von anderen Bedrohungsakteuren wie der Lazarus-Gruppe oder den Betreibern von RadRat für bösartige Zwecke genutzt, aber in diesem Fall ist sie nur Teil der Sideloading-Kette. Die eigentliche Payload (geladen durch den ncobjapi.dll-Loader) ist bithostw.dll (Logutil).
Logutil kann direkt mit der C2-Infrastruktur oder über einen anderen Proxy-Server im selben Netzwerk kommunizieren. Die Befehle vom C2 werden durch eine HTTP-GET-Anfrage an die Adresse https://<port>/info abgerufen. Hier ist eine Liste der Befehle, die vom entfernten C2-Server abgerufen werden können:
| Befehl | Parameter | Details |
|---|---|---|
set | = | Setzt den Wert () der Umgebungsvariable () auf dem kompromittierten System. |
load | oder | Die zu ladende DLL-Bibliothek, die reflektierend in den Speicher geladen wird. |
c | Führt einen Befehl mit Ausgabenerfassung aus (unter Verwendung eines Shell-Objekts). | |
s | Führt einen Befehl ohne Ausgabenerfassung aus (unter Verwendung eines Shell-Objekts). | |
t | , | Touch-Operation, die die Dateiattribute der ersten Datei auf die zweite setzt. |
d1 | Ruft CryptUnprotectData für die empfangenen Daten auf und sendet das Ergebnis zurück. | |
fu | Lädt die Datei in Chunks zum Opfer hoch. | |
fd | Lädt die Datei in Chunks vom Opfer herunter. | |
idle | Wartet für eine zunehmende Zeitspanne; die Wartezeit beginnt mit 6 Sekunden und erhöht sich jedes Mal um einen zufälligen Ganzzahlwert zwischen 0 und 4. | |
sleep | Wartet für die angegebene Anzahl von Sekunden. | |
ls | Führt eine rekursive Auflistung des Ordners durch. | |
info | Sendet Informationen über den Implantat, wie z.B. die Laufzeit und die zugewiesene ID. | |
exit | Beendet den Prozess. |
Fazit
Cyberkriminelle entwickeln sich ständig weiter und erforschen neue Methoden, um die Zuverlässigkeit und Tarnung ihrer bösartigen Aktivitäten zu verbessern. Dieser Angriff ist ein Beweis für die zunehmende Raffinesse moderner Cyberangriffe, unterstreicht aber auch die Tatsache, dass Bedrohungsakteure ihre neu gewonnene Raffinesse nutzen können, um ältere, weit verbreitete Technologien auszunutzen. Das von den Bitdefender Labs veröffentlichte vollständige Forschungsdokument enthält weitere Details, einschließlich der vollständigen Liste der Indikatoren für eine Kompromittierung und zusätzlicher technischer Einblicke.
Der beste Schutz gegen moderne Angriffe bleibt die Defense-in-Depth-Architektur. Dieser Ansatz beinhaltet die Anwendung mehrerer übereinander liegender Sicherheitsmaßnahmen, die darauf ausgelegt sind, eine Vielzahl von Bedrohungen abzuwehren.
Der erste Schritt zur Einführung einer mehrschichtigen Strategie ist die Beherrschung der Präventionsfähigkeiten. Versuchen Sie, die Angriffsfläche zu minimieren und die Anzahl der Angriffspunkte zu reduzieren, die von den Angreifern genutzt werden können. Identifizieren und beheben Sie Schwachstellen durch die Implementierung von Patch- und Risikomanagementlösungen, bevor die Angreifer diese ausnutzen können. Berücksichtigen Sie die Auswirkungen kompromittierter VDI- oder RDS-Hosts auf die verbundenen Clients und überprüfen und aktualisieren Sie gegebenenfalls Ihre Zugriffsrichtlinien.
Auch wenn sich dieser Fall auf die Client-Laufwerkumleitung konzentriert, sind alle virtuellen Kanäle in der Lage, Daten zu übertragen und können potenziell für bösartige Zwecke missbraucht werden. Automatisierte Schutzkontrollen sollten an allen potenziellen Angriffspunkten, die den Angreifern ausgesetzt sind (einschließlich Homeoffice-Laptops oder mobiler Mitarbeiter), implementiert werden. Dazu gehören Next-Generation-Antivirus-Programme, aber auch nahtlos integrierte IP/URL/Domänen-Reputation und Schutz vor bisher unbekannten Bedrohungen. Dies ermöglicht es Ihnen, die meisten Sicherheitsvorfälle zu erkennen und zu blockieren, bevor sie Schaden anrichten können.
Trotz Ihrer besten Bemühungen ist es immer noch möglich, dass moderne Angreifer Ihre Präventions- und Schutzmaßnahmen überwinden. Hier kommen Ihre Erkennungsfähigkeiten ins Spiel. Ob Sie diese Fähigkeiten als Produkt (EDR/XDR) oder als Dienstleistung (MDR) erhalten, das Ziel ist, die Zeit zu minimieren, in der Bedrohungsakteure unentdeckt bleiben.
Schließlich benötigen Sie für alle diese Fähigkeiten, um Sicherheitsrisiken effektiv zu reduzieren, Reaktionsfähigkeiten über alle Ebenen hinweg. Ob es sich um das Einspielen von Patches handelt, bevor Schwachstellen ausgenutzt werden können, die Untersuchung eines potenziellen Sicherheitsvorfalls oder die Schadensbegrenzung nach einer Sicherheitsverletzung – Security Operations spielen eine entscheidende Rolle bei der Reduzierung von Sicherheitsrisiken.
Die Verwendung mehrerer Sicherheitsebenen schafft überlappende Barrieren, die ein Angreifer überwinden muss, was die Wahrscheinlichkeit erfolgreicher Angriffe reduzieren, den Umfang eines Angriffs im Falle eines Eintritts begrenzen und eine frühzeitige Warnung vor potenziellen Bedrohungen geben kann. Letztendlich werden Sicherheitsvorfälle so daran gehindert, zu Sicherheitsverletzungen zu werden.
