Analyse der BigSquatRat npm Paketkampagne
Detection stack
- AIDR
- Alert
- ETL
- Query
Zusammenfassung
Der Bericht beschreibt ein bösartiges npm-Paket, bigmathix, das einen Node.js Remote Access Trojan installiert. Es verwendet verschleierten mehrstufigen Code, um Nachlade-Payloads von einem von Angreifern kontrollierten GitHub-Inhalt und aurevian.cloud abzurufen. Die Erkennung wird durch dynamische Entschlüsselungsschlüssel und ein erforderliches Initialisierungsargument, das die Ausführung steuert, erschwert, was einem zielgerichteten Supply-Chain-Angriff auf JavaScript-Entwickler entspricht.
Untersuchung
Forscher haben das Paket entschlüsselt, um eine Kette zu rekonstruieren, die einen Kindprozess erzeugt, DNS-Auflösung durchführt und eingebettete URLs mit abgeleiteten Schlüsseln entschlüsselt. Durch bruteforce des Initialisierungswerts erhielten sie eine zweite Payload von aurevian.cloud, die zusätzliche Verschleierung in der endgültigen RAT-Logik einführte. Analysten korrelierten auch verwandte GitHub-Repositories und zusätzliche npm-Pakete, die zu ähnlichen Zeitpunkten veröffentlicht wurden, um den Umfang der Kampagne zu kartieren.
Minderung
Vermeiden Sie unzuverlässige npm-Abhängigkeiten – insbesondere neu veröffentlichte Pakete mit wenigen Downloads oder Module mit abrupten Versionsänderungen – und validieren Sie die Integrität über Hashes/Herkunftskontrollen. Überwachen Sie verdächtige Child-Prozesse, die von node.exe gestartet werden, und unerwartete ausgehende Abfragen zu unbekannten Domains. Wenden Sie Egress-Filterung für aurevian.cloud an und alarmieren Sie bei Persistenz wie Windows-Run-Keys oder Linux-systemd-Diensten, die von Node.js-Prozessen erstellt wurden.
Reaktion
Wenn bigmathix identifiziert wird, isolieren Sie den Endpunkt, entfernen Sie das Paket und beenden Sie gestartete Node.js-Prozesse. Löschen Sie erstellte Run-Keys oder systemd-Einheiten, blockieren Sie zugehörige Domains/IPs und sammeln Sie Protokolle, die DNS, Prozessabstammung und Netzwerkabfluss zeigen. Führen Sie Forensik durch, um heruntergeladene Payloads und Persistenz wie wscript.exe Launcher oder geplante Dienste zu identifizieren und suchen Sie dann in der gesamten Umgebung nach passenden Artefakten.
Angriffsablauf
Erkennungen
LOLBAS WScript / CScript (über process_creation)
Anzeigen
Verdächtige Dateierweiterung zu Run-Keys hinzugefügt [ASEPs] (über registry_event)
Anzeigen
Verdächtige NodeJS-Kindprozesse [Linux] (über cmdline)
Anzeigen
Möglicher GitHub-Dateidownload gestartet durch ungewöhnlichen Prozess (über network_connection)
Anzeigen
IOC (E-Mails) zum Erkennen: BigSquatRat npm-Paket-Kampagnenanalyse
Anzeigen
IOC (HashSha1) zum Erkennen: BigSquatRat npm-Paket-Kampagnenanalyse
Anzeigen
IOC (HashSha256) zum Erkennen: BigSquatRat npm-Paket-Kampagnenanalyse
Anzeigen
Erkennung der Node.js-RAT-Ausführung über wscript.exe [Windows-Prozesserstellung]
Anzeigen
Erkennung von Node.js-Malware unter Verwendung verschleierter Skripte und systemctl zur Persistenz [Linux-Prozesserstellung]
Anzeigen
Simulationsausführung
Voraussetzung: Der Telemetrie- & Baseline-Prüfflug muss bestanden sein.
Begründung: Dieser Abschnitt beschreibt die präzise Ausführung der gegnerischen Technik (TTP), die entwickelt wurde, um die Erkennungsregel auszulösen. Die Befehle und die Erzählung MÜSSEN direkt die identifizierten TTPs widerspiegeln und darauf abzielen, die genaue Telemetrie zu erzeugen, die von der Erkennungslogik erwartet wird. Abstrakte oder nicht verwandte Beispiele führen zu Fehlinterpretationen.
-
Angriffserzählung & Befehle:
Der Angreifer besitzt eine bösartige JavaScript-Payload, die die Node.js-Laufzeit zur Ausführung benötigt. Um die Standardanwendungs-Whitelisting zu umgehen, verwenden siewscript.exe– ein nativer Windows Skript-Host – um zu startennode.exeindirekt, wodurch eine Eltern-/Kindbeziehung entsteht, die der Erkennungsregel entspricht. Die Schritte sind:- Einen bösartigen Skript fallen lassen (
malicious.js), das einfachnode.exemit der Payload erzeugt. - Erstellen Sie ein Wrapper-JavaScript (
launcher.js), das der Windows-Skripthost ausführen wird; dieser Wrapper verwendetWScript.Shellum anzuführennode.exemit der Payload erzeugt. - Führen Sie den Wrapper aus über
wscript.exe //B //Nologo launcher.js. - Der resultierende Prozessbaum ist
wscript.exe → node.exe → malicious.js, was die Zieltelemetrie erzeugt.
- Einen bösartigen Skript fallen lassen (
-
Regressions-Testszenario:
Das folgende PowerShell-Skript automatisiert die gesamte Kette auf einem Windows-Testhost.# ------------------------------------------------- # Regressionstest – Node.js RAT Ausführung über wscript # ------------------------------------------------- # Variablen $tempPath = "$env:TEMP" $launcherPath = Join-Path $tempPath "launcher.js" $payloadPath = Join-Path $tempPath "malicious.js" $nodePath = "C:Program Filesnodejsnode.exe" # Anpassen, falls woanders installiert # 1. Schreiben Sie die bösartige Nutzlast (einfacher Konsolen-Log für Demo) $payloadContent = @" console.log('Malicious payload executed'); // Echter RAT-Code wäre hier "@ $payloadContent | Out-File -FilePath $payloadPath -Encoding ASCII # 2. Schreiben Sie den Launcher, der von wscript ausgeführt wird $launcherContent = @" var shell = WScript.CreateObject("WScript.Shell"); // Führen Sie node.exe mit dem bösartigen Skript aus var cmd = "`"$nodePath`" `"$payloadPath`""; shell.Run(cmd, 0, false); "@ $launcherContent | Out-File -FilePath $launcherPath -Encoding ASCII # 3. Führen Sie die Kette über wscript aus Write-Host "Starten der bösartigen Kette..." wscript.exe //B //Nologo $launcherPath # Pause, um Telemetrie erfassen zu lassen Start-Sleep -Seconds 5 # 4. Optional: Überprüfen Sie, ob der Node-Prozess ausgeführt wird (zur manuellen Beobachtung) Get-Process -Name node -ErrorAction SilentlyContinue # ------------------------------------------------- # Ende des Regressions-Tests # ------------------------------------------------- -
Aufräumbefehle: Artefakte entfernen und verbleibende Prozesse beenden.
# Aufräum-Skript – nach der Validierung ausführen $tempPath = "$env:TEMP" Remove-Item -Path (Join-Path $tempPath "launcher.js") -ErrorAction SilentlyContinue Remove-Item -Path (Join-Path $tempPath "malicious.js") -ErrorAction SilentlyContinue # Beenden Sie alle streunenden node.exe-Prozesse, die durch den Test erzeugt wurden Get-Process -Name node -ErrorAction SilentlyContinue | Stop-Process -Force