SOC Prime Bias: Moyen

13 Feb 2026 13:13 UTC

Odyssey Stealer : À l’intérieur d’une opération de vol de cryptomonnaies sur macOS

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Suivre
Odyssey Stealer : À l’intérieur d’une opération de vol de cryptomonnaies sur macOS
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

Odyssey Stealer est un logiciel malveillant de type infostealer pour macOS, axé sur les portefeuilles de cryptomonnaie et les extensions. Il est commercialisé comme une plateforme de Malware-as-a-Service où les affiliés louent l’accès à un C2 centralisé et un panneau d’administration. La livraison repose généralement sur un AppleScript obfusqué qui installe un LaunchDaemon persistant qui interroge le C2 pour obtenir des commandes. L’opérateur peut également remplacer les applications Ledger et Trezor légitimes par des versions trojanisées pour capturer les identifiants et les données de transaction.

Investigation

Les chercheurs ont pris l’empreinte du C2 en utilisant des balises meta HTML uniques, des signatures de page et un hash de favicon partagé. Ils ont cartographié dix hôtes physiques à travers plusieurs clusters ASN, principalement en Europe et aux Pays-Bas. L’analyse des charges utiles a révélé un dropper AppleScript en plusieurs étapes, une persistance via LaunchDaemon, et un binaire proxy SOCKS5 compilé en Go. Les données de configuration intégrées dans le dropper ont révélé des identifiants d’affiliés et des ID de compilation.

Atténuation

Surveillez les activités osascript suspectes, notamment les longues chaînes obfusquées, les fichiers plist de LaunchDaemon inconnus avec des étiquettes aléatoires, et les requêtes POST sortantes vers les points de terminaison « /log ». Alertez sur les binaires lancés par LaunchDaemon et les activités SOCKS5 suspectes. Vérifiez la signature de code pour les applications Ledger et Trezor, et bloquez les domaines et adresses IP C2 connus. Apprenez aux utilisateurs à traiter les demandes de mot de passe inattendues et les « mises à jour de portefeuille » comme étant à haut risque.

Réponse

Lors de la détection, isolez le système, terminez le LaunchDaemon malveillant, et retirez les applications de portefeuille trojanisées. Capturez le trafic réseau vers les domaines et IP C2 identifiés pour enquête, puis réinitialisez les identifiants de cryptomonnaie exposés et tournez les mots de passe macOS. Effectuez un examen médico-légal complet pour identifier des artefacts supplémentaires.

Flux d’Attaque

Exécution de Simulation

Prérequis : Le Contrôle Téléphonique & Baseline Avant Vol doit avoir réussi.

  • Narration de l’Attaque & Commandes :
    Un adversaire a déployé l’Odyssey Stealer sur une station de travail macOS. Après avoir compromis l’utilisateur, le logiciel malveillant initie un balisage vers son serveur C2 pour télécharger des charges utiles supplémentaires et exfiltrer les données collectées. Le balisage utilise le binaire natif curl binaire (binaire Apple signé) pour émettre des requêtes HTTP GET vers les points de terminaison C2 définis dans la règle. L’attaquant choisit ces chemins URI spécifiques car ils sont courts, se fondent dans le trafic web typique et évitent la détection par les solutions de filtrage d’URL génériques.

    Étapes :

    1. Résoudre le nom d’hôte C2 (simulé comme c2.odyssey.example.com).
    2. Emettre une requête GET vers /d/aff123456 – imite le point de terminaison d’exfiltration de données avec un code affilié aléatoire et un jeton numérique.
    3. Emettre une requête GET vers /api/v1/bot/ – simule le battement de gestion des bots.
    4. Optionnellement, envoyer une requête à /log pour émuler le trafic de journalisation interne utilisé par le logiciel malveillant pour le rapport d’état.
  • Script de Test de Régression : Le script bash suivant reproduit exactement le trafic nécessaire pour déclencher la règle de détection.

    #!/usr/bin/env bash
    # Simulation de balisage C2 Odyssey Stealer pour la validation de détection
    # Exigences : curl, proxy réseau configuré selon les étapes de pré-vol
    
    C2_HOST="c2.odyssey.example.com"
    PROXY_HOST="127.0.0.1:3128"   # ajuster à votre adresse proxy Squid
    
    # Fonction pour envoyer une requête via le proxy
    send_request() {
        local path=$1
        echo "[*] Envoi de la requête à https://${C2_HOST}${path} via le proxy ${PROXY_HOST}"
        curl -x "$PROXY_HOST" -s -o /dev/null "https://${C2_HOST}${path}"
    }
    
    # 1. Point de terminaison d'exfiltration des données (affilié aléatoire + chiffres)
    AFFILIATE="aff$(shuf -i 1000-9999 -n 1)"
    DIGITS=$(shuf -i 10000-99999 -n 1)
    send_request "/d/${AFFILIATE}${DIGITS}"
    
    # 2. Battement de gestion des bots
    send_request "/api/v1/bot/"
    
    # 3. Point de terminaison de journalisation optionnel
    send_request "/log"
    
    echo "[+] Simulation complète. Vérifiez les alertes dans le SIEM."

    Enregistrez le script comme odyssey_beacon.sh, rendez-le exécutable (chmod +x odyssey_beacon.sh), et exécutez-le sur l’hôte de test macOS.

  • Commandes de Nettoyage : Supprimez tous les fichiers temporaires et désactivez éventuellement le proxy pour l’utilisateur de test.

    # Désactiver les paramètres du proxy pour l'interface Wi‑Fi
    networksetup -setwebproxystate "Wi-Fi" off
    networksetup -setsecurewebproxystate "Wi-Fi" off
    
    # (Optionnel) Arrêter Squid s'il a été démarré uniquement pour ce test
    # brew services stop squid
    echo "Paramètres du proxy restaurés et Squid arrêté (le cas échéant)."