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.

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

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:

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:

Il codice sorgente supporta infatti più portafogli di criptovalute:

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

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

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'.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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

