Il malware KREMLIN riscrive i dati di attendibilità di Chromium per dirottare le sessioni bancarie brasiliane
KREMLIN installa estensioni malevole su Chrome ed Edge, altera i dati di integrità Chromium e ruba credenziali e sessioni bancarie in Brasile.
Testo generato da intelligenza artificiale, pubblicato senza revisione umana. Trasparenza IA
Immagine illustrativa generata con AI
Un’operazione malware motivata da finalità finanziarie installa estensioni non autorizzate per Chrome ed Edge ricostruendo i dati di integrità che Chromium utilizza per proteggere i profili del browser. Le estensioni possono sottrarre credenziali bancarie brasiliane, token di sessione e altre informazioni sensibili.
Elastic Security Labs monitora l’operazione con il nome REF9334 e chiama l’ecosistema malware KREMLIN, un nome scelto dal suo autore, Kr3mlin4rt1st. La campagna è attiva da maggio 2025 e comprende sette campagne osservate, con esche che impersonano 12 banche brasiliane.
Elastic ha pubblicato la propria analisi tecnica di KREMLIN il 14 settembre 2026. In seguito, l’operazione è stata inclusa in una rassegna di malware di Security Affairs pubblicata il 20 settembre 2026.
Nonostante il nome, la campagna non è stata attribuita alla Russia. I messaggi in portoghese e i commenti nel codice sorgente, insieme alle transazioni in Ethereum concentrate durante l’orario lavorativo di San Paolo, indicano piuttosto un’operazione rivolta al Brasile.
Un documento falso avvia un’infezione Windows a più stadi
Le infezioni KREMLIN iniziano quando l’utente esegue manualmente un file JavaScript camuffato da documento bancario, fattura o file aziendale. Il loader utilizza tecniche di offuscamento limitate, tra cui nomi di funzioni generici, tabelle di stringhe indicizzate, notazione a parentesi e diversi stadi JavaScript consecutivi.
Uno dei loader iniziali analizzati presenta il seguente hash SHA-256:
106eac79396a3ff77b8f375c391260ce422be2ae4d55d3aa75b2635cbdc0fa42
Lo script visualizza innanzitutto un falso messaggio di errore, inducendo la vittima a credere che il presunto documento non sia riuscito ad aprirsi. Crea uno script temporaneo che invoca shell.Popup, quindi lo elimina. Il nome del file segue questo schema:
popup_{date}_{random}.js
Un ulteriore campione associato a questo stadio è:
5ece7fd3766b0b7f8aadefa562313cea6c3c94f9398658dd389910e5be44f552
Prima di procedere, il loader verifica l’ambiente. Conta i file presenti sul desktop e interroga Windows Management Instrumentation per determinare il numero di processi in esecuzione. L’esecuzione si interrompe quando sul desktop sono presenti meno di cinque file o il sistema ha meno di 50 processi: condizioni comunemente associate agli ambienti di analisi appena creati.
Il loader invia l’esito negativo di questi controlli a:
/api/log_loader?hash=
Il campione analizzato ha contattato:
hxxps://connection[.]upgradeonline[.]site
Se l’host supera i controlli, il primo stadio scarica un runtime Node.js. Utilizza inoltre l’utility certutil di Microsoft per decodificare ed estrarre un altro stadio JavaScript, confondendo la catena d’infezione con strumenti legittimi di Windows e degli ambienti di sviluppo.
La persistenza si nasconde dietro un’attività di aggiornamento Node.js
Il secondo stadio estrae un’attività pianificata da un archivio CAB incorporato. Registra l’attività con il nome plausibile:
MicrosoftNodeRuntimeUpdater
La descrizione dell’attività fa riferimento al runtime Node.js V8 e al motore V8 di Google, facendo apparire la voce coerente con un software legittimo. L’attività viene eseguita un minuto dopo l’accesso dell’utente e avvia:
conhost.exe --headless node.exe
Il comando viene eseguito dalla directory che contiene lo script dannoso.
Questo stadio interroga inoltre uno smart contract Ethereum che funge da risolutore dead drop:
0xCD7360A83E5cdbBbbbcEB0e78748babA6740d07b
Invece di incorporare server di download fissi in ogni loader, gli operatori possono modificare le informazioni sull’infrastruttura memorizzate tramite il contratto. KREMLIN richiede tre parametri:
main-v2, che identifica l’installer principale dell’estensione per il browser.sub-module, che punta a un file JPEG contenente un kit di iniezione .NET RunPE.sentinel, che fornisce un file JPEG contenente un archivio CAB e un eseguibile SentinelOne.
L’indirizzo osservato dell’installer principale era:
hxxps://granderevolucao[.]store/5c92d3b8734b4f498752f735a1ca0987/{campaignId}
Gli altri componenti erano ospitati tramite Archive.org:
hxxps://archive[.]org/download/hotelmoskva/hotelmoskva.jpg
hxxps://ia601808[.]us[.]archive[.]org/5/items/sentinel_20260722_0435/Sentinel.jpg
Elastic non ha osservato l’utilizzo dell’iniettore .NET nell’attività analizzata. La sua presenza dimostra tuttavia che il framework di distribuzione può veicolare funzionalità che vanno oltre l’estensione per il browser.
I payload ricevono ulteriori livelli di occultamento. Il modulo principale è codificato in Base64 invertito, mentre i file JPEG contenitore includono dati Base64 tra i marker del file. Un file items.json all’interno dell’archivio associato a SentinelOne definisce ciò che deve comparire nella directory di installazione e supporta la successiva sostituzione dei file.
Valori di integrità Chromium contraffatti autorizzano l’estensione
Il binario centrale di KREMLIN è un eseguibile C++ x64 di circa 2,10 MB:
c8c38634dd44d7c6162c66174a6ee23ee404265125166e8d757681bdd66a4268
Il suo scopo principale è installare estensioni dannose in Google Chrome e Microsoft Edge. KREMLIN non si limita a copiare i file dell’estensione nel profilo del browser: modifica i dati delle preferenze di Chromium e ricostruisce i valori che normalmente rivelerebbero alterazioni non autorizzate.
L’installer manipola:
- Le Secure Preferences di Chromium.
- I valori HMAC di integrità richiesti.
- Gli hash crittografati App-Bound.
In questo modo l’estensione sembra approvata dall’utente e può superare i controlli di integrità del profilo di Chromium. Una volta caricata, può prendere di mira credenziali bancarie, token di sessione del browser e sessioni bancarie autenticate.
Il furto di un token di sessione valido può consentire all’aggressore di sfruttare uno stato del browser già autenticato, invece di basarsi esclusivamente su una password sottratta. Non sono stati resi noti i comportamenti precisi nei confronti di ciascuna banca impersonata.
Non sono state identificate versioni interessate di Chrome, Edge o Windows. Inoltre, all’operazione non sono associati CVE, punteggio CVSS, patch del fornitore o release software correttiva. Si tratta di una tecnica di distribuzione malware, non di una vulnerabilità del browser divulgata con un normale percorso di aggiornamento.
Il side-loading di SentinelOne e le chiamate di sistema indirette complicano l’analisi
KREMLIN esegue un componente legittimo di SentinelOne:
SentinelMemoryScanner.exe
Il programma carica una libreria dannosa senza firma che si spaccia per:
SentinelAgentCore.dll
Questa configurazione di side-loading delle DLL consente al payload di essere eseguito nel contesto del processo di un eseguibile attendibile. I difensori non dovrebbero presumere che la presenza di un nome file legittimo di SentinelOne renda sicura la directory circostante o le librerie caricate.
Durante l’inizializzazione, il malware individua LdrpLoaderLock e LdrpWorkInProgress all’interno di ntdll.dll. Rilascia il loader lock e azzera lo stato di elaborazione in corso, consentendo al proprio thread di lavoro di avviarsi prima che DllMain restituisca il controllo. Questo comportamento aggira la normale sincronizzazione del loader di Windows ed evita un deadlock che si verificherebbe se il codice di inizializzazione attendesse il thread appena creato.
KREMLIN utilizza inoltre chiamate di sistema indirette. Mette in correlazione le esportazioni di ntdll.dll con le voci RUNTIME_FUNCTION ordinate per indirizzo in .pdata, ricava i System Service Number contando le esportazioni Zw* precedenti e invoca le chiamate tramite una sequenza syscall; ret esistente. Uno stub incorporato fornisce un meccanismo di fallback.
Elastic ha collegato questa implementazione al progetto open source PigSyscall. Anche la manipolazione del loader lock presenta analogie con la tecnica pubblica LdrLockLiberator.
Il binario non è fortemente offuscato e il debugging resta abilitato sia nell’installer sia nell’estensione. Questi segnali di immaturità nello sviluppo contrastano con un’infrastruttura di distribuzione e configurazione relativamente elaborata.
I controlli anti-analisi interrompono le esecuzioni sospette
Il payload nativo esamina i nomi dei processi, la memoria, le proprietà del disco e il processo host alla ricerca di strumenti di sicurezza o segnali di virtualizzazione. Anche i precedenti stadi JavaScript eseguono controlli sul numero di file presenti sul desktop e sui processi.
KREMLIN cerca numerosi programmi di analisi, tra cui:
procmon.exe
processhacker.exe
systeminformer.exe
wireshark.exe
windbg.exe
x32dbg.exe
x64dbg.exe
ida64.exe
ghidra.exe
fiddler.exe
frida-helper-64.exe
Cerca inoltre nomi generici associati alle sandbox, come malware.exe, sandbox.exe, test.exe, joeboxcontrol.exe e fakenet.exe.
Per molte rilevazioni positive, il malware accede intenzionalmente a:
0x1337
Quell’indirizzo non valido provoca una violazione di accesso e interrompe l’esecuzione in un modo che può apparire simile a un crash. Elastic non ha osservato controlli espliciti per individuare debugger o hook API, sebbene alcuni risultati ambientali raccolti non provochino necessariamente l’interruzione.
Il kill switch di Elastic ha interrotto più di 1.500 infezioni
Elastic ha registrato un dominio canary di rete utilizzato dalla campagna, trasformandolo in un kill switch temporaneo. L’intervento ha interrotto più di 1.500 infezioni, mentre al momento della pubblicazione dell’analisi erano ancora in corso le operazioni di conteggio degli ulteriori sistemi interessati.
Il dominio canary non è stato reso pubblico e l’interruzione è descritta come temporanea. Le organizzazioni dovrebbero quindi cercare prove locali dell’infezione, senza considerare l’intervento una bonifica permanente.
I controlli prioritari includono:
- Individuare l’attività pianificata
MicrosoftNodeRuntimeUpdater. - Analizzare
conhost.exe --headless node.exe, soprattutto quando viene eseguito da directory scrivibili dagli utenti. - Cercare nella telemetria degli endpoint e della rete i tre hash SHA-256 forniti.
- Esaminare i profili di Chrome ed Edge alla ricerca di modifiche inattese a Secure Preferences, HMAC, hash App-Bound o estensioni.
- Individuare i file
SentinelAgentCore.dllsenza firma caricati daSentinelMemoryScanner.exe. - Segnalare i binari SentinelOne eseguiti al di fuori delle directory di installazione autorizzate.
- Esaminare le attività sospette di
certutilche coinvolgono JavaScript o payload estratti. - Cercare connessioni ai domini elencati e all’indirizzo del contratto Ethereum.
- Analizzare i file JavaScript a tema bancario ricevuti come fatture, documenti o materiale aziendale.
Gli utenti per i quali si sospetta un’infezione dovrebbero invalidare le sessioni bancarie attive e le credenziali tramite canali affidabili, dopo aver isolato ed esaminato la macchina interessata. La semplice rimozione dell’estensione visibile potrebbe lasciare intatti l’attività pianificata, il loader e i componenti caricati tramite side-loading.
Fonti
Questo articolo è una rielaborazione originale basata sulle fonti seguenti.
- fonte primariaelastic.co
- Security Affairs
