Nuevo Malware VVS Stealer Apunta a Cuentas de Discord Mediante Código Python Ofuscado
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
VVS Stealer es un nuevo ladrón de información basado en Python observado a la venta en Telegram. Está ofuscado con Pyarmor, empaquetado con PyInstaller y persiste a través de la carpeta de Inicio de Windows. El malware recopila tokens de Discord, credenciales de navegador, cookies, historial, contraseñas y capturas de pantalla. También puede inyectar una carga útil de JavaScript malicioso para secuestrar sesiones activas de Discord.
Investigación
Palo Alto Networks Unit 42 reveló el malware, señalando que ha estado a la venta desde abril de 2025. Los investigadores describieron su técnica de ofuscación, modelo de distribución y funcionalidad, incluyendo robo de credenciales e inyección en Discord. El informe vincula la herramienta a actores de amenaza francoparlantes activos en grupos de Telegram enfocados en stealer.
Mitigación
Las organizaciones deben monitorear ejecutables PyInstaller desconocidos y accesos directos inesperados en la carpeta de Inicio. Implementar reglas de detección de endpoint para scripts Python ofuscados y cargas útiles de JavaScript sospechosas. Aplicar autenticación multi-factor para cuentas de Discord y navegador y limitar privilegios administrativos que puedan ser abusados para el robo de credenciales.
Respuesta
Si se detecta VVS Stealer, aislar el endpoint afectado, recopilar artefactos de memoria y archivos, y extraer IOC. Eliminar la entrada maliciosa de inicio, terminar cualquier proceso inyectado de Discord y forzar un reinicio de contraseña para cuentas comprometidas. Realizar una investigación forense completa para localizar credenciales robadas adicionales y asegurar que la infraestructura remota de C2 esté bloqueada.
«graph TB %% Definiciones de clase classDef action fill:#99ccff classDef malware fill:#ff9999 classDef tool fill:#cccccc classDef technique fill:#ffff99 %% Nodos mal_vvs_stealer[«<b>Malware</b> – <b>VVS Stealer</b><br/><b>Descripción</b>: Malware para el robo de información empaquetado con PyInstaller y ofuscado con PyArmor.»] class mal_vvs_stealer malware tool_pyinstaller[«<b>Herramienta</b> – <b>PyInstaller</b><br/><b>Descripción</b>: Empaqueta aplicaciones de Python en ejecutables independientes.»] class tool_pyinstaller tool tool_pyarmor[«<b>Herramienta</b> – <b>PyArmor</b><br/><b>Descripción</b>: Ofusca bytecode de Python para ocultar lógica maliciosa.»] class tool_pyarmor tool tech_T1027[«<b>Técnica</b> – <b>T1027 Archivos o Información Ofuscados</b><br/><b>Descripción</b>: Los adversarios utilizan ofuscación para ocultar código malicioso.»] class tech_T1027 technique action_download_js[«<b>Acción</b> – Descargar carga útil adicional en JavaScript»] class action_download_js action tech_T1027_006[«<b>Técnica</b> – <b>T1027.006 Contrabando HTML</b><br/><b>Descripción</b>: Insertar código malicioso en HTML para eludir defensas.»] class tech_T1027_006 technique tech_T1505[«<b>Técnica</b> – <b>T1505 Componente de Software del Servidor</b><br/><b>Descripción</b>: Instalar componentes adicionales del lado del servidor para apoyar actividades maliciosas.»] class tech_T1505 technique action_persistence[«<b>Acción</b> – Establecer persistencia a través de la carpeta de inicio»] class action_persistence action tech_T1037_005[«<b>Técnica</b> – <b>T1037.005 Elementos de Inicio</b><br/><b>Descripción</b>: Colocar ejecutables en la carpeta de inicio del usuario para que se ejecuten al iniciar sesión.»] class tech_T1037_005 technique tech_T1547[«<b>Técnica</b> – <b>T1547 Ejecución de Autostart en Arranque o Inicio de Sesión</b><br/><b>Descripción</b>: Registrar programas para que se ejecuten automáticamente al arrancar o iniciar sesión.»] class tech_T1547 technique action_fake_error[«<b>Acción</b> – Mostrar mensaje emergente de error fatal falso»] class action_fake_error action tech_T1562_011[«<b>Técnica</b> – <b>T1562.011 Simulación de Alertas de Seguridad</b><br/><b>Descripción</b>: Mostrar alertas de seguridad falsas para engañar a los usuarios.»] class tech_T1562_011 technique action_screenshot[«<b>Acción</b> – Capturar pantalla»] class action_screenshot action tech_T1113[«<b>Técnica</b> – <b>T1113 Captura de Pantalla</b><br/><b>Descripción</b>: Grabar capturas de pantalla del escritorio de la víctima.»] class tech_T1113 technique action_browser_harvest[«<b>Acción</b> – Recolectar datos del navegador (cookies, contraseñas, historial)»] class action_browser_harvest action tech_T1555_003[«<b>Técnica</b> – <b>T1555.003 Credenciales desde Navegadores Web</b><br/><b>Descripción</b>: Extraer credenciales guardadas y cookies de los navegadores.»] class tech_T1555_003 technique action_discord_hijack[«<b>Acción</b> – Terminar cliente de Discord e inyectar JavaScript malicioso»] class action_discord_hijack action tech_T1539[«<b>Técnica</b> – <b>T1539 Robo de Cookie de Sesión Web</b><br/><b>Descripción</b>: Obtener cookies de sesión web activas de los navegadores.»] class tech_T1539 technique tech_T1134_003[«<b>Técnica</b> – <b>T1134.003 Manipulación de Token de Acceso</b><br/><b>Descripción</b>: Robar o suplantar tokens de autenticación.»] class tech_T1134_003 technique action_c2_exfil[«<b>Acción</b> – Exfiltrar datos a través de C2 basado en web»] class action_c2_exfil action tech_T1071_001[«<b>Técnica</b> – <b>T1071.001 Protocolo de Capa de Aplicación: Protocolos Web</b><br/><b>Descripción</b>: Usar tráfico web estándar para comando y control.»] class tech_T1071_001 technique tech_T1102[«<b>Técnica</b> – <b>T1102 Servicio Web</b><br/><b>Descripción</b>: Comunicarse con servidores remotos a través de servicios web para exfiltración de datos.»] class tech_T1102 technique %% Conexiones mal_vvs_stealer u002du002d>|usa| tech_T1027 mal_vvs_stealer u002du002d>|empaquetado con| tool_pyinstaller mal_vvs_stealer u002du002d>|ofuscado con| tool_pyarmor mal_vvs_stealer u002du002d>|descarga| action_download_js action_download_js u002du002d>|usa| tech_T1027_006 action_download_js u002du002d>|usa| tech_T1505 action_download_js u002du002d>|establece persistencia a través de| action_persistence action_persistence u002du002d>|usa| tech_T1037_005 action_persistence u002du002d>|aprovecha| tech_T1547 action_persistence u002du002d>|muestra| action_fake_error action_fake_error u002du002d>|usa| tech_T1562_011 action_fake_error u002du002d>|captura| action_screenshot action_screenshot u002du002d>|usa| tech_T1113 action_screenshot u002du002d>|recolecta| action_browser_harvest action_browser_harvest u002du002d>|usa| tech_T1555_003 action_browser_harvest u002du002d>|apunta a Discord e inyecta JS| action_discord_hijack action_discord_hijack u002du002d>|usa| tech_T1539 action_discord_hijack u002du002d>|usa| tech_T1134_003 action_discord_hijack u002du002d>|exfiltra a través de| action_c2_exfil action_c2_exfil u002du002d>|usa| tech_T1071_001 action_c2_exfil u002du002d>|usa| tech_T1102 «
Flujo de Ataque
Detecciones
Archivo de Python Creado en Directorio Inusual (mediante file_event)
Ver
Posible Abuso de Discord como Canal C2 (mediante dns_query)
Ver
Posible Abuso de Discord como Canal C2 (mediante proxy)
Ver
Binarios / Scripts Sospechosos en Ubicación de Autoinicio (mediante file_event)
Ver
Posible Utilización de PyInstaller (mediante file_event)
Ver
Paquete PyInstaller de VVS Stealer y Terminación de Discord [Creación de Procesos en Windows]
Ver
Ejecución de Simulación
Prerequisito: La Verificación Previa de Telemetría y Línea Base debe haber pasado.
Justificación: Esta sección detalla la ejecución precisa de la técnica del adversario (TTP) diseñada para activar la regla de detección. Los comandos y la narrativa DEBEN reflejar directamente los TTP identificados y apuntar a generar la telemetría exacta esperada por la lógica de detección. Ejemplos abstractos o no relacionados conducirán a diagnósticos erróneos.
-
Narrativa del Ataque y Comandos:
El adversario ha comprometido una cuenta de usuario de bajo privilegio en una estación de trabajo de Windows. Utilizando un dropper de PowerShell, lanzan un ejecutable malicioso empaquetado con PyInstaller (VVS_Stealer.exe) que primero genera un proceso con la línea de comando que contiene la cadena “PyInstaller”. La carga útil luego termina forzosamente el cliente Discord en ejecución para prepararse para una etapa de inyección de robo de tokens. Todas las acciones ocurren bajo el contexto del usuario actual, generando un único Creación de Procesos evento que coincide con los criterios de la regla.Paso a paso:
- Copiar el paquete malicioso de PyInstaller a
%TEMP%. - Ejecutarlo con una línea de comando que incluya explícitamente la palabra “PyInstaller”.
- El binario malicioso llama internamente
taskkill /IM Discord.exe /Fpara terminar Discord. - La terminación genera un Creación de Procesos evento donde el
Imágencampo se resuelve a la ruta del ejecutable de Discord (C:Users<user>AppDataLocalDiscordapp-... Discord.exe) y el comando de generación original aún contiene “PyInstaller”.
- Copiar el paquete malicioso de PyInstaller a
-
Script de Prueba de Regresión: El siguiente script de PowerShell reproduce la telemetría exacta necesaria para activar la regla de detección. Evita intencionalmente cualquier carga útil maliciosa real; en su lugar, lanza un
notepad.exeproceso inofensivo pero pretende ser un ejecutable empaquetado con PyInstaller al incluir la palabra clave en la línea de comando. También termina cualquier proceso Discord en ejecución para reflejar la condición “Image endswith Discord.exe”.# ------------------------------------------------- # Script de Simulación – Activa la regla Sigma #f63685c4‑feea‑431b‑a749‑55cf8661e6ac # ------------------------------------------------- # 1. Asegúrese de que Discord esté corriendo (opcional, para garantizar la terminación) $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. Lanza un proceso ficticio con "PyInstaller" en su línea de comando. # Usando notepad.exe como un marcador de posición benigno. $dummyCmd = "C:WindowsSystem32notepad.exe" $cmdLine = "PyInstaller_dummy_execution -run $dummyCmd" Start-Process -FilePath $dummyCmd -ArgumentList $cmdLine -WindowStyle Hidden Write-Host "[+] Lanzado proceso ficticio con palabra clave PyInstaller." # 3. Inmediatamente termina Discord para generar el evento de imagen Discord.exe. if (Get-Process -Name "Discord" -ErrorAction SilentlyContinue) { Stop-Process -Name "Discord" -Force Write-Host "[+] Discord.exe terminado." } # 4. Opcional: Limpiar la ventana del bloc de notas ficticia después de una breve espera. Start-Sleep -Seconds 8 Get-Process -Name "notepad" -ErrorAction SilentlyContinue | Stop-Process -Force Write-Host "[+] Limpieza completada." -
Comandos de Limpieza: Asegúrese de que no queden procesos residuales.
# Eliminar cualquier proceso residual del bloc de notas Get-Process -Name "notepad" -ErrorAction SilentlyContinue | Stop-Process -Force # Reiniciar Discord si es necesario para la continuidad posterior a la prueba $discordPath = "$env:LOCALAPPDATADiscordapp-1.0.9005Discord.exe" if (-Not (Get-Process -Name "Discord" -ErrorAction SilentlyContinue)) { Start-Process -FilePath $discordPath Write-Host "[+] Discord reiniciado para operaciones normales." }