Resumo
- O TMPN Stealer é baseado no projeto de código aberto “Skuld stealer”
- Ele usa webhooks do Discord para comunicações com a comunidade
- Injeta payload JS no Discord
- Rouba dados de navegadores e carteiras de criptomoedas
- Rouba arquivos locais e informações do sistema de arquivos
Introdução
O Skuld, também conhecido como TMPN Stealer, é um malware de roubo de informações escrito em Golang (Go) que surgiu em maio de 2023. Seu desenvolvedor, identificado como "Deathined", parece ser um novato no cenário de desenvolvimento de malware, utilizando projetos de código aberto como inspiração para a funcionalidade do Skuld. O malware é distribuído por meio de vários meios, incluindo links maliciosos e sites comprometidos, com o objetivo de infectar sistemas globalmente.
Detalhes técnicos
Visão geral
A amostra analisada foi escrita em Go e tem um carimbo de data/hora de compilação falso. O tamanho do arquivo é de 14,4 MB e é normal para programas escritos em Go.

O GitHub contém uma página que provavelmente continha o código-fonte do TMPN Stealer, mas ela não está mais disponível: https://github.com/DextenXD/TMPN-Stealer

Enquanto esta página está indisponível, durante a análise, descobrimos um link no código que leva a outro cliente potencial: Skuld Stealer. É um projeto de código aberto que demonstra um ladrão de informações orientado para o Discord. Até a descrição é semelhante à do TMPN:

Configuração
No início da execução, o Skuld carrega a configuração na memória, que contém várias strings. A primeira é “webhook” e a segunda contém a URL:
hxxps://discord.com/api/webhooks/1272963856322527274/PGGfe9V7To17wrSy0T7qE8EpNjFXfms2KY4A421gXmXwMcrPdaeG0Z3DB2T9eYE
Isso se refere a webhooks do Discord, uma maneira fácil de postar mensagens em canais do Discord. Esse mecanismo é muito útil para organizar o controle, pois os webhooks não exigem um usuário de bot ou autenticação para serem utilizados.
A próxima string que é carregada na memória aponta para a carteira BTC:

Na verdade, o código-fonte suporta várias carteiras de criptomoedas:

Preparação
Antes de executar o payload principal, o Skuld Stealer faz algumas preparações:

Primeiro, o Skuld Stealer verifica se já está em execução, verificando o nome do mutex específico:

Em seguida, ele chama a função UAC Bypass. Aqui ele verifica se o processo está elevado ou se pode ser elevado e, em seguida, chama a função de elevação. Esta função define o caminho do malware para a chave de registro da utilitário fodhelper.exe:
HKCU\\Software\\Classes\\ms-settings\\shell\\open\\comando\\DelegateExecute
Isso fará com que o fodhelper.exe exiba a janela do UAC, mas, como a chave de registro foi alterada, ao aceitar a notificação, será executado um exemplo com permissões elevadas. O processo antigo, então, limpará a chave de registro Fodhelper e terminará.
Para se ocultar dos olhos do usuário, o Skuld Stealer utiliza o comando ‘attrib +h +s’, que atribui os atributos ‘hidden’ e ‘system’ ao arquivo. Além disso, ele utiliza a função ‘GetConsoleWindow’ para obter o descritor da janela atual e a função ‘ShowWindow’ para definir o estado de exibição da janela como ‘Hidden’ (Oculto).
Ele adiciona uma chave de registro em ‘Software\Microsoft\Windows\CurrentVersion\Run’ para persistir nos sistemas das vítimas. O nome da chave será ‘Realtek HD Audio Universal Service’ e terá o valor a seguir: ‘%APPDATA%\Microsoft\Proteção\SecurityHealthSystray.exe’. Após isso, ele verificará a existência do arquivo nesse caminho. Se não existir, ele se copiará para lá.
Em seguida, o Skuld Stealer verifica se a amostra está sendo executada em uma máquina virtual. Para fazer isso, ele verifica o nome do host, o nome de usuário, o endereço MAC, o endereço IP e o HWID e compara-os com suas próprias listas salvas. Se houver correspondência com alguma string, a execução será encerrada. Em seguida, ele verifica se há algum depurador anexado ao processo de TI.
Por fim, tenta evitar o software antivírus. Aqui, ele exclui o próprio caminho da verificação do Microsoft Windows Defender e utiliza comandos do PowerShell para desativá-lo:
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
O último passo desta função é bloquear a conexão com os seguintes blocos de sites:
"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"
Injeção do Discord
Ao entrar na função de injeção, o Skuld Stealer chama primeiro duas funções de bypass. O primeiro é usado para burlar o BetterDiscord, que é uma modificação do cliente do Discord. Além de diferentes plug-ins, emotes e ferramentas para desenvolvedores, ele também contém aprimoramentos de segurança. Para realizar a execução, ele pesquisa e abre um arquivo ‘AppData\Roaming\BetterDiscord\data\betterdiscord.asar’ e substitui todas as ocorrências da string ‘api/webhooks’ por ‘ByHackirby’.

Em seguida, tenta burlar o Discord Token Protector. Primeiro, ele verifica se este módulo está presente no sistema de TI. Se sim, ele abre um arquivo "AppData\Roaming\DiscordTokenProtector\config.json" e altera os valores a seguir:
"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
Em seguida, ele chama uma função de injeção. Primeiro, ele verifica a presença do Discord no PC, carregando blocos de dados multiplicados e retirando alguns dados deles. Em seguida, ele junta todos os dados coletados e os passa para a função ‘filepath.Glob’ como um filtro de pesquisa.

Em seguida, ele faz o download do arquivo ‘injection.js’ do Github do Skuld. O nome do arquivo será alterado para ‘coreinedex.js’ e gravado no caminho do Discord encontrado anteriormente. Esse script configura ganchos e intercepta dados como solicitações de login, registro e 2FA, créditos do PayPal e alterações de e-mail/senha. Quando alguma informação é capturada, o resultado é enviado para o servidor em formato JSON.

Injeção de carteiras de criptomoedas
A injeção tem como destino duas carteiras de criptomoedas: Exodus e Atomic. O objetivo dessa técnica é baixar e salvar arquivos com a extensão ‘.asar’, que é um arquivo morto usado por carteiras de criptomoedas, mas que contém dados do atacante.

Descoberta de informações do sistema
Após a conclusão das duas injeções, o Skuld Stealer começa a obter informações do sistema. Aqui, ele chama um número de funções para obter informações como CPU, discos, GPU, rede, sistema operacional, chaves de licença do Windows, RAM e outras de TI.

Todos esses dados serão salvos em formato JSON e enviados para o servidor. Além dos dados brutos, ele anexa um link para a imagem ao campo ‘avatar_url’. Esse avatar provavelmente é usado no bot do Discord do atacante.

Navegadores
A função do navegador tem como destino dois tipos de navegadores e depende de sua engine — baseada em Chromium ou Gecko. Ambas as funções têm nomes e caminhos de navegador salvos diferentes. As funções que extraem dados, como logins, cookies, cartões de crédito, downloads e histórico, são as mesmas para todos os navegadores.

Tokens do Discord
Para obter os tokens do Discord, o Skuld Stealer verifica novamente os navegadores e pesquisa strings específicas em seus bancos de dados. Em seguida, os resultados são passados para a função que interagirá com a API do Discord e verificará se os tokens encontrados são válidos através da validação. Todos os resultados são salvos em formato JSON e enviados para o servidor.

Códigos de 2FA do Discord
O Discord tem um mecanismo que é usado caso um usuário perca o acesso ao dispositivo 2FA. O arquivo ‘discord_backup_codes.txt’ contém códigos que podem ser usados em tais situações.

A amostra pesquisará este arquivo nas seguintes pastas do usuário: Área de Trabalho, Downloads, Documentos, Videos, Fotos, Músicas, OneDrive.
Arquivos comuns
Esta função pesquisará arquivos com palavras-chave específicas em seus nomes e extensões nas seguintes pastas: Área de Trabalho, Downloads, Documentos, Vídeos, Imagens, Músicas, OneDrive. Se tanto a palavra-chave quanto a extensão estiverem presentes no nome do arquivo, o arquivo será copiado para a nova pasta.

Essa pasta será então colocada no arquivo morto com uma senha que contém 16 símbolos aleatórios. O arquivo morto será carregado para o servidor juntamente com os dados JSON, que contêm a URL do servidor de arquivos mortos, a senha e o número do contêiner de arquivo morto. Aqui podemos observar que o link do servidor que foi fornecido na função ‘Upload’ corresponde ao link do código-fonte: ‘https://api.gofile.io/getServer ’. Este link é inválido, o que significa que esta amostra coletará dados, mas não os enviará ao atacante.
Carteiras de criptomoedas
Aqui, ele tem duas funções diferentes para esse fim. A primeira pesquisa por arquivos de carteira de criptomoeda no sistema local, na pasta ‘%APPDATA%\\Roaming’. Todos os arquivos encontrados serão compactados em um arquivo zip e enviados para o servidor. A segunda verificará as extensões de navegador para carteiras de criptomoedas e tentará roubar os perfis delas.

Roubo de sessão de jogo
Para roubar dados de jogos, o Skuld Stealer carrega uma lista que contém seis nomes: “Epic Games”, “Minecraft”, “Riot Games”, “Uplay”, “NationsGlory” e “Steam”. Cada campo contém valores adicionais, que incluem caminhos de arquivo e nomes de arquivo que devem ser pesquisados. Ele tentará copiar todos os arquivos que estão apresentados nessa lista para a pasta temporária e exfiltrá-los para o servidor como um arquivo zip.

Clipper
Finalmente, inicia uma função de clipper. Ele usa vários valores de expressão regular para filtrar os dados da área de TI. Essa expressão regular tem como destino diferentes endereços de carteiras de criptomoedas e, se houver uma correspondência, substituirá esses dados pelo próprio endereço de carteira de criptomoedas. O único endereço de atacante que foi identificado na configuração é o endereço BTC.

Conclusão
Compilado a partir do projeto de código aberto Skuld, o stealer TMPN tem um endereço de carteira BTC e um link de API do Discord em sua configuração. Não há informações adicionais adicionadas ao código-fonte, como um servidor para carregar arquivos, o que significa que este exemplo tem como destino principal o Discord, injetando um payload JS para recuperar informações como e-mails, senhas e tokens.
O Discord é um destino popular não apenas porque é a plataforma de comunicação mais popular para jogadores, mas também porque é popular na comunidade de criptomoedas. Ele pode até mesmo burlar alguns dos plug-ins do Discord que são projetados para aprimorar a segurança. Ele também pode roubar dados do navegador e arquivos do usuário, que podem conter credenciais, e carregá-los para o atacante.
Detectado pela Acronis

