Share
Beitragsbild zu XCSSET-Malware entwickelt sich weiter: Neue Funktionen und Angriffsmethoden

XCSSET-Malware entwickelt sich weiter: Neue Funktionen und Angriffsmethoden

26. September 2025

Microsoft Threat Intelligence hat eine neue Variante der XCSSET-Malware entdeckt, die über die im März 2025 beschriebenen Updates hinausgeht. XCSSET zielt auf Xcode-Projekte ab und infiziert Entwicklerdateien, um sich über den Austausch von Projektdateien unter Apple- und macOS-Entwicklern zu verbreiten.

Die aktuelle Version erweitert ihre Fähigkeiten deutlich: Sie greift nun auch Firefox-Browserdaten an, überwacht die Zwischenablage, ersetzt digitale Geldbörsenadressen und nutzt zusätzliche Persistenzmechanismen über LaunchDaemon-Einträge. Verschleierungs- und Verschlüsselungstechniken sowie kompiliertes AppleScript sorgen für eine heimliche Ausführung.

Die Malware folgt weiterhin einer vierstufigen Infektionskette. Während die ersten drei Stufen bekannten Varianten entsprechen, enthält die vierte Stufe neue Funktionen zum Herunterladen und Ausführen von Submodulen, erweiterte Browser-Prüfungen und eine aktualisierte Logik zur Telegram-Erkennung.

Microsoft betont, dass die neue XCSSET-Variante bisher nur in begrenzten Angriffen aufgetreten ist. Erkenntnisse wurden an Apple weitergegeben, und betroffene GitHub-Repositories wurden entfernt. Unternehmen werden angehalten, Erkennungsmethoden, Empfehlungen und Best Practices umzusetzen, um sich vor dieser Bedrohung zu schützen.

boot()-Funktion des Skripts der vierten Stufe

Die neue Variante enthält Änderungen an der boot-Funktion. Dazu gehören zusätzliche Überprüfungen für den Firefox-Browser und eine geänderte Logik für die Überprüfung der Existenz von Telegram. Diese Stufe umfasst auch mehrere neue Module, die heruntergeladen und ausgeführt werden.

Ältere Variante:

Neue Variante:

In den folgenden Abschnitten wurden Änderungen untersucht an bestehenden Submodulen sowie zusätzliche Module in dieser Variante.

vexyeqj [Ältere Variante: seizecj] (Info-Stealer)

Im Vergleich zur vorherigen Variante sind mehrere Befehle in diesem Skript auskommentiert. Zusätzlich lädt es ein Modul namens bnk herunter, das mit osascript ausgeführt wird, wobei die Domäne als Parameter angegeben wird. Anschließend wartet es drei Sekunden und löscht die heruntergeladene Datei.

 

Die bnk-Datei ist ein kompiliertes AppleScript, das nur ausgeführt werden kann. Die direkte Dekompilierung von kompiliertem AppleScript, das nur ausgeführt werden kann, gilt allgemein als schwierig oder nicht durchführbar. Mit dem AppleScript-Disassembler-Projekt auf Github kann der Code jedoch zur Analyse disassembliert werden.

Das Skript definiert mehrere Funktionen für Zwecke wie Datenvalidierung, Verschlüsselung, Entschlüsselung, Abrufen zusätzlicher Daten von Command and Control (C2) und Protokollierung. Das Skript wird mit der Domäne als Parameter ausgeführt.

Oben sehen Sie einen Codeausschnitt der Funktion dec(), die zum Entschlüsseln der vom C2-Server empfangenen Daten verwendet wird. Das Parsen des Obigen führt zu dem Befehl:

Im referenzierten Code werden die verschlüsselten Daten in der Variablen in gespeichert. Die ersten 32 Zeichen dieser Variablen werden extrahiert und dienen als Initialisierungsvektor (IV). Die restlichen Daten werden dann Base64-dekodiert und an die AES-Entschlüsselungsfunktion übergeben. In diesem Fall ist der Entschlüsselungsschlüssel eine vordefinierte Konstante, 27860c1670a8d2f3de7bbc74cd754121, die innerhalb der Hauptfunktion festgelegt und berechnet wurde.

Der dekodierte Blob scheint eine Konfigurationsdatei zu sein. Nachfolgend finden Sie ein formatiertes und redigiertes Beispiel der entschlüsselten Antwort, die vom C2-Server erhalten wurde:

Im Folgenden wird die Kernlogik der heruntergeladenen bnk‑Nutzlast komprimiert erläutert.

Zunächst ruft eine Funktion die verschlüsselte Konfiguration vom C2‑Server ab, entschlüsselt sie und speichert sie in einer Variablen; Shell‑Befehle ermitteln SerialNumber und aktuellen Benutzer. Über AEVT‑Codes wird der Zwischenablage‑Inhalt gelesen, die vorderste Anwendung ermittelt und gegen eine C2‑definierte Blockliste („bad“) geprüft. Weiterverarbeitung erfolgt nur, wenn sich die Zwischenablage vom letzten Eintrag und den zuletzt ersetzten Daten unterscheidet, länger als 25 Zeichen ist und oD() nicht true liefert (oD() prüft, ob die ersten vier Zeichen Ziffern sind).

Es folgen zwei Hauptprüfungen (Gates): Erstens wird getestet, ob 50 < len(clipboard) < 300 und ob das Clipboard‑Muster mit dem s‑Datensatz aus der C2‑Antwort übereinstimmt; bei Übereinstimmung werden die Daten formatiert und AES‑verschlüsselt an den C2 exfiltriert. Zweitens wird geprüft, ob 25 ≤ len(clipboard) ≤ 65, das Skript mit einem Argument lief und cD(clipboard_data) > 1 (Anzahl Ziffern > 1). Dann iteriert das Skript durch die sub‑Sammlung der C2‑Antwort, die für jede Wallet Einträge mit Feldern enthält: a (Adressliste), t (Wallet‑Kennung), r (Regex‑Muster), optional ir (Negativ‑Regex) und p (Index/Zähler).

Für jeden Eintrag werden r und ir geprüft; ist r wahr und ir falsch, vergleicht das Programm die Zwischenablage mit den Angreiferadressen. Weicht der Inhalt ab, wählt es eine Adresse aus a, ersetzt die Zwischenablage, sendet Original‑ und ersetzte Daten sowie Metadaten (Wallet‑Name, vorderste App etc.) an den C2, setzt xcP auf den zuletzt ersetzten Eintrag, aktualisiert xP mit dem aktuellen Clipboard‑Text, wartet zwei Sekunden und wiederholt die Schleife.

neq_cdyd_ilvcmwx (Dateidieb)

Dieses Modul ruft ein zusätzliches Skript vom C2-Server ab, das im Verzeichnis /tmp/ gespeichert wird. Das Skript wird anschließend mit der Domäne und dem moduleName als Parameter ausgeführt. Nach der Ausführung wird die heruntergeladene Datei gelöscht. Das Modul funktioniert als kompiliertes, nur ausführbares AppleScript. Das Skript weist Ähnlichkeiten mit dem Modul txzx_vostfdi auf, das zuvor als Dieb von Daten aus digitalen Geldbörsen identifiziert wurde, der auf Browser abzielt. Während der Analyse lieferte der C2-Server keine Ordnerliste, ist jedoch in der Lage, Dateien zurück an den C2-Server zu exfiltrieren.

xmyyeqjx (LaunchDaemon-basierte Persistenz)

Dieses Submodul richtet die LaunchDaemon-Persistenz für die Datei ~/.root ein, die in diesem Modul erstellt wird. Hier eine Zusammenfassung des Skripts:

Der Prozess beginnt mit der Erstellung mehrerer Pfade und einer Datei ~/.root im HOME-Verzeichnis des Benutzers, die die Nutzlast enthält. Die Nutzlast führt die folgenden Aktionen aus:

  • Wechselt in das Verzeichnis /Users/Shared
  • Überprüft die Netzwerkverbindung
  • Ruft den lokal angemeldeten Benutzer ab
  • Wartet 30 Sekunden
  • Führt die Datei ~/.zshrc im Kontext des angemeldeten Benutzers aus (die Datei .zshrc wurde in früheren Submodulen mit bösartiger Nutzlast ergänzt)
  • Wartet 30 Sekunden
  • Ändert zwei Konfigurationen, um Systembefehle auszuführen, die die automatischen Konfigurationsaktualisierungen von macOS und die Rapid Security Response-Mechanismen deaktivieren.

Diese Befehle ändern die Einstellungen für die macOS-Softwareaktualisierung, um verschiedene wichtige Apple-Updates zu deaktivieren, darunter Rapid Security Responses (RSR), Aktualisierungen der Sicherheitskonfiguration und andere.

Anschließend wird die Funktion doMainFunc() aufgerufen.

Die Funktion prüft, ob ein LaunchDaemon‑Eintrag mit einer .root‑Datei vorhanden ist. Fehlt er, lädt sie ein kompiliertes AppleScript vom C2‑Server, legt im Verzeichnis /tmp eine getarnte Anwendung System Settings.app an — die das AppleScript mit zwei Parametern (Label/Plist‑Name und Ziel‑Datei ~/.root) ausführt — und wartet darauf, dass die echte Systemeinstellungen‑App gestartet wird, um dann die gefälschte App auszuführen.

Das heruntergeladene Script ermittelt per Shell die Geräte‑Seriennummer und den aktuellen Benutzer, baut den Pfad zur LaunchDaemon‑Plist sowie deren Inhalt und schreibt diesen mit echo in die Datei. Der Dateiname entspricht dem als Argument übergebenen Namen.

Es tarnt sich mit dem Präfix „com.google.“ im Plist-Namen und führt die Datei „~/.root“ mit Bash aus. Der Echo-Befehl wird mit „do shell script … mit Administratorrechten“ ausgeführt, was durch den AEVT-Code „badm“ impliziert werden kann. Anschließend führt es den Befehl „chown“ aus, um den Eigentümer in „root:wheel“ zu ändern, und setzt 644 Berechtigungen für die Plist-Datei. Zuletzt führt es den Befehl „launchctl load -w“ mit „sudo“ aus, um den Daemon zu starten.

jey (Git-basierte Persistenz)

Der Befehl in der älteren Variante führt eine direkte Verkettung der verschlüsselten Nutzlast zusammen mit dem wiederholten Entschlüsselungsbefehl direkt über die Shell aus. In der neuen Variante ist die Entschlüsselungslogik in einer Shell-Funktion gekapselt, die inline definiert und dann zum Entschlüsseln der verschlüsselten Zeichenfolge verwendet wird, bevor diese zur Ausführung an die Shell übergeben wird. Diese Änderung verbessert in erster Linie die von Malware verwendete Verschleierungsmethode.

Alte Logik:

Neue Logik:

iewmilh_cdyd (Info-Stealer, der Firefox angreift)

Diese neue Variante verfügt über ein zusätzliches Info-Stealer-Modul, um von Firefox gespeicherte Daten zu exfiltrieren. Zunächst wird die Funktion runMe() aufgerufen, um eine Mach-O-FAT-Binärdatei vom C2-Server herunterzuladen, die für alle Info-Stealing-Operationen zuständig ist.

Diese heruntergeladene Binärdatei scheint eine modifizierte Version eines GitHub-Projekts namens HackBrowserData zu sein, das in der Lage ist, von Browsern gespeicherte Daten zu entschlüsseln und zu exportieren. Passwörter, Verlauf, Kreditkarteninformationen und Cookies sind einige der wichtigsten Informationen, die es aus fast allen gängigen Browsern extrahieren kann.

Nach dem Herunterladen erhält die Binärdatei Ausführungsrechte, wird ad hoc auf dem Computer des Opfers signiert und mit den Argumenten –b firefox -f json –dir ” & resDir & ” –zip ausgeführt:

  • -b: Name des Browsers
  • -f: Format der Ausgabedaten
  • –dir: Exportverzeichnis, in dem die Ausgabe gespeichert wird
  • –zip: Dieses Flag speichert die Ausgabe in einer komprimierten ZIP-Datei

Sobald alle Daten abgerufen wurden, lädt es die komprimierte ZIP-Datei und die Protokolldatei mit seiner alten Methode zum Exfiltrieren von Daten in Blöcken auf den C2-Server hoch.

Leitfaden zur Schadensbegrenzung und zum Schutz

Verteidiger können die folgenden Maßnahmen zur Schadensbegrenzung ergreifen, um sich gegen diese Bedrohung zu schützen:

  • Verwenden Sie die neueste Version Ihrer Betriebssysteme und Anwendungen. Installieren Sie die neuesten Sicherheitsupdates, sobald sie verfügbar sind.
  • Überprüfen und verifizieren Sie immer Xcode-Projekte, die aus Repositorys heruntergeladen oder geklont wurden, da sich die Malware in der Regel über infizierte Projekte verbreitet.
  • Seien Sie vorsichtig beim Kopieren und Einfügen sensibler Daten aus der Zwischenablage. Überprüfen Sie immer, ob der eingefügte Inhalt mit der beabsichtigten Quelle übereinstimmt, um nicht Opfer von Clipboard-Hijacking- oder Datenmanipulationsangriffen zu werden.
  • Ermutigen Sie Benutzer, Webbrowser zu verwenden, die Microsoft Defender SmartScreen unterstützen, wie z. B. Microsoft Edge – verfügbar unter macOS und verschiedenen Plattformen –, der bösartige Websites identifiziert und blockiert, darunter Phishing-Websites, Betrugswebsites und Websites, die Exploits enthalten und Malware hosten.
  • Verwenden Sie Microsoft Defender for Endpoint auf Mac, das die in diesem Blog beschriebenen Malware-Programme erkennt, stoppt und unter Quarantäne stellt.

Kunden von Microsoft Defender for Endpoint können außerdem die folgenden Maßnahmen ergreifen, um die Angriffsfläche der Umgebung zu verringern und die Auswirkungen dieser Bedrohung und ihrer Payloads zu mindern:

  • Aktivieren Sie den Cloud-basierten Schutz und die automatische Übermittlung von Beispielen in Microsoft Defender Antivirus. Diese Funktionen nutzen künstliche Intelligenz und maschinelles Lernen, um neue und unbekannte Bedrohungen schnell zu identifizieren und zu stoppen.
  • Aktivieren Sie den Schutz vor potenziell unerwünschten Anwendungen (PUA) im Blockierungsmodus, um PUAs wie Adware automatisch unter Quarantäne zu stellen. Die PUA-Blockierung wird auf Endpunkt-Clients nach der nächsten Signaturaktualisierung oder dem nächsten Neustart des Computers wirksam. Die PUA-Blockierung wird auf Endpunkt-Clients nach der nächsten Signaturaktualisierung oder dem nächsten Neustart des Computers wirksam.
  • Aktivieren Sie den Netzwerkschutz, um Verbindungen zu bösartigen Domänen und IP-Adressen zu blockieren.

Das könnte Sie ebenfalls interessieren


Bild/Quelle: https://depositphotos.com/de/home.html

Folgen Sie uns auf X

Folgen Sie uns auf Bluesky