SOC Prime Bias: Kritisch

19 Jan. 2026 19:11

GlassWorm auf dem Mac: Neue Infrastruktur, neue Tricks

Author Photo
Ruslan Mikhalov Leiter der Bedrohungsforschung bei SOC Prime linkedin icon Folgen
GlassWorm auf dem Mac: Neue Infrastruktur, neue Tricks
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Zusammenfassung

Der Bedrohungsakteur hinter GlassWorm hat sich von Windows-zentrierter Aktivität auf macOS umorientiert und verteilt bösartige VS Code-Erweiterungen, die verschlüsselte JavaScript-Nutzlasten über Solana-Blockchain-abgeleitete C2-Zeiger abrufen. Diese Welle erweitert die Fähigkeiten durch das Trojanisieren von Hardware-Wallets und setzt den umfassenden Diebstahl von Zugangsdaten über Browser, Entwicklerwerkzeuge und den macOS-Schlüsselbund fort. Die Infrastruktur umfasst eine Solana-Wallet-Adresse und eine IP, die aus früheren GlassWorm-Operationen wiederverwendet wurde, was auf eine Kontinuität der Betreiberwerkzeuge und des Hostings hindeutet. Forscher beobachteten über 50.000 Downloads, bevor die Erweiterungen entfernt wurden, was auf eine bedeutende Verbreitung in Entwicklerumgebungen hinweist.

Untersuchung

Koi Security identifizierte drei bösartige VS Code-Erweiterungen auf dem Open VSX-Marktplatz und verknüpfte deren Command-and-Control-Workflow mit einer Solana-Wallet sowie einer gemeinsam genutzten IP-Adresse, die zuvor mit GlassWorm in Verbindung gebracht wurde. Die Implantate beinhalten eine Ausführungsverzögerung von 15 Minuten, um dann eine AES-256-CBC-JavaScript-Nutzlast zu entschlüsseln und auszuführen. Auf macOS wird die Persistenz über LaunchAgents hergestellt. Ziel der Sammlung sind Wallet-Daten und Desktop-Wallet-Daten, Entwicklerzugangstoken, SSH-Schlüssel und Materialien aus dem macOS-Schlüsselbund. Die Malware speichert gestohlene Daten unter /tmp/ijewf/ vor der Exfiltration zu einem Serverpfad, der /p2p ähnelt. Sie versucht auch, legitime Hardware-Wallet-Begleit-Apps wie Ledger Live und Trezor Suite durch trojanisierte Nachbildungen zu ersetzen, um wertvolle Geheimnisse und Transaktionen zu erfassen.

Minderung

Verstärken Sie die Kontrollen rund um Entwicklerwerkzeuge, indem Sie die Zulassung von Erweiterungen durchsetzen und eine Sicherheitsüberprüfung von VS Code-Erweiterungen verlangen, insbesondere solchen, die aus offenen Marktplätzen stammen. Implementieren Sie Laufzeit-Erkennungen für verzögerte Ausführungsmuster und verdächtige Erstellung oder Änderung von LaunchAgents. Überwachen und blockieren Sie verdächtige ausgehende Aktivitäten im Zusammenhang mit Solana-abgeleiteten C2-Suchen und fügen Sie Netzwerkerkennungen für ungewöhnliche Verbindungen zur identifizierten wiederverwendeten IP hinzu. Verlangen Sie MFA für Entwickler- und Cloud-Konten und implementieren Sie Integritätsprüfungen für Hardware-Wallets (Verlagsvalidierung, Notarisierung/Signaturüberprüfung und kontrollierte Software-Update-Kanäle).

Reaktion

Lösen Sie Warnungen bei neuen oder modifizierten LaunchAgents, anomalen Zugriffen auf Schlüsselbundspeicher und Abrufversuchen von Solana-referenzierten C2-Endpunkten aus. Quarantäne und entfernen Sie die bösartigen VS Code-Erweiterungen, dann beseitigen Sie jede zugehörige LaunchAgent-Persistenz. Führen Sie gezielte forensische Untersuchungen auf /tmp/ijewf/ durch, um das Stadium der Zugangsdaten zu bestimmen und zu bestätigen, welche Daten gesammelt wurden. Validieren Sie die Integrität von Hardware-Wallet-Anwendungen (Ledger Live, Trezor Suite) und installieren Sie sie von vertrauenswürdigen Quellen neu, wenn eine Manipulation vermutet wird. Setzen Sie betroffene Zugangsdaten zurück, rotieren Sie SSH-Schlüssel und Entwickler-Token, stornieren Sie Sitzungen und erweitern Sie die Jagd über Endpunkte für dieselben Erweiterungs-IDs, Dateipfade und Persistenzartefakte.

„graph TB %% Klassendefinitionen classDef action fill:#99ccff classDef technique fill:#ffcc99 classDef operator fill:#ff9900 classDef tool fill:#cccccc %% Knoten action_initial_access[„<b>Aktion</b> – Erste Zugriffsmöglichkeit“] class action_initial_access action technique_vs_code_ext[„<b>Technik</b> – T1176.002: Bösartige VS Code IDE Erweiterung<br /><b>Beschreibung</b>: Der Angreifer liefert eine bösartige Erweiterung für Visual Studio Code, die Code auf dem Zielsystem ausführt.“] class technique_vs_code_ext technique technique_delay[„<b>Technik</b> – T1497.003: Ausführungsverzögerung<br /><b>Beschreibung</b>: Malware wartet eine Zeitspanne (z.B. 15 Minuten), bevor sie ihre Nutzlast ausführt, um der Analyse zu entgehen.“] class technique_delay technique technique_decrypt[„<b>Technik</b> – T1027.009 / T1027.004: AES‑256‑CBC-Nutzlast entschlüsseln<br /><b>Beschreibung</b>: Verschlüsselte Nutzlast wird in‑Memory mit AES‑CBC mit einem 256‑Bit-Schlüssel entschlüsselt.“] class technique_decrypt technique technique_c2_retrieve[„<b>Technik</b> – T1573.001: Endpunkt von Solana Blockchain abrufen<br /><b>Beschreibung</b>: C2-Serveradresse wird in einer öffentlichen Blockchain gespeichert und von der Malware abgerufen.“] class technique_c2_retrieve technique technique_c2_fetch[„<b>Technik</b> – T1048.003: Unverschlüsselter Protokolldatentransfer<br /><b>Beschreibung</b>: Malware kontaktiert den C2-Endpunkt mit einem unverschlüsselten Protokoll (z.B. HTTP).“] class technique_c2_fetch technique technique_persistence_agent[„<b>Technik</b> – T1543.001: LaunchAgent installieren<br /><b>Beschreibung</b>: Eine LaunchAgent-Plist wird im LaunchAgents-Verzeichnis des Benutzers platziert, um persistente zu bleiben.“] class technique_persistence_agent technique technique_persistence_daemon[„<b>Technik</b> – T1543.004: LaunchDaemon installieren<br /><b>Beschreibung</b>: Eine LaunchDaemon-Plist wird im LaunchDaemons-Verzeichnis des Systems platziert, um persistente zu bleiben.“] class technique_persistence_daemon technique technique_modify_plist[„<b>Technik</b> – T1647: PLIST-Datei ändern<br /><b>Beschreibung</b>: Der Angreifer bearbeitet die plist, um das Startverhalten zu ändern oder bösartige Befehle hinzuzufügen.“] class technique_modify_plist technique technique_dump_keychain[„<b>Technik</b> – T1555.001 / T1555.002: Schlüsselbund auslesen<br /><b>Beschreibung</b>: Anmeldeinformationen aus dem macOS-Schlüsselbund werden extrahiert.“] class technique_dump_keychain technique technique_steal_keys[„<b>Technik</b> – T1552.001 / T1552.004: Private Schlüssel und Tokens stehlen<br /><b>Beschreibung</b>: Private Kryptowährungsschlüssel und Authentifizierungstoken werden gesammelt.“] class technique_steal_keys technique technique_stage_data[„<b>Technik</b> – T1074: Daten vorgelagert<br /><b>Beschreibung</b>: Gesammelte Dateien werden nach /tmp/ijewf kopiert, um später exfiltriert zu werden.“] class technique_stage_data technique technique_archive[„<b>Technik</b> – T1560.001 / T1560.003: Gesammelte Daten archivieren<br /><b>Beschreibung</b>: Daten werden in ein Archivformat (z.B. zip) komprimiert.“] class technique_archive technique technique_exfil[„<b>Technik</b> – T1048.003: Exfiltration über unverschlüsselten nicht‑C2‑Kanal<br /><b>Beschreibung</b>: Vorsortiertes Archiv wird über einen unverschlüsselten Kanal gesendet, der nicht mit dem primären C2 verbunden ist.“] class technique_exfil technique technique_priv_esc[„<b>Technik</b> – T1548.006: TCC-Manipulation<br /><b>Beschreibung</b>: Die Datenbank für Transparenz, Zustimmung und Kontrolle von macOS wird modifiziert, um höhere Berechtigungen zu erlangen.“] class technique_priv_esc technique technique_impact[„<b>Technik</b> – T1496.002: Ledger Live / Trezor Suite ersetzen<br /><b>Beschreibung</b>: Legitime Krypto-Wallet-Anwendungen werden gegen trojanisierte Versionen ausgetauscht, um Benutzerassets abzufangen.“] class technique_impact technique %% Verbindungen action_initial_access u002du002d>|verwendet| technique_vs_code_ext technique_vs_code_ext u002du002d>|löst aus| technique_delay technique_delay u002du002d>|führt zu| technique_decrypt technique_decrypt u002du002d>|etabliert| technique_c2_retrieve technique_c2_retrieve u002du002d>|kontaktiert| technique_c2_fetch technique_c2_fetch u002du002d>|installiert| technique_persistence_agent technique_c2_fetch u002du002d>|installiert| technique_persistence_daemon technique_persistence_agent u002du002d>|ändert| technique_modify_plist technique_persistence_daemon u002du002d>|ändert| technique_modify_plist technique_modify_plist u002du002d>|ermöglicht| technique_dump_keychain technique_dump_keychain u002du002d>|ermöglicht| technique_steal_keys technique_steal_keys u002du002d>|speichert in| technique_stage_data technique_stage_data u002du002d>|archiviert| technique_archive technique_archive u002du002d>|exfiltriert über| technique_exfil technique_exfil u002du002d>|erleichtert| technique_priv_esc technique_priv_esc u002du002d>|ermöglicht| technique_impact „

Angriffsfluss

Simulationsausführung

Voraussetzung: Der Telemetrie- & Basislinien-Pre-Flight-Check muss bestanden sein.

Begründung: Dieser Abschnitt beschreibt die genaue Ausführungstechnik des Gegnerverfahrens (TTP), die entwickelt wurde, um die Erkennungsregel auszulösen. Die Befehle und die Erzählstruktur MÜSSEN direkt die identifizierten TTPs widerspiegeln und darauf abzielen, die genaue Telemetrie zu erzeugen, die von der Erkennungslogik erwartet wird. Abstrakte oder nicht verwandte Beispiele führen zu Fehldiagnosen.

  • Angriffs-Narrativ & Befehle:
    Ein Angreifer, der bereits ein kompromittiertes macOS-Benutzerkonto mit niedrigen Berechtigungen besitzt, möchte ein Dienstkonto-Passwort ernten, das im Schlüsselbund unter dem Label gespeichert ist pass_users_for_script. Um das Ablegen eines separaten Binaries zu vermeiden, schreibt der Angreifer ein Einzeilen-AppleScript, das das eingebaute security Tool über do shell scriptaufruft. Das Skript wird direkt in der Sitzung des Nutzers ausgeführt und erzeugt ein Prozess-Erstellungsereignis mit der genauen Befehlszeile, die die Sigma-Regel erfüllt.

    # Ein Test-Schlüsselbund-Element erstellen (nur zur Demonstration; echter Angreifer würde ein bestehendes Ziel anvisieren)
    security add-generic-password -a attacker -s pass_users_for_script -w SuperSecret123
    
    # Das AppleScript ausführen, das das Passwort ausliest
    osascript -e 'do shell script "security find-generic-password -s '''pass_users_for_script''' -w"'
  • Regressionstest-Skript:

    #!/usr/bin/env bash
    set -euo pipefail
    
    # Schritt 1: Sicherstellen, dass der Ziel-Schlüsselbundeintrag existiert (idempotent)
    if ! security find-generic-password -s pass_users_for_script -w >/dev/null 2>&1; then
        security add-generic-password -a attacker -s pass_users_for_script -w SuperSecret123
    fi
    
    # Schritt 2: Das AppleScript ausführen, das die Erkennungsregel auslöst
    echo "[+] AppleScript ausführen, um den Schlüsselbundeintrag zu lesen..."
    osascript -e 'do shell script "security find-generic-password -s '''pass_users_for_script''' -w"'
  • Bereinigung-Befehle:

    # Das Test-Schlüsselbund-Element entfernen, um das System sauber zu hinterlassen
    security delete-generic-password -s pass_users_for_script
    echo "[+] Bereinigung abgeschlossen: Test-Schlüsselbundeintrag entfernt."