Vi serve il cloud computing? Iniziate subito

La botnet NoaBot basata su Mirai colpisce in men che non si dica

Stiv Kupchik

scritto da

Stiv Kupchik

January 10, 2024

Stiv Kupchik

scritto da

Stiv Kupchik

Stiv Kupchik svolge il ruolo di Security Researcher Team Lead in Akamai. I suoi progetti di ricerca ruotano intorno ai componenti interni dei sistemi operativi, alla ricerca sulle vulnerabilità e all'analisi dei malware. Ha presentato la sua ricerca in occasione di conferenze come Black Hat, Hexacon e 44CON. Oltre ad essere un esperto di cybersicurezza, Stiv ha conseguito anche una laurea in fisica.

NoaBot è un'altra botnet basata su Mirai. Mirai è una botnet wormable che prende di mira i dispositivi IoT (Internet of Things) basati su Linux.

Analisi riassuntiva

  • I ricercatori della sicurezza di Akamai hanno scoperto una nuova campagna di crypto-mining, che è attiva fin dall'inizio del 2023.

  • Il malware si diffonde tramite il protocollo SSH utilizzando una botnet Mirai personalizzata, che è stata modificata dai criminali.

  • Le funzionalità della nuova botnet (NoaBot) includono un self-spreader wormable e una backdoor con chiave SSH per scaricare ed eseguire file binari aggiuntivi o per diffondersi su nuove vittime.

  • Una versione modificata del miner XMRig viene lanciata come parte dell’attacco. Il miner offusca la sua configurazione e utilizza anche un mining pool personalizzato per evitare di esporre l'indirizzo del portafoglio utilizzato dal miner.

  • Akamai ha trovato prove che collegano la botnet al worm P2PInfect, scoperto da Unit 42 nel luglio 2023.

  • L'offuscamento del malware e il codice personalizzato mostrano un elevato livello nella sicurezza delle operazioni, che, di solito, indica criminali professionisti, ma la denominazione dei file binari del malware e alcune delle sue stringhe incluse sono alquanto infantili. Tutto ciò ne complica l'attribuzione.

  • Abbiamo osservato più di 800 diversi IP di attacco nel 2023, diffuso in modo uniforme in tutto il mondo.

  • Akamai ha pubblicato indicatori di compromissione (IOC), query, firme e script da poter utilizzare per testare l'infezione.

Introduzione

NoaBot è un'altra botnet basata su Mirai. Mirai è una botnet wormable che prende di mira i dispositivi IoT (Internet of Things) basati su Linux e viene utilizzata per sferrare attacchi DDoS (Distributed Denial-of-Service). La botnet Mirai originale è stata identificata nel 2016, ma il suo codice sorgente è stato reso pubblicosolo recentemente e molte delle sue varianti si possono osservare oggi.

Il primo rilevamento della campagna NoaBot da parte di Akamai è avvenuto all'inizio del 2023. Da allora, abbiamo osservato due evoluzioni del malware, che sono costituite da ulteriori offuscamenti o da un cambiamento dei domini C2 (Command and Control) e del mining pool (Figura 1). Inoltre, abbiamo osservato numerosi incidenti che lanciano campioni del worm P2PInfect, il che fa pensare che le due campagne siano correlate.

Grafico dell'attività del malware nel tempo. Il grafico inizia un po' prima di gennaio 2023 e finisce un po' dopo novembre 2023. Figura 1. L'attività del malware Noabot nel tempo

La botnet

La botnet NoaBot presenta la maggior parte delle funzionalità della botnet Mirai originale (come un modulo di scansione e un modulo di attacco, che nasconde il relativo nome del processo, ecc.), ma mostra anche molte differenze rispetto al codice sorgente originale della botnet Mirai. Innanzitutto, il modulo di diffusione del malware è basato sul protocollo SSH, pertanto non è basato su Telnet come Mirai.

Il modulo di scansione SSH sembra essere personalizzato e risulta alquanto insolito: una volta stabilita una connessione, la botnet invia la stringa "hi" e termina la connessione (Figura 2). La rapida interruzione della connessione ha senso nel contesto di un modulo di scansione poiché non è necessario mantenere la connessione aperta solo per verificare che esista. Allora perché preoccuparsi di inviare la stringa "hi"? Mistero.

Uno screenshot della schermata del pacchetto Wireshark per il pacchetto SSH con la stringa "hi". Figura 2. Il pacchetto SSH con la stringa "hi". Non si tratta di un valido pacchetto SSH, pertanto Wireshark lo segnala come formato in modo errato.

Un'altra stranezza del malware è il testo del brano incorporato. I primi campioni della botnet presentano il testo del brano "Who's Ready for Tomorrow" di Rat Boy e IBDY (Figura 3). Per quanto ne sappiamo, questo testo non ha alcuno scopo. Nelle versioni successive, questo testo non compare.

Decompilazione IDA del testo del brano incorporato nel campione della botnet. Figura 3. Testo del brano incorporato che non sembra avere scopo.

Altre differenze rispetto alla botnet Mirai riguardano il fatto di utilizzare un diverso dizionario delle credenziali per il suo modulo di scansione SSH e di includere molte funzionalità post-violazione, come l'installazione di una nuova chiave autorizzata SSH come backdoor per scaricare ed eseguire file binari aggiuntivi o per diffondersi su nuove vittime (Figura 4).

Decompilazione dello switch case dei vari comandi post-infezione supportati dalla botnet. Figura 4. Switch case di comando della botnet

Inoltre, a differenza della botnet Mirai, che, di solito, viene compilata in GCC (almeno secondo il suo codice sorgente e la guida dell'autore), la botnet NoaBot viene compilata in uClibc, che sembra cambiare il modo con cui i motori dell'antivirus rilevano il malware. Mentre altre varianti della botnet Mirai vengono solitamente rilevate con una firma Mirai, le firme dell'antivirus della botnet NoaBot fanno parte di un modulo di scansione SSH o di un trojan generico (Figura 5).

Anche il malware viene compilato in modo statico e privato di qualsiasi simbolo, il che, insieme al fatto di non essere compilato in modo standard, ha reso molto più difficile eseguire il reverse engineering del malware.

Inoltre, recenti campioni della botnet hanno presentato stringhe offuscate anziché salvate come testo in chiaro. Ciò ha reso più difficile estrarre i dettagli dal file binario o esplorare le parti del disassemblaggio, tuttavia eseguire il reverse engineering della codifica è stato semplice e non complesso. 

Inoltre, abbiamo osservato l'aggiunta di argomenti della riga di comando nel tempo, di cui il più interessante è stato il flag "noa", che ha reso l'installazione della botnet un metodo di persistenza sotto forma di una voce del crontab da eseguire dopo un riavvio.

Casualmente, sembra che questo flag sia stato frequentemente usato in rete poiché alcuni rilevamenti dell'antivirus per i campioni della botnet presentavano il prefisso "Noa-".

Le operazioni di post-violazione, come mostrato in Figura 4, sono un esempio di un'altra evoluzione e non erano presenti nei primi campioni da noi esaminati.

Sinistra: rilevamenti del NoaBot su VirusTotal. La maggior parte dei rilevamenti viene visualizzata come "Trojan.Linux.Generic" o "SSHScan" Destra: rilevamenti di un campione della variante Mirai su VirusTotal. La maggior parte dei rilevamenti cita la variante Mirai nello specifico. Figura 5. confronto tra i rilevamenti del NoaBot (sinistra) e di un'altra variante Mirai (destra)

Il miner e perché non riusciamo a trovare l'indirizzo del suo portafoglio

Il miner stesso è molto meno complicato. Si tratta del miner XMRig standard, anche se è stato anch'esso autocompilato e i criminali hanno aggiunto alcuni codici prima della sua esecuzione per estrarre la configurazione di mining invece di fornirla tramite una riga di comando o di salvarla all'interno del file binario come testo in chiaro (Figura 6).

Decompilazione della funzione principale del miner. Inizia con una serie di chiamate di funzioni e prosegue con vari segnali. Figura 6. La funzione principale del miner

Possiamo notare che esistono altre chiamate di funzioni prima della chiamata della funzione che consente di costruire la configurazione XMRig. Se l'operazione riesce, il miner termina la sua attività, altrimenti accede alla sua logica XMRig standard (potete confrontare la decompilazione riportata qui sopra con l'effettivo codice sorgente XMRig). Perché noi come ricercatori ci preoccupiamo della configurazione XMRig? Perché, di solito, contiene dettagli sul mining pool a cui è collegato e sull'indirizzo del portafoglio necessario per ricevere i pagamenti del mining. Recuperando l'indirizzo del portafoglio e monitorando i pagamenti in esso ricevuti (di solito, tramite i pool pubblici), possiamo stimare quanto sia redditizio il cryptomining.

Questa volta, tuttavia, i criminali sono stati un passo avanti a noi. Quindi, esaminiamo in dettaglio come costruire la configurazione. Nel codice XMRig open source, i miner possono accettare le configurazioni in uno dei due modi disponibili: tramite la riga di comando o le variabili di ambiente. Nel nostro caso, i criminali hanno scelto di non modificare il codice XMRig originale, aggiungendo, invece, alcune parti prima della funzione principale. Per bypassare la necessità di aggiungere argomenti della riga di comando, ossia un indicatore di compromissione (IOC) e addetti alla sicurezza, i criminali hanno fatto sostituire al miner la sua riga di comando (in termini tecnici, hanno sostituito argv) con argomenti più "significativi" prima di passare il controllo al codice XMRig. La botnet esegue il miner con (almeno) un argomento che richiede di stampare i suoi registri.

Prima di sostituire la sua riga di comando, tuttavia, il miner deve costruire la sua configurazione. Innanzitutto, copia gli argomenti di base, che sono memorizzati con testo in chiaro, ossia il flag rig-id, che identifica il miner con tre lettere casuali, i flag dei thread e un segnaposto per l'indirizzo IP del pool (Figura 7).

Stranamente, poiché le configurazioni sono caricate tramite i registri xmm, l'IDA perde i primi due argomenti caricati, che sono il nome del file binario e il segnaposto IP del pool.

Decompilazione della costruzione del nuovo argv per il miner. Carica gli offset delle stringhe di configurazione, quindi assegna il nuovo array di una stringa e lo copia in un loop. Figura 7. Copia della configurazione di un miner di base

Successivamente, il miner decrittografa il nome di dominio del pool. Il nome di dominio viene memorizzato e crittografato in pochi blocchi di dati, a loro volta decrittografati tramite le operazioni XOR. Anche se il codice XMRig può funzionare con un nome di dominio, i criminali hanno deciso di aggiungere un altro passaggio, implementando la propria funzione della risoluzione DNS. Comunicando direttamente con il server DNS di Google (8.8.8.8), i criminali analizzano la sua risposta per risolvere il nome di dominio in un indirizzo IP.

Anche l'ultima parte della configurazione è crittografata in modo simile e la passkey consente al miner di connettersi al pool. Nel complesso, la configurazione totale del miner risulta simile alla seguente:

<miner_binary_name> -o <pool_ip> --rig-id <random_id> --threads <cpus> –pass espana*tea

Avete notato che manca qualcosa? Esatto. Manca l'indirizzo del portafoglio.

Riteniamo che i criminali abbiano deciso di eseguire il proprio pool privato invece di un pool pubblico, eliminando, pertanto, la necessità di specificare un portafoglio (il loro pool, le loro regole!). Tuttavia, nei nostri campioni, abbiamo osservato che i domini del miner non sono stati risolti con il DNS di Google, pertanto, non possiamo dimostrare la nostra teoria né estrarre altri dati dal pool, poiché i domini di cui disponiamo non sono più risolvibili. Di recente, non abbiamo osservato problemi relativi al miner, pertanto i criminali potrebbero aver deciso di dedicarsi a prati più verdi.

La botnet Mirai è troppo vecchia e si è arrugginita

Tra gli incidenti più recenti, abbiamo osservato anche campioni del worm P2PInfect peer-to-peer, che si auto-replica ed è stato scritto in Rust. Anche se il worm P2PInfect è stato osservato per la prima volta a luglio 2023, abbiamo registrato fin da gennaio 2023 alcune attività della botnet NoaBot, che ha quindi depredato un po' il worm P2PInfect. Perché passare dalla botnet Mirai a qualcos'altro? Qualcosa persino di personalizzato? Non abbiamo una risposta certa, ma una serie di ipotesi.

Innanzitutto, perché eseguire il reverse engineering di un codice personalizzato è più difficile rispetto ad un codice riqualificato perché è stato modificato. In secondo luogo, i criminali sembrano tecnologicamente avanzati, pertanto potrebbero provare da soli a sviluppare il malware per curiosità o per noia (oppure per entrambe le motivazioni). Infine, poiché il worm P2PInfect prende di mira il server Redis, può utilizzare semplicemente strumenti diversi per scopi diversi.

Come possiamo sapere che si tratta degli stessi criminali e non di una qualche forma di collaborazione? Non ne siamo sicuri al 100%, ma ci siamo quasi. Tutto si spiega con la professionalità tecnica alla base del malware, combinata con il livello di maturità di un adolescente in termini di battute, tra cui l'inserimento di parole volgari all'interno del nome del miner, l'integrazione di testi di musica pop nei file binari del malware e l'invio della stringa "hi" durante la ricerca di porte aperte. 

Il worm P2PInfect si basa su questa tradizione: sembra uno strumento sofisticato, ma utilizza un socket Unix denominato "NunzombiE" (Figura 8). Mentre NunzombiE viene offuscato e decodificato durante il runtime, il worm presenta anche stringhe incorporate per "fast_vuln_file" e "slow_vuln_file", ossia stringhe perfettamente legittime da contenere un file eseguibile senza indicatori di allarme.

13904 socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0) = 3 13904 bind(3, {sa_family=AF_UNIX, sun_path=@"NunzombiE"}, 12) = 0 Figura 8. Il comando strace del worm P2PInfect che crea un socket Unix denominato NunzombiE

Cronologia delle vittime

849 diversi indirizzi IP di origine hanno attaccato i nostri honeypot nel 2023. Guardando alla loro dislocazione geografica, possiamo notare una distribuzione alquanto uniforme delle loro attività in tutto il mondo. Questo dato ha senso nel nostro caso poiché il malware è wormable, pertanto ogni nuova vittima diventa un criminale a sua volta. Tuttavia, un solo hotspot di attività si è distinto particolarmente, in Cina, rappresentando quasi il 10% di tutti gli attacchi da noi osservati nel 2023 (come evidenziato nella Figura 9).

Una mappa termica geografica delle origini degli attacchi NoaBot. Si registrano livelli uniformi di attività in Europa, negli Stati Uniti, in Sud America e Asia. L'unica area in cui si nota un incremento dei livelli di attività è la parte centrale della Cina. Figura 9. Mappa termica della geolocalizzazione globale delle origini degli attacchi NoaBot

Mitigazione, rilevamento, emulazione

Il metodo del movimento laterale utilizzato dal malware impiega gli attacchi al dizionario delle credenziali SSH.

La restrizione dell'accesso SSH arbitrario alla rete diminuisce notevolmente il rischio di infezione. Inoltre, l'utilizzo di password complesse (non predefinite né generate in modo casuale) rende la rete più sicura poiché il malware utilizza un elenco base di password semplici da indovinare. Abbiamo condiviso i set di credenziali utilizzati dal malware nel nostro archivio GitHub.

Non c'è molto da dire sul rilevamento del malware, oltre alla ricerca dei nomi dei suoi file binari. Viene eseguito da una cartella generata in modo casuale nella directory /lib, quindi i nomi dei processi sono probabilmente l'elenco del percorso. È anche possibile rilevare il suo processo cron, se installato. Un file CSV degli IOC è anche disponibile nel nostro archivio, nonché alcune firme YARA per il miner.

Se desiderate testare il vostro ambiente relativamente allo spreader SSH della botnet, abbiamo creato un file di configurazione per Infection Monkey, la nostra piattaforma di emulazione delle attività dei criminali open-source (nell'Appendice, abbiamo incluso una breve spiegazione su come utilizzare Infection Monkey). Tenete presente che, poiché il malware utilizza tantissime credenziali, sarebbe impossibile per noi testarle tutte (il malware non ha problemi di tempo o denaro, ma noi sì). Abbiamo quindi deciso di includere le credenziali più comuni nella configurazione. Se desiderate includere altre (o diverse) credenziali, potete aggiungerle liberamente a questa configurazione e inserire le vostre modifiche.

Questa configurazione di Infection Monkey aggiunge anche una stringa nascosta che causa l'attivazione del payload dell'agente di Monkey da parte delle nostre firme YARA, quindi potete usarla per testare anche questo rilevamento.

Una volta completato il test del vostro ambiente, Infection Monkey crea un rapporto di tutti i sistemi che è riuscito a violare. Potete usare anche il suo plug-in di cryptojacking se desiderate simulare l'attacco ad un livello successivo e testare credenziali più complesse. 

Riepilogo

Apparentemente, la botnet NoaBot non è una campagna molto sofisticata, ma "solo" una variante della botnet Mirai e un cryptominer XMRig. Tuttavia, gli offuscamenti aggiunti al malware e le modifiche apportate al codice sorgente originale danno un quadro molto diverso delle funzionalità dei criminali. Nonostante le loro competenze tecniche, i criminali sembra utilizzare denominazioni molto semplici (un socket Unix denominato "NunzombiE", ad esempio), che persistono anche in vari file binari e campioni del malware. Abbiamo usato questa caratteristica per associare la botnet NoaBot con il worm P2PInfect e, forse, questo indizio di rilevamento verrà confermato nelle future campagne di malware.

Appendice: Utilizzo di Infection Monkey per il test dell'ambiente

  1. Installate Infection Monkey in base al vostro sistema operativo:

    1. Windows

    2. Linux

    3. Docker

  2. Seguite le istruzioni di configurazione.

  3. Scaricate il plug-in dell'exploiter SSH dalla pagina dei plug-in nell'interfaccia utente di Infection Monkey.

Schermata del plug-in di Infection Monkey. Presenta tre schede relative ai plug-in disponibili, ai plug-in installati e ai nuovi plug-in caricati. La pagina si trova nella scheda relativa ai plug-in disponibili. Figura 10. Schermata del plug-in di Infection Monkey. Con la barra di ricerca, è possibile cercare il plug-in dell'exploiter SSH e scaricarlo.
  1. Importate il file di configurazione per emulare la botnet NoaBot.

Schermata di configurazione di Infection Monkey Island. Sono disponibili una sezione degli exploiter e un elenco degli exploiter consentiti. Figura 11. Schermata di configurazione di Infection Monkey. È possibile importare la configurazione fornita premendo il pulsante corrispondente.
  1. Configurate le vittime della simulazione dell'attacco nella scheda "Network Analysis" (Analisi di rete) sulla pagina di configurazione.

  2. Eseguite Infection Monkey.

  3. Visitate la pagina della mappa per osservare l'attacco. 

  4. Se, ad un certo punto, desiderate interrompere la simulazione, potete premere il pulsante "Kill All Monkeys" (Uccidi tutte le scimmie) per terminare l'attacco.



Stiv Kupchik

scritto da

Stiv Kupchik

January 10, 2024

Stiv Kupchik

scritto da

Stiv Kupchik

Stiv Kupchik svolge il ruolo di Security Researcher Team Lead in Akamai. I suoi progetti di ricerca ruotano intorno ai componenti interni dei sistemi operativi, alla ricerca sulle vulnerabilità e all'analisi dei malware. Ha presentato la sua ricerca in occasione di conferenze come Black Hat, Hexacon e 44CON. Oltre ad essere un esperto di cybersicurezza, Stiv ha conseguito anche una laurea in fisica.