PamStealer passa a Swift con una catena di decrittazione lato server
Detection stack
- AIDR
- Alert
- ETL
- Query
Riassunto
Una nuova variante di infostealer PamStealer per macOS introduce un cambiamento architettonico significativo, passando da Rust a Swift. Il malware aggiornato si basa su una catena di decrittazione lato server supportata da un’utility personalizzata chiamata pkgunpack, richiedendo l’interazione attiva del C2 per decifrare ed eseguire il payload di secondo stadio. Utilizza anche meccanismi di persistenza stratificati mentre prende di mira le credenziali del browser, i dati del Portachiavi e ampie metadati di sistema.
Indagine
Jamf Threat Labs ha analizzato la nuova variante di PamStealer dopo averla identificata all’interno di un falso installatore di portafogli di criptovaluta chiamato Wavel. L’indagine ha rivelato una catena di esecuzione a più stadi che inizia con un dropper JXA compilato, seguito da uno stadio basato su zsh che esegue scambi di chiavi in tempo reale, e un secondo stadio basato su Swift responsabile del furto di credenziali e del fingerprinting del sistema.
Mitigazione
Gli utenti dovrebbero evitare di scaricare applicazioni da fonti non ufficiali, in particolare software che impersonano portafogli di criptovaluta. Le organizzazioni dovrebbero monitorare gli oggetti in background sospetti su macOS e le modifiche non autorizzate ai file di configurazione della shell come .zshrc. I controlli di sicurezza degli endpoint capaci di rilevare la firma del codice ad hoc, il reparenting anomalo dei processi e l’esecuzione inusuale della shell possono ulteriormente ridurre l’esposizione.
Risposta
Quando viene rilevata l’attività di PamStealer, isolare l’endpoint macOS interessato dalla rete per prevenire ulteriori comunicazioni command-and-control e esfiltrazione di dati. Eseguire un’analisi forense per determinare l’estensione del furto di credenziali, con particolare attenzione ai dati del browser e del Portachiavi macOS. Rivedere i log di sistema per la creazione non autorizzata di LaunchAgent, oggetti in background sospetti e attività della shell inaspettate.
Flusso di Attacco
Stiamo ancora aggiornando questa parte.
Rilevamenti
Firma del Codice Forzata di Pacchetto Applicazione Modificato (via cmdline)
Utilità di Archiviazione MacOS che Punta a una Directory Sospetta (via cmdline)
Uso Sospetto di Ditto per l’Archiviazione e l’Esfiltrazione di File su macOS (via process_creation)
Tentativo di Esecuzione Sospetto di Curl [MacOS] (via cmdline)
Archivio Creato nella Cartella Temporanea di MacOS (via file_event)
Terminazione dei Processi di Helper del Browser per Sblocco delle Credenziali [Windows Process Creation]
Rileva l’Uso di xattr e codesign per Tecniche di Aggiramento nella Variante PamStealer [Linux File Event]
Esecuzione dello Script JXA di PamStealer tramite Zsh [Linux Process Creation]
Esecuzione di Simulazione
-
Narrativa & Comandi dell’Attacco: L’attaccante cerca di distribuire un payload che eviti il rilevamento su disco. Per ottenere ciò, utilizza un comando che decodifica una stringa codificata in Base64 e la reindirizza direttamente in una
zshsottoshell usando il-sflag. Per impedire a un investigatore di collegare facilmente il processo malevolo alla sessione shell originale, l’attaccante incapsula il payload in una funzione chiamatadaemon_function, la esegue in background usando&, ed esce immediatamente dalla shell corrente per rompere il collegamento dell’albero dei processi. -
Script di Test di Regressione:
#!/bin/bash # Simulazione dell'esecuzione di PamStealer JXA tramite zsh # Definisci il payload "maligno" come un nome di funzione e un comando # Il payload viene reindirizzato a zsh -s per imitare il TTP PAYLOAD="daemon_function() { echo '[!] PAYLOAD MALEVOLO ESEGUITO'; }; daemon_function & ; exit 0" # Esegui il payload esattamente come si aspetta la regola di rilevamento echo "$PAYLOAD" | zsh -s -
Comandi di Pulizia:
# La pulizia è minima poiché il comando viene reindirizzato e non crea file persistenti. # Dobbiamo solo assicurarci che nessun processo in background dalla simulazione sia ancora in esecuzione. pkill -f "daemon_function"