Dark background with blue code overlay
Blog

Una nuova evoluzione del Kinsing | Blog Akamai

Evyatar Saias

scritto da

Evyatar Saias

September 16, 2021

Evyatar Saias

scritto da

Evyatar Saias

Evyatar Saias è Security Researcher nel dipartimento Security Intelligence di Akamai. 

Introduzione

Un'enorme e persistente botnet di crypto-mining sta infettando i sistemi su larga scala su Internet. 

La campagna è stata osservata per la prima volta il 16 febbraio 2021 dal team SIRT di Akamai e sembra essere mirata ai sistemi Windows e Linux. Questa botnet ha catturato il nostro interesse perché si è mostrata altamente attiva in varie aree geografiche, incluse Americhe, Europa e Asia. Da allora, la botnet sta operando con lo stesso indirizzo IP di distribuzione (194.38.20.199), senza richiedere la rotazione dopo sei mesi. In precedenza, la campagna aveva avuto come obiettivo solo i computer Linux ma recentemente si è allargata anche ai sistemi Windows.

Infezione dei sistemi Windows

Per infettare i computer Windows, la botnet sfrutta la CVE-2020-14883,una vulnerabilità che interessa le versioni 10,3.6,0.0, 12,1.3,0.0, 12,2.1,3.0, 12.2.1.4.0 e 14.1.1.0.0 di Oracle WebLogic Server. Dopo l'exploit, la botnet consente al criminale di eseguire una RCE (Remote Code Execution) per ottenere il controllo di Oracle WebLogic Server. 

L'infezione inizia facendo scaricare ed eseguire sul computer della vittima un file XML denominato wbw.xml. Sui computer Windows, il file XML viene eseguito tramite la classe ClassPathXmlApplicationContext

Fig. 1) Il computer della vittima scarica ed esegue un file xml remoto tramite la classe ClassPathXmlApplicationContext, CVE-2020-14883 Fig. 1) Il computer della vittima scarica ed esegue un file xml remoto tramite la classe ClassPathXmlApplicationContext, CVE-2020-14883

 

Il file wbw.xml recuperato contiene un comando PowerShell integrato che viene eseguito sul computer della vittima. Il comando è il seguente:

 

Questo comando tenta di scaricare uno script PowerShell denominato "1.ps1"sulla macchina delle vittime utilizzando il metodo System.Net.WebClient.DownloadString . Inoltre, utilizza il flag di bypass Set-ExecutionPolicy per garantire che non venga bloccato nulla e che durante l'esecuzione non venga generato alcun prompt o avviso. 

Fig. 2) Il contenuto del file wbw.xml comprendente un comando PowerShell che scarica uno script PowerShell, denominato 1.ps1, sul computer della vittima Fig. 2) Il contenuto del file wbw.xml comprendente un comando PowerShell che scarica uno script PowerShell, denominato 1.ps1, sul computer della vittima

 

Lo script "1.ps1" scarica quindi un file di crypto-mining eseguibile, denominato xmrig.exe, e un file config.json contenente le informazioni di configurazione che il miner deve utilizzare, ad esempio gli indirizzi del crypto-wallet, gli endpoint del pool di crypto-mining e altre impostazioni di configurazione. Oltre a questo, lo script 1.ps1 contiene anche una variabile $miner_name che memorizza il nuovo nome con il quale verrà rinominato il file eseguibile di crypto-mining, xmrig.exe; in questo caso, xmrig.exe viene rinominato in"sysopdate"e quindi eseguito. 

Fig. 3) Una parte dello script PowerShell 1.ps1 Fig. 3) Una parte dello script PowerShell 1.ps1
Fig. 4) Una parte del file config.json contenente le configurazioni del file eseguibile di crypto-mining, cioè gli endpoint del pool di crypto-mining e gli indirizzi del crypto-wallet. Fig. 4) Una parte del file config.json contenente le configurazioni del file eseguibile di crypto-mining, cioè gli endpoint del pool di crypto-mining e gli indirizzi del crypto-wallet.

 

Lo script "1.ps1" stabilisce la persistenza sul computer della vittima per aggiornare il file config.json e il miner. Esegue questa operazione, sfruttando il file Schtasks.exeche consente di creare, eliminare ed eseguire le attività pianificate su una macchina locale o remota da PowerShell. Ulteriori informazioni sul file SchTasks.exe sono disponibili qui. L'attività pianificata è denominata"Update service for Windows Service"e anch'essa sfrutta ilil flag di bypass ExecutionPolicy per evitare che vengano generati avvisi o prompt durante l'esecuzione, e il flag WindowStyle Hidden per rimanere nascosta.

Fig. 5) Lo script PowerShell 1.ps1 stabilisce la persistenza creando un'attività pianificata chiamata "Update service for Windows Service" per inoltrare gli aggiornamenti al file di configurazione e all'eseguibile di crypto-mining Fig. 5) Lo script PowerShell 1.ps1 stabilisce la persistenza creando un'attività pianificata chiamata "Update service for Windows Service" per inoltrare gli aggiornamenti al file di configurazione e all'eseguibile di crypto-mining

Infezione dei sistemi Linux

La campagna utilizza più CVE per eseguire la RCE e infettare i sistemi Linux. Insieme al malware Kinsing, che contiene un file di crypto-mining, i payload Linux includono anche un Trojan ad accesso remoto (RAT). I servizi presi di mira includono Oracle WebLogic Server, Redis, Apache Solr, PHPUnit e Supervisor XML-RPC.

Anche la campagna sui sistemi Linux sfrutta la vulnerabilità CVE-2020-14883 di Oracle WebLogic Server. Tuttavia, a differenza della versione per Windows, in cui la RCE viene eseguita tramite la classe  ClassPathXmlApplicationContext in Linux la RCE viene implementata mediante la classe FileSystemXmlApplicationContext . Il file XML dannoso è denominato wb.xml. Questo file scarica uno script bash, a differenza del file wbw.xml per Windows che scarica uno script PowerShell.

Fig. 6) Il computer della vittima scarica ed esegue un file xml remoto tramite la classe FileSystemXmlApplicationContext, CVE-2020-14883 Fig. 6) Il computer della vittima scarica ed esegue un file xml remoto tramite la classe FileSystemXmlApplicationContext, CVE-2020-14883
Fig. 7) Il contenuto del file wb.xml, comprendente un comando bash che scarica ed esegue uno script bash, denominato wb.sh, sul computer della vittima Fig. 7) Il contenuto del file wb.xml, comprendente un comando bash che scarica ed esegue uno script bash, denominato wb.sh, sul computer della vittima

 

Sui sistemi Linux, l'infezione ha inizio con l'esecuzione della RCE, utilizzando una qualsiasi CVE tra quelle riportate nella tabella di seguito, per scaricare un file script bash sul computer della vittima.

Fig. 8) Le CVE che vengono sfruttate dalla campagna per infettare le vittime Fig. 8) Le CVE che vengono sfruttate dalla campagna per infettare le vittime

 

Sebbene il nome del file di script bash abbia più varianti, tra cui s.sh , p.sh, sup.sh, d.sh, ex.sh, r.sh, spr.sh, tf.sh o wb.sh questi file fanno praticamente tutti la stessa cosa.

Lo script bash elimina tutte le altre minacce di crypto-mining esistenti nel sistema e disabilita le funzionalità di sicurezza e di accesso. Dopodiché, scarica il malware Kinsing (scritto in Golang), stabilisce la persistenza utilizzando il comando crontab e quindi inizia la sua attività di crypto-mining.

Fig. 9) Una parte dello script bash dannoso che scarica il file di crypto-mining Kinsing sul computer Linux della vittima Fig. 9) Una parte dello script bash dannoso che scarica il file di crypto-mining Kinsing sul computer Linux della vittima

 

Una volta eseguito sul computer, il malware Kinsing crea un secondo processo denominato kdevtmpfsi nella directory /tmp, cioè il file miner xmrig, e lo esegue. Il malware Kinsing monitora costantemente il file kdevtmpfsi per verificare che sia in esecuzione.

Decodifica dell'indirizzo IP del server Command and Control 

Il malware comunica con il server C2 decodificandone l'indirizzo IP mediante una funzione chiamata getActiveC2CUrl. La funzione getActiveC2CUrl utilizza un cifrario a flusso RC4 in dati esadecimali con testo in chiaro XOR e una chiave di testo, entrambi memorizzati all'interno del binario. 

Per la modalità di memorizzazione delle stringhe all'interno del binario Golang,  che prevede che tutte le stringhe statiche siano praticamente concatenate l'una con l'altra, dando luogo a un grande blob di stringhe, la chiave di testo e i dati esadecimali possono essere facilmente nascosti all'interno dell'enorme stringa. Dopo qualche operazione di reverse-engineering della funzione getActiveC2CUrl è possibile individuare la posizione in memoria e la lunghezza della chiave e dei dati esadecimali.

Fig. 10) Posizione nella memoria e visualizzazione della lunghezza dei dati esadecimali del testo in chiaro C2 e della chiave di cifratura. Fig. 10) Posizione nella memoria e visualizzazione della lunghezza dei dati esadecimali del testo in chiaro C2 e della chiave di cifratura.

La funzione getActiveC2CUrl decodifica i dati esadecimali C2 che, insieme alla chiave, vengono elaborati mediante una seconda funzione chiamata RC4. La funzione personalizzata RC4 utilizza la funzione func (c *Cipher) XORKeyStream(dst, src []byte) internamente dal pacchetto RC4 Golang per generare l'indirizzo IP del server C2.

Una volta ottenuti i dati esadecimali C2 e la chiave, la funzione getActiveC2CUrl può essere sottoposta a reverse-engineering e riscritta in Golang per calcolare l'indirizzo IP attivo del server C2.

Fig. 11) La funzione getActiveC2CUrl() viene riscritta in Golang con la chiave e i dati esadecimali C2 ottenuti per generare l'indirizzo IP attivo del server C2. Fig. 11) La funzione getActiveC2CUrl() viene riscritta in Golang con la chiave e i dati esadecimali C2 ottenuti per generare l'indirizzo IP attivo del server C2.

Funzionalità RAT

Il malware Kinsing è dotato di funzionalità di Trojan ad accesso remoto (RAT) disponibili in una funzione denominata doTask() all'interno del binario. La funzione doTask contiene alcune interessanti chiamate di funzione che vengono eseguite in base a un determinato input

  • runTaskWithScan()

  • updateTask()

  • startCmd()

  • execTaskOut()

  • masscan()

  • socks()

  • backconnect()

  • runTaskWithHttp()

  • downloadAndExecute()

 

Una di queste interessanti funzioni è startCmd() che consente di eseguire un comando arbitrario sul computer della vittima.

 

Fig. 12) La funzione doTask(), in una forma decompilata, che mostra le funzionalità RAT del malware. La parte evidenziata, indica la funzione startCmd() integrata che consente l'esecuzione di un comando arbitrario sul computer della vittima. Fig. 12) La funzione doTask(), in una forma decompilata, che mostra le funzionalità RAT del malware. La parte evidenziata, indica la funzione startCmd() integrata che consente l'esecuzione di un comando arbitrario sul computer della vittima.

Comunicazione di Command and Control

Il malware comunica con il C2,185.154.53.140, tramite HTTP.  Invia regolarmente le richieste HTTP C2, riceve le istruzioni da eseguire e fornisce semplici controlli di integrità.

A ogni richiesta http, il computer infetto invia le informazioni C2 sullo stato corrente e le risorse di sistema, cioè numero di core, memoria, sistema operativo, se i privilegi di root sono stati ottenuti o meno, e altro ancora.  Tutti questi parametri vengono forniti al server C2 utilizzando intestazioni HTTP personalizzate.

 Fig. 13) Una richiesta POST inviata da un computer infetto al C2, contenente informazioni sulle risorse di sistema della vittima e sui privilegi ottenuti Fig. 13) Una richiesta POST inviata da un computer infetto al C2, contenente informazioni sulle risorse di sistema della vittima e sui privilegi ottenuti

Un endpoint che il computer infetto richiede costantemente per ricevere istruzioni è  /get. Quando una macchina infetta fa una richiesta GET all'endpoint /get del C2, il malware tenta immediatamente di scaricare nuovi script di shell dannosi dall'IP di distribuzione originale 194.38.20.199.

Fig. 14) Il computer infetto inoltra una richiesta GET all'endpoint /get del C2 e quindi recupera nuovi script di shell dall'IP di distribuzione originale 194.38.20.199 Fig. 14) Il computer infetto inoltra una richiesta GET all'endpoint /get del C2 e quindi recupera nuovi script di shell dall'IP di distribuzione originale 194.38.20.199

 

Gli script bash che vengono scaricati dall'IP di distribuzione originale 194.38.20.199 a seguito dell'esecuzione dell'endpoint /get del C2 sono definiti ph.sh e spre.sh. Questi due file sono diversi dallo script bash dannoso che abbiamo esaminato in precedenza, in quanto hanno uno scopo diverso e contengono vettori di infezione aggiuntivi.


Esaminiamo prima lo script ph.sh che scarica un rootkit chiamato libsystem.so dall'endpoint 194.38.20.199/libsystem.so in aggiunta al malware Kinsing già presente sul computer della vittima. Lo script ph.sh precarica questo rootkit in /etc/ld.so.preload

Fig. 15) Una parte dello script bash ph.sh che precarica il rootkit libsystem.so recuperato in /etc/ld.so.preload Fig. 15) Una parte dello script bash ph.sh che precarica il rootkit libsystem.so recuperato in /etc/ld.so.preload

 

Lo script ph.sh stabilisce inoltre un secondo meccanismo di persistenza, oltre ai processi cron già esistenti precedentemente inseriti dallo script iniziale. Esegue questa operazione, registrando un servizio di sistema che reinfetta periodicamente l'host.

Fig. 16) Una parte dello script bash ph.sh che crea un servizio di sistema per stabilire la persistenza e reinfettare periodicamente l'host. Fig. 16) Una parte dello script bash ph.sh che crea un servizio di sistema per stabilire la persistenza e reinfettare periodicamente l'host.

 

Per ulteriori dettagli sul rootkit libsystem.so installato dallo script ph.sh e sulle sue strutture interne, consultate il blog di Trend Micro che approfondisce l'argomento qui

Il secondo file di script bash che viene recuperato in seguito a una risposta /get da parte dell'endpoint del C2 è spre.sh. Il suo scopo è quello di diffondere l'infezione a host aggiuntivi recuperando le credenziali ssh di tutti gli host a cui la vittima ha accesso esaminando i file ~/.ssh/config , ~/.bash_history e  .ssh/known_hosts. Lo script spre.sh tenterà quindi di utilizzare il protocollo ssh per accedere agli host rilevati, utilizzando le autenticazioni ottenute, e infettare anche loro.

 

Fig. 17) Lo script bash spre.sh diffonde l'infezione ad altri host utilizzando il protocollo ssh e identificando le credenziali ssh in ~/.ssh/config ~/.bash_history e .ssh/known_hosts Fig. 17) Lo script bash spre.sh diffonde l'infezione ad altri host utilizzando il protocollo ssh e identificando le credenziali ssh in ~/.ssh/config ~/.bash_history e .ssh/known_hosts

 

Un altro interessante endpoint C2, a cui la macchina infetta invia richieste di istruzioni, è l'endpoint /mg . Quando il computer infetto invia una richiesta GET all'endpoint /mg, il C2 risponde con alcuni caratteri e la macchina infetta inizierà immediatamente a comunicare con un terzo indirizzo IP, 95.181.179.88, che sembra sia responsabile dei comandi di crypto-minig inviati tramite Http al computer infetto sotto forma di un payload JSON-RPC.

Fig. 18) Il computer infetto invia una richiesta GET all'endpoint /mg del C2 Fig. 18) Il computer infetto invia una richiesta GET all'endpoint /mg del C2

Che cosa fare

Per mitigare queste minacce, il team SIRT di Akamai consiglia di monitorare i processi dei sistemi per rilevare un consumo eccessivo di risorse e attività di rete sospette. Un uso anomalo della CPU per un dato processo può essere un elemento indicativo di un'attività di crypto-mining.

Il team SIRT di Akamai consiglia inoltre di controllare frequentemente i processi cron registrati nei crontab dei sistemi per garantire che tali processi non comunichino con indirizzi IP sconosciuti, una tecnica comune del malware Linux per stabilire la persistenza, a cui la campagna trattata non fa eccezione.

Nei sistemi Windows, vanno utilizzate le stesse accortezze con PowerShell, utilizzando il comando SchTasks.exe/Query per visualizzare eventuali attività pianificate che potrebbero essere state create da questa campagna. È consigliabile controllare anche i processi in esecuzione e assicurarsi che non vi siano processi che riportano il nome kinsing o kdevtmpfsi, per i sistemi Linux, e sysupdate, per i sistemi Windows.

Ove possibile, aggiungete un'autenticazione sicura ai sistemi: le password deboli possono essere forzate in modo semplice. Inoltre, assicuratevi che i servizi comunemente presi di mira dalla campagna in questione, tra cui Oracle WebLogic Server, Redis, Apache Solr, PHPUnit e Supervisor XML-RPC, non siano connessi a Internet se non strettamente necessario, poiché questo riduce notevolmente il rischio di infezione. Ad esempio, se un'istanza Redis viene utilizzata solo da sistemi interni, non è necessario che sia connessa a Internet. 

Il team SIRT di Akamai consiglia inoltre di controllare i sistemi in base agli indicatori di compromissione (IOC) indicati nella sezione IoC riportata di seguito, per verificare che i sistemi non siano già infetti.  È consigliabile , inoltre, applicare regolarmente le patch ai sistemi e seguire le best practice.

Indicatori di compromissione (IOC)

IP

IP

Descrizione

185.154.53.140

Command and Control 

194.38.20.199

Distribuzione di malware 

95.181.179.88

Gestione delle attività di crypto-mining

195.3.146.118

Backup della distribuzione di malware

 

File

SHA-256

Nome

Descrizione

8ca0229fb64e3f1819375cf1daf32104c37c0d0923bdc35cb6bea655ecd1a6a4

s.sh

194.38.20.199/s.sh, script bash per scaricare il malware Kinsing

ede8fdb68d777efcc0538b465d640cbb2c061bd49461f76d65f68c135ff8bbb6

p.sh

194.38.20.199/p.sh, script bash per scaricare il malware Kinsing

0e79ec7b00c14a4c576803a1fd2e8dd3ea077e4e98dafa77d26c0f9d6f27f0c9

d.sh

194.38.20.199/d.sh, script bash per scaricare il malware Kinsing

6e35b5670953b6ab15e3eb062b8a594d58936dd93ca382bbb3ebdbf076a1f83b

spr.sh    

194.38.20.199/spr.sh, script bash per scaricare il malware Kinsing

818179ac928027a5c26c9b13d3d830b7331c3e4c46ba1e305867e3d4accaf3ef

r.sh

194.38.20.199/r.sh, script bash per scaricare il malware Kinsing

56ac2321e481708ea72e2bf7710e66c3455afa729b24f6a6ba9065ae0cca8fb3

ex.sh

194.38.20.199/ex.sh, script bash per scaricare il malware Kinsing

05e5ad89443b58805ae2eb2628d3eef1d6cbcc338bced23f422abe5ce60ff82d

tf.sh

194.38.20.199/tf.sh, script bash per scaricare il malware Kinsing

274b11542fcb30065c4cc0976ce33252ba2812756f7e22f6d80fae1acadf5c4c

wb.sh

194.38.20.199/wb.sh, script bash per scaricare il malware Kinsing

6e25ad03103a1a972b78c642bac09060fa79c460011dc5748cbb433cc459938b

kinsing

194.38.20.199/kinsing, il binario del malware Kinsing

7d31843ce5231c95ce07a609cb4473fe53b95a8d0685df9d666de348d17c69ff

config.json

194.38.20.199/config.json, configurazione json per il miner XMRIG

c38c21120d8c17688f9aeb2af5bdafb6b75e1d2673b025b720e50232f888808a

libsystem.so

194.38.20.199/libsystem.so, un binario rootkit

5e5b5171a95955ecb0fa8f9f1ba66f313165044cc1978a447673c0ac17859170

xmrig.exe

194.38.20.199/xmrig.exe,

miner XMRIG per Windows

49ff0329b9ad42c7fb17e6a2d80b316ed6b759ab5dfd04a5aba42b97225494cf

wbw.xml

194.38.20.199/wbw.xml, file xml che scarica uno script PowerShell per infettare i sistemi Windows

25b545dc3423d5c3c0181f559486643a7097b5fd87b32f0347ed667cbf3fb38e

wb.xml

194.38.20.199/wb.xml, file xml che scarica uno script bash per infettare i sistemi Linux

6b9e23cb675be370a18a0c4482dc566be28920d4f1cd8ba6b4527f80acf978d3

curl-amd64

194.38.20.199/curl-amd64 , binario curl

fecd30cd7802f8ac4137a2d0659b3052411a99d809a5aefb48f8b821905100f3

al.sh

194.38.20.199/al.sh, script bash che arresta il servizio aegis 

cb2ca16246a687b34fa1ba76015cb4aa3b50b4ecca4550478eb580c4725ab48f

cron.sh

194.38.20.199/cron.sh, script bash che aggiorna il crontab

d7cda9e427d0848352a1158c68a2577c1600965fb9dbb32bc1e10af1a442d284

ph.sh

194.38.20.199/ph.sh, script bash che scarica il malware Kinsing e il rootkit libsystem.so

f4c319e43296ab323615ac4bd4b7601991218ecb6d6043b1c040a96f1a33f14f

spre.sh

194.38.20.199/spre.sh, script bash che diffonde l'infezione ad altri host tramite ssh

dd603db3e2c0800d5eaa262b6b8553c68deaa486b545d4965df5dc43217cc839  

kdevtmpfsi

Il processo di crypto-mining di Kinsing



Evyatar Saias

scritto da

Evyatar Saias

September 16, 2021

Evyatar Saias

scritto da

Evyatar Saias

Evyatar Saias è Security Researcher nel dipartimento Security Intelligence di Akamai.