OceanLotus: aggiornamento malware per macOS

Nel marzo 2019, un nuovo campione di malware per macOS proveniente dal cybergruppo OceanLotus è stato caricato su VirusTotal, un popolare servizio di scansione online. Il file eseguibile backdoor ha le stesse funzionalità della versione precedente del malware macOS che abbiamo studiato, ma la sua struttura è cambiata ed è diventato più difficile da rilevare. Purtroppo non siamo riusciti a trovare un contagocce associato a questo campione, quindi non conosciamo ancora il vettore dell'infezione.

Abbiamo recentemente pubblicato post su OceanLotus e come gli operatori stanno cercando di garantire la persistenza, accelerare l'esecuzione del codice e ridurre al minimo l'impatto sui sistemi Windows. È inoltre noto che questo gruppo informatico dispone anche di una componente per macOS. Questo post descrive in dettaglio le modifiche apportate all'ultima versione del malware macOS rispetto alla versione precedente (descritto da Trend Micro) e in che modo l'analisi può automatizzare la decodifica delle stringhe utilizzando l'API IDA Hex-Rays.

OceanLotus: aggiornamento malware per macOS

analisi

Le tre parti seguenti descrivono l'analisi di un campione con un hash SHA-1 E615632C9998E4D3E5ACD8851864ED09B02C77D2. Il file viene chiamato torcia elettrica, i prodotti antivirus ESET lo rilevano come OSX/OceanLotus.D.

Protezione anti-debug e sandbox

Come tutti i file binari di OceanLotus per macOS, l'esempio è fornito con UPX, ma la maggior parte degli strumenti di identificazione dei pacchetti non lo riconoscono come tale. Probabilmente perché contengono principalmente una firma che dipende dalla presenza della stringa "UPX", inoltre le firme Mach-O sono meno comuni e non vengono aggiornate così spesso. Questa funzionalità rende difficile il rilevamento statico. È interessante notare che, dopo aver disimballato, il punto di ingresso si trova all'inizio della partizione __cfstring nel segmento .TEXT. Questa sezione ha attributi flag come mostrato nell'immagine seguente.

OceanLotus: aggiornamento malware per macOS
Figura 1. Attributi della sezione MACH-O __cfstring

Come mostrato nella Figura 2, le posizioni dei codici nella sezione __cfstring consente ad alcuni strumenti di disassemblaggio di essere ingannati visualizzando il codice come stringhe.

OceanLotus: aggiornamento malware per macOS
Figura 2. Il codice backdoor è definito da IDA come dati

Una volta eseguito, il binario crea un thread come protezione del debug il cui unico scopo è verificare costantemente la presenza di un debugger. Per questo flusso:

- Tenta di sganciare qualsiasi debugger chiamando ptrace с PT_DENY_ATTACH come parametro di richiesta
- Controlla se alcune porte esclusive sono aperte chiamando la funzione task_get_exception_ports
- Controlla se è collegato un debugger, come mostrato nella figura seguente, controllando la presenza di un flag P_TRACED nel processo attuale

OceanLotus: aggiornamento malware per macOS
Figura 3. Controllo della connessione del debugger utilizzando la funzione sysctl

Se il watchdog rileva la presenza di un debugger, viene richiamata la funzione exit. Inoltre, l'esempio controlla l'ambiente eseguendo due comandi:

ioreg -l | grep -e "Manufacturer" и sysctl hw.model

L'esempio controlla quindi il valore restituito rispetto a un elenco hardcoded di stringhe provenienti da sistemi di virtualizzazione noti: acle, vmware, virtualbox o paralleli. Infine, il seguente comando controlla se la macchina è una delle seguenti “MBP”, “MBA”, “MB”, “MM”, “IM”, “MP” e “XS”. Questi sono codici modello di sistema, ad esempio "MBP" significa MacBook Pro, "MBA" significa MacBook Air, ecc.

system_profiler SPHardwareDataType 2>/dev/null | awk '/Boot ROM Version/ {split($0, line, ":");printf("%s", line[2]);}

Aggiunte di base

Anche se i comandi backdoor non sono cambiati rispetto alla ricerca di Trend Micro, abbiamo notato alcune altre modifiche. I server C&C utilizzati in questo esempio sono abbastanza nuovi, essendo stati creati il ​​22.10.2018/XNUMX/XNUMX.

- daff.faybilodeau[.]com
- sarc.onteagleroad[.]com
- au.charlineopkesston[.]com

URL della risorsa cambiato in /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Il primo pacchetto inviato al server C&C contiene ulteriori informazioni sulla macchina host, inclusi tutti i dati raccolti dai comandi nella tabella seguente.

OceanLotus: aggiornamento malware per macOS

Inoltre, a seguito delle modifiche alla configurazione, l'esempio utilizza una non libreria per il filtraggio della rete libcurl, ma una libreria esterna. Per trovarlo, la backdoor tenta di decrittografare ogni file nella directory corrente utilizzando AES-256-CBC con la chiave gFjMXBgyXWULmVVVzyxy, riempito con zeri. Ogni file viene decrittografato e salvato come /tmp/storeed è stato effettuato un tentativo di caricarlo come libreria utilizzando la funzione open. Quando un tentativo di decrittazione risulta in una chiamata riuscita dlopen, la backdoor recupera le funzioni esportate Boriry и ChadylonV, che, a quanto pare, sono responsabili della comunicazione di rete con il server. Non abbiamo il contagocce o altri file dalla posizione del campione originale, quindi non possiamo analizzare questa libreria. Inoltre, poiché il componente è crittografato, una regola YARA basata su queste stringhe non corrisponderà al file trovato su disco.

Come descritto nell'articolo precedente, crea Identificativo cliente. Questo identificatore è l'hash MD5 del valore restituito di uno dei seguenti comandi:

- ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformSerialNumber/ { split($0, line, """); printf("%s", line[4]); }'
- ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformUUID/ { split($0, line, """); printf("%s", line[4]); }'
- ifconfig en0 | awk '/ether /{print $2}' (ottieni l'indirizzo MAC)
- squadra sconosciuta ("x1ex72x0a"), utilizzato nei campioni precedenti

Prima dell'hashing, al valore restituito viene aggiunto il carattere "0" o "1", che indica la presenza dei privilegi di root. Questo Identificativo cliente immagazzinato /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, se il codice viene eseguito come root o in ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML in tutti gli altri casi. Il file viene solitamente nascosto con la funzione _chflags, il suo timestamp viene modificato con il comando touch –t con un valore casuale.

Decrittazione delle stringhe

Come nelle opzioni precedenti, le stringhe vengono crittografate utilizzando AES-256-CBC (chiave esadecimale: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 riempito con zeri e IV riempito con zeri) tramite la funzione CCCcrypt. La chiave è cambiata rispetto alle versioni precedenti, ma poiché il gruppo utilizza ancora lo stesso algoritmo di crittografia delle stringhe, la decrittografia può essere automatizzata. Oltre a questo post, stiamo rilasciando uno script IDA che utilizza l'API Hex-Rays per decrittografare le stringhe presenti in un file binario. Questo script potrebbe aiutare nella futura analisi di OceanLotus e nell'analisi dei campioni esistenti che non siamo ancora stati in grado di ottenere. Lo script si basa su un metodo generico per ottenere argomenti passati a una funzione. Inoltre, cerca le assegnazioni dei parametri. Il metodo può essere riutilizzato per ottenere un elenco di argomenti della funzione e quindi passarlo a un callback.

Conoscere il prototipo della funzione decifrare, lo script trova tutti i riferimenti incrociati a questa funzione, tutti gli argomenti, quindi decodifica i dati e inserisce testo semplice all'interno del commento all'indirizzo del riferimento incrociato. Affinché lo script funzioni correttamente, è necessario impostarlo sull'alfabeto personalizzato utilizzato dalla funzione di decodifica base64 e definire una variabile globale per contenere la lunghezza della chiave (in questo caso un DWORD, vedere la Figura 4).

OceanLotus: aggiornamento malware per macOS
Figura 4. Definizione della variabile globale key_len

Nella finestra Funzione, puoi fare clic con il pulsante destro del mouse sulla funzione di decrittografia e fare clic su Estrai e decodifica argomenti. Lo script dovrebbe inserire le righe decrittografate nei commenti, come mostrato nella Figura 5.

OceanLotus: aggiornamento malware per macOS
Figura 5. Testo decifrato inserito nei commenti

In questo modo, le stringhe decriptate vengono comodamente raggruppate nella finestra IDA. xrif per questa funzione, come mostrato nella Figura 6.

OceanLotus: aggiornamento malware per macOS
Figura 6. Xrif alle funzioni f_decrypt

La versione finale dello script può essere trovata su Repository Github.

conclusione

Come già accennato, OceanLotus migliora e aggiorna costantemente il proprio set di strumenti. Questa volta il cybergroup ha perfezionato il malware per colpire gli utenti Mac. Il codice non è cambiato molto, ma poiché molti utenti Mac ignorano i prodotti di sicurezza, proteggere il malware dal rilevamento è di secondaria importanza.

I prodotti ESET hanno già rilevato questo file al momento dell'indagine. Poiché la libreria di rete utilizzata per la comunicazione C&C è ora crittografata su disco, non è ancora noto l'esatto protocollo di rete utilizzato dagli aggressori.

Indicatori di compromesso

Sono disponibili anche indicatori di compromesso e attributi MITRE ATT&CK GitHub.

Fonte: habr.com

Aggiungi un commento