Il nuovo malware VVS Stealer prende di mira gli account Discord tramite codice Python offuscato
Detection stack
- AIDR
- Alert
- ETL
- Query
Riepilogo
VVS Stealer è un nuovo information stealer basato su Python osservato in vendita su Telegram. È offuscato con Pyarmor, confezionato con PyInstaller e persiste attraverso la cartella di avvio di Windows. Il malware raccoglie token Discord, credenziali del browser, cookie, cronologia, password e screenshot. Può anche iniettare un payload JavaScript dannoso per dirottare sessioni Discord attive.
Indagine
Palo Alto Networks Unit 42 ha divulgato il malware, notando che è stato offerto in vendita dall’aprile 2025. I ricercatori hanno descritto la tecnica di offuscamento, il modello di distribuzione e le funzionalità tra cui il furto di credenziali e l’iniezione Discord. Il rapporto collega lo strumento ad attori di minacce di lingua francese attivi in gruppi Telegram focalizzati su stealer.
Mitigazione
Le organizzazioni dovrebbero monitorare la presenza di eseguibili PyInstaller sconosciuti e collegamenti inaspettati nella cartella di avvio. Implementare regole di rilevamento a livello di endpoint per script Python offuscati e payload JavaScript sospetti. Applicare l’autenticazione multi-fattore per account Discord e browser e limitare i privilegi amministrativi che potrebbero essere utilizzati per l’estrazione di credenziali.
Risposta
Se viene rilevato VVS Stealer, isolare l’endpoint interessato, raccogliere artefatti di memoria e file, ed estrarre IOC. Rimuovere la voce di avvio dannosa, terminare eventuali processi Discord iniettati e forzare il reset della password per gli account compromessi. Effettuare un’indagine forense completa per localizzare ulteriori credenziali rubate e assicurarsi che l’infrastruttura C2 remota sia bloccata.
Flusso di attacco
Rilevamenti
File Python creato in directory insolita (via file_event)
Visualizza
Possibile abuso di Discord come canale C2 (via dns_query)
Visualizza
Possibile abuso di Discord come canale C2 (via proxy)
Visualizza
Binario / Script sospetti in posizione di avvio automatico (via file_event)
Visualizza
Possibile utilizzo di PyInstaller (via file_event)
Visualizza
Pacchetto VVS Stealer PyInstaller e terminazione Discord [Creazione processo Windows]
Visualizza
Esecuzione della simulazione
Prerequisito: il controllo preliminare di telemetria e baseline deve essere superato.
Ragionamento: questa sezione descrive l’esecuzione precisa della tecnica dell’avversario (TTP) progettata per attivare la regola di rilevamento. I comandi e la narrazione DEVONO riflettere direttamente i TTP identificati e mirare a generare la telemetria esatta prevista dalla logica di rilevamento. Esempi astratti o non correlati porteranno a diagnosi errate.
-
Narrazione dell’attacco e comandi:
L’avversario ha compromesso un account utente con privilegi bassi su una workstation Windows. Utilizzando un dropper PowerShell, avviano un eseguibile confezionato con PyInstaller dannoso (VVS_Stealer.exe) che per primo genera un processo con la linea di comando contenente la stringa “PyInstaller”. Il payload quindi termina forzatamente il client Discord in esecuzione per prepararsi a una fase di iniezione per il furto di token. Tutte le azioni avvengono sotto il contesto dell’utente corrente, generando un singolo Evento di creazione del processo che corrisponde ai criteri della regola.Passo-passo:
- Copia il pacchetto PyInstaller dannoso in
%TEMP%. - Eseguire con una linea di comando che includa esplicitamente la parola “PyInstaller”.
- Il binario dannoso chiama internamente
taskkill /IM Discord.exe /Fper terminare Discord. - La terminazione genera un Evento di creazione del processo evento in cui il campo
Immagineviene risolto nel percorso dell’eseguibile Discord (C:Users<user>AppDataLocalDiscordapp-... Discord.exe) e la linea di comando originaria contiene ancora “PyInstaller”.
- Copia il pacchetto PyInstaller dannoso in
-
Script di test di regressione: Il seguente script PowerShell riproduce la telemetria esatta necessaria per attivare la regola di rilevamento. Evita intenzionalmente qualsiasi payload dannoso reale; invece, lancia un processo innocuo
notepad.exema finge di essere un eseguibile confezionato con PyInstaller incorporando la parola chiave nella linea di comando. Termina anche qualsiasi processo Discord in esecuzione per riflettere la condizione “Immagine termina con Discord.exe”. pretends to be a PyInstaller‑packed executable by embedding the keyword in the command line. It also terminates any running Discord process to mirror the “Image endswith Discord.exe” condition.# ------------------------------------------------- # Simulation Script – Triggers Sigma rule #f63685c4‑feea‑431b‑a749‑55cf8661e6ac # ------------------------------------------------- # 1. Ensure Discord is running (optional, to guarantee termination) $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. Launch a dummy process with "PyInstaller" in its command line. # Using notepad.exe as a benign placeholder. $dummyCmd = "C:WindowsSystem32notepad.exe" $cmdLine = "PyInstaller_dummy_execution -run $dummyCmd" Start-Process -FilePath $dummyCmd -ArgumentList $cmdLine -WindowStyle Hidden Write-Host "[+] Launched dummy process with PyInstaller keyword." # 3. Immediately terminate Discord to generate the Discord.exe image event. if (Get-Process -Name "Discord" -ErrorAction SilentlyContinue) { Stop-Process -Name "Discord" -Force Write-Host "[+] Discord.exe terminated." } # 4. Optional: Clean up the dummy notepad window after a short delay. Start-Sleep -Seconds 8 Get-Process -Name "notepad" -ErrorAction SilentlyContinue | Stop-Process -Force Write-Host "[+] Cleanup completed." -
Comandi di pulizia: Assicurati che non rimangano processi residui.
# Remove any lingering dummy notepad processes Get-Process -Name "notepad" -ErrorAction SilentlyContinue | Stop-Process -Force # Restart Discord if needed for post‑test continuity $discordPath = "$env:LOCALAPPDATADiscordapp-1.0.9005Discord.exe" if (-Not (Get-Process -Name "Discord" -ErrorAction SilentlyContinue)) { Start-Process -FilePath $discordPath Write-Host "[+] Discord restarted for normal operations." }