DEV#POPPER RAT Über Kompromittierte Joyfill-npm-Releases Geliefert
Detection stack
- AIDR
- Alert
- ETL
- Query
Zusammenfassung
Zwei kompromittierte Beta-Versionen des @joyfill npm-Pakets wurden gefunden, die ein JavaScript-Implantat zur Importzeit enthalten. Das Implantat nutzt Blockchain-Transaktionen über Tron, Aptos und BNB Smart Chain, um den DEV#POPPER Remote Access Trojan (RAT) aufzulösen und herunterzuladen. Die Kampagne zielt auf Entwicklerarbeitsstationen und CI/CD-Pipelines, indem sie bösartigen Code ausführt, sobald das betroffene Modul importiert wird.
Untersuchung
Das Socket-Forschungsteam entdeckte den Kompromiss bei der Analyse von Beta-Versionen von @joyfill/layouts and @joyfill/components. Forscher identifizierten eine mehrstufige Nutzlastlieferkette, die verschleiertes JavaScript mit Blockchain-gestützten Dispatch-Mechanismen kombinierte. Die Untersuchung verknüpfte den initialen Loader mit der PolinRider-Familie und bestätigte, dass die endgültige Nutzlast zur DEV#POPPER-Malware-Familie gehörte.
Minderung
Entwickler sollten die betroffenen @joyfill Beta-Versionen sofort aus Sperrdateien, Paket-Caches, Build-Umgebungen und Bereitstellungsartefakten entfernen. Das Festlegen von Abhängigkeiten auf verifizierte Versionen wie @joyfill/layouts@0.1.1 or @joyfill/components@4.0.0-rc24 wird empfohlen. Sicherheitsteams sollten auch die kompromittierten Versionen durch Registry-Proxys und Abhängigkeitsverwaltungstools blockieren.
Antwort
Jedes System, das die betroffenen Pakete importiert hat, sollte isoliert werden, und alle Anmeldeinformationen, die für den kompromittierten Node.js-Prozess zugänglich sind, sollten geändert werden. Ermittler sollten Entwickleranwendungen wie VS Code, GitHub Desktop und Discord auf unerwartete Änderungen an Kernmodulen untersuchen. Endpoint- und CI/CD-Telemetrie sollten ebenfalls auf getrennte Node.js-Prozesse, bekannte C2-Adressen und verdächtigen Blockchain-RPC-Verkehr überprüft werden.
Angriffsablauf
Erkennungen
Möglicher Missbrauch von Publicnode Ethereum als C2-Kanal (über dns_query)
Ansehen
Möglicher Versuch der IP Lookup Domain-Kommunikation (über dns)
Ansehen
Möglicher Screenshot wurde unter Linux gemacht (über cmdline)
Ansehen
Versteckte Datei wurde auf Linux-Host erstellt (über file_event)
Ansehen
IOCs (HashSha256) zur Erkennung: Zwei Joyfill npm-Beta-Versionen kompromittiert, um DEV#POPPER Remote Access Trojan zu liefern
Ansehen
IOCs (SourceIP) zur Erkennung: Zwei Joyfill npm-Beta-Versionen kompromittiert, um DEV#POPPER Remote Access Trojan zu liefern
Ansehen
IOCs (DestinationIP) zur Erkennung: Zwei Joyfill npm-Beta-Versionen kompromittiert, um DEV#POPPER Remote Access Trojan zu liefern
Ansehen
Erkennung von DEV#POPPER Malware-Indikatoren [Windows-Netzwerkverbindung]
Ansehen
Erkennung von kompromittierten Joyfill npm-Paketen, die Remote Access Trojan liefern [Linux-Datei-Ereignis]
Ansehen
Erkennung von Node.js-Modul-Injektion und Ausführung von getrennten Prozessen [Linux-Prozesserstellung]
Ansehen
Simulationsausführung
Voraussetzung: Die Telemetrie- und Basis-Prüfung muss bestanden sein.
Begründung: Dieser Abschnitt beschreibt die genaue Ausführung der Gegnertechnik (TTP), die darauf abzielt, die Erkennungsregel auszulösen. Die Befehle und die Erzählung MÜSSEN die identifizierten TTPs direkt widerspiegeln und darauf abzielen, genau die Telemetrie zu erzeugen, die von der Erkennungslogik erwartet wird. Abstrakte oder nicht verwandte Beispiele führen zu Fehldiagnosen.
-
Angriffserzählung & Befehle: Der Angreifer hat erfolgreich bösartigen Code in eine weit verbreitete npm-Abhängigkeit injiziert (Lieferkettenkompromiss). Wenn ein Entwickler
npm installausführt oder ein Projekt startet, wird das bösartige Skript ausgeführt. Das Skript versucht zuerst, seine Absicht zu verbergen, indem es dierequireFunktion einer globalen Variablen zuweist (global.r = require), was es ihm erlaubt, Module an beliebiger Stelle in der Anwendung zu laden, ohnerequiredirekt aufzurufen (Verschleierung). Schließlich verwendet eschild_process.spawn, um einen getrennten Shell-Prozess zu starten, der sich mit einem Command & Control (C2)-Server verbindet und versucht, die Erkennung zu umgehen, indem der bösartige Prozess vom übergeordneten Node.js-Prozess getrennt wird. -
Regressionstest-Skript:
#!/bin/bash # Simulationsskript zum Auslösen der Node.js-Injektions-Erkennungsregel. # Dieses Skript erstellt eine temporäre bösartige JS-Datei und führt sie über Node.js aus. MALICIOUS_FILE="malicious_pkg.js" echo "[+] Erstellen des bösartigen Node.js-Skripts..." cat << 'EOF' > $MALICIOUS_FILE // Simulation der globalen Modul-Injektion (T1027) global.r = require; // Simulation der Ausführung eines getrennten Prozesses über child_process.spawn (T1059.006) const cp = require('child_process'); cp.spawn('bash', ['-c', 'sleep 30 &'], { detached: true, stdio: 'ignore' }); console.log("[!] Bösartige Nutzlast ausgeführt."); EOF echo "[+] Ausführen des bösartigen Skripts via Node.js..." node $MALICIOUS_FILE echo "[+] Simulation abgeschlossen. Überprüfen Sie das SIEM auf Warnungen: Erkennung von Node.js-Modul-Injektion und Ausführung von getrennten Prozessen." -
Bereinigungsbefehle:
# Entfernen der simulierten bösartigen Datei rm -f malicious_pkg.js # Alle verwaisten Schlafprozesse beenden, die durch die Simulation entstanden sind pkill -f "sleep 30"