ESET-Forscher haben eine der Payloads des Wslink-Downloaders entdeckt, den wir bereits 2021 aufgedeckt haben. Wir haben diese Payload WinorDLL64 genannt, basierend auf ihrem Dateinamen WinorDLL64.dll. Wslink, der den Dateinamen WinorLoaderDLL64.dll trug, ist ein Loader für Windows-Binärdateien, der im Gegensatz zu anderen solchen Loadern als Server läuft und empfangene Module im Speicher ausführt. Wie der Wortlaut vermuten lässt, dient ein Loader als Werkzeug, um eine Payload, also die eigentliche Malware, auf das bereits kompromittierte System zu laden. Der ursprüngliche Wslink-Kompromittierungsvektor wurde noch nicht identifiziert.
Der zunächst unbekannte Wslink Payload wurde kurz nach der Veröffentlichung unseres Blogposts von Südkorea aus auf VirusTotal hochgeladen und löste eine unserer YARA-Regeln aus, die auf Wslinks eindeutigem Namen WinorDLL64 basiert. Was Wslink betrifft, so hat die ESET-Telemetrie nur wenige Entdeckungen gemacht - in Mitteleuropa, Nordamerika und im Nahen Osten.
Diese WinorDLL64 Payload dient als Backdoor, die vor allem umfangreiche Systeminformationen sammelt, Mittel zur Dateimanipulation bereitstellt, wie z. B. das Stehlen, Überschreiben und Entfernen von Dateien, und zusätzliche Befehle ausführt. Interessanterweise kommuniziert sie über eine Verbindung, die bereits durch den Wslink-Loader aufgebaut wurde.
Im Jahr 2021 haben wir keine Daten gefunden, die darauf hindeuten, dass Wslink ein Tool von einem bekannten Bedrohungsakteur ist. Nach einer umfassenden Analyse dieser Payload können wir WinorDLL64 jedoch mit ein klein wenig Sicherheit der Lazarus-APT-Gruppe zuordnen - aufgrund der Zielregion und der Überschneidung von Verhalten und Code mit bekannten Lazarus-Samples.
Diese berüchtigte, mit Nordkorea verbündete Gruppe ist seit mindestens 2009 aktiv und verantwortlich für viel beachtete Vorfälle wie den Hack von Sony Pictures Entertainment und Cyberdiebstähle in Millionenhöhe im Jahr 2016, den WannaCryptor-Ausbruch im Jahr 2017 und eine lange Reihe von Störangriffen auf die öffentliche und kritische Infrastruktur Südkoreas seit mindestens 2011. Das US-CERT und das FBI bezeichnen diese Gruppe als HIDDEN COBRA.
Aufgrund unserer umfassenden Kenntnisse über die Aktivitäten und Operationen dieser Gruppe glauben wir, dass Lazarus aus einem großen Team besteht, das systematisch organisiert und gut vorbereitet ist und sich aus mehreren Untergruppen zusammensetzt, die ein umfangreiches Toolset nutzen. Letztes Jahr entdeckten wir ein Lazarus-Tool, das die Sicherheitslücke CVE-2021-21551 ausnutzte, um einen Mitarbeiter eines Luft- und Raumfahrtunternehmens in den Niederlanden und einen politischen Journalisten in Belgien anzugreifen. Es war der erste aufgezeichnete Missbrauch der Schwachstelle; in Kombination führten das Tool und die Schwachstelle dazu, dass die Überwachung aller Sicherheitslösungen auf den kompromittierten Rechnern ausgeschaltet wurde. Wir haben auch eine ausführliche Beschreibung der Struktur der virtuellen Maschine geliefert, die in den Samples von Wslink verwendet wurde.
Dieser Blogpost erklärt die Attribution von WinorDLL64 zu Lazarus und bietet eine Analyse dieser Payload.
Verbindungen zu Lazarus
Wir haben Überschneidungen sowohl im Verhalten als auch im Code mit Lazarus Samples aus Operation GhostSecret und dem von McAfee beschriebenen Bankshot-Implantat entdeckt. Die Beschreibung der Implantate in den GhostSecret- und Bankshot-Artikeln enthält Überschneidungen in der Funktionalität mit WinorDLL64 und wir haben einige Code-Überschneidungen in den Samples gefunden. In diesem Blogpost werden wir nur das Sample FE887FCAB66D7D7F79F05E0266C0649F0114BA7C aus GhostSecret für den Vergleich mit WinorDLL64 (1BA443FDE984CEE85EBD4D4FA7EB1263A6F1257F) verwenden, sofern nicht anders angegeben.
Die folgenden Details fassen die Fakten zusammen, die für unsere (wenn auch geringe) Zuversicht sprechen, Lazarus zuzuordnen:
1. Zielwahl
- Kollegen von AhnLab haben in ihren Telemetriedaten südkoreanische Opfer von Wslink bestätigt, was angesichts der traditionellen Lazarus-Ziele und der Tatsache, dass wir nur wenige Treffer beobachtet haben, ein wichtiger Indikator ist.
2. Malware
- Das jüngste von McAfee gemeldete GhostSecret Sample (FE887FCAB66D7D7F79F05E0266C0649F0114BA7C) stammt vom Februar 2018; wir entdeckten das erste Sample von Wslink Ende 2018 und andere Forscher meldeten Treffer im August 2018, die sie nach unserer Veröffentlichung bekannt gaben. Diese Samples wurden also in einem relativ kurzen zeitlichen Abstand entdeckt.
- Die "PE rich headers" zeigen an, dass dieselbe Entwicklungsumgebung und Projekte von ähnlicher Größe in mehreren anderen bekannten Lazarus Samples verwendet wurden (z.B. 70DE783E5D48C6FBB576BC494BAF0634BC304FD6; 8EC9219303953396E1CB7105CDB18ED6C568E962). Wir haben diese Überschneidung anhand der folgenden Regeln gefunden, die nur diese Wslink- und Lazarus-Samples abdecken, was ein Indikator mit geringem Gewicht ist. Wir haben sie mit VirusTotals Retrohunt und unserem internen Datenbestand getestet.
rich_signature.length == 80 and
pe.rich_signature.toolid(175, 30319) == 7 and
pe.rich_signature.toolid(155, 30319) == 1 and
pe.rich_signature.toolid(158, 30319) == 10 and
pe.rich_signature.toolid(170, 30319) >= 90 and
pe.rich_signature.toolid(170, 30319) <= 108
Diese Regel kann in die folgende, besser lesbare und von VirusTotal verwendete Notation übersetzt werden, in der die Produktversion und die Build-ID (VS2010 Build 30319), die Anzahl und der Typ der verwendeten Quell-/Objektdateien ([LTCG C++], wobei LTCG für "Link Time Code Generation" steht, [ASM], [ C ]) und die Anzahl der Exporte ([EXP]) in der Regel zu sehen sind:
[LTCG C++] VS2010 build 30319 count=7
[EXP] VS2010 build 30319 count=1
[ASM] VS2010 build 30319 count=10
[ C ] VS2010 build 30319 count in [ 90 .. 108 ]
- Der GhostSecret-Artikel beschrieb "eine einzigartige Komponente zum Sammeln von Daten und zur Implantat-Installation, die auf Port 443 auf eingehende Kontroll-Server-Verbindungen wartet", die zusätzlich als Dienst ausgeführt wurde. Dies ist eine genaue Beschreibung des Verhaltens des Wslink-Downloaders, abgesehen von der Portnummer, die je nach Konfiguration variieren kann. Zusammenfassend lässt sich sagen, dass, obwohl die Implementierung unterschiedlich ist, beide dem gleichen Zweck dienen.
- Der Loader wird von Oreans' Code Virtualizer virtualisiert, einem kommerziellen Schutzprogramm, das häufig von Lazarus verwendet wird.
- Der Loader verwendet die MemoryModule-Bibliothek, um Module direkt aus dem Speicher zu laden. Diese Bibliothek wird nicht häufig von Malware verwendet, ist aber bei den mit Nordkorea verbündeten Gruppen wie Lazarus und Kimsuky recht beliebt.
- Überschneidungen im Code von WinorDLL64 und GhostSecret, die wir bei unserer Analyse gefunden haben. Die Ergebnisse und die Bedeutung für die Zuordnung sind in Tabelle 1 aufgeführt.
Tabelle 1. Ähnlichkeiten zwischen WinorDLL64 und GhostSecret und ihre Bedeutung für die Zuordnung beider zu ein und demselben Bedrohungsakteur
Other similarities between WinorDLL64 and GhostSecret | Impact |
---|---|
Code overlap in code responsible to get processor architecture | Low |
Code overlap in current directory manipulation | Low |
Code overlap in getting the process list | Low |
Code overlap in file sending | Low |
Behavior overlap in listing processes | Low |
Behavior overlap in current directory manipulation | Low |
Behavior overlap in file and directory listing | Low |
Behavior overlap in listing volumes | Low |
Behavior overlap in reading/writing files | Low |
Behavior overlap in creating processes | Low |
Considerable behavior overlap in secure removal of files | Low |
Considerable behavior overlap in termination of processes | Low |
Considerable behavior overlap in collecting system information | Low |
Codeüberschneidungen bei der Funktion zum Senden von Dateien sind in Abbildung 2 und Abbildung 3 hervorgehoben.
Technische Analyse
WinorDLL64 dient als Backdoor, die vor allem umfangreiche Systeminformationen erlangt, Mittel zur Dateimanipulation bereitstellt und zusätzliche Befehle ausführt. Interessanterweise kommuniziert sie über eine TCP-Verbindung, die bereits vom Loader aufgebaut wurde, und nutzt einige der Funktionen des Loaders.
Die Backdoor ist eine DLL mit einem einzigen unbenannten Export, der einen Parameter akzeptiert - eine Struktur für die Kommunikation, die bereits in unserem vorherigen Blogpost beschrieben wurde. Die Struktur enthält einen TLS-Kontext - Socket, Schlüssel, IV - und Callbacks zum Senden und Empfangen von mit 256-Bit-AES-CBC verschlüsselten Nachrichten, die es WinorDLL64 ermöglichen, Daten sicher mit dem Betreiber über eine bereits bestehende Verbindung auszutauschen.
Die folgenden Fakten lassen uns mit großer Sicherheit annehmen, dass die Bibliothek tatsächlich Teil von Wslink ist:
- Die eindeutige Struktur wird überall in der erwarteten Weise verwendet, d.h. der TLS-Kontext und andere aussagekräftige Parameter werden in der erwarteten Reihenfolge an die richtigen Callbacks übergeben.
- Der Name der DLL ist WinorDLL64.dll und der Name von Wslink war WinorLoaderDLL64.dll.
WinorDLL64 nimmt mehrere Befehle entgegen. Abbildung 5 zeigt die Schleife, die Befehle empfängt und verarbeitet. Jeder Befehl ist an eine eindeutige ID gebunden und nimmt eine Konfiguration an, die zusätzliche Parameter enthält.
Die Befehlsliste mit unseren Bezeichnungen ist in Abbildung 6 dargestellt.
Tabelle 2 enthält eine Zusammenfassung der WinorDLL64-Befehle, wobei sich die Kategorien "modified" und "old" auf die Beziehung zu den zuvor dokumentierten GhostSecret-Funktionen beziehen. Wir heben nur die wesentlichen Änderungen in der Kategorie "Modified" hervor.
Tabelle 2. Übersicht der Backdoor-Befehle
Category | Command ID | Functionality | Description |
---|---|---|---|
New | 0x03 | Execute a PowerShell command | WinorDLL64 instructs the PowerShell interpreter to run unrestricted and to read commands from standard input. Afterwards, the backdoor passes the specified command to the interpreter and sends the output to the operator. |
0x09 | Compress and download a directory | WinorDLL64 recursively iterates over a specified directory. The content of each file and directory is compressed separately and written to a temporary file that is afterwards sent to the operator and then removed securely. | |
0x0D | Disconnect a session | Disconnects a specified logged-on user from the user’s Remote Desktop Services session. The command can also perform different functionality based on the parameter. | |
0x0D | List sessions | Acquires various details about all sessions on the victim’s device and sends them to the operator. The command can also perform different functionality based on the parameter. | |
0x0E | Measure connection time | Uses the Windows API GetTickCount to measure the time required to connect to a specified host. | |
Modified | 0x01 | Get system info | Acquires comprehensive details about the victim’s system and sends them to the operator. |
0x0A | Remove files securely | Overwrites specified files with a block of random data, renames each file to a random name, and finally securely removes them one by one. | |
0x0C | Kill processes | Terminates all processes whose names match a supplied pattern and/or with a specific PID. | |
Old | 0x02/0x0B | Create a process | Creates a process either as the current or specified user and optionally sends its output to the operator. |
0x05 | Set/Get current directory | Attempts to set and subsequently acquire the path of the current working directory. | |
0x06 | List volumes | Iterates over drives from C: to Z: and acquires the drive type and volume name. The command can also perform different functionality based on the parameter. | |
0x06 | List files in a directory | Iterates over files in specified directory and acquires information such as names, attributes, etc. The command can also perform different functionality based on the parameter. | |
0x07 | Write to a file | Downloads and appends the stated amount of data to specified file. | |
0x08 | Read from a file | The specified file is read and sent to the operator. | |
0x0C | List processes | Acquires details about all running processes on the victim’s device and additionally sends ID of the current process. |
Fazit
Diese Payload von Wslink dient der Bereitstellung von Mitteln zur Dateimanipulation, der Ausführung von weiterem Code und der Beschaffung umfangreicher Informationen über das zugrundeliegende System, die möglicherweise später für laterale Bewegungen genutzt werden können, da ein besonderes Interesse an Netzwerksitzungen besteht. Der Wslink Loader lauscht auf einem in der Konfiguration angegebenen Port und kann weitere Verbindungsclients bedienen und sogar verschiedene Payloads laden.
WinorDLL64 weist Überschneidungen in der Entwicklungsumgebung, im Verhalten und im Code mit mehreren Lazarus-Samples auf, was darauf hindeutet, dass es sich um ein Tool aus dem umfangreichen Arsenal dieser nordkoreanisch ausgerichteten APT-Gruppe handeln könnte.
For any inquiries about our research published on WeLiveSecurity, please contact us at threatintel@eset.com.
Um mehr darüber zu erfahren, wie Threat Intelligence die Cybersicherheit Ihres Unternehmens verbessern kann, besuchen Sie unsere ESET Threat Intelligence Webseite.
IoCs
SHA-1 | ESET detection name | Description |
---|---|---|
1BA443FDE984CEE85EBD4D4FA7EB1263A6F1257F | Win64/Wslink.A | Memory dump of discovered Wslink payload WinorDll64. |
MITRE ATT&CK techniques
This table was built using version 12 of the ATT&CK framework. We do not mention techniques from the loader again, only the payload.
Tactic | ID | Name | Description |
---|---|---|---|
Resource Development | T1587.001 | Develop Capabilities: Malware | WinorDLL64 is a custom tool. |
Execution | T1059.001 | Command and Scripting Interpreter: PowerShell | WinorDLL64 can execute arbitrary PowerShell commands. |
T1106 | Native API | WinorDLL64 can execute further processes using the CreateProcessW and CreateProcessAsUserW APIs. | |
Defense Evasion | T1134.002 | Access Token Manipulation: Create Process with Token | WinorDLL64 can call APIs WTSQueryUserToken and CreateProcessAsUserW to create a process under an impersonated user. |
T1070.004 | Indicator Removal: File Deletion | WinorDLL64 can securely remove arbitrary files. | |
Discovery | T1087.001 | Account Discovery: Local Account | WinorDLL64 can enumerate sessions and list associated user, and client names, among other details. |
T1087.002 | Account Discovery: Domain Account | WinorDLL64 can enumerate sessions and list associated domain names –among other details. | |
T1083 | File and Directory Discovery | WinorDLL64 can obtain file and directory listings. | |
T1135 | Network Share Discovery | WinorDLL64 can discover shared network drives. | |
T1057 | Process Discovery | WinorDLL64 can collect information about running processes. | |
T1012 | Query Registry | WinorDLL64 can query the Windows registry to gather system information. | |
T1082 | System Information Discovery | WinorDLL64 can obtain information such as computer name, OS and latest service pack version, processor architecture, processor name, and amount of space on fixed drives. | |
T1614 | System Location Discovery | WinorDLL64 can obtain the victim’s default country name using the GetLocaleInfoW API. | |
T1614.001 | System Location Discovery: System Language Discovery | WinorDLL64 can obtain the victim’s default language using the GetLocaleInfoW API. | |
T1016 | System Network Configuration Discovery | WinorDLL64 can enumerate network adapter information. | |
T1049 | System Network Connections Discovery | WinorDLL64 can collect a list of listening ports. | |
T1033 | System Owner/User Discovery | WinorDLL64 can enumerate sessions and list associated user, domain, and client names –among other details. | |
Collection | T1560.002 | Archive Collected Data: Archive via Library | WinorDLL64 can compress and exfiltrate directories using the quicklz library. |
T1005 | Data from Local System | WinorDLL64 can collect data on the victim’s device. | |
Impact | T1531 | Account Access Removal | WinorDLL64 can disconnect a logged-on user from specified sessions. |
–
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!