Anatomia di un Attacco: VIPERTUNNEL
Detection stack
- AIDR
- Alert
- ETL
- Query
Sommario
VIPERTUNNEL è un backdoor basato su Python utilizzato dai criminali informatici per mantenere l’accesso persistente e trasmettere traffico dannoso attraverso sistemi compromessi. Sfrutta interpreti Python legittimi e script di avvio per eseguire payload offuscati direttamente nella memoria. Il malware supporta il movimento laterale e il tunneling SOCKS5, aiutando gli attaccanti a stabilire un canale di comunicazione nascosto.
Indagine
I laboratori InfoGuard hanno eseguito un’analisi tecnica dell’impianto VIPERTUNNEL scoperto durante un intervento di risposta all’incidente ransomware DragonForce. L’indagine ha rivelato una catena di esecuzione a più fasi che coinvolgeva attività programmate, file della libreria Python alterati e payload protetti da offuscamento a triplo strato. I ricercatori hanno anche trovato collegamenti tra il malware e il framework di post-sfruttamento Pyramid.
Mitigazione
I difensori dovrebbero controllare le attività programmate di Windows per esecuzioni insolite basate su Python e monitorare il file sitecustomize.py per modifiche non autorizzate. È anche consigliabile implementare controlli che segnalino file di testo non binari mascherati come DLL. Le organizzazioni dovrebbero stabilizzare il traffico di rete in uscita per rilevare connessioni SOCKS inattese o comunicazioni insolite sulla porta 443.
Risposta
Se si rileva VIPERTUNNEL, gli amministratori dovrebbero immediatamente esaminare i registri di sicurezza di Windows per l’ID Evento 4698 per identificare attività programmate sospette. Le directory di installazione di Python dovrebbero essere ispezionate per script dannosi e la telemetria di rete dovrebbe essere analizzata per comportamenti proxy simili a SOCKS. Correlare reperti degli endpoint con prove comportamentali basate sulla rete è essenziale per delineare completamente l’intrusione.
Flusso dell’Attacco
Rilevamenti
Creazione di file eseguibili Python in cartelle sospette (tramite file_event)
Visualizza
Rilevamento del Proxy SOCKS5 VIPERTUNNEL e Tunneling su TCP Porta 443 [Connessione di rete Windows]
Visualizza
Attività programmata che avvia pythonw.exe da C:ProgramDatacp49s [Creazione processo Windows]
Visualizza
## Esecuzione della Simulazione
Prerequisito: Il Controllo Pre-volo di Telemetria & Baseline deve essere superato.
Razionale: Questa sezione descrive l’esecuzione precisa della tecnica dell’avversario (TTP) destinata a innescare la regola di rilevamento. I comandi e la narrativa DEVONO riflettere direttamente le TTP identificate e mirare a generare la telemetria esatta prevista dalla logica di rilevamento. Esempi astratti o non correlati porteranno a una diagnosi errata.
-
Narrativa & Comandi dell’Attacco: L’avversario intende stabilire un canale di comando e controllo (C2) utilizzando un proxy SOCKS5 per trasmettere traffico interno attraverso un ascoltatore esterno. Per evitare il filtraggio di base basato sulle porte, l’avversario utilizza la porta TCP 443. Tuttavia, per simulare la firma specifica di VIPERTUNNEL identificata nella regola, l’avversario avvierà una stretta di mano SOCKS5 in chiaro sulla porta 443, piuttosto che avvolgerla in TLS. Questo imita una configurazione errata o un’implementazione C2 “pigra” che la regola di rilevamento è specificamente progettata per catturare tramite ispezione dei protocolli.
-
Script di Test di Regressione: Questo script usa una one-liner Python per avviare una stretta di mano SOCKS5 contro un ascoltatore locale, simulando l’identificazione del protocollo.
import socket import time # Parametri di Simulazione TARGET_IP = "127.0.0.1" # In un test reale, questo sarebbe l'IP dell'ascoltatore TARGET_PORT = 443 def simulate_socks5_tunnel(): print(f"[*] Tentativo di simulare la stretta di mano SOCKS5 sulla porta {TARGET_PORT}...") try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((TARGET_IP, TARGET_PORT)) # Saluto SOCKS5: [Versione (0x05), NMetodi (0x01), Metodo (0x00)] # Metodo 0x00 = Nessuna autenticazione richiesta greeting = b"x05x01x00" s.send(greeting) response = s.recv(1024) print(f"[+] Risposta ricevuta: {response.hex()}") print("[+] Simulazione completa. Controlla i log del firewall per l'identificazione del protocollo 'socks5'.") s.close() except Exception as e: print(f"[-] Errore: {e}") print("[!] Nota: Assicurati che un ascoltatore sia attivo sulla porta di destinazione per ricevere la stretta di mano.") if __name__ == "__main__": simulate_socks5_tunnel() -
Comandi di Pulizia:
# Terminare eventuali processi di simulazione python attivi Stop-Process -Name "python" -ErrorAction SilentlyContinue # Rimuovere eventuali file di ascolto temporanei creati Remove-Item -Path ".sim_listener.log" -ErrorAction SilentlyContinue