SOC Prime Bias: Mittel

08 Apr. 2026 14:50

MacOS-Stealer beobachtet: Worauf Verteidiger achten sollten

Author Photo
Ruslan Mikhalov Leiter der Bedrohungsforschung bei SOC Prime linkedin icon Folgen
MacOS-Stealer beobachtet: Worauf Verteidiger achten sollten
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Zusammenfassung

Der Artikel beschreibt einen macOS-Zugangsdaten-Stealer, der mit dem AMOS-Ökosystem verbunden ist und über gefälschte Software-Update-Seiten geliefert wird. Opfer werden dazu gebracht, eine Befehlsfolge auszuführen, die ein Hilfs-Binary von rvdownloads.com herunterlädt, es über zsh ausführt und verschleierten AppleScript auslöst, um Passwörter, Browser-Artefakte, Krypto-Wallet-Erweiterungen, Apple Notes und lokale Dateien zu sammeln. Die Persistenz wird durch die Verwendung einer bösartigen LaunchAgent-Plist hergestellt, die sich als legitime Spotlight-Komponente ausgibt. Das Schreiben teilt auch beobachtete IOCs und die Analyse-Schritte zur Validierung des Infektionsverlaufs.

Untersuchung

Der Forscher erfasste den initialen curl-Einzeiler, der eine Base64-kodierte URL abrief, sie dekodierte und einen nachfolgenden curl-Download des Hilfs-Binaries beobachtete. Das Hilfsprogramm führte zwei AppleScripts aus: eines zur Erkennung von VMs und ein weiteres, das Sammlung und Exfiltration handhabte. Der Stealer zog Anmeldedaten aus dem Schlüsselbund, versuchte, Sicherheitswerkzeuge zu beenden, sammelte Browser- und Wallet-Daten, kopierte Apple Notes, bündelte die Ergebnisse in einem Archiv und lud sie auf laislivon.com hoch. Die Persistenz wurde durch die Installation eines LaunchAgent erreicht, der die vollständige Skriptkette beim Benutzer-Login erneut ausführt.

Abschwächung

Reduzieren Sie die Exposition, indem Sie die identifizierten bösartigen Domains blockieren, die Ausführung von unsignierten Skripten einschränken und ungewöhnliche launchctl-Ladeaktivitäten überwachen, die mit neuen LaunchAgents verbunden sind. Verwenden Sie Endpunktkontrollen, die verdächtige Kombinationen von curl und osascript flaggen, insbesondere wenn Inhalte von entfernten, unbekannten Hosts abgerufen werden. Beschränken Sie privilegierte Ausführungen, wo möglich, und setzen Sie Anwendungszulassungslisten ein, um zu verhindern, dass unzuverlässige Hilfs-Binaries gestartet werden.

Antwort

Wenn Indikatoren gefunden werden, isolieren Sie den Endpunkt, beenden Sie aktive bösartige Prozesse, entfernen Sie das Hilfs-Binary und löschen Sie die schädliche LaunchAgent-Plist. Setzen Sie eventuell gefährdete Anmeldedaten und Tokens zurück, wobei der Schwerpunkt auf Schlüsselbund-Geheimnissen und im Browser gespeicherten Daten liegt. Sammeln Sie forensische Artefakte für die aufgelisteten IOCs, überprüfen Sie Systemprotokolle auf curl/osascript-Ausführungen und überwachen Sie auf wiederholte Rückrufe oder Download-Versuche, die mit derselben C2-Infrastruktur verbunden sind.

"graph TB %% Klassendefinitionen classDef action fill:#99ccff classDef tool fill:#cccccc classDef technique fill:#ffedcc classDef process fill:#e2e2ff %% Knoten u2013 Aktionen action_initial_access["<b>Aktion</b> – <b>T1219 Fernzugriffstools</b><br/>Führt einen curl-Befehl aus, der eine base64-kodierte URL decodiert und eine zsh-Shell startet, um eine sekundäre Nutzlast von rvdownloads.com/frozenfix/update herunterzuladen."] class action_initial_access action action_obfuscation["<b>Aktion</b> – <b>T1027 Verschleierung</b><br/>Das Hilfsskript versteckt Zeichenfolgen durch Base64, benutzerdefinierte Arithmetik, binäre Polsterung und Junk-Code-Einfügung."] class action_obfuscation action action_sandbox_evasion["<b>Aktion</b> – <b>T1497.002 Virtualisierungs-Sandbox-Umgehung</b><br/>AppleScript überprüft die system_profiler-Ausgabe auf VM-Indikatoren wie QEMU, VMware und KVM."] class action_sandbox_evasion action action_credential_harvest["<b>Aktion</b> – <b>T1056.002 GUI Eingabeaufnahme</b><br/>Gefälschte osascript-Dialoge fordern das Administratorpasswort an, verifizieren es mit dem Schlüsselbund und speichern es in ~/.pwd."] class action_credential_harvest action action_defense_evasion["<b>Aktion</b> – <b>T1027.005 Entfernung von Indikatoren aus Tools</b><br/>Malware beendet Little Snitch und BlockBlock und entlädt deren Startagenten."] class action_defense_evasion action action_browser_theft["<b>Aktion</b> – <b>T1217 Browser-Informationsentdeckung</b><br/>Listet Chrome-, Brave-, Edge-, Opera- und Firefox-Profile auf und extrahiert Anmeldedaten, Cookies, Autofill- und Erweiterungsdaten, wobei insbesondere Krypto-Wallet-Erweiterungen angestrebt werden."] class action_browser_theft action action_notes_theft["<b>Aktion</b> – Apple-Notizen-Datendiebstahl<br/>Kopiert die Notes-SQLite-Datenbank und zugehörige Mediendateien in einen Bereitstellungsordner."] class action_notes_theft action action_data_staging["<b>Aktion</b> – <b>T1132 Datenkodierung</b><br/>Kopiert gesammelte Dateien in /tmp/stolen_data und komprimiert sie in archive.tar.gz."] class action_data_staging action action_c2["<b>Aktion</b> – <b>T1102 Webdienst</b><br/>Lädt das komprimierte Archiv über einen curl-POST auf https://laislivon.com/upload hoch."] class action_c2 action action_persistence["<b>Aktion</b> – <b>T1543.001 Launch-Agent-Persistenz</b><br/>Schreibt eine LaunchAgent-Plist (com.apple.mdworker.plist) in ~/Library/LaunchAgents und lädt sie mit launchctl."] class action_persistence action action_execution["<b>Aktion</b> – <b>T1127.003 Vertrauenswürdige Entwicklerdienstprogrammanwendung Proxy-Ausführung</b><br/>Führt das bösartige AppleScript bei jedem Login mit osascript aus, indem vertrauenswürdige Entwickler-Dienstprogramme genutzt werden."] class action_execution action %% Knoten u2013 Werkzeuge tool_curl["<b>Werkzeug</b> – <b>Name</b>: curl<br/><b>Beschreibung</b>: Überträgt Daten von entfernten Servern mit URL-Syntax."] class tool_curl tool tool_osascript["<b>Werkzeug</b> – <b>Name</b>: osascript<br/><b>Beschreibung</b>: Führt AppleScript oder JavaScript für Automationsskripte auf macOS aus."] class tool_osascript tool tool_launchctl["<b>Werkzeug</b> – <b>Name</b>: launchctl<br/><b>Beschreibung</b>: Verwalten von Startagenten und Daemons auf macOS."] class tool_launchctl tool %% Knoten u2013 Techniken (zusätzliche Details) tech_T1027_008["<b>Technik</b> – T1027.008 Bereinigte Nutzlasten<br/>Nutzlasten werden von Symbolen und Debugging-Informationen befreit, um die Analyse zu erschweren."] class tech_T1027_008 technique tech_T1027_001["<b>Technik</b> – T1027.001 Binärpolsterung<br/>Fügt nicht funktionale Bytes zu Binaries hinzu, um Größe und Hash zu ändern."] class tech_T1027_001 technique tech_T1027_007["<b>Technik</b> – T1027.007 Dynamische API-Auflösung<br/>Löst API-Aufrufe zur Laufzeit auf, um statische Erkennung zu vermeiden."] class tech_T1027_007 technique tech_T1027_016["<b>Technik</b> – T1027.016 Junk-Code-Einfügung<br/>Fügt irrelevante Anweisungen hinzu, um Analysetools zu verwirren."] class tech_T1027_016 technique tech_T1140["<b>Technik</b> – T1140 Deobfuscieren/Decodieren von Dateien oder Informationen<br/>Dekodiert oder deobfuscates Daten vor der Ausführung."] class tech_T1140 technique tech_T1555_001["<b>Technik</b> – T1555.001 Zugangsdaten aus Passwortspeichern: Schlüsselbund<br/>Extrahiert gespeicherte Anmeldedaten aus dem macOS-Schlüsselbund."] class tech_T1555_001 technique tech_T1555_002["<b>Technik</b> – T1555.002 Zugangsdaten aus Passwortspeichern: Securityd-Speicher<br/>Liest Anmeldedaten aus dem Sicherheitsdämon-Speicher."] class tech_T1555_002 technique tech_T1555_003["<b>Technik</b> – T1555.003 Zugangsdaten aus Web-Browsern<br/>Stiehlt gespeicherte Passwörter aus Browsern."] class tech_T1555_003 technique tech_T1606_001["<b>Technik</b> – T1606.001 Fälschung von Web-Anmeldedaten: Web-Cookies<br/>Sammelt Browser-Cookies für Sitzungs-Hijacking."] class tech_T1606_001 technique tech_T1132_001["<b>Technik</b> – T1132.001 Standardkodierung<br/>Verwendet Standardkodierung (z.B. gzip) zur Datenkompression."] class tech_T1132_001 technique tech_T1546_009["<b>Technik</b> – T1546.009 Ereignis-Ausgelöste Ausführung: AppCert DLLs<br/>Löst die Ausführung über vertrauenswürdige Systemereignisse aus."] class tech_T1546_009 technique %% Flussverbindungen action_initial_access –>|verwendet| tool_curl tool_curl –>|lädt herunter| action_obfuscation action_obfuscation –>|wendet an| tech_T1027_008 action_obfuscation –>|wendet an| tech_T1027_001 action_obfuscation –>|wendet an| tech_T1027_007 action_obfuscation –>|wendet an| tech_T1027_016 action_obfuscation –>|wendet an| tech_T1140 action_obfuscation –>|führt zu| action_sandbox_evasion action_sandbox_evasion –>|überprüft auf| tech_T1497_002 action_sandbox_evasion –>|führt zu| action_credential_harvest action_credential_harvest –>|verwendet| tool_osascript action_credential_harvest –>|erfasst| tech_T1056_002 action_credential_harvest –>|extrahiert| tech_T1555_001 action_credential_harvest –>|extrahiert| tech_T1555_002 action_credential_harvest –>|führt zu| action_defense_evasion action_defense_evasion –>|entfernt| tech_T1027_005 action_defense_evasion –>|führt zu| action_browser_theft action_browser_theft –>|entdeckt| tech_T1217 action_browser_theft –>|stiehlt| tech_T1555_003 action_browser_theft –>|sammelt| tech_T1606_001 action_browser_theft –>|führt zu| action_notes_theft action_notes_theft –>|speichert in| action_data_staging action_data_staging –>|komprimiert mit| tech_T1132 action_data_staging –>|verwendet Kodierung| tech_T1132_001 action_data_staging –>|führt zu| action_c2 action_c2 –>|lädt hoch via| tool_curl action_c2 –>|verwendet| tech_T1102 action_c2 –>|führt zu| action_persistence action_persistence –>|erstellt| tech_T1543_001 action_persistence –>|lädt mit| tool_launchctl action_persistence –>|führt zu| action_execution action_execution –>|führt aus mit| tool_osascript action_execution –>|nutzt aus| tech_T1127_003 action_execution –>|ausgelöst durch| tech_T1546_009 "

Angriffsfluss

Simulationsausführung

Voraussetzung: Der Telemetrie- & Baseline-Vorflug-Check muss bestanden sein.

Begründung: Dieser Abschnitt beschreibt die genaue Ausführung der gegnerischen Technik (TTP), die entwickelt wurde, um die Erkennungsregel auszulösen. Die Befehle und Erzählungen MÜSSEN die identifizierten TTPs direkt widerspiegeln und darauf abzielen, die genaue Telemetrie zu erzeugen, die von der Erkennungsgleichung erwartet wird.

  • Angriffsgeschichte & Befehle:

    Ein Angreifer, der sich Benutzerzugriffsrechte auf dem Opferrechner verschafft hat, möchte Persistenz herstellen und gesammelte Anmeldedaten exfiltrieren.

    1. Persistenz: Der Angreifer schreibt eine bösartige LaunchAgent-Plist in das Standard-Verzeichnis von macOS LaunchAgents (simuliert auf dem Linux-Sammler über einen Home-Verzeichnis-Pfad).
    2. Datensammlung: Sensible Dateien werden in einen Bereitstellungsordner kopiert.
    3. Exfiltrationsvorbereitung: Die bereitgestellten Daten werden in /tmp/archive.tar.gz mit dem nativen tar Dienstprogramm archiviert.
    4. Aktivierung: Der Angreifer lädt den LaunchAgent mit launchctl, wodurch der bösartige Code bei jeder Benutzeranmeldung ausgeführt wird.

    Die genauen Befehlszeilen stimmen mit den Zeichenfolgen überein, die die Regel beobachtet, um sicherzustellen, dass ein Alarm ausgelöst wird.

  • Regressionstest-Skript:

    #!/usr/bin/env bash
    set -euo pipefail
    
    # 1. Erstellen Sie eine Dummy-Datei für "gestohlene" Anmeldedaten
    echo "password123" > /tmp/credentials.txt
    
    # 2. Erstellen Sie eine bösartige LaunchAgent-Plist (simulierte Position)
    PLIST_PATH="$HOME/Library/LaunchAgents/com.apple.mdworker.plist"
    mkdir -p "$(dirname "$PLIST_PATH")"
    cat > "$PLIST_PATH" <<EOF
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>Label</key><string>com.apple.mdworker</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/bin/cat</string>
            <string>/tmp/credentials.txt</string>
        </array>
        <key>RunAtLoad</key><true/>
    </dict>
    </plist>
    EOF
    
    # 3. Archivieren Sie die "gestohlenen" Daten (exakter Pfad, den die Regel überwacht)
    tar -czf /tmp/archive.tar.gz -C /tmp credentials.txt
    
    # 4. Laden Sie den LaunchAgent (dies generiert die Befehlszeile, die die Regel überwacht)
    launchctl load "$PLIST_PATH"
    
    echo "Simulation abgeschlossen – die Erkennung sollte ausgelöst worden sein."
  • Bereinigungskommandos:

    #!/usr/bin/env bash
    set -euo pipefail
    
    # Entladen des LaunchAgent
    launchctl unload "$HOME/Library/LaunchAgents/com.apple.mdworker.plist" || true
    
    # Dateien entfernen
    rm -f "$HOME/Library/LaunchAgents/com.apple.mdworker.plist"
    rm -f /tmp/archive.tar.gz
    rm -f /tmp/credentials.txt
    
    echo "Bereinigung abgeschlossen."