ESET-Forscher entdeckten kürzlich gezielte Angriffe mit undokumentierten Tools auf verschiedene hochrangige Unternehmen und lokale Regierungen, hauptsächlich in Asien. Diese Angriffe wurden von einer bisher unbekannten Spionagegruppe durchgeführt, die wir Worok genannt haben und die mindestens seit 2020 aktiv ist. Das Toolset von Worok umfasst einen C++-Loader CLRLoad, eine PowerShell-Backdoor PowHeartBeat und einen C#-Loader PNGLoad, der Steganografie verwendet, um versteckte bösartige Payloads aus PNG-Dateien zu extrahieren.
Wer ist Worok?
Während der Veröffentlichung der ProxyShell-Schwachstelle (CVE-2021-34523) Anfang 2021 beobachteten wir Aktivitäten von verschiedenen APT-Gruppen. Eine davon wies gemeinsame Merkmale mit TA428 auf:
- Aktivitätszeiten
- Angegriffene Bereiche
- Verwendung von ShadowPad
Das restliche Toolset ist dagegen sehr unterschiedlich: TA428 hat sich beispielsweise an der Able Desktop Attacke im Jahr 2020 beteiligt. Wir sind der Meinung, dass die Verbindungen nicht stark genug sind, um Worok als dieselbe Gruppe wie TA428 zu betrachten, aber die beiden Gruppen könnten gemeinsame Werkzeuge und Interessen haben. Wir beschlossen, die Informationen in einem Cluster zusammenzufassen und nannten ihn Worok. Der Name wurde nach einem Mutex in einem von der Gruppe verwendeten Loader gewählt. Weitere Aktivitäten mit Varianten der gleichen Tools wurden dann mit dieser Gruppe verknüpft. Laut unserer Telemetrie ist Worok seit Ende 2020 aktiv und ist es auch jetzt noch.
Ende 2020 hatte Worok insbesondere Regierungen und Unternehmen in mehreren Ländern im Visier:
- Ein Telekommunikationsunternehmen in Ostasien
- Eine Bank in Zentralasien
- Ein Unternehmen der maritimen Industrie in Südostasien
- Eine staatliche Einrichtung im Nahen Osten
- Ein privates Unternehmen im südlichen Afrika
Von Mai 2021 bis Januar 2022 gab es eine Unterbrechung der beobachteten Vorgänge, aber im Februar 2022 kehrte die Worok-Aktivität zurück, und zwar zielgerichtet bei:
- Einem Energieunternehmen in Zentralasien
- Einer Einrichtung des öffentlichen Sektors in Südostasien
Abbildung 1 zeigt die Zielregionen und -bereiche.
In Anbetracht der Profile der Zielpersonen und der Tools, die gegen diese Opfer eingesetzt wurden, gehen wir davon aus, dass das Hauptziel von Worok darin besteht, Informationen zu stehlen.
Technische Analyse
Während die Mehrheit der anfänglichen Angriffpunkte unbekannt ist, haben wir in einigen Fällen in 2021 und 2022 Exploits gesehen, die gegen die sogenannten ProxyShell-Schwachstellen eingesetzt wurden. In diesen Fällen wurden in der Regel Webshells hochgeladen, nachdem die Schwachstellen ausgenutzt worden waren, um die Persistenz im Netzwerk des Opfers zu gewährleisten. Dann verwendeten die Betreiber verschiedene Implantate, um weitere Fähigkeiten zu erlangen.
Nachdem sie sich Zugang verschafft hatten, setzten die Angreifer mehrere öffentlich verfügbare Tools zur Erkundung und Aufklärung ein, darunter Mimikatz, EarthWorm, ReGeorg und NBTscan, und verteilten anschließend dann ihre eigenen Tools: einen First Stage Loader, gefolgt von einem .NET-Loader (PNGLoad). Leider ist es uns nicht gelungen, die endgültigen Payloads aufzuspüren. Im Jahr 2021 war der First Stage Loader eine CLR-Assembly (CLRLoad), während er im Jahr 2022 in den meisten Fällen durch eine voll funktionsfähige PowerShell-Backdoor (PowHeartBeat) ersetzt wurde - beide Angriffsverläufe sind in Abbildung 2 dargestellt. Diese drei Tools werden in den folgenden Unterabschnitten im Detail beschrieben.
CLRLoad: CLR Assembly Loader
CLRLoad ist ein generisches Windows PE, das wir sowohl in 32- als auch in 64-Bit-Versionen gesehen haben. Es handelt sich um einen in C++ geschriebenen Loader, der die nächste Stufe (PNGLoad) lädt, bei der es sich um eine Common Language Runtime (CLR) Assembly-DLL handeln muss. Dieser Code wird aus einer Datei geladen, die sich auf der Festplatte in einem legitimen Verzeichnis befindet, vermutlich um die Opfer oder Forensiker zu täuschen, damit sie glauben, es handele sich um legitime Software.
Einige CLRLoad-Beispiele beginnen mit der Dekodierung des vollständigen Pfads der Datei, deren Inhalt sie im nächsten Schritt laden werden. Diese Dateipfade werden mit einem Single-Byte-XOR verschlüsselt, wobei in jedem Sample ein anderer Schlüssel verwendet wird. Dekodiert oder im Klartext sind diese Dateipfade absolut, wobei wir die folgenden gefunden haben:
- C:\Program Files\VMware\VMware Tools\VMware VGAuth\xsec_1_5.dll
- C:\Program Files\UltraViewer\msvbvm80.dll
- C:\Program Files\Internet Explorer\Jsprofile.dll
- C:\Program Files\WinRar\RarExtMgt.dll
- C:\Program Files (x86)\Foxit Software\Foxit Reader\lucenelib.dll
Als Nächstes wird ein Mutex erstellt, der in jedem Sample einen anderen Namen hat. Der Loader sucht nach diesem Mutex; wenn er ihn findet, wird er beendet, da der Loader bereits läuft. In einem der Samples wurde der Mutex Wo0r0KGWhYGO gefunden, was der Gruppe den Namen Worok gab.
CLRLoad lädt dann eine CLR-Assembly aus dem möglicherweise dekodierten Dateipfad. Als nicht verwalteter Code erreicht CLRLoad dies über CorBindToRuntimeEx-Windows-API-Aufrufe in 32-Bit-Varianten oder CLRCreateInstance-Aufrufe in 64-Bit-Varianten.
PowHeartBeat: PowerShell Backdoor
PowHeartBeat ist eine in PowerShell geschriebene, vollumfängliche Backdoor, die mit verschiedenen Techniken wie Komprimierung, Kodierung und Verschlüsselung verschleiert wird. Basierend auf den ESET-Telemetriedaten gehen wir davon aus, dass PowHeartBeat in neueren Worok-Kampagnen CLRLoad als das Tool zum Starten von PNGLoad ersetzt hat.
Die erste Schicht des Backdoor-Codes besteht aus mehreren Stücken base64-kodierten PowerShell-Codes. Sobald die Payload rekonstruiert ist, wird sie über IEX ausgeführt. Nach der Dekodierung wird eine weitere Schicht mit verschleiertem Code ausgeführt, wie in Abbildung 3 zu sehen.
Die zweite Schicht der Backdoor entschlüsselt zunächst die nächste Schicht ihres Codes mit base64, der dann mit Triple DES (CBC-Modus) entschlüsselt wird. Nach der Entschlüsselung wird dieser Code mit dem gzip-Algorithmus dekomprimiert, wodurch die dritte Schicht des PowerShell-Codes entsteht, die die eigentliche Backdoor darstellt. Sie ist in zwei Hauptteile unterteilt: die Konfiguration und die Verarbeitung von Backdoor-Befehlen.
Die Hauptschicht des Backdoor-Codes ist ebenfalls in PowerShell geschrieben und verwendet HTTP oder ICMP zur Kommunikation mit dem C&C-Server. Sie funktioniert wie in Abbildung 4 dargestellt.
Konfiguration
Die Konfiguration enthält mehrere Felder, darunter die Versionsnummer, die optionale Proxy-Konfiguration und die C&C-Adresse. Tabelle 1 beschreibt die Bedeutung der Konfigurationsfelder in den verschiedenen Versionen, die wir beobachtet haben.
Table 1. Bedeutung der Konfigurationsfelder
Field name | Description |
---|---|
nouse / ikuyrtydyfg (other samples) |
Unused. |
ClientId |
|
Version | Version number of PowHeartBeat. |
ExecTimes | Number of allowed execution attempts when issuing a RunCmd (command running) command. |
UserAgent | User agent used for C&C communications. |
Referer | Referer header used for C&C communications. |
AcceptEncoding | Unused. |
CookieClientId CookieTaskId CookieTerminalId |
Values used to construct the Cookie header for C&C communications. |
UrlHttps | Protocol to use for C&C communications. |
UrlDomain IPAddress Domains |
URL, domain(s), or IP address used as the C&C server. If Domains is not empty, it is chosen instead of IPAddress. In other cases, IPAddress is taken. |
UrlSendHeartBeat | URL path used when the backdoor asks the C&C server for commands. |
UrlSendResult | URL path used when the backdoor sends the results of the command back to the C&C server. |
GetUrl | Complete URL, used by PowHeartBeat to request commands from the C&C server. It is the concatenation of the URL elements above. |
PutUrl | Same as GetUrl but used to send the results of the command back to the C&C server. |
currentPath | Unused. |
ProxyEnableFlag | Flag indicating whether the backdoor must use a proxy or not in order to communicate with the C&C server. |
Proxymsg | Address of the proxy to use if ProxyEnableFlag is set to $true. |
Interval | Time in seconds that the script sleeps for between GET requests. |
BasicConfigPath | Path to an optional configuration file containing UpTime, DownTime, DefaultInterval, and Domains. Those values will be overridden if the file is present. |
UpTime | Time of day from which the backdoor starts operating, meaning it starts making GET requests to the C&C server. |
DownTime | Time of day until which the backdoor can operate, meaning the time when it stops making requests to the C&C server. |
DomainIndex | Index of the current domain name to use for communications with the C&C server. In case a request returns an error message different from 304 (“Not modified”), DomainIndex is increased. |
SecretKey | Key used to decrypt/encrypt the configuration. Configuration is encrypted with multiple-byte XOR. |
IfLog | Unused. |
IfLogFilePath | Flag indicating whether logging is enabled. |
logpath | Path of the log file. |
ProxyFile | File path of the optional proxy configuration. If it is empty or not found in the file system, the backdoor retrieves the user’s proxy settings from the registry value HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyServer . |
IfConfig | Flag indicating whether to use a configuration file. |
Abbildung 5 zeigt ein Beispiel für eine Konfiguration, die aus einem PowHeartBeat-Beispiel extrahiert wurde (SHA-1: 757ABA12D04FD1167528FDD107A441D11CD8C427).
$Script:nouse = 100;
if(Test-Path $MyInvocation.MyCommand.Path){Remove-item $MyInvocation.MyCommand.Path -Force;}
$Script:ClientId = "83";
$Script:Version = "2.1.3.0003";
$Script:ExecTimes = 10;
$Script:UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3487.100 Safari/537.36";
$Script:Referer = "www.adobe.com";
$Script:AcceptEncoding = "text/html,app1ication/xhtml+xml,app1ication/xml;q=0.9,*/*;q=0.8";
$Script:CookieClientId = "s_ecid";
$Script:CookieTaskId = "aam_uuid";
$Script:CookieTerminalId = "AAMC_adobe_0";
$Script:UrlHttps = "http://";
$Script:UrlDomain= " 118.193.78[.]22:443";
$Script:UrlSendHeartBeat = "/latest/AdobeMessagingClient.js";
$Script:UrlSendResult = "/content/dam/offers-homepage/homepage.jpg";
$Script:GetUrl = $Script:UrlHttps + $Script:UrlDomain + $Script:UrlSendHeartBeat;
$Script:PutUrl = $Script:UrlHttps + $Script:UrlDomain + $Script:UrlSendResult;
$Script:currentPath = Split-Path -Parent $MyInvocation.MyCommand.Definition;
$Script:ProxyEnableFlag = $false;
$Script:Proxymsg;
$Script:Interval = 10 ;
$Script:BasicConfigPath = "C:\ProgramData\unins.dat";
$Script:UpTime = 0;
$Script:DownTime = 24;
$Script:Domains;
$Script:DomainIndex;
$Script:SecretKey = "###ConfigKey###";
#$Script:IfLog = $true;
$Script:IfLogFilePath = "C:\ProgramData\tpncp.dat";
$Script:logpath = "C:\ProgramData\unins000.dat";
$Script:ProxyFile = "C:\ProgramData\hwrenalm.dat";
$Script:IfConfig = $false;
Abbildung 5. Beispiel für eine Konfiguration
Datenverschlüsselung
PowHeartBeat verschlüsselt Logs und den Inhalt zusätzlicher Konfigurationsdateien.
Der Inhalt der Logs wird durch Multiple-Byte-XOR mit einem im Sample im Klartext angegebenen Schlüssel verschlüsselt. Interessanterweise wird clientId als Salt für den Index im Schlüssel-Array verwendet. Der Schlüssel ist ein 256-Byte-Array, das in jedem Sample identisch war. Zusätzlicher Inhalt der Konfigurationsdatei wird durch Multiple-Byte-XOR mit dem Wert von SecretKey als Schlüssel verschlüsselt.
C&C Kommunikation
PowHeartBeat verwendete bis Version 2.4 HTTP für die C&C-Kommunikation und wechselte dann zu ICMP. In beiden Fällen ist die Kommunikation nicht verschlüsselt.
HTTP
In einer Endlosschleife sendet die Backdoor eine GET-Anfrage an den C&C-Server und bittet um einen Befehl, der ausgeführt werden soll. Die verschlüsselte Antwort wird von der Backdoor entschlüsselt, die den Befehl verarbeitet und die Befehlsausgabe in eine Datei schreibt, deren Inhalt dann über eine POST-Anfrage an den C&C-Server gesendet wird.
Das Format der GET-Anfragen ist wie folgt:
GET <UrlSendHeartBeat> HTTP/1.1
User-Agent: <UserAgent>
Referer: <Referer>
Host: <Domain>
Cookie: <CookieClientId>=<ClientId>
Connection: close
Beachten Sie, dass die Anfrage unter Verwendung der gleichnamigen Konfigurationsfelder erstellt wird.
In der Antwort des C&C-Servers ist das dritte Byte des Inhalts die Befehlskennung, die den von der Backdoor zu verarbeitenden Befehl angibt. Wir nennen ihn command_id. Der restliche Inhalt der Antwort wird als Argument an den zu verarbeitenden Befehl übergeben. Dieser Inhalt wird mit dem in Abbildung 6 dargestellten Algorithmus verschlüsselt, wobei taskId der Wert des Cookies ist, der nach dem Wert von CookieTaskId aus der Konfiguration benannt ist.
o[int] $pos = $taskId % 256;
for ($i = 0; $i -lt $tmpBytes.Value.Length; $i++)
{
$pos = $pos + $clientId;
if ($pos -ge 256)
{
$pos = $pos % 256;
}
$tmpBytes.Value[$i] = [byte]($tmpBytes.Value[$i] -bxor $hexEnc[$pos]);
}
Abbildung 6. Abfrage des Algorithmus zur Verschlüsselung von Inhaltsdaten
Die Antwort des C&C-Servers enthält außerdem ein weiteres Cookie, dessen Name durch die Konfigurationsvariable CookieTerminalId der Backdoor festgelegt wird. Der Wert dieses Cookies wird in der POST-Anfrage von der Backdoor wiederholt und darf nicht leer sein. Nach dem Ausführen des Backdoor-Befehls sendet PowHeartBeat das Ergebnis als POST-Anfrage an den C&C-Server. Das Ergebnis wird in Form einer Datei mit dem Namen <command_id>.png gesendet.
ICMP
Ab Version 2.4 von PowHeartBeat wurde HTTP durch ICMP ersetzt, wobei die gesendeten Pakete ein Timeout von sechs Sekunden haben und nicht fragmentiert sind. Die Kommunikation über ICMP ist höchstwahrscheinlich ein Weg, um der Entdeckung zu entgehen.
In den Versionen 2.4 und später gibt es keine größeren Änderungen, aber wir haben einige Änderungen im Code festgestellt:
- PowHeartBeat sendet bei jeder Schleife ein Heartbeat-Paket, das die Zeichenfolge abcdefghijklmnopqrstuvwxyz enthält, bevor es einen Befehl anfordert. Dies teilt dem C&C-Server mit, dass die Backdoor bereit ist, Befehle zu empfangen.
- Anfragen zu Abrufbefehlen, die von der Backdoor ausgeführt werden, enthalten die Zeichenfolge abcdefghijklmnop.
Heartbeat-Pakete haben das in Abbildung 7 beschriebene Format.
Der Unterschied zwischen client ID und client flag besteht darin, dass client ID in jedem Sample unterschiedlich ist, während client flag in jedem Sample, das ICMP verwendet, gleich ist. heartbeat flag zeigt an, dass die Backdoor einen Heartbeat sendet. Die Antwort des C&C-Servers hat das in Abbildung 8 beschriebene Format.
flag zeigt an, ob ein Befehl an die Backdoor zu senden ist. Anfragen für Befehle haben das in Abbildung 9 beschriebene Format.
Beachten Sie, dass der ICMP-Modus der Backdoor den Empfang einer unbegrenzten Menge von Daten, aufgeteilt in Pakete, ermöglicht und die Variablen data length, current position und total length verwendet werden, um die übertragenen Daten zu verfolgen. Die Antworten auf diese Anfragen haben das in Abbildung 10 beschriebene Format.
Wie bei HTTP-Antworten ist die Befehlskennung das dritte Byte von data.
Nach sieben aufeinanderfolgenden ICMP-Antworten mit leerem oder inkonsistent formatiertem Inhalt wird die Übertragung zwischen Backdoor und C&C-Server als abgeschlossen betrachtet.
Bei den Anfragen zum Senden des Ergebnisses des erteilten Befehls an den C&C-Server wird der Servermodus in den Postmodus geändert, und die endgültige Zeichenfolge (abcdefghijklmnop) wird in die Ergebnisdaten geändert.
Backdoor Befehle
PowHeartBeat verfügt über verschiedene Fähigkeiten, darunter die Ausführung von Befehlen/Prozessen und die Bearbeitung von Dateien. In Tabelle 2 sind alle Befehle aufgeführt, die von den verschiedenen analysierten Samples unterstützt werden.
Tabelle 2. Beschreibungen der PowHeartBeat-Befehle
Name | Command Identifier | Description |
---|---|---|
Cmd | 0x02 | Execute a PowerShell command. |
Exe | 0x04 | Execute a command as a process. |
FileUpload | 0x06 | Upload a file to the victim machine. File content is gzip-compressed. |
FileDownLoad | 0x08 | Download a file from the victim machine, and return file path, file length, creation time, access times, and file content to the C&C server. |
FileView | 0x0A |
|
FileDelete | 0x0C | Delete a file. |
FileRename | 0x0E | Rename or move a file. |
ChangeDir | 0x10 | Change the current working location of the backdoor. |
Info | 0x12 |
|
Config | 0x14 | Update the configuration file content and reload the configuration. |
N/A | 0x63 | Backdoor exit. |
Bei Fehlern auf der Backdoor-Seite verwendet die Backdoor eine spezielle Befehlskennung 0x00 in der POST-Anfrage an den C&C-Server und zeigt damit an, dass ein Fehler aufgetreten ist.
Beachten Sie, dass die Daten vor dem Zurücksenden an den C&C-Server gzip-komprimiert werden.
PNGLoad: Steganographischer Loader
PNGLoad ist die Second Stage Payload, die von Worok auf kompromittierten Systemen verteilt und laut ESET-Telemetrie entweder von CLRLoad oder PowHeartBeat geladen wird. Wir sehen zwar keinen Code in PowHeartBeat, der PNGLoad direkt lädt, aber die Backdoor ist in der Lage, zusätzliche Payloads vom C&C-Server herunterzuladen und auszuführen. So haben die Angreifer PNGLoad wahrscheinlich auf Systemen eingesetzt, die mit PowHeartBeat kompromittiert wurden. . PNGLoad ist ein Loader, der Bytes aus PNG-Dateien verwendet, um eine Payload zur Ausführung zu erstellen. Es handelt sich um eine ausführbare 64-Bit-.NET-Datei, die mit .NET Reactor verschleiert wurde und sich als legitime Software tarnt. Abbildung 11 zeigt zum Beispiel die CLR-Header eines Samples, das sich als WinRAR-DLL ausgibt.
Nach der Entschleierung ist nur noch eine Klasse vorhanden. In dieser Klasse gibt es ein MainPath-Attribut, das den Verzeichnispfad enthält, in dem die Backdoor nach Dateien mit der Erweiterung .png sucht, einschließlich ihrer Unterverzeichnisse (siehe Abbildung 12).
Jede in MainPath gefundene .png-Datei wird dann auf steganografisch eingebettete Inhalte überprüft. Zunächst wird das niedrigstwertige Bit der R- (Rot-), G- (Grün-), B- (Blau-) und A- (Alpha-) Werte jedes Pixels abgerufen und in einem Puffer zusammengestellt. Wenn die ersten acht Bytes dieses Puffers mit der magischen Zahl aus Abbildung 13 übereinstimmen und der nächste Acht-Byte-Wert, control, nicht Null ist, besteht die Datei die steganografische Inhaltsprüfung von PNGLoad. Bei solchen Dateien wird die Verarbeitung mit dem Rest des Puffers fortgesetzt, der mit einem XOR aus mehreren Bytes entschlüsselt wird, wobei der im Attribut SecretKeyBytes von PNGLoad gespeicherte Schlüssel verwendet wird. Anschließend wird der entschlüsselte Puffer gzip-dekomprimiert. Als Ergebnis wird ein PowerShell-Skript erwartet, das sofort ausgeführt wird.
Interessanterweise werden die von PNGLoad durchgeführten Operationen in einer Datei protokolliert, deren Pfad in der Variablen LogFilePath gespeichert ist. Die Operationen werden nur protokolliert, wenn eine Datei vorhanden ist, deren Pfad durch die interne Variable IfLogFilePath angegeben ist.
Es war uns nicht möglich, ein .png-Sample aufzuspüren, das zusammen mit PNGLoad verwendet wurde. Aber die Funktionsweise von PNGLoad legt nahe, dass es mit gültigen PNG-Dateien funktionieren sollte. Um die bösartige Payload zu verbergen, verwendet Worok Bitmap-Objekte in C#, die nur Pixelinformationen aus Dateien übernehmen, nicht aber die Metadaten der Datei. Das bedeutet, dass Worok seine bösartigen Payloads in gültigen, harmlos aussehenden PNG-Bildern verstecken kann und somit unauffällig ist.
Fazit
Worok ist eine Cyberspionage-Gruppe, die ihre eigenen Tools entwickelt und auch bestehende Tools nutzt, um ihre Ziele zu kompromittieren. Wir gehen davon aus, dass es den Betreibern darum geht, Informationen von ihren Opfern zu stehlen. Sie konzentrieren sich auf hochrangige Einrichtungen in Asien und Afrika und verschiedene private und öffentliche Sektoren, jedoch mit besonderem Schwerpunkt auf Regierungseinrichtungen. Die Aktivitätszeiten und das Toolset deuten auf mögliche Verbindungen zu TA428 hin, aber wir können diese Einschätzung nur mit geringer Sicherheit treffen. Das benutzerdefinierte Toolset umfasst zwei Loader - einen in C++ und einen in C# .NET - und eine PowerShell-Backdoor. Auch wenn unsere Einsicht begrenzt ist, hoffen wir, dass die Aufklärung über diese Gruppe andere Forscher dazu ermutigt, Informationen über diese Gruppe zu teilen.
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
Dateien
SHA-1 | Filename | ESET Detection name | Comment |
---|---|---|---|
3A47185D0735CDECF4C7C2299EB18401BFB328D5 | script | PowerShell/PowHeartBeat.B | PowHeartBeat 2.4.3.0003. |
27ABB54A858AD1C1FF2863913BDA698D184E180D | script | PowerShell/PowHeartBeat.A | PowHeartBeat 2.4.3.0003. |
678A131A9E932B9436241402D9727AA7D06A87E3 | script | PowerShell/PowHeartBeat.B | PowHeartBeat 2.4.3.0003. |
757ABA12D04FD1167528FDD107A441D11CD8C427 | script | PowerShell/PowHeartBeat.B | PowHeartBeat 2.1.3.0003. |
54700A48D934676FC698675B4CA5F712C0373188 | script | PowerShell/PowHeartBeat.A | PowHeartBeat 1.1.3.0002. |
C2F53C138CB1B87D8FC9253A7088DB30B25389AF | script | PowerShell/PowHeartBeat.A | PowHeartBeat 1.1.3.0002. |
C2F1954DE11F72A46A4E823DE767210A3743B205 | tmp.ps1 | PowerShell/PowHeartBeat.B | PowHeartBeat 2.4.3.0004. |
CE430A27DF87A6952D732B4562A7C23BEF4602D1 | tmp.ps1 | PowerShell/PowHeartBeat.A | PowHeartBeat 2.1.3.0004. |
EDE5AB2B94BA85F28D5EE22656958E4ECD77B6FF | script | PowerShell/PowHeartBeat.A | PowHeartBeat 2.4.3.0003. |
4721EEBA13535D1EE98654EFCE6B43B778F13126 | vix64.dll | MSIL/PNGLoader.A | PNGLoader. |
728A6CB7A150141B4250659CF853F39BFDB7A46C | RarExtMgt.dll | MSIL/PNGLoader.A | PNGLoader. |
864E55749D28036704B6EA66555A86527E02AF4A | Jsprofile.dll | MSIL/PNGLoader.A | PNGLoader. |
8DA6387F30C584B5FD3694A99EC066784209CA4C | vssxml.dll | MSIL/PNGLoader.A | PNGLoader. |
AA60FB4293530FBFF00D200C0D44EEB1A17B1C76 | xsec_1_5.dll | MSIL/PNGLoader.A | PNGLoader. |
B2EAEC695DD8BB518C7E24C4F37A08344D6975BE | msvbvm80.dll | MSIL/PNGLoader.A | PNGLoader. |
CDB6B1CAFEE098615508F107814179DEAED1EBCF | lucenelib.dll | MSIL/PNGLoader.A | PNGLoader. |
4F9A43E6CF37FF20AE96E564C93898FDA6787F7D | vsstrace.dll | Win64/CLRLoad.C | CLRLoad. |
F181E87B0CD6AA4575FD51B9F868CA7B27240610 | ncrypt.dll | Win32/CLRLoad.A | CLRLoad. |
4CCF0386BDE80C339EFE0CC734CB497E0B08049C | ncrypt.dll | Win32/CLRLoad.A | CLRLoad. |
5CFC0D776AF023DCFE8EDED5CADA03C6D7F9C244 | wlbsctrl.dll | Win64/CLRLoad.E | CLRLoad. |
05F19EBF6D46576144276090CC113C6AB8CCEC08 | wlbsctrl.dll | Win32/CLRLoad.A | CLRLoad. |
A5D548543D3C3037DA67DC0DA47214B2C2B15864 | secur32.dll | Win64/CLRLoad.H | CLRLoad. |
CBF42DCAF579AF7E6055237E524C0F30507090F3 | dbghelp.dll | Win64/CLRLoad.C | CLRLoad. |
Dateipfade
Einige der Werte MainPath, LogFilePath und IfLogFilePath, die wir in PNGLoad-Beispielen gefunden haben:
MainPath | LogFilePath | IfLogFilePath |
---|---|---|
C:\Program Files\VMware\VMware Tools\ | C:\Program Files\VMware\VMware Tools\VMware VGAuth\readme.txt | C:\Program Files\VMware\VMware Tools\VMware VGAuth\VMWSU_V1_1.dll |
C:\Program Files\WinRar\ | C:\Program Files\WinRar\rarinstall.log | C:\Program Files\WinRar\des.dat |
C:\Program Files\UltraViewer\ | C:\Program Files\UltraViewer\CopyRights.dat | C:\Program Files\UltraViewer\uvcr.dll |
Netzwerk
Domain | IP |
---|---|
None | 118.193.78[.]22 |
None | 118.193.78[.]57 |
airplane.travel-commercials[.]agency | 5.183.101[.]9 |
central.suhypercloud[.]org | 45.77.36[.]243 |
Mutexe
In CLRLoad-Samples sind die Mutex-Namen, die wir gefunden haben, folgende:
aB82UduGX0EX
ad8TbUIZl5Ga
Mr2PJVxbIBD4
oERiQtKLgPgK
U37uxsCsA4Xm
Wo0r0KGWhYGO
xBUjQR2vxYTz
zYCLBWekRX3t
3c3401ad-e77d-4142-8db5-8eb5483d7e41
9xvzMsaWqxMy
MITRE ATT&CK Techniken
Diese Tabelle wurde mit Version 11 des MITRE ATT&CK Framework erstellt.
Tactic | ID | Name | Description |
---|---|---|---|
Reconnaissance | T1592.002 | Gather Victim Host Information: Software | PowHeartBeat gathers explorer.exe's information. |
T1592.001 | Gather Victim Host Information: Hardware | PowHeartBeat gathers information about drives. | |
T1590.005 | Gather Victim Network Information: IP Addresses | PowHeartBeat gathers IP addresses of the compromised computer. | |
Resource Development | T1583.004 | Acquire Infrastructure: Server | Worok uses its own C&C servers. |
T1588.002 | Obtain Capabilities: Tool | Worok deployed multiple publicly available tools on the compromised machines. | |
T1583.001 | Acquire Infrastructure: Domains | Worok has registered domains to facilitate C&C communication and staging. | |
T1588.005 | Obtain Capabilities: Exploits | Worok has used the ProxyShell vulnerability. | |
T1587.001 | Develop Capabilities: Malware | Worok has developed its own malware: CLRLoad, PNGLoad, PowHeartBeat. | |
T1587.003 | Develop Capabilities: Digital Certificates | Worok has created Let’s Encrypt SSL certificates in order to enable mutual TLS authentication for malware. | |
Execution | T1059.001 | Command and Scripting Interpreter: PowerShell | PowHeartBeat is written in PowerShell. |
Persistence | T1505.003 | Server Software Component: Web Shell | Worok uses the webshell ReGeorg. |
Defense Evasion | T1140 | Deobfuscate/Decode Files or Information | Worok uses various custom XOR-based schemes to encrypt strings and logs in PowHeartBeat, PNGLoad, and CLRLoad. |
T1036.005 | Masquerading: Match Legitimate Name or Location | PNGLoad samples are deployed in legitimate-looking VMWare directories. | |
Credential Access | T1003.001 | OS Credential Dumping: LSASS Memory | Worok uses Mimikatz to dump credentials from LSASS memory. |
Discovery | T1082 | System Information Discovery | PowHeartBeat gathers OS information. |
T1083 | File and Directory Discovery | PowHeartBeat can list files and directories. | |
T1046 | Network Service Discovery | Worok uses NbtScan to obtain network information on compromised machines. | |
T1124 | System Time Discovery | PowHeartBeat gathers the victim’s time information. | |
Collection | T1005 | Data from Local System | PowHeartBeat gathers data from the local system. |
T1560.002 | Archive Collected Data: Archive via Library | PowHeartBeat gzip-compresses data before sending it to the C&C server. | |
Command and Control | T1071.001 | Application Layer Protocol: Web Protocols | Some PowHeartBeat variants use HTTP as the communication protocol with the C&C server. |
T1090.001 | Proxy: Internal Proxy | PowHeartBeat handles proxy configuration on the victim’s machine. | |
T1001.002 | Data Obfuscation: Steganography | PNGLoad extracts pixel values from .png files to reconstruct payloads. | |
T1573.002 | Encrypted Channel: Asymmetric Cryptography | PowHeartBeat handles HTTPS communications with the C&C server. | |
T1095 | Non-Application Layer Protocol | Some PowHeartBeat variants use ICMP as the communication protocol with the C&C server. | |
T1132.001 | Data Encoding: Standard Encoding | Worok uses XOR encoding in PowHeartBeat, and PNGLoad. | |
T1132.002 | Data Encoding: Non-Standard Encoding | Worok uses XOR encoding algorithms that make use of an additional salt. | |
Exfiltration | T1041 | Exfiltration Over C2 Channel | PowHeartBeat uses its C&C communication channel to exfiltrate information. |
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!