Resumen
- TMPN Stealer se basa en el proyecto de código abierto "Skuld stealer".
- Utiliza webhooks de Discord para las comunicaciones.
- Inyecta una carga útil JS en Discord.
- Roba datos de navegadores y carteras de criptomonedas.
- Roba archivos locales e información del sistema.
Introducción
Skuld, también conocido como TMPN Stealer, es un malware de robo de información escrito en Golang (Go) que apareció en mayo de 2023. Su desarrollador, identificado como "Deathined", parece ser un recién llegado al mundo del desarrollo de malware, que utiliza proyectos de código abierto como inspiración para la funcionalidad de Skuld. El malware se distribuye a través de varios medios, incluidos enlaces maliciosos y sitios web comprometidos, con el objetivo de infectar sistemas a nivel mundial.
Detalles técnicos
Descripción general
La muestra analizada está escrita en Go y tiene una fecha/hora de compilación falsa. El tamaño del archivo es de 14,4 MB, lo que es normal para programas escritos en Go.

GitHub contiene una página en la que probablemente se albergaba el código fuente de TMPN Stealer, pero dejó de estar disponible: https://github.com/DextenXD/TMPN-Stealer

Aunque esta página ya no estuviera disponible, durante el análisis descubrimos un enlace en el código que lleva a otro proyecto: Skuld Stealer. Es un proyecto de código abierto que demuestra un stealer orientado a Discord. Incluso la descripción es similar a la de TMPN:

Configuración
Al iniciarse la ejecución, Skuld carga la configuración en la memoria, que contiene múltiples cadenas. La primera es "webhook" y la segunda contiene la URL:
hxxps://discord.com/api/webhooks/1272963856322527274/PGGfe9V7To17wrSy0T7qE8EpNjFXfms2KY4A421gXmXwMcrPdaeG0Z3DB2T9eYE
Esto hace referencia a los webhooks de Discord, una forma sencilla de publicar mensajes en canales de Discord. Este mecanismo es muy útil para organizar el control, ya que para utilizar webhooks no hace falta ningún usuario de bot ni autenticación.
La siguiente cadena que se carga en la memoria apunta a la cartera de BTC:

De hecho, el código fuente admite múltiples carteras de criptomonedas:

Preparación
Antes de ejecutar la carga útil principal, Skuld Stealer realiza algunas preparaciones:

En primer lugar, Skuld Stealer comprueba si la carga útil principal ya se está ejecutando; para ello, comprueba el nombre del mútex específico:

A continuación, llama a la función de elusión del User Account Control (UAC). Aquí se comprueba si el proceso está elevado o si puede elevarse, y finalmente se llama a la función de elevación. Esta función establece la ruta del malware en la clave de registro de la utilidad fodhelper.exe:
HKCU\\Software\\Classes\\ms-settings\\shell\\open\\command\\DelegateExecute
Esto hará que fodhelper.exe abra la ventana del UAC, pero como la clave de registro se ha modificado, al aceptar la notificación, ejecutará una muestra con permisos elevados. A continuación, el proceso antiguo limpiará la clave de registro Fodhelper y terminará.
Con el fin de pasar desapercibido para el usuario, Skuld Stealer utiliza el comando "attrib +h +s", que asigna los atributos de muestra "hidden" y "system". Además, utiliza la función "GetConsoleWindow" para obtener el descriptor de la ventana actual y la función "ShowWindow" para establecer el estado de visualización de la ventana en "Hidden" (oculto).
Añade una clave de registro a "Software\Microsoft\Windows\CurrentVersion\Run" para persistir en los sistemas de la víctima. El nombre de la clave será "Realtek HD Audio Universal Servicio" y tendrá el valor siguiente: "%APPDATA%\Microsoft\Protect\SecurityHealthSystray.exe". Después, comprobará si existe el archivo en esta ruta. Si no existe, se copiará a sí mismo allí.
A continuación, Skuld Stealer comprueba si la muestra se está ejecutando en una máquina virtual. Para ello, comprueba el nombre del host, el nombre del usuario, la dirección MAC, la dirección IP y el HWID, y los compara con sus propias listas guardadas. Si alguna cadena coincide, se detendrá la ejecución. A continuación, comprueba si hay algún depurador conectado al proceso.
Por último, intenta eludir el software antivirus. Aquí, excluye su propia ruta de la exploración de Microsoft Windows Defender y utiliza comandos de PowerShell para desactivarla:
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
El último paso de esta función es bloquear la conexión a los siguientes sitios:
"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"
Inyección en Discord
Al entrar en la función de inyección, Skuld Stealer llama primero a dos funciones de elusión. El primero se utiliza para eludir BetterDiscord, que es una modificación del cliente de Discord. Además de diferentes complementos, emoticonos y herramientas para desarrolladores, también incluye mejoras de seguridad. Para llevar a cabo un "bypass" (elusión), busca y abre un archivo "AppData\Roaming\BetterDiscord\data\betterdiscord.asar" y reemplaza todas las cadenas "api/webhooks" existentes por "ByHackirby".

A continuación, intenta eludir el protector de tokens de Discord. En primer lugar, comprueba si el módulo está presente en el sistema. Si es así, abre un archivo "AppData\Roaming\DiscordTokenProtector\config.json" y cambia los siguientes valores:
"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
A continuación, llama a una función de inyección. En primer lugar, comprueba si Discord está presente en el PC; cargando bloques de datos multiplicados y toma algunos datos de ellos. A continuación, une todos los datos tomados y los pasa a la función ‘filepath.Glob’ como filtro de búsqueda.

Después, descarga el archivo ‘injection.js’ de Skuld Github. El nombre del archivo se cambiará a ‘coreinedex.js’ y se escribirá en la ruta de Discord encontrada anteriormente. Este script configurará "hooks" (ganchos) e interceptará datos como las solicitudes de inicio de sesión, registro y autenticación de doble factor (2FA), créditos de PayPal y cambios de correo electrónico o contraseña. Cuando se capture alguna información, se enviará el resultado al servidor en formato JSON.

Inyección en carteras de criptomonedas
La inyección tiene como destino dos carteras de criptomonedas: Exodus y Atomic. El objetivo de esta técnica es descargar y guardar archivos con la extensión ".asar", archivos comprimidos que utilizan las carteras de criptomonedas y que contienen datos del atacante.

Descubrimiento de la información del sistema
Una vez realizadas ambas inyecciones, Skuld Stealer empieza a obtener información del sistema. Una vez llegado a este punto, llama a varias funciones para obtener información relacionada con la CPU, GPU, discos, red, sistema operativo, claves de licencia de Windows, RAM, etc.

Todos estos datos se guardarán en formato JSON y se enviarán al servidor. Además de los datos sin procesar, añade un vínculo a una imagen en el campo "avatar_url". Es probable que este avatar se utilice en el bot de Discord del atacante.

Navegadores
La función del navegador se dirige a dos tipos de navegadores y depende de su motor: basado en Chromium o Gecko. Ambas funciones tienen nombres y rutas de navegador diferentes. Las funciones que extraen datos, como inicios de sesión, cookies, tarjetas de crédito, descargas e historial, son las mismas para todos los navegadores.

Tokens de Discord
Para obtener los tokens de Discord, Skuld Stealer vuelve a comprobar los navegadores y busca cadenas concretas en sus bases de datos. A continuación, los resultados se pasan a la función que interactuará con la API de Discord y comprobará si los tokens encontrados son válidos. Todos los resultados se guardan en formato JSON y se envían al servidor.

Códigos de autenticación de doble factor (2FA) de Discord
Discord tiene un mecanismo que se utiliza en caso de que un usuario pierda el acceso a su dispositivo con autenticación de doble factor (2FA) habilitado. El archivo 'discord_backup_codes.txt' contiene códigos que se pueden utilizar en estas situaciones.

La muestra buscará este archivo en las siguientes carpetas de usuario: Escritorio, Descargas, Documentos, Vídeos, Imágenes, Música, OneDrive.
Archivos comunes
Esta función buscará archivos con palabras clave concretas en sus nombres y extensiones en las siguientes carpetas: Escritorio, Descargas, Documentos, Vídeos, Imágenes, Música, OneDrive. Si el nombre del archivo contiene tanto la palabra clave como la extensión, el archivo se copiará en la nueva carpeta.

Esta carpeta se comprimirá con una contraseña que contiene 16 símbolos aleatorios. El archivo comprimido se cargará en el servidor junto con los datos JSON, que contienen la URL del servidor de archivos comprimidos, la contraseña y el número de archivos comprimidos. Aquí podemos observar que el enlace del servidor que se proporcionó en la función "Upload" (Cargar) coincide con el enlace del código fuente: "https://api.gofile.io/getServer". Este enlace no es válido, lo que significa que esta muestra recopilará datos, pero no los enviará al atacante.
Carteras de criptomonedas
En este caso, tiene dos funciones diferentes para este fin. La primera función buscará archivos de carteras de criptomonedas en el sistema local en la carpeta "%APPDATA%\\Roaming". Todos los archivos encontrados se comprimirán en un archivo comprimido y se enviarán al servidor. La segunda función comprobará si hay extensiones de navegador de las carteras de criptomonedas y tratará de robar sus perfiles.

Robo de sesiones de juegos
Para robar datos de juegos, Skuld Stealer carga una lista que contiene seis nombres: "Epic Games", "Minecraft", "Riot Games", "Uplay", "NationsGlory" y "Steam". Cada campo contiene valores adicionales, que incluyen rutas de archivo y nombres de archivo que se deben buscar. Se intentarán copiar todos los archivos que se presentan en esta lista a la carpeta temporal y extraerán al servidor como un archivo zip.

Clipper
Por último, inicia una función de Clipper. Utiliza varios valores de una expresión regular para filtrar los datos del portapapeles. Esta expresión regular se dirige a diferentes direcciones de carteras de criptomonedas y, si hay alguna coincidencia, reemplazará estos datos por su propia dirección de cartera de criptomonedas. La única dirección del atacante que se ha detectado en la configuración es la dirección de BTC.

Conclusión
Compilado a partir del proyecto de código abierto Skuld, TMPN Stealer tiene una dirección de cartera de BTC y un enlace a la API de Discord en su configuración. No se añade información adicional al código fuente, como un servidor para cargar archivos, lo que significa que esta muestra se dirige principalmente a Discord, donde inyecta una carga útil JS para recuperar información, como correos electrónicos, contraseñas y tokens.
Discord es un blanco muy popular entre ciberdelincuentes, y no solo porque sea la plataforma de comunicación más utilizada entre jugadores, sino también por su popularidad en la comunidad de criptomonedas. Incluso puede eludir algunos complementos de Discord diseñados para mejorar la seguridad. También puede robar datos del navegador y archivos del usuario, que pueden contener credenciales, y cargarlos en el equipo del atacante.
Detectado por Acronis

