Hintergrund
Arctic Wolf Labs hat in jüngster Zeit zwei Eindringlinge verfolgt, bei denen Bedrohungsakteure einen neuen Go-basierten Malware-Downloader namens "CherryLoader" nutzten, der es ihnen ermöglichte, Exploits auszutauschen, ohne den Code neu kompilieren zu müssen.Das Symbol und der Name des Laders sind als legitime CherryTree-Notizanwendung getarnt, um die Opfer auszutricksen.
Bei den von uns untersuchten Eindringlingen wurde CherryLoader verwendet, um eines von zwei Tools zur Rechteausweitung, PrintSpoofer oder JuicyPotatoNG, abzulegen, das dann eine Batch-Datei ausführte, um Persistenz auf dem Opfergerät herzustellen.
Wichtige Takeaways
- Arctic Wolf hat einen neuen Loader namens "CherryLoader" beobachtet, der in Go geschrieben wurde und bei den jüngsten Einbrüchen verwendet wurde.
- Der Loader enthält modularisierte Funktionen, die es dem Bedrohungsakteur ermöglichen, Exploits auszutauschen, ohne den Code neu kompilieren zu müssen.
- CherryLoader verwirft zwei öffentlich zugängliche Exploits zur Rechteausweitung.
- Die Angriffskette von CherryLoader nutzt Prozess-Ghosting und ermöglicht es Bedrohungsakteuren, Berechtigungen zu erhöhen und Persistenz auf den Rechnern der Opfer herzustellen.
Technische Analyse
Basierend auf Incident-Response-Daten und zusätzlichen Analysen nutzten die Bedrohungsakteure zunächst die IP-Adresse 141.11.187[.] 70, um dem Opfer CherryLoader und zugehörige Dateien zu liefern.Zwei Dateien wurden von dieser IP heruntergeladen, eine passwortgeschützte RAR-Datei (Packed.rar) und eine ausführbare Datei (main.exe), die zum Entpacken von Packed.rar verwendet wurde.
Die gepackte .rar-Datei enthielt eine Golang-Binärdatei (cherrytree.exe) zusammen mit drei zusätzlichen Dateien, NuxtSharp.Data, Spof.Data und Juicy.Data.
Cherrytree.exe wurde entfernt und die Importadresstabelle wurde zerstört, um die Analysebemühungen zu behindern.
Mittels statischer Analyse wurde eine eindeutige Referenz für das Projekt gefunden, die den ursprünglichen Projektnamen des Autors "XorRunPeGoler" enthüllte.
Du musst angemeldet sein, um Bilder zu sehen.
Nachdem CherryLoader und die zugehörigen Dateien aus der .rar-Datei extrahiert wurden, riefen die Bedrohungsakteure CherryLoader mit dem folgenden Befehl auf:
Cherrytree.exe 405060EEw@! NuxtSharp.Data Spof.Data
Bei der Ausführung prüft die Binärdatei die übergebenen Argumente und vergleicht das erste Argument (Kennwort) mit einem hartcodierten MD5-Kennworthash.
Wenn die Hashes übereinstimmen, fährt die Binärdatei mit dem nächsten Schritt fort, wenn nicht, wird CherryLoader beendet.
Du musst angemeldet sein, um Bilder zu sehen.
Die Binärdatei weist dann Speicher zu, um die Datei zu lesen und zu entschlüsseln, die über das zweite Argument (NuxtSharp.Data) übergeben wird.
Die Datei wird dann mit einem einfachen XOR-Algorithmus entschlüsselt.
Um die XOR-Schleife zu starten, kopiert CherryLoader den XOR-Schlüssel "Kry" und weist Speicher für die entschlüsselten Daten zu.
Anschließend wird die Datei NuxtSharp.Data Byte für Byte durchlaufen und die Bytes mit einem Buchstaben versehen, der einem Index in ["K", "r", "y"] entspricht.
Der Index ist mit einem Modul von 3 begrenzt, um einen Zugriff außerhalb des Bereichs zu vermeiden.
Du musst angemeldet sein, um Bilder zu sehen.
Du musst angemeldet sein, um Bilder zu sehen.
Bemerkenswert ist, dass der Entschlüsselungsalgorithmus nicht auf das eingegebene Passwort angewiesen ist, daher kann er gepatcht werden, wodurch das Passwortargument nutzlos wird.
Die Kennwortüberprüfung dient wahrscheinlich dazu, die Analyse der Datei zu verhindern.
Nachdem die XOR-Schleife abgeschlossen ist und die Datei (NuxtSharp.Data) im Arbeitsspeicher entschlüsselt wurde, wird GetProcAddress verwendet, um CreateFileW dynamisch zu suchen, wodurch die entschlüsselte Datei als File.log im Verzeichnis %TEMP% gespeichert wird.
Du musst angemeldet sein, um Bilder zu sehen.
Nach dem Speichern von File.log auf dem Datenträger sucht das Beispiel dynamisch die CreateProcessW-Funktion zum Ausführen von cmd.exe, die wiederum File.log als untergeordneten Prozess ausführt:
cmd.exe /c File.log Spof.Data 123 12.log
Du musst angemeldet sein, um Bilder zu sehen.
Du musst angemeldet sein, um Bilder zu sehen.
Nach dem Ausführen des cmd.exe-Prozesses werden DeleteFileW und RemoveDirectoryW dynamisch gesucht und aufgerufen, um alle Beweise im Verzeichnis %TEMP% zu löschen.
File.log (auch bekannt als NuxtSharp.Data)
Dateiname | Datei:.log |
---|---|
SHA256-KARTON | e0f53fb3651caf5eb3b30603064d527b9ac9243f8e682e4367616484ec708976 |
File.log ist eine PE-Datei, die in C geschrieben ist und Symbole zu enthalten scheint, die sich auf ein ursprüngliches Projekt namens NuxtSharp beziehen.
File.log stellt die nächste Stufe in der Angriffskette dar, die mit der Entschlüsselung von Spof.Data beginnt.
Entschlüsseln des Spoofers
CherryLoader führt File.log als Prozess mit drei zusätzlichen Argumenten aus.Die Hauptfunktion der ausführbaren Datei File.log erleichtert die Übergabe von Argumenten an eine Funktion, die später die Binärdatei entschlüsselt und aus dem Speicher lädt.
Du musst angemeldet sein, um Bilder zu sehen.
File.log beginnt mit dem Erstellen einer Datei mit dem Namen 12.log (das letzte in der Befehlszeile angegebene Argument).
File.log öffnet dann die verschlüsselte Spof.Data-Datei (erstes Argument) und liest die Daten zur Entschlüsselung in einen Puffer.
Du musst angemeldet sein, um Bilder zu sehen.
Du musst angemeldet sein, um Bilder zu sehen.
Du musst angemeldet sein, um Bilder zu sehen.
Spof.Data wird mit AES ECB (Rijndael) verschlüsselt; Der Schlüssel "123" wurde als zweites Argument in der ersten Befehlszeile übergeben.
Du musst angemeldet sein, um Bilder zu sehen.
Bemerkenswert ist, dass eine der anderen Dateien, die mit CherryLoader gefunden wurden, Juicy.Data, den gleichen Verschlüsselungsalgorithmus und Schlüssel verwendete. Arctic Wolf hat ein Python-Skript erstellt, das bei der Entschlüsselung von Spof.Data und Juicy.Data hilft, das Skript finden Sie im Anhang hier.
Ausweichversuch (Prozess-Ghosting)
Nachdem File.log die Entschlüsselung von Spof.Data abgeschlossen hat, versucht es, einen neuen Prozess mit dem Namen 12.log mithilfe einer dateilosen Technik namens Process Ghosting zu erstellen.Diese Technik ist modular aufgebaut und ermöglicht es dem Bedrohungsakteur, anderen Exploit-Code anstelle von Spof.Data zu nutzen.
In diesem Fall kann Juicy.Data, das einen anderen Exploit enthält, an Ort und Stelle ausgetauscht werden, ohne File.log neu zu kompilieren.
Die Ghosting-Technik des Prozesses beginnt mit dem Erstellen einer Datei mithilfe der CreateFile-API, wobei das DELETE-Flag als dwDesiredAccess-Parameter festgelegt ist.
Du musst angemeldet sein, um Bilder zu sehen.
Anschließend wird die NtSetInformationFile-API verwendet, um den FileInformation-Parameter festzulegen, der auf eine FILE_DISPOSITION_INFORMATION Struktur verweist.
Diese Struktur verfügt über einen einzigen booleschen Parameter namens DeleteFile, der, wenn er festgelegt ist, das Betriebssystem veranlasst, die Datei zu löschen, wenn sie geschlossen wird.
Du musst angemeldet sein, um Bilder zu sehen.
File.log schreibt dann die entschlüsselte Binärdatei mithilfe der WriteFile-API in eine neu erstellte Datei und erstellt dann einen Bildabschnitt mit NtCreateSection:
Du musst angemeldet sein, um Bilder zu sehen.
Nachdem der Bildabschnitt erstellt wurde, werden CreateFileMappingA und MapViewOfFile verwendet, um die erstellte Datei dem Arbeitsspeicher zuzuordnen.
Du musst angemeldet sein, um Bilder zu sehen.
Nach dem Erstellen der Dateizuordnung werden die Handles für die zugeordneten Dateien geschlossen, was zum Löschen der zuvor erstellten Datei führt.
Du musst angemeldet sein, um Bilder zu sehen.
File.log erstellt dann einen neuen Prozess, der den zuvor zugeordneten Abschnitt nutzt.
Du musst angemeldet sein, um Bilder zu sehen.
Sobald der erstellte Prozess abgeschlossen ist, ruft er die Umgebungsvariablen mithilfe von CreateEnvironmentBlock und den RtlCreateProcessParameters-Funktionen ab, um die Argumente und die Umgebung des neu erstellten Prozesses festzulegen.
Du musst angemeldet sein, um Bilder zu sehen.
Vor dem Erstellen eines neuen Ausführungsthreads ordnet File.log dem neu erstellten Prozess mithilfe von VirutalAllocEx Speicher zu und ruft die Funktionen WriteProcessMemory und ReadProcessMemory auf, um die Basisadresse, Prozessparameter und Umgebungsdaten in den neu zugeordneten Speicher festzulegen.
Du musst angemeldet sein, um Bilder zu sehen.
Schließlich wird ein neuer Thread mithilfe eines Handles für den neu erstellten Prozess und der NtCreateThreadEx-Funktion erstellt, um die Ausführung des Prozesses 12.log zu starten.
Nach erfolgreicher Thread-Erstellung wird "Success – Threat ID" mit einem ironischen Schreibfehler des Wortes "Threat" anstelle von Thread auf das Terminal ausgegeben.
Du musst angemeldet sein, um Bilder zu sehen.
Rechte-Eskalation
Der neu erstellte Prozess 12.log (Spof.Data) ist mit einem öffentlich verfügbaren Rechteausweitungstool namens PrintSpoofer verknüpft, das das SeImpersonatePrivilege unter Windows 10 und Server 2016/2019 missbraucht.Die Zeichenfolgen in der Binärdatei enthielten den Namen des Autors für das PrintSpoofer-Tool.
Du musst angemeldet sein, um Bilder zu sehen.
Basierend auf den Zeichenfolgen der Datei war Juicy.Data ein weiteres öffentlich verfügbares Tool zur Rechteausweitung namens JuicyPotatoNG.
Du musst angemeldet sein, um Bilder zu sehen.
Du musst angemeldet sein, um Bilder zu sehen.
Die verschlüsselten ausführbaren Dateien Spof.data und Juicy.data hatten drei Dinge gemeinsam:
- Bei beiden handelte es sich um öffentlich zugängliche Tools zur Rechteausweitung
- Die Namenskonvention folgte dem ursprünglichen Projektnamen:
- Open-Source-PrintSpoofer mit dem Namen Spof.data
- Open-Source-JuicyPotatoNG mit dem Namen Juicy.data
- Beide versuchen, user.bat auszuführen, nachdem die Berechtigungen erfolgreich ausgeweitet wurden.
Du musst angemeldet sein, um Bilder zu sehen.
Ausdauer
Nach erfolgreicher Eskalation der Berechtigungen versuchen Spof.data und Juicy.data, ein Batchdateiskript namens user.bat auszuführen. Das Batchdateiskript wird nicht verschleiert und führt Folgendes aus:- Zuerst wird ein Administratorkonto mit dem falsch geschriebenen Benutzernamen Administrater und dem Passwort erstellt 102030TTYG@
- Whitelist des exe-Prozesses in Microsoft Defender (Ngrok ist ein Reverseproxy, der verwendet werden kann, um eine Verbindung mit einem internen Dienst herzustellen, der nicht extern verfügbar gemacht oder durch eine externe Firewall zugelassen wird)
- Legt einen Ausschluss für .exe Dateien in Windows Defender fest
- Deaktivieren von Microsoft Defender AntiSpyware (Effektives Deaktivieren von Windows Defender)
- Aktivieren Sie Remoteverbindungen, und fügen Sie Firewallregeln hinzu, um RDP-Verbindungen auf Port 3389 zuzulassen.
- Starten Sie den Windows-Dienst termservice (Remotedesktopdienst) neu)
Du musst angemeldet sein, um Bilder zu sehen.
Das Ziel dieser Phase ist es, eine Persistenz auf dem Computer des Opfers herzustellen.
Schlussfolgerung
CherryLoader ist ein neu identifizierter mehrstufiger Downloader, der verschiedene Verschlüsselungsmethoden und andere Anti-Analyse-Techniken nutzt, um alternative, öffentlich zugängliche Privilegien-Eskalations-Exploits zu detonieren, ohne Code neu kompilieren zu müssen.Zu den Verschlüsselungsmethoden gehören sowohl einfaches XOR als auch AES; Zu den Anti-Analyse-Techniken gehören die Bereitstellung von Passwörtern und Prozess-Ghosting.
Zu den Exploits in dem analysierten Paket gehören PrintSpoofer und JuicyPotatoNG.
Arctic Wolf hat es sich zur Aufgabe gemacht, Cyberrisiken zu beenden, und wenn aktive Eindringlinge festgestellt werden, sind wir schnell zur Stelle, um unsere Kunden zu schützen.
Als Reaktion auf das Eindringen hat Arctic Wolf Erkennungen eingerichtet, um vor bösartigen Aktivitäten zu warnen, die vom CherryLoader und den zugehörigen Modulen gefunden wurden.
Kunden können ihre Systeme weiter schützen, indem sie sicherstellen, dass sie ihre Software regelmäßig gepatcht haben, die Möglichkeit zum Erstellen oder Überwachen der Erstellung von Administratorkonten, zum Überwachen von Firewalländerungen, zum Überwachen der Deaktivierung von Windows Defender, zum Überwachen von Remotedesktopdiensten und zur Verwendung von Reverseproxytools wie ngrok einschränken.
Anhang
XOR-Entschlüsselungsskript für NuxtSharp.Data
Das folgende Python-Skript führt die gleiche Entschlüsselungsfunktion wie Cherrytree.exe aus.Es XORs für jedes Byte mit einem der drei Zeichen im ["K", "r", "y"]-Array:
from pathlib import Path
key = "Kry"
file = Path("NuxtSharp.Data")
with file.open("rb") as enc_file:
dec_file = Path("dec_NuxtSharp")
file_content = enc_file.read()
kry_index = 0
with dec_file.open('wb') as decrypted_file:
for enc_byte in file_content:
dec_byte = bytes([enc_byte ^ ord(key[kry_index])])
decrypted_file.write(dec_byte)
kry_index = (kry_index + 1) %3
Eine andere Möglichkeit, die gleiche Schlussfolgerung zu ziehen, ist die Datenanalyse der Datei, da der XOR-Schlüssel die Nullbytes mit dem entsprechenden Buchstaben überschreiben würde, wie in der folgenden Abbildung zu sehen ist:
Du musst angemeldet sein, um Bilder zu sehen.
AES-Entschlüsselungsskript für Spof.Data und Juicy.Data
Das folgende Python-Skript führt die gleiche Entschlüsselungsfunktion wie File.log aus.Dazu werden der AES-ECB-Algorithmus und der bereitgestellte AES-Schlüssel verwendet.
#command line to decrypt Spof.Data
decrypt_file.py -f Spof.Data -k 123
#command line to decrypt Juicy.Data
decrypt_file.py -f Juicy.Data -k 123
from Crypto.Cipher import AES
from pathlib import Path
import click
@click.command()
@click.option("-k", "--key", required=True, help="AES Key for ECB Decryption")
@click.option("-f", "--file", required=True, help="File to decrypt")
def decrypt(file, key, output):
file = Path(file)
if not file.exists():
print("[!] File does not exist.")
output_file_name = "decrypted_" + file.name
output_file = Path(output_file_name)
key = bytes(key, 'utf-8').ljust(16, b'\0')
ecb = AES.new(key , AES.MODE_ECB)
with file.open('rb') as encrypted_file:
Indikatoren für Kompromisse (IOCs)
Indikator | Art | Zusammenhang |
---|---|---|
141.11.187[.] 70 | IP-Adresse | IP-Adresse, die zum Herunterladen von Packed.rar und main.exe verwendet wird |
50f7f8a8d1bd904ad7430226782d35d649e655974e848ff58d80eafedd377ee9 | SHA256-KARTON | main.exe |
f9373383d2a1cea0179d016b4496475d44262945ab5fb6ff28cd156187c6ff6a | SHA256-KARTON | Verpackt:.rar |
8c42321dd19bf4c8d2ef11885664e79b0064194e3222d73f00f4a1d67672f7fc | SHA256-KARTON | cherrytree:.exe/CherryLoader |
7936b3d7d512c3a89914595c5048bce3c07bb872af59304fed95c567694230b0 | SHA256-KARTON | NuxtSharp.Data (verschlüsselt) |
e0f53fb3651caf5eb3b30603064d527b9ac9243f8e682e4367616484ec708976 | SHA256-KARTON | NuxtSharp.Data (entschlüsselt) |
08b8d8f8317936dad4f34676823b2eeb4fe99b0f4c213224e035b403e1e76cc0 | SHA256-KARTON | Spof.Data (verschlüsselt) |
92263e5085cb3fe58fd5803536c80c5c1084500c79fc026367a15b0f04ca0142 | SHA256-KARTON | Spof.Data/PrintSpoofer (entschlüsselt) |
9e6338674cd29066a4daad4ac54f01d272040d4947de39cfdf562e59af7c1318 | SHA256-KARTON | Juicy.data/JuicyPotatoNG (verschlüsselt) |
3641f3ddeb7583051f81ac15542850a1fba7591372389411a4b86363fdf02e78 | SHA256-KARTON | Juicy.Data (entschlüsselt) |
438c7ef49fbadd67bf809f7e3e239557e1d18d4c80e42c57f9479a89e3672fd9 | SHA256-KARTON | Benutzer:.bat |
Quelle: ARCTIC WOLF LABS