28 marzo 2025

TMPN (Skuld) Stealer: il lato oscuro dell'open source

Riepilogo

  • TMPN Stealer si basa sul progetto open source 'Skuld stealer'
  • Utilizza i webhook di Discord per le comunicazioni
  • Inietta payload JS in Discord
  • Si appropria dei dati dei browser e dei portafogli di criptovalute
  • Si appropria di file locali e informazioni di sistema

 

Introduzione

Skuld, noto anche come TMPN Stealer, è un malware che si appropria di informazioni scritto in Golang (Go) e comparso nel maggio 2023. Il suo sviluppatore, identificato come "Deathined", sembra essere un nuovo arrivato nel panorama dello sviluppo di malware; come ispirazione per le funzionalità di Skuld utilizza progetti open source. Il malware viene distribuito tramite vari mezzi, tra cui collegamenti pericolosi e siti web compromessi, con l'obiettivo di infettare sistemi in tutto il mondo.

Dettagli tecnici

Panoramica

L'esemplare analizzato è scritto in Go e ha un timestamp di compilazione falso. La dimensione del file è di 14,4 MB, un valore normale per i programmi scritti in Go.

Acronis

In GitHub è presente una pagina che probabilmente conteneva il codice sorgente di TMPN Stealer, ma non è più disponibile: https://github.com/DextenXD/TMPN-Stealer

Acronis

Malgrado la non disponibilità, durante l'analisi abbiamo scoperto un link nel codice che porta a un altro progetto: Skuld Stealer. Si tratta di un progetto open source che nasconde un malware di tipo stealer indirizzato a Discord. Anche la descrizione è simile a quella di TMPN:

Acronis

Configurazione

All'avvio dell'esecuzione, Skuld carica in memoria una configurazione che contiene più stringhe. La prima è 'webhook', la seconda contiene l'URL:

hxxps://discord.com/api/webhooks/1272963856322527274/PGGfe9V7To17wrSy0T7qE8EpNjFXfms2KY4A421gXmXwMcrPdaeG0Z3DB2T9eYE

L'URL fa riferimento ai webhook di Discord, un metodo semplice per inviare messaggi ai canali Discord. È un valido meccanismo per organizzare il controllo, perché per essere utilizzati i webhook non richiedono un utente bot o un'autenticazione.

La successiva stringa caricata in memoria punta al portafoglio BTC:

Acronis

Il codice sorgente supporta infatti più portafogli di criptovalute:

Acronis

Preparazione

Prima di eseguire il payload principale, Skuld Stealer avvia alcune azioni preliminari:

Acronis

Innanzitutto, Skuld Stealer verifica se è già in esecuzione controllando il nome del mutex specifico:

Acronis

Quindi, richiama la funzione UAC Bypass. A questo punto, verifica se il processo è stato o può essere elevato, quindi richiama la funzione di elevazione che imposta il percorso del malware nella chiave del Registro di sistema dell'utilità fodhelper.exe:

HKCU\\Software\\Classes\\ms-settings\\shell\\open\\command\\DelegateExecute

Nella finestra di controllo dell'account utente viene visualizzato un file fodhelper.exe, ma poiché la chiave del Registro di sistema è stata modificata, all'accettazione della notifica esegue un esemplare con autorizzazioni elevate. Il processo precedente cancella quindi la chiave del Registro di sistema Fodhelper e si chiude.

Per nascondersi all'utente, Skuld Stealer utilizza il comando 'attrib +h +s', che assegna all'esemplare gli attributi 'hidden' e 'system'. Inoltre, utilizza la funzione 'GetConsoleWindow' per ottenere il descrittore della finestra corrente e la funzione 'ShowWindow' per impostare lo stato di visualizzazione della finestra su 'Hidden'.

Per ottenere la persistenza nei sistemi presi di mira, aggiunge una chiave del Registro di sistema a 'Software\Microsoft\Windows\CurrentVersion\Run'. Il nome della chiave è 'Realtek HD Audio Universal Service' e ha il valore: '%APPDATA%\Microsoft\Protect\SecurityHealthSystray.exe'. Lo stealer controlla l'esistenza del file in questo percorso, e se non esiste, si copia nella posizione.

A questo punto, Skuld Stealer verifica se l'esemplare è in esecuzione su una macchina virtuale, controllando il nome host, il nome utente, l'indirizzo MAC, l'indirizzo IP e l'HWID e confrontandoli con i propri elenchi salvati. Se una stringa corrisponde, termina l'esecuzione. Successivamente, controlla se al processo è collegato un debugger.

Infine, cerca di eludere il software antivirus. Nel nostro esempio, esclude il proprio percorso dalla scansione di Microsoft Windows Defender e utilizza i comandi di PowerShell per disabilitarlo:

powershell", "Set-MpPreference", "-DisableIntrusionPreventionSystem", "$true", "-DisableIOAVProtection", "$true", "-DisableRealtimeMonitoring", "$true", "-DisableScriptScanning", "$true", "-EnableControlledFolderAccess", "Disabled", "-EnableNetworkProtection", "AuditMode", "-Force", "-MAPSReporting", "Disabled", "-SubmitSamplesConsent", "NeverSend"

powershell", "Set-MpPreference", "-SubmitSamplesConsent", "2

"%s\\Windows Defender\\MpCmdRun.exe", os.Getenv("ProgramFiles")), "-RemoveDefinitions", "-All

L'ultimo passaggio di questa funzione è il blocco della connessione ai siti seguenti:

"virustotal.com", "avast.com",        “totalav.com", "scanguard.com", "totaladblock.com", "pcprotect.com", "mcafee.com", "bitdefender.com", "us.norton.com", "avg.com", "malwarebytes.com", "pandasecurity.com", "avira.com", "norton.com", "eset.com", "zillya.com", "kaspersky.com", "usa.kaspersky.com", "sophos.com", "home.sophos.com", "adaware.com", "bullguard.com", "clamav.net", "drweb.com", "emsisoft.com", "f-secure.com", "zonealarm.com", "trendmicro.com", "ccleaner.com"

Iniezione in Discord

All'immissione della funzione di iniezione, Skuld Stealer richiama due funzioni di bypass. La prima è utilizzata per aggirare BetterDiscord, uno strumento per personalizzare Discord. Oltre a diversi plug-in, emote e strumenti per sviluppatori, contiene anche delle migliorie di sicurezza. Per eseguire la funzione di bypass, Skuld cerca e apre il file 'AppData\Roaming\BetterDiscord\data\betterdiscord.asar' e sostituisce tutte le stringhe 'api/webhooks' esistenti con 'ByHackirby'.

Acronis

Tenta quindi di bypassare Discord Token Protector. Innanzitutto, verifica se il modulo è visibile nel sistema. Se sì, apre il file "AppData\Roaming\DiscordTokenProtector\config.json" e modifica i valori seguenti:

"auto_start" = false

"auto_start_discord" = false

"integrity" = false

"integrity_allowbetterdiscord" = false

"integrity_checkexecutable" = false

"integrity_checkhash" = false

"integrity_checkmodule" = false

"integrity_checkscripts" = false

"integrity_checkresource" = false

"integrity_redownloadhashes" = false

"iterations_iv" = 364

"iterations_key" = 457

"version" = 69420

Quindi, richiama una funzione di iniezione. Per prima cosa, controlla la presenza di Discord sul PC, caricando blocchi di dati moltiplicati e prelevando da questi alcuni dati. Quindi unisce tutti i dati acquisiti e li passa alla funzione 'filepath.Glob' come filtro di ricerca.

Acronis

Infine, scarica il file 'injection.js' da Skuld Github. Il nome del file viene modificato in 'coreinedex.js' e scritto nel percorso Discord trovato in precedenza. Lo script imposta gli hook e intercetta i dati relativi alle richieste di accesso, registrazione e 2FA, ai pagamenti con PayPal e alle modifiche di e-mail e password. Qualsiasi informazione acquisita viene inviata in formato JSON al server.

Acronis

Iniezione nei portafogli di criptovalute

L'iniezione è destinata a due portafogli di criptovalute: Exodus e Atomic. Lo scopo di questa tecnica è scaricare e salvare file con estensione '.asar'; si tratta di un archivio utilizzato dai portafogli di criptovalute, ma contenente dati dell'attaccante.

Acronis

Individuazione di informazioni di sistema

Dopo aver completato entrambe le iniezioni, Skuld Stealer inizia ad acquisire le informazioni di sistema. Come visibile nell'immagine, vengono richiamate un certo numero di funzioni che restituiscono informazioni relative a CPU, dischi, GPU, rete, sistema operativo, codici di licenza di Windows, RAM e altro.

Acronis

Tutti questi dati vengono salvati in formato JSON e inviati al server. Oltre ai dati grezzi, viene aggiunto un collegamento a un'immagine al campo 'avatar_url'. Probabilmente, l'avatar viene utilizzato nel bot Discord dell'attaccante.

Acronis

Browser

La funzione del browser è indirizzata a due tipi di browser, a seconda del loro motore, Chromium o Gecko. Entrambe queste funzioni presentano nomi e percorsi di browser salvati diversi. Le funzioni che estraggono i dati, come i dati di accesso, i cookie, le carte di credito, i download e la cronologia, sono le stesse per tutti i browser.

Acronis

Token di Discord

Per ottenere i token di Discord, Skuld Stealer controlla nuovamente i browser e cerca specifiche stringhe nei loro database. I risultati vengono quindi passati alla funzione che interagisce con l'API Discord e convalida i token individuati. Tutti i risultati vengono salvati in formato JSON e inviati al server.

Acronis

Codici 2FA di Discord

Discord è dotato di un meccanismo che viene utilizzato se un utente perde l'accesso al dispositivo 2FA. Il file 'discord_backup_codes.txt' contiene i codici che possono essere utilizzati in queste situazioni.

Acronis

L'esemplare cerca questo file nelle seguenti cartelle utente: Desktop, Download, Documenti, Video, Immagini, Musica, OneDrive.

File comuni

Questa funzione cerca i file che contengono particolari parole chiave nei nomi e nelle estensioni nelle cartelle seguenti: Desktop, Download, Documenti, Video, Immagini, Musica, OneDrive. Se la parola chiave e l'estensione sono presenti nel nome del file, il file viene copiato nella nuova cartella.

Acronis

La cartella viene quindi archiviata con una password che contiene 16 simboli casuali. L'archivio viene caricato sul server insieme ai dati JSON, che contengono l'URL del server di archiviazione, la password e il numero di file archiviati. Possiamo notare che il collegamento al server fornito nella funzione 'Upload' corrisponde al collegamento dal codice sorgente: 'https://api.gofile.io/getServer'. Questo collegamento non è valido, il che significa che l'esemplare acquisisce i dati ma non li invia all'attaccante.

Portafogli di criptovalute

Per questo ambito, l'esemplare presenta due diverse funzioni. La prima opzione cerca i file del portafoglio di criptovalute nel sistema locale, nella cartella '%APPDATA%\\Roaming'. Tutti i file trovati vengono compressi in un archivio e inviati al server. La seconda funzione controlla le estensioni del browser relative ai portafogli di criptovalute e prova ad appropriarsi dei profili.

Acronis

Stealer di sessioni di gioco

Per appropriarsi dei dati di gioco, Skuld Stealer carica un elenco contenente sei nomi: "Epic Games", "Minecraft", "Riot Games", "Uplay", "NationsGlory" e "Steam". Ogni campo contiene valori aggiuntivi, tra cui i percorsi e i nomi dei file da cercare. L'esemplare tenta di copiare tutti i file presenti nell'elenco nella cartella temporanea e di esfiltrarli sul server come archivio zip.

Acronis

Clipper

Infine, avvia una funzione clipper per controllare gli appunti, utilizzando più valori regex con cui filtra i dati che gli appunti contengono. Il regex punta a diversi indirizzi di portafogli di criptovalute e, se trova una corrispondenza, sostituisce i dati con l'indirizzo del proprio portafoglio di criptovalute. L'unico indirizzo dell'attaccante individuato nella configurazione è l'indirizzo BTC.

Acronis

Conclusioni

Compilato a partire dal progetto open source Skuld, lo stealer TMPN include nella sua configurazione un indirizzo del portafoglio BTC e un link all'API Discord. Al codice sorgente non sono allegate informazioni aggiuntive, ad esempio un server per caricare i file, il che significa che l'obiettivo principale di questo esemplare è Discord, in cui inietta un payload JS per recuperare informazioni come indirizzi e-mail, password e token.

Discord è un obiettivo diffuso non solo perché è la piattaforma di comunicazione più utilizzata dai giocatori, ma anche perché è molto popolare nella community delle criptovalute. L'esemplare può addirittura aggirare alcuni plug-in di Discord progettati per migliorare la sicurezza. Infine, può appropriarsi di dati del browser e di file dell'utente che possono contenere credenziali, e caricarli sul server dell'attaccante.

Rilevato da Acronis

Acronis
Acronis

IoC  

File

Nome file     
SHA256
loader.exe
5a7e38a45533e0477c3868c49df16d307a3da80b97a27ac4261619ff31a219f8


Indicatori di rete

URL
https://raw.githubusercontent.com/hackirby/discord-injection/main/injection.js
https://discord.com/api/webhooks/1272963856322527274/PGGfe9V7To17wrSy0T7qE8EpNjFXfms2KY4A421gXmXwMcrPdaeG0Z3DB2T9eYE
https://i.redd.it/68p07sk4976z.jpg
https://api.gofile.io/getServer