Blockchain Security, quali sono le vulnerabilità?

Sebbene la blockchain sia nel complesso una tecnologia sicura, è anch’essa vulnerabile ad alcuni attacchi che andremo ad approfondire.

Blockchain

10 Novembre 2021


Condividi :

| |

La blockchain è una tecnologia particolarmente sicura data la sua natura decentralizzata, la crittografia dei dati e delle transazioni e la trasparenza del libro mastro, elementi che rendono più difficile per gli hacker sfruttare la rete. 

Sebbene queste caratteristiche la rendano nel complesso sicura, è anch’essa vulnerabile ad alcuni attacchi che andremo ad approfondire. 

Prima di addentrarci sulle tipologie di attacco, vi consigliamo nel caso in cui non foste particolarmente avezzi alla terminologia relativa alla Blockchain di leggere il nostro articolo, una breve rassegna dei concetti e della terminologia legati a questo contesto. 

Siamo pronti ad iniziare! 

Reentrancy Attack: Il DAO 

Il primo attacco di cui vi parliamo è chiamato “Reentrancy Attack”, e consiste nello sfruttare la mancanza di controlli che dovrebbe avvenire, in genere, nel processo di prelievo dal wallet. 

Immaginiamo un sistema bancario classico che effettua il controllo del nostro saldo solo all’accesso, in questo caso saremmo in grado di effettuare operazioni per una somma maggiore del nostro saldo effettivo, questo perché il controllo del saldo avviene solo a monte. 

Il caso più famoso di attacco Reentrancy è accaduto nel 2016 nei confronti di DAO, un fondo di investimento basato su smart contracts, che appunto effettuava il controllo sul saldo utente dopo il trasferimento degli Ether. Gli attaccanti sono riusciti a rubare una cifra stimata intorno ai 70 milioni di dollari.

Per evitare un attacco alla blockchain di questo tipo è bene limitare la quantità di gas per poter prelevare potenzialmente all’infinito.

Poison Contract

Gli smart contracts sono programmi eseguiti su Blockchain e possono compiere una serie di funzioni tra cui l’inviare e depositare criptovalute.

Ogni utente che vuole collegarsi a uno smart contract deve fornire l’indirizzo del proprio wallet oppure un indirizzo a uno smart contract di sua creazione che possa conservare criptovalute.

Il fatto che gli smart contracts permettano ad altri contratti di collegarsi fra loro li rende vulnerabili a una serie di problematiche di sicurezza tra cui i poison contracts.

Un contratto poison, quindi “velenoso”, non “ruba” criptovalute e l’attaccante non ci guadagna niente, viene programmato esclusivamente per impedire il funzionamento del contratto che sta attaccando.

I contratti vulnerabili a questo genere di attacco hanno funzioni che interagiscono in maniera sequenziale con gli utenti, come un procedimento che redistribuisce automaticamente le vincite di un gioco ai partecipanti.

Se durante l’invio delle vincite un utente utilizza un poison contract, programmato con il fine di utilizzare una quantità enorme di gas tale da raggiungere il limite del blocco, questi bloccherà l’esecuzione del contratto e quindi il pagamento per tutti gli utenti, incluso se stesso.

Questo genere di attacco rientra nella categoria di denial of service o DoS, in cui gli attaccanti ottengono un vantaggio nell’impedire a determinati utenti di usufruire di un servizio o accedere ad una risorsa.

Integer underflow e overflow

Un’altra vulnerabilità degli smart contracts sono invece i bug di Integer Underflow e Overflow.  Da cosa sono provocati?

I bug di overflow e underflow sono spesso dovuti a programmazione incauta e alla mancanza di controlli sulle variabili numeriche destinate al conteggio, ad esempio di un conto bancario o wallet di criptovalute.

In informatica i computer immagazzinano i dati in “tipi” diversi: numeri, testo e molti altri. Per quanto riguarda i dati numerici, in realtà, vi sono un’infinità di numeri rappresentabili ma i calcolatori hanno una memoria finita, quindi vi è un limite a alle cifre che possono essere rappresentate in un linguaggio di programmazione.

Di conseguenza cosa accade quando cerchiamo di calcolare un numero troppo grande per la memoria del nostro calcolatore?

Il numero in questione farà “il giro” e tornerà al numero più piccolo possibile che può rappresentare, quindi zero, questo viene chiamato integer overflow.

Il problema contrario si manifesta quando cerchiamo di calcolare un numero troppo piccolo, ad esempio ritirando più di quello che possediamo in un conto corrente, questo numero farà sempre il “giro”, ma diventerà il numero più grande possibile che il computer possa rappresentare.

Uno dei casi più famosi di bug di Integer overflow nel mondo delle Blockchain è avvenuto nel 2018 con lo smart contract di Beauty Chain Coin (BEC), in cui gli hacker attaccanti avevano ottenuto una crescita non autorizzata della criptovaluta portando il numero della moneta in circolazione al suo limite massimo per poi farla ritornare a zero.

Questo ha portato il valore di mercato della moneta BEC da 900 milioni di dollari a quasi zero per un bug di Integer Overflow.

Timestamp Attack 

La Blockchain, come dice il nome, consiste in una struttura di blocchi concatenati in continua espansione. I blocchi vengono generati tramite il lavoro dei miners che verificano le transazioni risolvendo un problema computazionale estremamente complesso, che quindi garantisce ai miners di creare un nuovo blocco.

A seconda della rete, il tempo medio necessario per creare un nuovo blocco varia, ad esempio la rete Bitcoin ha un tempo medio di dieci minuti mentre la rete Ethereum mediamente impiega tredici secondi a generare un nuovo blocco.

Il timestamp è uno dei metadati inseriti all’interno di un blocco in seguito alla sua verifica e serve per indicare il momento esatto in cui è stato creato, utilizzando come unità di misura temporale lo “unix time”.

Questo parametro può essere utilizzato all’interno del codice degli smart contracts per implementare una serie di funzionalità legate allo scorrere del tempo, tuttavia non è completamente affidabile in quanto essendo le blockchain una rete decentralizzata i blocchi possono non essere completamente sincronizzati temporalmente. I miners, inoltre, possono modificare i timestamp dei propri blocchi di un quantitativo di tempo superiore a quello del blocco precedente, ma non troppo alto altrimenti il blocco viene rifiutato.

Il fatto che venga usato un parametro del codice a disposizione degli utenti miners rende questa tipologia di contratti vulnerabili nel caso in cui il timestamp venisse usato per compiere delle operazioni critiche, come ad esempio in un contratto che assegna una certa quantità di criptovalute a un utente che riesce a indovinare un numero casuale.

Se questo numero casuale viene creato usando il parametro timestamp, il miner che possiede quel blocco potrà trovare questo numero più facilmente e quindi potenzialmente indovinarlo ogni volta.

Conclusioni 

La Blockchain è un tipo di Distribuited Ledger Technology, ovvero una tecnologia che si basa su un registro distribuito. Ciò significa che i dati digitali vengono memorizzati in più luoghi allo stesso momento, a differenza dei database tradizionali che hanno un unico deposito centrale di dati. La struttura decentralizzata della Blockchain, e quindi la distribuzione delle informazioni sui nodi, renderà quasi impossibile sia hackerare un sistema, sia la perdita di dati. Ciò nonostante come abbiamo visto non è immune ad altre tipologie di attacco. 

Servizio

Cybersecurity

Quando si applica una tecnologia ad un progetto la prassi migliore è sempre quella di integrare la sicurezza all’interno del ciclo di vita dello sviluppo, qualsiasi sia la tecnologia la sicurezza non può essere messa in secondo piano.

Approfondisci