GlassWorm auf dem Mac: Neue Infrastruktur, neue Tricks
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 %% Class Definitions classDef action fill:#99ccff classDef technique fill:#ffcc99 classDef operator fill:#ff9900 classDef tool fill:#cccccc %% Nodes action_initial_access["<b>Aktion</b> – Erstzugang"] 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 Gegner liefert eine bösartige Erweiterung für Visual Studio Code, die Code auf dem Opfersystem 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 gewisse Zeit (z. B. 15 Minuten), bevor sie ihre Nutzlast ausführt, um eine Analyse zu vermeiden."] class technique_delay technique technique_decrypt["<b>Technik</b> – T1027.009 / T1027.004: AESu2011256u2011CBC Nutzlast entschlüsseln<br/><b>Beschreibung</b>: Verschlüsselte Nutzlast wird imu2011Speicher mit AESu2011CBC mit einem 256u2011Bit-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 auf einer öffentlichen Blockchain gespeichert und von der Malware abgerufen."] class technique_c2_retrieve technique technique_c2_fetch["<b>Technik</b> – T1048.003: Unverschlüsselte Protokolldatenübertragung<br/><b>Beschreibung</b>: Malware kontaktiert den C2-Endpunkt über ein unverschlüsseltes 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 Verzeichnis des Nutzers LaunchAgents für Persistenz platziert."] class technique_persistence_agent technique technique_persistence_daemon["<b>Technik</b> – T1543.004: LaunchDaemon installieren<br/><b>Beschreibung</b>: Eine LaunchDaemon plist wird im Systemverzeichnis LaunchDaemons für Persistenz platziert."] class technique_persistence_daemon technique technique_modify_plist["<b>Technik</b> – T1647: PLIST-Datei ändern<br/><b>Beschreibung</b>: 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>: Zugangsdatenmaterial wird aus dem macOS-Schlüsselbund 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 entwendet."] class technique_steal_keys technique technique_stage_data["<b>Technik</b> – T1074: Daten gestaged<br/><b>Beschreibung</b>: Gesammelte Dateien werden für spätere Exfiltration nach /tmp/ijewf kopiert."] class technique_stage_data technique technique_archive["<b>Technik</b> – T1560.001 / T1560.003: Daten archivieren<br/><b>Beschreibung</b>: Daten werden in einem Archivformat (z. B. zip) komprimiert."] class technique_archive technique technique_exfil["<b>Technik</b> – T1048.003: Exfiltration über unverschlüsselten Nichtu2011C2-Kanal<br/><b>Beschreibung</b>: Gestagedes 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>: macOS Transparenz-, Zustimmungs- und Steuerungsdatenbank wird modifiziert, um höhere Privilegien zu erlangen."] class technique_priv_esc technique technique_impact["<b>Technik</b> – T1496.002: Ledger Live / Trezor Suite ersetzen<br/><b>Beschreibung</b>: Legitime Kryptowährungs-Wallet-Anwendungen werden durch trojanisierte Versionen ersetzt, um Benutzervermögen zu erfassen."] class technique_impact technique %% Connections action_initial_access –>|verwendet| technique_vs_code_ext technique_vs_code_ext –>|löst aus| technique_delay technique_delay –>|führt zu| technique_decrypt technique_decrypt –>|etabliert| technique_c2_retrieve technique_c2_retrieve –>|kontaktiert| technique_c2_fetch technique_c2_fetch –>|installiert| technique_persistence_agent technique_c2_fetch –>|installiert| technique_persistence_daemon technique_persistence_agent –>|modifiziert| technique_modify_plist technique_persistence_daemon –>|modifiziert| technique_modify_plist technique_modify_plist –>|ermöglicht| technique_dump_keychain technique_dump_keychain –>|ermöglicht| technique_steal_keys technique_steal_keys –>|speichert in| technique_stage_data technique_stage_data –>|archiviert| technique_archive technique_archive –>|exfiltriert über| technique_exfil technique_exfil –>|ermöglicht| technique_priv_esc technique_priv_esc –>|ermöglicht| technique_impact "
Angriffsfluss
Erkennungen
Möglicher Versuch zum Auffinden von macOS-Browserpasswörtern (über cmdline)
Anzeigen
IOCs (SourceIP) zur Erkennung: GlassWorm geht Mac: Frische Infrastruktur, neue Tricks
Anzeigen
IOCs (DestinationIP) zur Erkennung: GlassWorm geht Mac: Frische Infrastruktur, neue Tricks
Anzeigen
IOCs (E-Mails) zur Erkennung: GlassWorm geht Mac: Frische Infrastruktur, neue Tricks
Anzeigen
Erkennung des Zugriffs auf GlassWorm macOS Keychain [Linux Process Creation]
Anzeigen
Potenzielle AppleScript-Ausführung für Schlüsselbundzugriff auf macOS [Linux Process Creation]
Anzeigen
Erkennung der Solana-Blockchain-C2-Kommunikation durch GlassWorm [Proxy]
Anzeigen
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 istpass_users_for_script. Um das Ablegen eines separaten Binaries zu vermeiden, schreibt der Angreifer ein Einzeilen-AppleScript, das das eingebautesecurityTool überdo 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."