Vai al contenuto principale
BlogSicurezzaBollettino di sicurezza Linode dal 23 al 30 gennaio 2022

Linode Security Digest 23-30 gennaio 2022

Digesto di sicurezza di Linode

Questa settimana ci occuperemo di un nuovo esemplare di malware chiamato Sysjoker e di una guida per l'analisi forense della memoria di Linux. Anche se la guida alla forensics non è completa e certamente non è dettagliata, può essere utile per comprendere le basi di un processo di estrazione e analisi della memoria utilizzando Volatility.

Sysjoker Backdoor

In un recente messaggio di Intezer, gli autori hanno analizzato una nuova backdoor in grado di funzionare su più sistemi operativi. Secondo l'analisi, "Sysjoker" può funzionare su macOS, Linux e Windows. Sysjoker si nasconde come aggiornamento del sistema e utilizza diversi metodi per nascondere e modificare l'indirizzo IP del server di comando e controllo (C2).

È inoltre preoccupante che il campione sia risultato pulito dalle scansioni di VirusTotal, il che potrebbe indicare che la backdoor è abbastanza nuova. Sebbene i metodi che utilizza per infettare un sistema siano diversi sui vari sistemi operativi, una volta che ottiene la persistenza su un sistema, inizia a comunicare con il server C2. Nell'analisi, Intezer afferma di non aver ancora visto un'istruzione di fase successiva dal server C2. Il post suggerisce di utilizzare scanner di memoria per rilevare il malware.

Un altro modo per effettuare l'analisi forense è quello di eseguire il dump della memoria e analizzarla con uno strumento noto come Volatility. Nelle vecchie versioni del kernel Linux, il dump della memoria poteva essere ottenuto copiando la memoria virtuale da /dev/mem utilizzando uno strumento a riga di comando come dd; tuttavia, questo metodo è stato deprecato a causa di potenziali implicazioni per la sicurezza. 

Forensics della memoria di Linux

Possiamo riassumere l'analisi forense come i diversi metodi utilizzati per l'acquisizione delle prove, l'analisi delle prove e la documentazione delle conseguenze di un incidente di sicurezza. Dopo una violazione della sicurezza confermata, di solito viene effettuata un'analisi forense per capire meglio cosa è successo in un sistema compromesso. Esistono numerose fonti di prova che si possono analizzare per fare affermazioni difendibili sull'origine di un incidente; tuttavia, ci limiteremo a fare un'analisi pratica della memoria di un sistema Linux compromesso per dimostrare alcune delle metodologie e degli strumenti che si possono utilizzare.

Memoria

La RAM, per sua natura, è volatile. Per funzionare, richiede un'alimentazione costante e viene resettata a ogni riavvio del sistema. Linux conserva i dati memorizzati nella directory /dev/mem; tuttavia, nelle distribuzioni più recenti è impossibile estrarre gli artefatti dalla memoria utilizzando direttamente questa partizione. Questo perché a partire dal kernel Linux 4.16, un'opzione(CONFIG_STRICT_DEVMEM) viene attivata per impostazione predefinita per impedire l'accesso a questa partizione sensibile. 

Sebbene questo renda più difficile l'acquisizione dell'immagine della memoria, rende anche più difficile per gli avversari (e per gli utenti inesperti) causare danni devastanti al sistema. Un aggressore con accesso root al sistema può utilizzare il dispositivo mem per iniettare codice direttamente nel kernel se questa opzione è disabilitata.

Per questa dimostrazione abbiamo avviato un Linode Debian 9 con l'hostname "forensics" in uno dei nostri data center. Abbiamo configurato il box forensics come un esempio di ambiente di costruzione e analisi. Sebbene non sia necessario eseguire queste operazioni su una macchina esterna, è sconsigliabile manomettere un computer che contiene prove. Ecco le fasi della nostra analisi:

  1. Creare un profilo Volatility per un sistema compromesso utilizzando una macchina con lo stesso sistema operativo e la stessa build/versione del kernel.
  2. Eseguire il dump della memoria con lo strumento scelto (AVML in questa demo).
  3. Ispezionare la memoria scaricata usando il profilo creato per Volatility con l'aiuto dei plugin.

Avvertenze

A scopo dimostrativo utilizzeremo il repository Python 2 di Volatility, a causa dei problemi di compatibilità attualmente in corso con Volatility 3. Siamo consapevoli che il supporto per Python 2 è terminato nel 2020; questa è una dimostrazione dell'uso dello strumento in un ambiente controllato. Se volete seguire la guida, fatelo a vostro rischio e pericolo.

Requisiti

Per impostazione predefinita, Debian 9 Linodes non dispone di alcuni degli strumenti che utilizzeremo in questa dimostrazione. Si consiglia di installarli tutti con il seguente comando prima di procedere con le altre istruzioni:

sudo apt install make git zip dwarfdump linux-headers-$(uname -r) python-pip python-distorm3 python-crypto

Volatilità

Il Volatility Framework è una raccolta completamente aperta di strumenti implementati in Python sotto licenza GNU General Public License per estrarre artefatti digitali da campioni di memoria volatile (RAM).

È importante assicurarsi che venga utilizzato il profilo Volatility corretto quando si analizza un dump di memoria. Un profilo è un file contenente informazioni sulla struttura dei dati di un kernel e sui simboli di debug che possono essere usati per analizzare correttamente un'immagine di memoria. Fortunatamente creare un profilo con Volatility è abbastanza semplice. È anche possibile consultare il repository dei profili di Volatility per alcuni profili precostituiti.

Creare un profilo

Dopo aver installato gli strumenti necessari, possiamo iniziare a costruire il nostro profilo Volatility per la macchina su cui viene eseguito.

1. git clone https://github.com/volatilityfoundation/volatility ~/volatility
2. cd ~/volatility/tools/linux/
3. make
4. zip ~/$(lsb_release -i -s)_$(uname -r).zip ./module.dwarf /boot/System.map-$(uname -r)
5. cp ~/$(lsb_release -i -s)_$(uname -r).zip ~/volatility/volatility/plugins/overlays/linux/
6. python ~/volatility/vol.py --info

La riga iniziale (1) clona il repository di Volatility nella home directory dell'utente. Entrando nella directory (2) ~/volatility/tools/linux, possiamo usare make (3) per ricompilare i moduli del kernel. È importante aver scaricato prima gli header del kernel, altrimenti questo processo potrebbe fallire. 

Il risultato è un modulo.nano. Il comando successivo (4) usa questo modulo per leggere la mappa del sistema da /boot e generare il profilo da usare in Volatility. Possiamo quindi copiare questo profilo (5) nella directory giusta, in modo che Volatility possa utilizzarlo. Infine, per verificare che il nostro profilo sia stato caricato correttamente in Volatility, possiamo eseguire Volatility una volta con il flag info (6). Se tutti i passaggi sono andati a buon fine, dovremmo vedere il nostro profilo personalizzato nella sezione Profili dell'output.

Installazione di un modulo nascosto del kernel

Per questo esempio abbiamo usato HiddenWall per generare un modulo del kernel Linux (LKM) nascosto, l'abbiamo chiamato "cantfindme" e l'abbiamo caricato su un altro Linode Debian 9 con la stessa build/versione del kernel della macchina "forense". Sebbene il modulo sia caricato, non può essere visto quando lsmod o modprobe vengono eseguiti sul sistema: 

Fare clic sull'immagine per ingrandirla.

Acquisizione della memoria

Ci sono ottimi strumenti che si possono usare per fare il dump della memoria in Linux; tuttavia, in questa guida, ci occuperemo di AVML (Acquire Volatile Memory for Linux), dato che LiME viene trattato spesso sul web. AVML è uno strumento di acquisizione della memoria open-source per Linux realizzato da Microsoft. Potete trovare l'ultima versione qui e scaricare il binario sulla macchina da cui volete fare il dump della memoria. Ricordate che il computer da cui si esegue il dump della memoria deve avere la stessa build e versione del kernel/OS del profilo Volatility generato in precedenza.

In uno scenario reale, è importante non manomettere un sistema compromesso per garantire che le prove raccolte siano ammissibili in tribunale. È anche importante non comprimere le immagini quando possibile, perché l'acquisizione bit per bit può fornire dati che un'immagine compressa non può fornire.

Dopo aver scaricato il binario AVML nella home directory, è possibile usare il seguente comando per eseguire il dump della memoria del sistema nella home directory.

sudo ~/avml ~/output.lime

AVML eseguirà il dump della memoria in formato LiME, in modo da poter iniziare la nostra analisi con il profilo Volatility che abbiamo creato. È anche possibile controllare la dimensione del dump per verificare che corrisponda alla RAM totale del dispositivo. Volatility non dovrebbe manomettere il dump della memoria, ma è meglio fare una copia del file e analizzare i dati copiati al posto dell'originale dopo essersi assicurati che i loro hash corrispondano.

Dopo aver scaricato la memoria del box 'pwnd', l'abbiamo trasferita nel box 'forensics' per analizzarla.

Plugin di volatilità

Volatility offre numerosi plugin per aiutare l'analista forense. È possibile trovare un elenco di questi plugin nella loro pagina Github. Utilizzando i plugin di Volatility è possibile ottenere una rapida panoramica dell'immagine della memoria. Il formato dei comandi per l'analisi dell'immagine della memoria è riportato di seguito:

python ~/volatility/vol.py -f <path_to_memory_dump> --profile=<profile>
<plugin_name> <plugin_options>

Ecco l'output del plugin linux_hidden_modules che elenca i moduli del kernel caricati nascosti dall'immagine di memoria:

Fare clic sull'immagine per ingrandirla.

Questo plugin può aiutare a trovare moduli del kernel Linux nascosti che potrebbero essere dannosi. Anche se questi moduli non sono visibili quando si esegue lsmod sul sistema, possono essere rilevati ed estratti da un dump di memoria. È possibile utilizzare il plugin linux_moddump per eseguire il dump dei moduli del kernel specificando il loro nome in un modello regex o specificando l'indirizzo di base del modulo nell'immagine della memoria:

Fare clic sull'immagine per ingrandirla.

Ci sono molte altre cose che si possono fare con la Volatilità e che non possiamo semplicemente trattare in questo post. Sentitevi liberi di lasciare un commento qui sotto per condividere i vostri pensieri e suggerimenti.


Commenti

Lascia una risposta

Il vostro indirizzo e-mail non sarà pubblicato. I campi obbligatori sono contrassegnati da *