Novo Malware VVS Stealer Alvo Conta do Discord Através de Código Python Ofuscado
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
VVS Stealer é um novo ladrão de informações baseado em Python observado à venda no Telegram. Está ofuscado com Pyarmor, empacotado com PyInstaller e persiste via a pasta de inicialização do Windows. O malware coleta tokens do Discord, credenciais de navegadores, cookies, histórico, senhas e capturas de tela. Ele também pode injetar um payload de JavaScript malicioso para sequestrar sessões ativas do Discord.
Investigação
A Palo Alto Networks Unit 42 divulgou o malware, observando que ele tem sido oferecido à venda desde abril de 2025. Pesquisadores descreveram sua técnica de ofuscação, modelo de distribuição e funcionalidade, incluindo roubo de credenciais e injeção no Discord. O relatório liga a ferramenta a atores ameaçadores de língua francesa ativos em grupos focados em ladrões no Telegram.
Mitigação
As organizações devem monitorar executáveis PyInstaller desconhecidos e atalhos inesperados na pasta de Inicialização. Implantar regras de detecção de endpoint para scripts Python ofuscados e payloads de JavaScript suspeitos. Impor autenticação multifatorial para contas do Discord e navegadores e limitar privilégios administrativos que poderiam ser abusados para o roubo de credenciais.
Resposta
Se o VVS Stealer for detectado, isole o endpoint afetado, colete artefatos de memória e arquivo e extraia IOCs. Remova a entrada de inicialização maliciosa, termine quaisquer processos do Discord injetados e force uma redefinição de senha para contas comprometidas. Conduza uma investigação forense completa para localizar credenciais adicionais roubadas e garantir que a infraestrutura C2 remota seja bloqueada.
“graph TB %% Class definitions classDef action fill:#99ccff classDef malware fill:#ff9999 classDef tool fill:#cccccc classDef technique fill:#ffff99 %% Nodes mal_vvs_stealer[“<b>Malware</b> – <b>VVS Stealer</b><br/><b>Descrição</b>: Malware de roubo de informações empacotado com PyInstaller e ofuscado com PyArmor.”] class mal_vvs_stealer malware tool_pyinstaller[“<b>Ferramenta</b> – <b>PyInstaller</b><br/><b>Descrição</b>: Converte aplicações Python em executáveis independentes.”] class tool_pyinstaller tool tool_pyarmor[“<b>Ferramenta</b> – <b>PyArmor</b><br/><b>Descrição</b>: Ofusca bytecode Python para esconder lógica maliciosa.”] class tool_pyarmor tool tech_T1027[“<b>Técnica</b> – <b>T1027 Arquivos ou Informações Ofuscadas</b><br/><b>Descrição</b>: Adversários usam ofuscação para esconder código malicioso.”] class tech_T1027 technique action_download_js[“<b>Ação</b> – Baixar carga adicional de JavaScript”] class action_download_js action tech_T1027_006[“<b>Técnica</b> – <b>T1027.006 Contrabando de HTML</b><br/><b>Descrição</b>: Embutir código malicioso em HTML para contornar defesas.”] class tech_T1027_006 technique tech_T1505[“<b>Técnica</b> – <b>T1505 Componente de Software de Servidor</b><br/><b>Descrição</b>: Instalar componentes adicionais no servidor para apoiar atividades maliciosas.”] class tech_T1505 technique action_persistence[“<b>Ação</b> – Estabelecer persistência via pasta de Inicialização”] class action_persistence action tech_T1037_005[“<b>Técnica</b> – <b>T1037.005 Itens de Inicialização</b><br/><b>Descrição</b>: Colocar executáveis na pasta de inicialização do usuário para rodar no logon.”] class tech_T1037_005 technique tech_T1547[“<b>Técnica</b> – <b>T1547 Execução de Inicialização ou Logon Automático</b><br/><b>Descrição</b>: Registrar programas para execução automática na inicialização ou logon.”] class tech_T1547 technique action_fake_error[“<b>Ação</b> – Exibir mensagem de erro fatal falso”] class action_fake_error action tech_T1562_011[“<b>Técnica</b> – <b>T1562.011 Falsificação de Alertas de Segurança</b><br/><b>Descrição</b>: Mostrar alertas de segurança falsos para enganar os usuários.”] class tech_T1562_011 technique action_screenshot[“<b>Ação</b> – Capturar tela”] class action_screenshot action tech_T1113[“<b>Técnica</b> – <b>T1113 Captura de Tela</b><br/><b>Descrição</b>: Gravar capturas de tela da área de trabalho da vítima.”] class tech_T1113 technique action_browser_harvest[“<b>Ação</b> – Coletar dados do navegador (cookies, senhas, histórico)”] class action_browser_harvest action tech_T1555_003[“<b>Técnica</b> – <b>T1555.003 Credenciais de Navegadores Web</b><br/><b>Descrição</b>: Extrair credenciais e cookies salvos nos navegadores.”] class tech_T1555_003 technique action_discord_hijack[“<b>Ação</b> – Encerrar cliente Discord e injetar JavaScript malicioso”] class action_discord_hijack action tech_T1539[“<b>Técnica</b> – <b>T1539 Roubo de Cookie de Sessão Web</b><br/><b>Descrição</b>: Obter cookies de sessão web ativos nos navegadores.”] class tech_T1539 technique tech_T1134_003[“<b>Técnica</b> – <b>T1134.003 Manipulação de Token de Acesso</b><br/><b>Descrição</b>: Roubar ou se passar por tokens de autenticação.”] class tech_T1134_003 technique action_c2_exfil[“<b>Ação</b> – Exfiltrar dados via C2 baseado na web”] class action_c2_exfil action tech_T1071_001[“<b>Técnica</b> – <b>T1071.001 Protocolo de Camada de Aplicação: Protocolos da Web</b><br/><b>Descrição</b>: Usar tráfego web padrão para comando e controle.”] class tech_T1071_001 technique tech_T1102[“<b>Técnica</b> – <b>T1102 Serviço Web</b><br/><b>Descrição</b>: Comunicar-se com servidores remotos via serviços web para exfiltração de dados.”] class tech_T1102 technique %% Connections mal_vvs_stealer u002du002d>|uses| tech_T1027 mal_vvs_stealer u002du002d>|packaged with| tool_pyinstaller mal_vvs_stealer u002du002d>|obfuscated with| tool_pyarmor mal_vvs_stealer u002du002d>|downloads| action_download_js action_download_js u002du002d>|uses| tech_T1027_006 action_download_js u002du002d>|uses| tech_T1505 action_download_js u002du002d>|establishes persistence via| action_persistence action_persistence u002du002d>|uses| tech_T1037_005 action_persistence u002du002d>|leverages| tech_T1547 action_persistence u002du002d>|displays| action_fake_error action_fake_error u002du002d>|uses| tech_T1562_011 action_fake_error u002du002d>|captures| action_screenshot action_screenshot u002du002d>|uses| tech_T1113 action_screenshot u002du002d>|harvests| action_browser_harvest action_browser_harvest u002du002d>|uses| tech_T1555_003 action_browser_harvest u002du002d>|targets Discord and injects JS| action_discord_hijack action_discord_hijack u002du002d>|uses| tech_T1539 action_discord_hijack u002du002d>|uses| tech_T1134_003 action_discord_hijack u002du002d>|exfiltrates via| action_c2_exfil action_c2_exfil u002du002d>|uses| tech_T1071_001 action_c2_exfil u002du002d>|uses| tech_T1102 “
Fluxo de Ataque
Detecções
Arquivo Python Criado Em Diretório Incomum (via file_event)
Ver
Possível Abuso do Discord como Canal C2 (via dns_query)
Ver
Possível Abuso do Discord como Canal C2 (via proxy)
Ver
Binário / Scripts Suspeitos em Local de Inicialização Automática (via file_event)
Ver
Possível Utilização do PyInstaller (via file_event)
Ver
Pacote PyInstaller VVS Stealer e Terminação do Discord [Criação de Processo no Windows]
Ver
Execução de Simulação
Pré-requisito: A Verificação de Telemetria & Linha de Base deve ter passado.
Justificativa: Esta seção detalha a execução precisa da técnica de adversário (TTP) projetada para acionar a regra de detecção. Os comandos e narrativas DEVEM refletir diretamente os TTPs identificados e buscar gerar a telemetria exata esperada pela lógica de detecção. Exemplos abstratos ou não relacionados levarão a um diagnóstico incorreto.
-
Narrativa & Comandos de Ataque:
O adversário comprometeu uma conta de usuário de baixo privilégio em uma estação de trabalho Windows. Usando um dropper PowerShell, eles lançam um executável malicioso empacotado com PyInstaller (VVS_Stealer.exe) que primeiro gera um processo com a linha de comando contendo a string “PyInstaller”. O payload então encerra à força o cliente do Discord em execução para preparar para uma etapa de injeção de roubo de token. Todas as ações ocorrem sob o contexto do usuário atual, gerando um único Criação de Processo evento que corresponde aos critérios da regra.Passo a Passo:
- Copie o pacote malicioso PyInstaller para
%TEMP%. - Execute-o com uma linha de comando que inclua explicitamente a palavra “PyInstaller”.
- O binário malicioso internamente chama
taskkill /IM Discord.exe /Fpara terminar o Discord. - A terminação gera um Criação de Processo evento onde o campo
Imagemresolve para o caminho do executável do Discord (C:Users<user>AppDataLocalDiscordapp-... Discord.exe) e a linha de comando original ainda contém “PyInstaller”.
- Copie o pacote malicioso PyInstaller para
-
Script de Teste de Regressão: O seguinte script PowerShell reproduz a telemetria exata necessária para acionar a regra de detecção. Intencionalmente, evita qualquer payload malicioso real; em vez disso, lança um processo inofensivo
notepad.exemas finge ser um executável empacotado com PyInstaller incorporando a palavra-chave na linha de comando. Também encerra qualquer processo Discord em execução para espelhar a condição “Imagem termina com Discord.exe”.# ------------------------------------------------- # Script de Simulação – Aciona a regra Sigma #f63685c4‑feea‑431b‑a749‑55cf8661e6ac # ------------------------------------------------- # 1. Garantir que o Discord esteja em execução (opcional, para garantir a terminação) $discordPath = "$env:LOCALAPPDATADiscordapp-1.0.9005Discord.exe" if (-Not (Get-Process -Name "Discord" -ErrorAction SilentlyContinue)) { Start-Process -FilePath $discordPath -WindowStyle Hidden Start-Sleep -Seconds 5 } # 2. Iniciar um processo fictício com "PyInstaller" na linha de comando. # Usando notepad.exe como um substituto benigno. $dummyCmd = "C:WindowsSystem32notepad.exe" $cmdLine = "PyInstaller_dummy_execution -run $dummyCmd" Start-Process -FilePath $dummyCmd -ArgumentList $cmdLine -WindowStyle Hidden Write-Host "[+] Processo fictício iniciado com palavra-chave PyInstaller." # 3. Imediatamente encerrar o Discord para gerar o evento de imagem Discord.exe. if (Get-Process -Name "Discord" -ErrorAction SilentlyContinue) { Stop-Process -Name "Discord" -Force Write-Host "[+] Discord.exe encerrado." } # 4. Opcional: Limpar a janela fictícia do notepad após um breve atraso. Start-Sleep -Seconds 8 Get-Process -Name "notepad" -ErrorAction SilentlyContinue | Stop-Process -Force Write-Host "[+] Limpeza concluída." -
Comandos de Limpeza: Certifique-se de que nenhum processo residual permaneça.
# Remova qualquer processo remanescente do notepad Get-Process -Name "notepad" -ErrorAction SilentlyContinue | Stop-Process -Force # Reinicie o Discord se necessário para continuidade pós-teste $discordPath = "$env:LOCALAPPDATADiscordapp-1.0.9005Discord.exe" if (-Not (Get-Process -Name "Discord" -ErrorAction SilentlyContinue)) { Start-Process -FilePath $discordPath Write-Host "[+] Discord reiniciado para operações normais." }