Randstorm: le vulnerabilità dei cripto wallet degli anni 2010

I portafogli Bitcoin creati tra il 2011 e il 2015 sulle piattaforme online potrebbero non essere sicuri a causa di una vulnerabilità presente nella libreria utilizzata per la generazione delle chiavi.

Alcuni ricercatori hanno scoperto nella libreria BitcoinJS diverse vulnerabilità che potrebbero esporre alle violazioni i portafogli Bitcoin creati online un decennio fa. Il problema di fondo è che le chiavi private per questi portafogli di criptovaluta, o cripto wallet, sono state generate in modo molto più prevedibile di quanto gli stessi sviluppatori della libreria non si aspettassero.

Vulnerabilità e conseguenze di Randstorm

Partiamo dall’inizio. I ricercatori di Unciphered, una società specializzata nel recupero dell’accesso ai cripto wallet, hanno scoperto e descritto una serie di vulnerabilità nella libreria JavaScript BitcoinJS utilizzata da molte piattaforme di criptovaluta online. Tra questi servizi ce ne sono alcuni molto popolari, in particolare Blockchain.info, ora noto come Blockchain.com. I ricercatori hanno soprannominato questo insieme di vulnerabilità Randstorm.

Nel 2014 le vulnerabilità riscontrate nella libreria BitcoinJS sono state risolte. Tuttavia, il problema interessa anche il prodotto dell’utilizzo di questa libreria: i cripto wallet creati con BitcoinJS all’inizio degli anni 2010 potrebbero non essere sicuri, poiché trovarne le chiavi private è molto più facile del previsto, nonostante il sistema di criptaggio Bitcoin sottostante.

Secondo le stime dei ricercatori, a causa di Randstorm sono potenzialmente a rischio diversi milioni di portafogli, per un totale di circa 1,4 milioni di Bitcoin. I ricercatori ritengono inoltre che il 3-5% dei portafogli considerati potenzialmente vulnerabili agli attacchi, sia effettivamente vulnerabile in situazioni reali. In base al tasso di cambio in vigore al momento della pubblicazione di questo articolo (circa 36.500 dollari per 1 Bitcoin) gli autori degli attacchi in grado di sfruttare Randstorm potrebbero mettere le mani su un bottino del valore di 1,5-2,5 miliardi di dollari.

I ricercatori non si sono limitati a sostenere che le vulnerabilità Randstorm possono effettivamente essere utilizzate per attaccare i portafogli di criptovaluta: hanno anche utilizzato queste vulnerabilità per ripristinare l’accesso a diversi portafogli creati su Blockchain.info prima del marzo 2012. Per motivi etici, tuttavia, hanno evitato di pubblicare il progetto PoC (Proof-of-Concept) dell’attacco, perché avrebbe esposto direttamente al rischio di furto decine di migliaia di portafogli di criptovaluta.

I ricercatori hanno quindi contattato i servizi di criptovaluta online noti per aver utilizzato una versione vulnerabile della libreria BitcoinJS, che a loro volta hanno informato i clienti potenzialmente a rischio di un attacco basato sulle vulnerabilità Randstorm.

La natura delle vulnerabilità Randstorm

Vediamo ora in dettaglio come funzionano in pratica queste vulnerabilità. Al centro della sicurezza di un portafoglio Bitcoin c’è la chiave privata. Come ogni moderno sistema di criptaggio, Bitcoin fa affidamento sul fatto che questa chiave sia segreta e non decifrabile. E, come in ogni moderno sistema di criptaggio, questo comporta l’utilizzo di numeri casuali molto lunghi.

Per assicurare la massima sicurezza dei dati che protegge, inoltre, una chiave privata deve essere il più casuale possibile. Se il numero utilizzato come chiave è prevedibile, qualsiasi malintenzionato informato sulla procedura di generazione della chiave potrà trovarlo ancora più facilmente e rapidamente con un attacco di forza bruta.

La generazione di un numero veramente casuale non è un’operazione semplice e i computer sono inadatti a questo compito, proprio per via della loro natura estremamente prevedibile. Pertanto, in genere otteniamo numeri solo pseudocasuali e per aumentare il livello di entropia (per usare un termine tecnico che indica l’imprevedibilità) durante il processo di generazione delle chiavi ci affidiamo ad alcune funzioni speciali.

Ora torniamo alla libreria BitcoinJS. Per ottenere numeri pseudocasuali “di alta qualità”, questa libreria utilizza un’altra libreria JavaScript denominata JSBN (JavaScript Big Number), in particolare la funzione SecureRandom. Come suggerisce il nome, questa funzione è stata progettata per generare numeri pseudocasuali idonei per il criptaggio. Per aumentare il livello di entropia, SecureRandom si affida alla funzione del browser window.crypto.random.

Ed è proprio qui che nasce il problema: nella famiglia di browser Netscape Navigator 4.x la funzione window.crypto.random era disponibile, ma quando i servizi Web hanno iniziato a utilizzare attivamente la libreria BitcoinJS questi browser erano già obsoleti. Nei browser più diffusi all’epoca (Internet Explorer, Google Chrome, Mozilla Firefox e Apple Safari), invece, la funzione window.crypto.random semplicemente non era stata implementata.

Poiché, purtroppo, gli sviluppatori della libreria JSBN non hanno previsto nessun tipo di controllo o messaggio di errore corrispondente, il passaggio per l’incremento del livello di entropia veniva ignorato dalla funzione SecureRandom e, di fatto, il compito di creare le chiavi private era affidando al generatore di numeri pseudocasuali standard, Math.random.

Questo rappresenta un problema di per sé, perché Math.random non è progettato per il criptaggio. La situazione venne tuttavia ulteriormente peggiorata dal fatto che l’implementazione di Math.random nei browser più diffusi nel 2011-2015, in particolare Google Chrome, conteneva dei bug per cui i numeri prodotti risultavano anche meno casuali del previsto.

A sua volta, la libreria BitcoinJS ha ereditato da JSBN tutti questi problemi. Di conseguenza, le piattaforme che l’hanno utilizzata per generare le chiavi private per i loro portafogli di criptovaluta hanno ottenuto dalla funzione SecureRandom numeri molto meno casuali di quanto gli sviluppatori della libreria non si aspettassero. Essendo generate in modo tanto prevedibile, queste chiavi possono essere facilmente ottenute tramite un attacco di forza bruta, che può così aprire la strada al furto dei portafogli di criptovaluta vulnerabili.

Come accennato in precedenza, non si tratta un pericolo solo teorico: in pratica, il team di Unciphered è stato in grado di sfruttare queste vulnerabilità per ripristinare l’accesso (in altre parole, per violare in modo etico) diversi vecchi portafogli di criptovaluta creati su Blockchain.info.

Per chi rappresenta un rischio Randstorm

La libreria vulnerabile JSBN è stata utilizzata da BitcoinJS a partire dalla sua introduzione, nel 2011, fino al 2014. Alcuni progetti di criptovaluta potrebbero tuttavia aver utilizzato per un po’ di tempo una versione meno recente della libreria. Considerando il fatto che i bug di Math.random nei browser più diffusi sono stati risolti nel 2016 (con la modifica degli algoritmi per la generazione di numeri pseudocasuali), possiamo ipotizzare che tutti i portafogli di criptovaluta creati nel periodo compreso tra il 2011 e il 2015 siano potenzialmente vulnerabili.

Come sottolineano i ricercatori, essendo BitcoinJS molto popolare nei primi anni di quel decennio, è difficile compilare un elenco completo dei servizi che avrebbero potuto utilizzarne una versione vulnerabile. Pertanto, nel loro rapporto troviamo l’elenco solo delle piattaforme che sono stati in grado di identificare come a rischio:

  • BitAddress: attualmente in funzione
  • BitCore (BitPay): attualmente in funzione
  • Bitgo: attualmente in funzione
  • info: attualmente in funzione come Blockchain.com
  • Blocktrail: reindirizza a https://btc.com o a https://blockchair.com
  • BrainWallet: non più in uso
  • CoinKite: attualmente vende portafogli hardware
  • CoinPunk : non più in uso
  • Dark Wallet: reindirizza a https://crypto-engine.org
  • DecentralBank: non più in uso
  • info (Block.io): attualmente in funzione
  • EI8HT: non più in uso
  • GreenAddress: reindirizza a https://blockstream.com/green/
  • QuickCon: non più in uso
  • Robocoin: non più in uso
  • Skyhook ATM: reindirizza https://yuan-pay-group.net

Oltre ai portafogli Bitcoin, possono essere a rischio anche i portafogli Litecoin, Zcash e Dogecoin, poiché anche per queste criptovalute esistono librerie basate su BitcoinJS, che è ovvio presumere vengano utilizzate per generare le chiavi private per i rispettivi portafogli di criptovaluta.

Il rapporto di Unciphered descrive anche una serie di altre complessità associate a Randstorm. Tuttavia, sostanzialmente il problema è che i portafogli creati utilizzando la libreria vulnerabile tra il 2011 e il 2015 possono ancora essere vulnerabili a vari livelli, a seconda delle specifiche circostanze.

Come proteggersi dalle vulnerabilità Randstorm

Come affermano giustamente gli stessi ricercatori, questo non è il classico caso in cui per risolvere il problema basta mitigare la vulnerabilità nel software: non è infatti possibile correggere con una “patch” le chiavi private dei proprietari dei portafogli e sostituirle con altre chiavi sicure. Anche se sono stati risolti da tempo, questi bug continuano pertanto a interessare i portafogli di criptovaluta creati prima che le vulnerabilità della libreria BitcoinJS venissero corrette. Per i proprietari di questi portafogli è quindi importante adottare adeguate misure di protezione.

Poiché stilare un elenco completo delle piattaforme di criptovaluta che hanno utilizzato la libreria vulnerabile è un compito estremamente complesso, è più sicuro considerare potenzialmente non sicuri tutti i portafogli di criptovaluta creati online tra il 2011 e il 2015 (a meno che tu non abbia la certezza che il tuo non lo è). Naturalmente… più un portafoglio è pieno e più risulta allettante per i criminali.

L’ovvia (e unica) soluzione al problema è creare nuovi portafogli di criptovaluta in cui spostare tutti i fondi dai portafogli potenzialmente vulnerabili.

E poiché si tratta di un’operazione necessaria, è meglio procedere con la massima cautela. La protezione delle criptovalute è un processo che prevede più fasi. Per questo motivo, abbiamo creato un elenco di controllo completo, con tante informazioni aggiuntive direttamente accessibili tramite i collegamenti:

  1. Esplora in dettaglio le principali minacce alle criptovalute e i metodi di protezione.
  2. Scopri le differenze tra i portafogli di criptovaluta hot e cold e i modi più comuni per attaccarli.
  3. Utilizza un portafoglio hardware (cold) per la conservazione a lungo termine dei tuoi fondi in criptovaluta principali e un portafoglio hot con fondi minimi per le transazioni quotidiane.
  4. Prima di trasferire tutti i fondi dal vecchio al nuovo portafoglio, installa in tutti i tuoi dispositivi una soluzione di protezione affidabile. Manterrà il tuo smartphone o il computer al sicuro dai Trojan che cercano di rubare password e chiavi private e dai clipper che sostituiscono gli indirizzi dei portafogli di criptovaluta negli appunti, oltre a proteggere il computer dai cryptominer dannosi e dagli accessi in remoto non autorizzati.
  5. Non archiviare mai una foto o uno screenshot della seedphrase sullo smartphone, non pubblicare mai la seedphrase nei cloud pubblici, non inviarla mai tramite messaggistica o e-mail e non inserirla da nessuna parte tranne quando si recupera una chiave privata persa.
  6. Archivia in modo sicuro la tua chiave privata e la seedphrase per il ripristino. A questo scopo, puoi utilizzare la funzionalità Archivio protezione identità di Kaspersky Premium, che cripta tutti i dati archiviati utilizzando il sistema AES-256. La password non viene memorizzata da nessuna parte, la conosce solo l’utente (a meno che, ovviamente, non sia su un foglietto adesivo attaccato al monitor) e non può essere recuperata, quindi l’unica persona con accesso ai tuoi documenti personali sei tu.
  7. In alternativa, puoi usare un portafoglio di criptovaluta cold, che non richiede una seedphrase per il backup della chiave privata. Ecco come funziona, ad esempio, il portafoglio hardware Tangem.
Consigli