Anatomia dei cryptominer: come arrestare le botnet di mining
Sommario
Introduzione
Benvenuti nell'ultima parte della nostra serie di blog Anatomia dei cryptominer.
Nel nostro primo post, abbiamo discusso delle componenti fondamentali delle criptovalute, dei relativi attributi e di cosa rende alcune di esse più allettanti di altre per i criminali.
Nella seconda parte, abbiamo analizzato vari esempi di cryptomining che abbiamo scoperto mentre stavano violando diverse topologie di mining.
In questo terzo e ultimo post della serie, andremo ad esplorare due nuove tecniche proattive che possono essere usate per contrastare i cryptominer.
Oltre a questi post del blog, abbiamo pubblicato vari strumenti di analisi che sono disponibili nel nostro archivio.
Tutti sanno che la miglior difesa è l'attacco. A causa della natura distribuita delle campagne di cryptominer, una loro interruzione potrebbe risultare molto difficile da realizzare.
In questo post del blog, vi mostriamo come risolvere questo problema sfruttando la progettazione delle comuni topologie di mining per arrestare in modo efficace il processo di mining. Anche se le tecniche da noi descritte sono state usate per prendere di mira i cryptominer Monero, gli stessi principi si possono applicare anche ad altre criptovalute.
Come arrestare le operazioni dei cryptominer
Quando viene rilevata l'attività di un cryptominer dannoso, è possibile arrestarlo mediante due modi attualmente disponibili:
Richiedere il servizio del pool per bloccare l'account del criminale
Tentare di arrestare altri servizi presenti nell'infrastruttura del criminale per interferire con la campagna
Questi metodi presentano alcuni problemi perché possono diventare alquanto complessi e richiedere molto tempo in quanto si basano su terze parti.
Abbiamo, quindi, trovato un metodo migliore.
Abbiamo sviluppato due tecniche sfruttando le topologie di mining e le policy del pool che ci consentono di ridurre l'efficacia della botnet di un cryptominer fino ad arrestarla completamente, forzando, quindi, il criminale ad apportare cambiamenti radicali alla sua infrastruttura o, persino, ad abbandonare l'intera campagna.
Entrambe le tecniche sfruttano le comunicazioni Stratum in modo da bloccare i componenti critici come proxy o wallet che sono correlati agli account interessati dall'operazione di mining.
Da 3,3 milioni a zero
Abbiamo preso di mira l'operazione di un cryptominer dannoso che è attiva da sei anni. Bloccando il proxy di mining del criminale, un point of failure fondamentale nella topologia di mining, siamo riusciti a ridurre il suo hashrate da 3,3 milioni di hash al secondo fino ad azzerarlo del tutto (Figure 1).
Come i criminali stavano ricavando profitti da questa operazione, altrettanto facilmente siamo riusciti a fermare il potenziale ricavo annuo del criminale nel giro di pochi secondi. Tramite un semplice portatile, abbiamo fatto perdere all'operatore del cryptominer un profitto annuo di 26.000 dollari con una drastica riduzione dell'hashrate.
Il video riportato in Figura 2 mostra questa tecnica, che abbiamo denominato "bad shares", in cui la vittima di un cryptominer è connessa ad un proxy di mining dannoso. Grazie a un metodo denominato "bad shares", siamo riusciti a bloccare il proxy di mining sulla rete, arrestando l'esecuzione del mining e riducendo l'utilizzo della CPU della vittima dal 100% allo 0%.
Figura 2. Applicazione della tecnica "bad shares" nella nostra configurazione di prova
Se non potete batterli, arrestateli
Il cryptomining eseguito tramite un pool si basa sull'invio di validi valori hash, denominati share. Per generare ricavi, un cryptominer deve inviare gli share al pool di mining. Quando riceve uno share, il pool di mining verificato il risultato dell'hash e la sua difficoltà.
La verifica degli share è una delle attività più complesse che deve gestire il server del pool, specialmente nei casi di share non validi. Come con ogni cosa che ci circonda nella nostra vita, è possibile commettere errori; ad esempio, un malfunzionamento dell'hardware potrebbe condurre all'invio di valori share errati al pool.
La gestione degli share non validi utilizza un numero elevato di risorse, pertanto i pool devono proteggersi dalla possibilità di crollare a causa dell'invio di enormi volumi di share non validi. Pertanto, se uno share inviato non supera la verifica del server, la maggior parte dei pool applicherà una sanzione al miner, che, di solito, viene arrestato temporaneamente.
Questa interazione può risultare molto interessante quando si tenta di arrestare un'operazione di mining dannosa. Se possiamo far arrestare i miner del criminale (ossia, le vittime) da parte di un nodo di back-end o un pool, possiamo fermare lo sfruttamento delle risorse del cryptominer e, fondamentalmente, "liberare" le vittime.
Nelle sezioni seguenti, andremo a dimostrare questo concetto prendendo di mira due campagne di mining che abbiamo esplorato in precedenza, ciascuna delle quali presenta una diversa topologia di mining: un proxy di mining e una connessione diretta ad un pool pubblico.
Utilizzo del metodo "bad shares" per arrestare il proxy di mining di un criminale
Una delle topologie di mining più comunemente utilizzate dai cryptominer dannosi è il proxy di mining (Figura 3). Questa configurazione migliora la privacy nascondendo sia l'indirizzo del back-end che quello del wallet dei criminali, che così proteggono le loro identità, riducendo, al contempo, la loro tracciabilità all'interno della rete.
I proxy di mining pongono particolari problemi per il rilevamento della rete poiché "nascondono" il pool del sistema preso di mira a cui il miner si connette, che, di solito, viene rilevato tramite un'ispezione della rete. Inoltre, nascondono l'indirizzo del wallet, riducendo ulteriormente la superficie rilevabile del miner. Tuttavia, abbiamo scoperto che i proxy di mining possono risultare un "tallone di Achille" per i cryptominer.
Quando si esegue il mining tramite un proxy, tutte le vittime sono connesse ad un solo server, pertanto se si interferisce con il proxy si può interrompere completamente l'operazione di mining. Abbiamo sviluppato una tecnica che ci consente di fare proprio questo.
L'idea è semplice: se connettiamo un proxy dannoso come un miner, possiamo inviare risultati non validi relativamente al processo di mining ("bad shares"), i quali, riuscendo a bypassare la verifica del proxy, verranno inviati al pool. Una serie consecutiva di "bad shares" causa, alla fine, il blocco del proxy, arrestando effettivamente le operazioni di mining per l'intera botnet di cryptomining.
Comunicare con il proxy
Il cryptominer deve essere prima connesso al proxy tramite il metodo di accesso Stratum. Se non è stata impostata un'altra configurazione, il miner si identifica come x per impostazione predefinita nel server proxy XMRig (Figura 4).
Se la connessione riesce, è presente un listener all'estremità del proxy. Possiamo garantire che si tratta effettivamente di un proxy di mining analizzando la risposta: una risposta valida sarà costituita da un documento JSON conforme al protocollo Stratum e il risultato sarà un processo.
Anche se il processo di mining completo è complesso (come descritto nella guida Da zero a Monero), creare uno share personalizzato è relativamente semplice poiché richiede solo l'estrazione di alcuni valori dalla risposta del proxy: id di lavoro, id di processo e nicehash nonce. Questi tre valori sono necessari per tenere traccia di uno specifico processo di mining, pertanto, se vogliamo far accettare al proxy i nostri "bad shares" dobbiamo compilare questi campi in modo corretto (Figura 5).
Dopo aver ricevuto uno share da un miner, il proxy lo inoltra al pool praticamente così com'è, con un'unica differenza fondamentale: inviandolo dall'indirizzo del wallet del criminale. Ecco perché non potremmo mai conoscere il wallet o altre informazioni sull'account del criminale o sul pool proveniente dal cryptominer di esempio.
XMRogue
Infiltrarsi nella botnet del cryptominer come una delle sue vittime non è difficile. Di solito, non sono richieste autorizzazioni speciali e, in molti casi, vengono utilizzate applicazioni standard quali XMRig come miner e XMRig-proxy come proxy di mining,
il che ci ha portato a sviluppare XMRogue. XMRogue è uno strumento che consente di impersonare un miner, connettersi ad un proxy di mining, inviare "bad shares" consecutivi e, infine, bloccare il proxy di mining sul pool (Figura 6).
Un'importante considerazione riguarda la verifica degli share al livello del proxy: poiché i nostri "bad shares" vengono inoltrati al pool dal proxy, quest'ultimo ha l'opportunità di identificarli e di escluderli.
Ad esempio, il famoso XMRig-proxy verifica il valore nicehash nonce fornito con il processo e la difficoltà del risultato. Se il valore nonce o la difficoltà non sono corretti, il "bad share" non verrà inoltrato al pool di back-end. In Figura 7, viene illustrato il processo di verifica all'interno del codice, in cui vengono ignorati gli share con hash a bassa difficoltà o i valori nicehash errati.
Possiamo superare queste verifiche analizzando la richiesta del processo e creando attentamente il risultato di un processo "errato" che viene, invece, considerato valido dal proxy, forzandolo ad inoltrare i nostri share al pool.
Mettere alla prova la teoria
Per mettere alla prova la nostra tecnica, abbiamo scelto di prendere di mira una delle campagne di mining identificate nella seconda parte di questa serie. Siamo riusciti ad estrarre gli indirizzi di tutti i proxy di mining utilizzati dalla campagna prescelta, che ci fornisce una serie di informazioni alquanto utili. Ad esempio, possiamo vedere che il proxy centrale del criminale (denominato in modo originale "proxy") ha ricevuto la massima valutazione da Nanopool, che ne indica un utilizzo diffuso (Figura 8).
Questo proxy genera 3 milioni di hash al secondo, che equivale ad un ricavo di circa 3 dollari all'ora o di 26.000 all'anno. Prendendo di mira questo proxy con XMRogue, siamo riusciti a bloccarlo sul pool e a fermare il mining di tutte le vittime ad esso connesse. Se esaminiamo l'hashrate del proxy, possiamo vedere che si è ridotto fino ad azzerarsi (Figura 9).
Se consideriamo l'impatto di XMRogue sull'intera campagna del criminale, possiamo notare una notevole diminuzione della sua redditività. Quando l'abbiamo documentata per la prima volta, questa campagna aveva generato quasi 50.000 dollari all'anno. Dopo aver interrotto e reso inutilizzabile la campagna, i ricavi annui che aveva generato sono diminuiti del 76% passando a 12.000 dollari. Prendendo di mira ulteriori proxy, i ricavi avrebbero potuto potenzialmente azzerarsi. Questo tipo di impatto potrebbe facilmente costringere i criminali ad abbandonare la loro campagna per sempre o a correre il rischio di venire identificati se le modifiche da loro apportate dovessero venire monitorate.
Utilizzo di altre policy del pool di mining
I criminali non sempre utilizzano un proxy. In molti casi, le vittime si connettono direttamente al pool, pertanto la tecnica precedente non è applicabile. L'invio di "bad shares" blocca semplicemente il nostro indirizzo IP sul pool, senza influire sull'operazione di mining.
Quando abbiamo ispezionato il codice sorgente del pool di mining, ci è venuta in mente un'altra opzione: prendere di mira l'indirizzo del wallet. Mentre la policy dei "bad shares" precedente prendeva di mira gli indirizzi IP del miner, abbiamo identificato un'altra policy che viene applicata al livello del wallet: il pool blocca l'indirizzo del wallet per un'ora se presenta più di 1.000 nodi di lavoro.
Se utilizza un proxy di mining, un criminale può incorporare il proprio indirizzo del wallet esclusivamente sul server proxy, consentendogli di camuffarlo in modo efficace. Tuttavia, nei casi in cui viene eseguito il mining diretto, l'indirizzo del wallet deve essere presente sul computer della vittima per poterlo estrarre.
Bloccare il criminale in questo caso è semplice: dobbiamo semplicemente inviare più di 1.000 richieste di accesso contemporaneamente tramite il wallet del criminale, che così verrà bloccato dal pool. Questa tecnica è stata aggiunta come modalità di operazione allo strumento XMRogue.
Per illustrare questa idea, abbiamo usato un'altra campagna che utilizza il pool pubblico MoneroOcean. Lo stato iniziale della campagna era pari ad un hashrate di 22 kH/s (Figura 11). Questa campagna è molto più piccola di quella discussa sopra, ma la tecnica in sé copre una gamma più ampia di configurazioni di campagne di cryptomining.
Dopo aver lanciato il nostro script, che, immediatamente, avvia migliaia di accessi, abbiamo visto precipitare il valore del mining, se non bloccarsi completamente (Figura 12).
Più grande è la rete, più superficiale è la cattura
Questa tattica potrebbe interrompere più operazioni di mining, ma non è una soluzione permanente. Una volta bloccate le diverse connessioni di accesso, l'hashrate della campagna è stato ripristinato (Figura 13).
Riepilogo
Le tecniche descritte sopra mostrano come gli addetti alla sicurezza possono arrestare in modo efficace campagne di cryptominer dannosi senza interrompere il funzionamento legittimo del pool sfruttando le policy corrispondenti. Un miner legittimo è in grado di riprendersi rapidamente da questo tipo di attacco perché riesce a modificare facilmente il proprio indirizzo IP o il proprio wallet a livello locale.
Questa attività sarebbe molto più difficile da eseguire per un cryptominer dannoso poiché richiederebbe la modifica dell'intera botnet. Per i miner meno sofisticati, tuttavia, questo sistema di difesa potrebbe disattivare completamente la botnet.
Conclusione della serie
Questo post conclude la nostra serie Anatomia dei cryptominer, in cui abbiamo descritto gli elementi fondamentali del cryptomining e abbiamo esplorato la mentalità dei criminali tramite la ricerca di campagne attive in cui sono implementate diverse topologie di mining.
Riteniamo che la minaccia dei cryptominer continuerà a crescere nel tempo, tuttavia, ora possiamo contrastare e interrompere le attività dei criminali, rendendo molto più difficile monetizzare i cryptominer in modo efficace.