SOC Prime Bias: Médio

05 Jan 2026 19:10

Novo Malware VVS Stealer Alvo Conta do Discord Através de Código Python Ofuscado

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Seguir
Novo Malware VVS Stealer Alvo Conta do Discord Através de Código Python Ofuscado
shield icon

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

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:

    1. Copie o pacote malicioso PyInstaller para %TEMP%.
    2. Execute-o com uma linha de comando que inclua explicitamente a palavra “PyInstaller”.
    3. O binário malicioso internamente chama taskkill /IM Discord.exe /F para terminar o Discord.
    4. A terminação gera um Criação de Processo evento onde o campo Imagem resolve para o caminho do executável do Discord (C:Users<user>AppDataLocalDiscordapp-... Discord.exe) e a linha de comando original ainda contém “PyInstaller”.
  • 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.exe mas 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."
    }