Analisi della Campagna del Pacchetto npm BigSquatRat
Detection stack
- AIDR
- Alert
- ETL
- Query
Riassunto
Il rapporto profila un pacchetto npm dannoso, bigmathix, che installa un trojan di accesso remoto Node.js. Utilizza codice a più stadi offuscato per recuperare payload successivi da contenuti GitHub controllati dagli aggressori e da aurevian.cloud. Il rilevamento è ostacolato da chiavi di decrittografia dinamiche e da un argomento inizializzatore richiesto che limita l’esecuzione, coerente con un attacco mirato alla supply chain contro gli sviluppatori JavaScript.
Indagine
I ricercatori hanno deoffuscato il pacchetto per ricostruire una catena che genera un processo figlio, esegue una risoluzione DNS e decrittografa gli URL incorporati utilizzando chiavi derivate. Forzando l’argomento inizializzatore, hanno recuperato un payload di secondo stadio da aurevian.cloud, che ha introdotto ulteriore offuscamento nella logica finale del RAT. Gli analisti hanno anche correlato repository GitHub correlati e ulteriori pacchetti npm pubblicati intorno a timestamp simili per mappare l’ambito della campagna.
Mitigazione
Evitare dipendenze npm non fidate—soprattutto pacchetti appena pubblicati, con pochi download, o moduli con cambiamenti di versione improvvisi—e convalidare l’integrità tramite controlli di hash/provenienza. Monitorare processi figli sospetti generati da node.exe e ricerche in uscita inaspettate verso domini sconosciuti. Applicare il filtraggio di uscita per aurevian.cloud e attivare avvisi per persistenza come chiavi Run di Windows o servizi systemd su Linux creati da processi Node.js.
Risposta
Se bigmathix viene identificato, isolare l’endpoint, rimuovere il pacchetto e terminare i processi Node.js generati. Eliminare chiavi Run o unità systemd create, bloccare domini/IP associati e raccogliere log che mostrano DNS, genealogia dei processi e uscita di rete. Eseguire la forense per identificare i payload scaricati e persistenza come launcher wscript.exe o servizi pianificati, quindi ricercare in tutto l’ambiente per artefatti corrispondenti.
Flusso d’Attacco
Rilevamenti
LOLBAS WScript / CScript (via process_creation)
Visualizza
Estensione di File Sospetta Aggiunta alle Chiavi di Esecuzione [ASEPs] (via registry_event)
Visualizza
Processi Figlio NodeJS Sospetti [Linux] (via cmdline)
Visualizza
Possibile Download di File da Github Iniziato da Processo Insolito (via network_connection)
Visualizza
IOC (Email) da rilevare: Analisi della Campagna Pacchetto npm BigSquatRat
Visualizza
IOC (HashSha1) da rilevare: Analisi della Campagna Pacchetto npm BigSquatRat
Visualizza
IOC (HashSha256) da rilevare: Analisi della Campagna Pacchetto npm BigSquatRat
Visualizza
Rilevamento di Esecuzione di Node.js RAT tramite wscript.exe [Creazione Processo Windows]
Visualizza
Rilevamento di Malware Node.js Utilizzo di Script Offuscati e systemctl per Persistenza [Creazione Processo Linux]
Visualizza
Esecuzione di Simulazione
Prerequisito: Il Controllo Pre-volo Telemetria & Baseline deve essere passato.
Razionale: Questa sezione illustra l’esecuzione precisa della tecnica dell’avversario (TTP) progettata per attivare la regola di rilevamento. I comandi e il racconto DEVONO riflettere direttamente i TTP identificati e mirare a generare la telemetria esatta prevista dalla logica di rilevamento. Esempi astratti o non correlati porteranno a diagnosi errate.
-
Narrazione dell’Attacco & Comandi:
L’attaccante possiede un payload JavaScript dannoso che necessita del runtime Node.js per essere eseguito. Per eludere il whitelisting standard delle applicazioni, utilizzawscript.exe—un host script nativo di Windows—per lanciarenode.exeindirettamente, creando una relazione genitore/figlio che corrisponde alla regola di rilevamento. I passaggi sono:- Lasciare uno script dannoso (
malicious.js) che generi semplicementenode.execon il payload. - Creare un wrapper JavaScript (
launcher.js) che l’Host Script di Windows eseguirà; questo wrapper utilizzaWScript.Shellper eseguirenode.execon il payload. - Eseguire il wrapper tramite
wscript.exe //B //Nologo launcher.js. - L’albero dei processi risultante è
wscript.exe → node.exe → malicious.js, generando la telemetria di destinazione.
- Lasciare uno script dannoso (
-
Script di Test di Regressione:
Il seguente script PowerShell automatizza l’intera catena su un host di test Windows.# ------------------------------------------------- # Test di Regressione – Esecuzione di Node.js RAT tramite wscript # ------------------------------------------------- # Variabili $tempPath = "$env:TEMP" $launcherPath = Join-Path $tempPath "launcher.js" $payloadPath = Join-Path $tempPath "malicious.js" $nodePath = "C:Program Filesnodejsnode.exe" # Regola se installato altrove # 1. Scrivi il payload dannoso (semplice console log per demo) $payloadContent = @" console.log('Payload dannoso eseguito'); // Il vero codice RAT sarebbe qui "@ $payloadContent | Out-File -FilePath $payloadPath -Encoding ASCII # 2. Scrivi il launcher che wscript eseguirà $launcherContent = @" var shell = WScript.CreateObject("WScript.Shell"); // Esegui node.exe con lo script dannoso var cmd = "`"$nodePath`" `"$payloadPath`""; shell.Run(cmd, 0, false); "@ $launcherContent | Out-File -FilePath $launcherPath -Encoding ASCII # 3. Esegui la catena tramite wscript Write-Host "Avviando catena dannosa..." wscript.exe //B //Nologo $launcherPath # Pausa per consentire la cattura della telemetria Start-Sleep -Seconds 5 # 4. Facoltativo: verifica che il processo node sia in esecuzione (per osservazione manuale) Get-Process -Name node -ErrorAction SilentlyContinue # ------------------------------------------------- # Fine del test di regressione # ------------------------------------------------- -
Comandi di Pulizia: Rimuovere gli artefatti e terminare i processi persistenti.
# Script di pulizia – eseguire dopo la validazione $tempPath = "$env:TEMP" Remove-Item -Path (Join-Path $tempPath "launcher.js") -ErrorAction SilentlyContinue Remove-Item -Path (Join-Path $tempPath "malicious.js") -ErrorAction SilentlyContinue # Elimina eventuali processi node.exe rimanenti generati dal test Get-Process -Name node -ErrorAction SilentlyContinue | Stop-Process -Force