SOC Prime Bias: Medio

08 Apr 2026 14:50

Stealer per MacOS, Osservati: Cosa Dovrebbero Monitorare i Difensori

Author Photo
Ruslan Mikhalov Capo della Ricerca sulle Minacce presso SOC Prime linkedin icon Segui
Stealer per MacOS, Osservati: Cosa Dovrebbero Monitorare i Difensori
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Riepilogo

L’articolo descrive un malware che ruba credenziali su macOS, associato all’ecosistema AMOS, distribuito tramite false pagine di aggiornamento software. Le vittime sono indotte a eseguire una catena di comandi che scarica un binario ausiliario da rvdownloads.com, lo esegue tramite zsh, e attiva AppleScript offuscato per raccogliere password, artefatti del browser, estensioni di portafogli di criptovalute, Note di Apple e file locali. La persistenza viene stabilita utilizzando un plist LaunchAgent malevolo che si camuffa da componente legittimo di Spotlight. L’articolo condivide anche gli IOC osservati e i passaggi di analisi utilizzati per convalidare il flusso di infezione.

Indagine

Il ricercatore ha catturato il comando iniziale curl a una riga che ha recuperato un URL codificato in Base64, lo ha decodificato, e ha osservato un ulteriore download curl del binario ausiliario. L’ausiliario ha eseguito due AppleScript: uno per il rilevamento di VM e un altro che si occupava della raccolta e dell’esfiltrazione. Il malware ha prelevato credenziali dalla Catena di chiavi, ha tentato di terminare gli strumenti di sicurezza, ha raccolto dati del browser e del portafoglio, ha copiato le Note di Apple, ha impacchettato i risultati in un archivio, e li ha caricati su laislivon.com. La persistenza è stata creata installando un LaunchAgent che riesegue l’intera catena di script al login dell’utente.

Mitigazione

Ridurre l’esposizione bloccando i domini malevoli identificati, limitando l’esecuzione di script non firmati, e monitorando per attività insolite di caricamento launchctl legate a nuovi LaunchAgent. Usare controlli sugli endpoint che segnalano combinazioni sospette di curl e osascript, specialmente quando scaricano contenuti remoti da host sconosciuti. Limitare l’esecuzione privilegiata quando possibile e applicare l’elenco di permessi per le applicazioni per impedire il lancio di binari ausiliari non fidati.

Risposta

Se vengono trovati indicatori, isolare l’endpoint, terminare i processi malevoli attivi, rimuovere il binario ausiliario, e cancellare il plist LaunchAgent canaglia. Resettare credenziali e token potenzialmente esposti, dando priorità ai segreti della Catena di chiavi e ai dati memorizzati nel browser. Raccogliere artefatti forensici per gli IOC elencati, esaminare i log di sistema per l’esecuzione di curl/osascript, e monitorare per ripetuti tentativi di callback o download legati alla stessa infrastruttura C2.

"graph TB %% Definizioni delle Classi classDef action fill:#99ccff classDef tool fill:#cccccc classDef technique fill:#ffedcc classDef process fill:#e2e2ff %% Nodi u2013 Azioni action_initial_access["<b>Azione</b> – <b>T1219 Strumenti di Accesso Remoto</b><br/>Esegui un comando curl che decodifica un URL base64 e esegue una shell zsh per scaricare un payload secondario da rvdownloads.com/frozenfix/update."] class action_initial_access action action_obfuscation["<b>Azione</b> – <b>T1027 Offuscamento</b><br/>Script di aiuto nasconde stringhe usando Base64, aritmetica personalizzata, padding del binario e inserimento di codice spazzatura."] class action_obfuscation action action_sandbox_evasion["<b>Azione</b> – <b>T1497.002 Evasione della Sandbox di Virtualizzazione</b><br/>AppleScript controlla l’output di system_profiler per indicatori di VM come QEMU, VMware e KVM."] class action_sandbox_evasion action action_credential_harvest["<b>Azione</b> – <b>T1056.002 Cattura dell’Input della GUI</b><br/>Finestra di dialogo osascript falsificata chiede la password di amministratore, la convalida con la Catena di chiavi e la memorizza in ~/.pwd."] class action_credential_harvest action action_defense_evasion["<b>Azione</b> – <b>T1027.005 Rimozione degli Indicatori dagli Strumenti</b><br/>Il malware termina Little Snitch e BlockBlock e scarica i loro agenti di lancio."] class action_defense_evasion action action_browser_theft["<b>Azione</b> – <b>T1217 Scoperta delle Informazioni del Browser</b><br/>Enumera i profili di Chrome, Brave, Edge, Opera e Firefox ed estrae dati di login, cookie, dati di autocompletamento e delle estensioni, mirando a estensioni di portafogli di criptovalute."] class action_browser_theft action action_notes_theft["<b>Azione</b> – Furto dei Dati di Apple Notes<br/>Copia il database SQLite delle Note e i file multimediali associati in una cartella di staging."] class action_notes_theft action action_data_staging["<b>Azione</b> – <b>T1132 Codifica dei Dati</b><br/>Copia i file raccolti in /tmp/stolen_data e li comprime in archive.tar.gz."] class action_data_staging action action_c2["<b>Azione</b> – <b>T1102 Servizio Web</b><br/>Carica l’archivio compresso tramite un curl POST a https://laislivon.com/upload."] class action_c2 action action_persistence["<b>Azione</b> – <b>T1543.001 Persistenza dell’Agente di Lancio</b><br/>Scrive un plist LaunchAgent (com.apple.mdworker.plist) in ~/Library/LaunchAgents e lo carica con launchctl."] class action_persistence action action_execution["<b>Azione</b> – <b>T1127.003 Esecuzione Proxied degli Strumenti Sviluppatore Fidati</b><br/>Esegue l’AppleScript malevolo a ogni login usando osascript, sfruttando utilità sviluppatore fidate."] class action_execution action %% Nodi u2013 Strumenti tool_curl["<b>Strumento</b> – <b>Nome</b>: curl<br/><b>Descrizione</b>: Trasferisce dati da server remoti usando la sintassi URL."] class tool_curl tool tool_osascript["<b>Strumento</b> – <b>Nome</b>: osascript<br/><b>Descrizione</b>: Esegue script AppleScript o JavaScript per Automation su macOS."] class tool_osascript tool tool_launchctl["<b>Strumento</b> – <b>Nome</b>: launchctl<br/><b>Descrizione</b>: Gestisce agenti di lancio e demoni su macOS."] class tool_launchctl tool %% Nodi u2013 Tecniche (dettaglio aggiuntivo) tech_T1027_008["<b>Tecnica</b> – T1027.008 Payload Smagliati<br/>I payload sono privati di simboli e informazioni di debug per ostacolare l’analisi."] class tech_T1027_008 technique tech_T1027_001["<b>Tecnica</b> – T1027.001 Padding del Binario<br/>Aggiunge byte nonu2011funzionali ai binari per cambiare dimensioni e hash."] class tech_T1027_001 technique tech_T1027_007["<b>Tecnica</b> – T1027.007 Risoluzione Dinamica delle API<br/>Risolvi le chiamate API a runtime per evitare il rilevamento statico."] class tech_T1027_007 technique tech_T1027_016["<b>Tecnica</b> – T1027.016 Inserimento di Codice Spazzatura<br/>Inserisce istruzioni irrilevanti per confondere gli strumenti di analisi."] class tech_T1027_016 technique tech_T1140["<b>Tecnica</b> – T1140 Deoffuscazione/Decodifica di File o Informazioni<br/>Decodifica o deoffusca i dati prima dell’esecuzione."] class tech_T1140 technique tech_T1555_001["<b>Tecnica</b> – T1555.001 Credenziali da Archivi di Password: Catena di Chiavi<br/>Estrae le credenziali archiviate dalla Catena di chiavi di macOS."] class tech_T1555_001 technique tech_T1555_002["<b>Tecnica</b> – T1555.002 Credenziali da Archivi di Password: Memoria di Securityd<br/>Legge le credenziali dalla memoria del demone di sicurezza."] class tech_T1555_002 technique tech_T1555_003["<b>Tecnica</b> – T1555.003 Credenziali dai Browser Web<br/>Ruba password salvate dai browser."] class tech_T1555_003 technique tech_T1606_001["<b>Tecnica</b> – T1606.001 Falsificazione delle Credenziali Web: Cookie Web<br/>Raccoglie cookie del browser per il dirottamento di sessione."] class tech_T1606_001 technique tech_T1132_001["<b>Tecnica</b> – T1132.001 Codifica Standard<br/>Usa codifica standard (es. gzip) per la compressione dei dati."] class tech_T1132_001 technique tech_T1546_009["<b>Tecnica</b> – T1546.009 Esecuzione Triggerata da Eventi: DLL di AppCert<br/>Attiva l’esecuzione tramite eventi di sistema affidabili."] class tech_T1546_009 technique %% Connessioni del Flusso action_initial_access –>|usa| tool_curl tool_curl –>|scarica| action_obfuscation action_obfuscation –>|impiega| tech_T1027_008 action_obfuscation –>|impiega| tech_T1027_001 action_obfuscation –>|impiega| tech_T1027_007 action_obfuscation –>|impiega| tech_T1027_016 action_obfuscation –>|impiega| tech_T1140 action_obfuscation –>|conduce a| action_sandbox_evasion action_sandbox_evasion –>|controlla per| tech_T1497_002 action_sandbox_evasion –>|conduce a| action_credential_harvest action_credential_harvest –>|usa| tool_osascript action_credential_harvest –>|cattura| tech_T1056_002 action_credential_harvest –>|estrae| tech_T1555_001 action_credential_harvest –>|estrae| tech_T1555_002 action_credential_harvest –>|conduce a| action_defense_evasion action_defense_evasion –>|rimuove| tech_T1027_005 action_defense_evasion –>|conduce a| action_browser_theft action_browser_theft –>|scopre| tech_T1217 action_browser_theft –>|ruba| tech_T1555_003 action_browser_theft –>|raccoglie| tech_T1606_001 action_browser_theft –>|conduce a| action_notes_theft action_notes_theft –>|memorizza in| action_data_staging action_data_staging –>|comprime con| tech_T1132 action_data_staging –>|usa codifica| tech_T1132_001 action_data_staging –>|conduce a| action_c2 action_c2 –>|carica tramite| tool_curl action_c2 –>|usa| tech_T1102 action_c2 –>|conduce a| action_persistence action_persistence –>|crea| tech_T1543_001 action_persistence –>|carica con| tool_launchctl action_persistence –>|conduce a| action_execution action_execution –>|esegue con| tool_osascript action_execution –>|sfrutta| tech_T1127_003 action_execution –>|innescato da| tech_T1546_009

Flusso di Attacco

Esecuzione di Simulazione

Prerequisito: Il Controllo di Telemetria e Base‑line di Pre‑volo deve essere stato superato.

Ragionamento: Questa sezione dettaglia l’esatta esecuzione della tecnica avversaria (TTP) progettata per attivare la regola di rilevamento. I comandi e la narrazione DEVONO riflettere direttamente le TTP identificate e mirare a generare esattamente la telemetria prevista dalla logica di rilevamento.

  • Narrazione dell’Attacco & Comandi:

    Un attaccante che ha ottenuto accesso a livello utente sulla macchina vittima vuole stabilire la persistenza ed esfiltrare le credenziali raccolte.

    1. Persistenza: L’attaccante scrive un plist LaunchAgent malevolo nella directory standard macOS LaunchAgents (simulata sul collezionista Linux tramite un percorso nella directory home).
    2. Raccolta Dati: I file sensibili vengono copiati in una cartella di staging.
    3. Preparazione per Esfiltrazione: I dati messi in fase sono archiviati in /tmp/archive.tar.gz usando l’utilità nativa tar .
    4. Attivazione: L’attacker carica il LaunchAgent con launchctl, causando l’esecuzione del codice malevolo ad ogni login utente.

    Le righe di comando esatte corrispondono alle stringhe osservate dalla regola, garantendo l’attivazione di un avviso.

  • Script di Test di Regressione:

    #!/usr/bin/env bash
    set -euo pipefail
    
    # 1. Crea un file "rubato" fittizio
    echo "password123" > /tmp/credentials.txt
    
    # 2. Crea un plist LaunchAgent malevolo (posizione simulata)
    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. Archivia i dati "rubati" (esatta posizione osservata dalla regola)
    tar -czf /tmp/archive.tar.gz -C /tmp credentials.txt
    
    # 4. Carica il LaunchAgent (questo genera la riga di comando che la regola monitora)
    launchctl load "$PLIST_PATH"
    
    echo "Simulazione completata – il rilevamento dovrebbe essersi attivato."
  • Comandi di Pulizia:

    #!/usr/bin/env bash
    set -euo pipefail
    
    # Scarica il LaunchAgent
    launchctl unload "$HOME/Library/LaunchAgents/com.apple.mdworker.plist" || true
    
    # Rimuovi i file
    rm -f "$HOME/Library/LaunchAgents/com.apple.mdworker.plist"
    rm -f /tmp/archive.tar.gz
    rm -f /tmp/credentials.txt
    
    echo "Pulizia completata."