SOC Prime Bias: Medio

31 Mar 2026 16:57

Elastic Security Labs scopre BRUSHWORM e BRUSHLOGGER

Author Photo
Ruslan Mikhalov Capo della Ricerca sulle Minacce presso SOC Prime linkedin icon Segui
Elastic Security Labs scopre BRUSHWORM e BRUSHLOGGER
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Riassunto

Elastic Security Labs ha scoperto due famiglie di malware personalizzati, BRUSHWORM e BRUSHLOGGER, utilizzati contro un’istituzione finanziaria nel Sud-est asiatico. BRUSHWORM è una backdoor modulare che mantiene la persistenza tramite un’attività pianificata, si diffonde tramite supporti rimovibili e ruba file attraverso un’ampia gamma di estensioni. BRUSHLOGGER è un keylogger DLL caricato lateralmente che cattura i tasti premuti insieme al contesto della finestra attiva e salva i registri in forma crittografata con XOR. Entrambi i campioni di malware sembrano relativamente poco sofisticati e mostrano segni di continuo sviluppo tramite tentativi ed errori.

Indagine

Durante l’indagine, gli analisti hanno recuperato l’eseguibile della backdoor paint.exe e il keylogger DLL caricato lateralmente libcurl.dll, quindi hanno esaminato i loro metodi di persistenza, la logica di configurazione, il comportamento di diffusione tramite USB e le directory di staging dei dati. Su VirusTotal sono state trovate anche versioni di sviluppo più vecchie come V1.exe, V2.exe e V4.exe, dove erano collegate a infrastrutture di DNS dinamici gratuiti per il comando e il controllo. Il report ha inoltre documentato i task pianificati del malware, il mutex e le convenzioni sui percorsi dei file.

Mitigazione

I difensori dovrebbero prevenire l’esecuzione di binari sconosciuti dai percorsi ProgramData e Public, monitorare la creazione di attività pianificate denominate MSGraphics o MSRecorder e rilevare il mutex Windows-Updates-KB852654856. Le organizzazioni dovrebbero anche disabilitare o limitare l’autorun dai media rimovibili e ispezionare i nomi dei file esca sospetti. Il logging e l’ispezione del traffico WinHTTP verso il dominio C2 identificato dovrebbero essere applicati.

Risposta

Se viene rilevata attività di BRUSHWORM o BRUSHLOGGER, isolare l’endpoint, conservare i campioni di paint.exe e libcurl.dll, catturare le prove dell’attività pianificata e rimuovere i file dannosi da tutte le directory utente e pubbliche. Gli investigatori dovrebbero anche esaminare le unità rimovibili per i binari di esca, eliminare la cartella di esfiltrazione in fase di staging, reimpostare le credenziali colpite e monitorare l’eventuale recupero di payload aggiuntivi dal server C2.

"graph TB %% Class definitions section classDef technique fill:#cfe2f3 %% Node definitions exec_check["<b>Tecnica</b> – T1497.002 Evasione di Virtualizzazione/Sandbox:<br/>Controlla l’attività dell’utente, la risoluzione dello schermo, il nome utente, il nome del computer, le stringhe del CPUID dell’hypervisor e i movimenti del mouse per interrompere nei ambienti di analisi."] class exec_check technique persistence_task["<b>Tecnica</b> – T1053 Attività/Job Pianificato:<br/>Crea un’attività pianificata di Windows denominata MSGraphics che esegue la backdoor ad ogni accesso utente."] class persistence_task technique c2_contact["<b>Tecnica</b> – T1071 Protocollo a Livello di Applicazione:<br/>La backdoor contatta il suo server C2 su HTTPS utilizzando WinHTTP."] class c2_contact technique encrypted_channel["<b>Tecnica</b> – T1573 Canale Cifrato:<br/>Stabilisce un canale crittografato per scaricare moduli aggiuntivi."] class encrypted_channel technique shared_module["<b>Tecnica</b> – T1129 Moduli Condivisi:<br/>Scarica un payload DLL (Recorder.dll) dal server C2."] class shared_module technique second_task["<b>Tecnica</b> – T1053 Attività/Job Pianificato:<br/>Crea una seconda attività pianificata che lancia Recorder.dll tramite rundll32.exe."] class second_task technique dll_side["<b>Tecnica</b> – T1574.001 Caricamento Laterale DLL:<br/>Il libcurl.dll dannoso è caricato lateralmente per dirottare il flusso di esecuzione."] class dll_side technique keylogging["<b>Tecnica</b> – T1056.001 Keylogging:<br/>DllMain installa un hook di tastiera a basso livello per catturare sequenze di tasti, titoli delle finestre e timestamp."] class keylogging technique obfuscation["<b>Tecnica</b> – T1027 File o Informazioni Offuscati:<br/>I file di registro sono crittografati con XOR; i dati di configurazione sono scritti in testo chiaro e poi eliminati."] class obfuscation technique local_staging["<b>Tecnica</b> – T1074.001 Staging Dati Locali:<br/>I file raccolti sono copiati in C:UsersPublicSysteminfo e viene mantenuto un log hash per evitare esfiltrazioni duplicate."] class local_staging technique usb_propagation["<b>Tecnica</b> – T1092 Comunicazione Tramite Media Rimovibili:<br/>Quando Internet è raggiungibile, il malware si copia sui drive USB collegati usando nomi di file ad esca."] class usb_propagation technique usb_data_exfil["<b>Tecnica</b> – T1025 Dati da Media Rimovibili:<br/>Continua il furto di file dai drive USB."] class usb_data_exfil technique physical_exfil["<b>Tecnica</b> – T1052.001 Esfiltrazione su Supporto Fisico:<br/>Se non c’è Internet, i file rubati sono copiati su media rimovibili per esfiltrazione fisica."] class physical_exfil technique %% Connections showing flow exec_check –>|triggers| persistence_task persistence_task –>|executes| c2_contact c2_contact –>|establishes| encrypted_channel c2_contact –>|downloads| shared_module shared_module –>|creates| second_task second_task –>|launches| dll_side dll_side –>|loads| keylogging keylogging –>|produces| obfuscation obfuscation –>|stores| local_staging local_staging –>|copies to| usb_propagation usb_propagation –>|exfiltrates from| usb_data_exfil local_staging –>|uses for| physical_exfil "

Flusso d’Attacco

Esecuzione di Simulazione

Prerequisito: Il Controllo di Telemetria & Pre-convalida Baseline deve essere superato.

Motivazione: Questa sezione dettaglia l’esatta esecuzione della tecnica dell’avversario (TTP) progettata per attivare la regola di rilevamento. I comandi e la narrazione DEVONO rispecchiare direttamente i TTP identificati e mirare a generare la telemetria esatta prevista dalla logica di rilevamento.

  • Narrazione dell’Attacco & Comandi:
    Un attaccante ha ottenuto una DLL dannosa (evil.dll) che, quando eseguita tramite rundll32.exe, rilascia un payload ransomware e scrive dati crittografati su un drive USB. Per evitare sospetti, l’attaccante utilizza prima paint.exe per creare un’immagine dall’aspetto innocuo sul supporto rimovibile, quindi utilizza rundll32.exe per caricare la DLL dannosa nascosta nella stessa directory. Entrambe le azioni generano eventi di creazione di processo che corrispondono alla regola Sigma.

  • Script di Test di Regressione:

    # ------------------------------
    # Simulazione di abuso di Paint + Rundll32
    # ------------------------------
    
    # 1. Crea una directory di lavoro temporanea
    $workDir = "$env:TEMPPaintRundllSim"
    New-Item -ItemType Directory -Path $workDir -Force | Out-Null
    
    # 2. Copia un'immagine legittima su USB (simulata da $workDir)
    $imagePath = Join-Path $workDir "innocent.png"
    Invoke-WebRequest -Uri "https://via.placeholder.com/150" -OutFile $imagePath
    
    # 3. Avvia Paint per aprire l'immagine (uso benigno – corrisponde comunque alla regola)
    Start-Process -FilePath "$env:WINDIRsystem32mspaint.exe" -ArgumentList "`"$imagePath`"" -PassThru | Out-Null
    
    # 4. Rilascia una DLL dannosa (simulata; il payload reale sarebbe coperto)
    $dllPath = Join-Path $workDir "evil.dll"
    $dllBytes = [byte[]] (0x4D,0x5A,0x90,0x00) # Intestazione PE minima di placeholder
    [IO.File]::WriteAllBytes($dllPath, $dllBytes)
    
    # 5. Esegui il DLL tramite Rundll32 (questo è il passaggio dannoso)
    Start-Process -FilePath "$env:WINDIRsystem32rundll32.exe" `
                 -ArgumentList "`"$dllPath`,EntryPoint`"" -PassThru | Out-Null
    
    # 6. Pausa per consentire l'ingestione SIEM
    Write-Host "Simulazione eseguita. Attendere ~30s per i log da apparire in SIEM."
  • Comandi di Pulizia:

    # Rimuovi file e processi temporanei
    Stop-Process -Name mspaint -ErrorAction SilentlyContinue
    Stop-Process -Name rundll32 -ErrorAction SilentlyContinue
    Remove-Item -Path "$env:TEMPPaintRundllSim" -Recurse -Force
    Write-Host "Pulizia completata."