SOC Prime Bias: Medio

05 Gen 2026 19:10

Il nuovo malware VVS Stealer prende di mira gli account Discord tramite codice Python offuscato

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Segui
Il nuovo malware VVS Stealer prende di mira gli account Discord tramite codice Python offuscato
shield icon

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.

“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>Descrizione</b>: Ruba-informazioni confezionato con PyInstaller e offuscato con PyArmor.”] class mal_vvs_stealer malware tool_pyinstaller[“<b>Strumento</b> – <b>PyInstaller</b><br /><b>Descrizione</b>: Raggruppa applicazioni Python in eseguibili stand-alone.”] class tool_pyinstaller tool tool_pyarmor[“<b>Strumento</b> – <b>PyArmor</b><br /><b>Descrizione</b>: Offusca il bytecode Python per nascondere la logica dannosa.”] class tool_pyarmor tool tech_T1027[“<b>Tecnica</b> – <b>T1027 File o Informazioni Offuscati</b><br /><b>Descrizione</b>: Gli avversari usano l’offuscamento per nascondere il codice dannoso.”] class tech_T1027 technique action_download_js[“<b>Azione</b> – Scarica payload JavaScript aggiuntivo”] class action_download_js action tech_T1027_006[“<b>Tecnica</b> – <b>T1027.006 HTML Smuggling</b><br /><b>Descrizione</b>: Incorpora codice dannoso in HTML per eludere le difese.”] class tech_T1027_006 technique tech_T1505[“<b>Tecnica</b> – <b>T1505 Componente Software Server</b><br /><b>Descrizione</b>: Installa componenti aggiuntivi lato server per supportare attività malevole.”] class tech_T1505 technique action_persistence[“<b>Azione</b> – Stabilisce persistenza tramite la cartella di avvio”] class action_persistence action tech_T1037_005[“<b>Tecnica</b> – <b>T1037.005 Elementi di Avvio</b><br /><b>Descrizione</b>: Posiziona eseguibili nella cartella di avvio dell’utente per eseguirli al logon.”] class tech_T1037_005 technique tech_T1547[“<b>Tecnica</b> – <b>T1547 Esecuzione all’Avvio o Logon</b><br /><b>Descrizione</b>: Registra programmi per eseguirli automaticamente all’avvio o logon.”] class tech_T1547 technique action_fake_error[“<b>Azione</b> – Visualizza errore fatale finto a comparsa”] class action_fake_error action tech_T1562_011[“<b>Tecnica</b> – <b>T1562.011 Falsificazione degli Avvisi di Sicurezza</b><br /><b>Descrizione</b>: Mostra avvisi di sicurezza contraffatti per ingannare gli utenti.”] class tech_T1562_011 technique action_screenshot[“<b>Azione</b> – Cattura schermo”] class action_screenshot action tech_T1113[“<b>Tecnica</b> – <b>T1113 Cattura Schermo</b><br /><b>Descrizione</b>: Registra schermate del desktop della vittima.”] class tech_T1113 technique action_browser_harvest[“<b>Azione</b> – Raccoglie dati del browser (cookie, password, cronologia)”] class action_browser_harvest action tech_T1555_003[“<b>Tecnica</b> – <b>T1555.003 Credenziali dai Web Browser</b><br /><b>Descrizione</b>: Estrae credenziali salvate e cookie dai browser.”] class tech_T1555_003 technique action_discord_hijack[“<b>Azione</b> – Interrompe il client Discord e inietta JavaScript dannoso”] class action_discord_hijack action tech_T1539[“<b>Tecnica</b> – <b>T1539 Ruba Cookie di Sessione del Web</b><br /><b>Descrizione</b>: Ottiene cookie di sessione web attivi dai browser.”] class tech_T1539 technique tech_T1134_003[“<b>Tecnica</b> – <b>T1134.003 Manipolazione del Token di Accesso</b><br /><b>Descrizione</b>: Ruba o impersona token di autenticazione.”] class tech_T1134_003 technique action_c2_exfil[“<b>Azione</b> – Esfiltra dati tramite C2 basato sul web”] class action_c2_exfil action tech_T1071_001[“<b>Tecnica</b> – <b>T1071.001 Protocollo del Livello Application: Protocolli Web</b><br /><b>Descrizione</b>: Usa traffico web standard per il comando e controllo.”] class tech_T1071_001 technique tech_T1102[“<b>Tecnica</b> – <b>T1102 Servizio Web</b><br /><b>Descrizione</b>: Comunica con server remoti tramite servizi web per l’esfiltrazione dei dati.”] 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 “

Flusso di attacco

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:

    1. Copia il pacchetto PyInstaller dannoso in %TEMP%.
    2. Eseguire con una linea di comando che includa esplicitamente la parola “PyInstaller”.
    3. Il binario dannoso chiama internamente taskkill /IM Discord.exe /F per terminare Discord.
    4. La terminazione genera un Evento di creazione del processo evento in cui il campo Immagine viene risolto nel percorso dell’eseguibile Discord (C:Users<user>AppDataLocalDiscordapp-... Discord.exe) e la linea di comando originaria contiene ancora “PyInstaller”.
  • 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.exe ma 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."
    }