FrostyNeighbor: Nuove Malizie e Minacce Digitali
Detection stack
- AIDR
- Alert
- ETL
- Query
Sommario
ESET riferisce che il gruppo APT FrostyNeighbor, noto anche come Ghostwriter, ha ripreso gli attacchi contro le organizzazioni governative ucraine utilizzando PDF di spear-phishing che consegnano un downloader basato su JavaScript noto come PicassoLoader, che alla fine distribuisce un beacon Cobalt Strike. La campagna si basa su una convalida basata sulla geolocalizzazione, persistenza tramite task pianificati e tecniche di dropping multipli di file per ridurre la visibilità ed eludere la rilevazione. La sua infrastruttura è posizionata dietro Cloudflare e utilizza diversi needbinding.icu domini.
Indagine
I ricercatori hanno ricostruito l’intera catena di attacco, a partire dall’esca del PDF dannoso, passando per il dropper JavaScript e il downloader PicassoLoader, e concludendo con la consegna del payload Cobalt Strike. Hanno estratto indicatori tra cui nomi di file, modifiche al registro e URL di comando e controllo, quindi li hanno collegati alle tecniche conosciute di FrostyNeighbor. Il rapporto evidenzia anche lo sfruttamento di CVE-2023-38831 in WinRAR e CVE-2024-42009 in Roundcube.
Mitigazione
Le organizzazioni dovrebbero bloccare i tipi di allegati sospetti, imporre controlli rigorosi sull’esecuzione di macro e script, monitorare i task pianificati creati da binari sconosciuti e limitare il traffico HTTPS in uscita verso domini noti malevoli. Le vulnerabilità citate dovrebbero essere prontamente corrette, e le restrizioni sul minimo privilegio dovrebbero essere applicate all’uso di rundll32.exe uso.
Risposta
Se vengono rilevati indicatori correlati, isolare immediatamente il sistema colpito, raccogliere artefatti forensi e cercare sia il beacon Cobalt Strike che i componenti PicassoLoader. Resettare qualsiasi credenziale esposta e rivedere le voci dei task pianificati e delle chiavi Run per segni di persistenza.
Flusso di Attacco
Rilevamenti
Possibili Punti di Persistenza [ASEP – Software/NTUSER Hive] (tramite registry_event)
Visualizza
Esecuzione di Processi di Sistema da Percorsi Insoliti (tramite process_creation)
Visualizza
Esecuzione di Rundll32 DLL da Percorso Sospetto (tramite process_creation)
Visualizza
LOLBAS WScript / CScript (tramite process_creation)
Visualizza
IOC (HashSha1) per rilevare: FrostyNeighbor: Nuove marachelle e buffonate digitali
Visualizza
Rilevamento Comunicazione C&C FrostyNeighbor [Connessione Rete Windows]
Visualizza
Distribuzione Cobalt Strike FrostyNeighbor tramite Rundll32 e JavaScript [Creazione Processo Windows]
Visualizza
Esecuzione di Simulazione
Prerequisito: Il Controllo Pre-volo di Telemetria e Baseline deve essere passato.
Motivazione: Questa sezione descrive l’esecuzione precisa della tecnica avversaria (TTP) progettata per attivare la regola di rilevamento. I comandi e la narrativa DEVONO riflettere direttamente i TTP identificati e mirano a generare la telemetria esatta attesa dalla logica di rilevamento.
-
Narrazione e Comandi dell’Attacco:
L’avversario ha ottenuto un punto d’appoggio sull’host della vittima e desidera distribuire un beacon Cobalt Strike senza essere rilevato. Essi:
- Copia
rundll32.exein una posizione non standard (C:ProgramDataTemprundll32.exe) per eludere gli allarmi della whitelist semplice. - Deposita la DLL dannosa (
ViberPC.dll) in%ProgramData%. Questa DLL contiene il payload Cobalt Strike bootstrappato. - Esegue la copia
rundll32.execon una riga di comando che carica la DLL dannosa (%ProgramData%ViberPC.dll). - Deposita due file JavaScript (
53_7.03.2026_R.jsandUpdate.js) che contengono JScript che contatta il server C2 e finalizza l’installazione del beacon. - Esegue i file JavaScript usando
cscript.exe, causando la creazione di processi di cuiImmaginetermina con.jse di cuiCommandLinecontiene esattamente i nomi dei file.
Questi passaggi generano gli eventi di creazione dei processi di Sysmon esatti corrispondenti a
selezione1,selezione2eselezione3nella regola Sigma. - Copia
-
Script Test di Regressione:
# Simulazione Distribuzione Cobalt Strike FrostyNeighbor # ------------------------------------------------- # 1. Prepara i percorsi $tempDir = "$env:ProgramDataTemp" $rundllCopy = Join-Path $tempDir "rundll32.exe" $malDll = "$env:ProgramDataViberPC.dll" $js1 = "$env:ProgramData53_7.03.2026_R.js" $js2 = "$env:ProgramDataUpdate.js" # 2. Assicurati che la directory temp esista New-Item -Path $tempDir -ItemType Directory -Force | Out-Null # 3. Copia rundll32.exe in una posizione non standard Copy-Item -Path "$env:SystemRootSystem32rundll32.exe" -Destination $rundllCopy -Force # 4. Crea una DLL dannosa fittizia (nel vero attacco questo sarebbe il payload) $dummyDll = [IO.File]::ReadAllBytes("$env:SystemRootSystem32driversetchosts") # binario sostitutivo [IO.File]::WriteAllBytes($malDll, $dummyDll) # 5. Esegui la rundll32 copiata con la DLL dannosa Start-Process -FilePath $rundllCopy -ArgumentList "`"$malDll`"" -WindowStyle Hidden # 6. Deposita i payload JavaScript $jsContent = @" // JScript semplice che si connette a un endpoint C2 (simulato) var xhr = new ActiveXObject("MSXML2.XMLHTTP"); xhr.open("GET", "http://127.0.0.1:8080/beacon", false); xhr.send(); "@ Set-Content -Path $js1 -Value $jsContent -Encoding ASCII Set-Content -Path $js2 -Value $jsContent -Encoding ASCII # 7. Esegui i file JavaScript tramite cscript (questo crea processi con immagine .js) Start-Process -FilePath "cscript.exe" -ArgumentList "//NoLogo `"$js1`"" -WindowStyle Hidden Start-Process -FilePath "cscript.exe" -ArgumentList "//NoLogo `"$js2`"" -WindowStyle Hidden # 8. Pausa per permettere l'ingestione del SIEM Start-Sleep -Seconds 15 -
Comandi di Pulizia:
# Pulizia dopo la simulazione $percorsi = @( "$env:ProgramDataViberPC.dll", "$env:ProgramData53_7.03.2026_R.js", "$env:ProgramDataUpdate.js", "$env:ProgramDataTemprundll32.exe" ) foreach ($p in $percorsi) { if (Test-Path $p) { Remove-Item -Path $p -Force } } # Interrompi eventualmente i processi cscript rimanenti avviati dal test Get-Process -Name cscript -ErrorAction SilentlyContinue | Stop-Process -Force