Se una macchina deve essere infallibile non potrà essere anche intelligente (A. Turing)
Speriamo! (il sottoscritto)
Questo è un racconto di fantascienza cyberpunk, o forse no. Comunque vogliamo raccontare uno dei più grandi attacchi informatici che ha messo a rischio un patrimonio di oltre 150M$.
Una storia che tutti dovrebbero conoscere, anche se non siete esperti di Bitcoin, probabilmente finirà nei libri di storia, o almeno su quelli di informatica. Oggi non se ne parla se non nei forum dedicati, probabilmente non è nemmeno finita sulla home di Repubblica.
Partiamo dall’inizio, tutto inizia nel 2008 quando Satoshi inventa una moneta che viene generata dai computer, scambiata fra computer, impossibile da confiscare, clonare, falsificare, inflazionare, eliminare, abbattere, infine … impossibile da trascurare, il Bitcoin.
Il suo inventore è un misterioso anonimo individuo, nessuno sa chi è. Potrebbe essere una setta segreta, uno scienziato pazzo, un ricco genio annoiato, un novello Fantozzi che scrive il mega-presidente è uno stronzo sul cloud.
Quello che si sa è che molti cominciano a parlare di Bitcoin, certo non al telegiornale della Rai e nemmeno nella casa del GF. Ma insomma, preoccupati, curiosi, interessati, anarcoidi, tecnopati, avventurieri, truffatori, paladini della libertà, politici svegli e altri solo opportunisti. Viene sussurrato nelle alcove, gira nelle teste e nelle parole, viene cantato da poeti deliranti. The good wife ci fa pure una puntata, nel 2012, mentre la nostra banca resta per ora in-differente.
Vitalik è un ragazzino di 20 anni, testa un po’ quadrata, magrissimo, probabilmente un genio. Scrive di Bitcoin, quindi un giornalista. Non solo, scrive codice, quindi un programmatore. Ha un’idea, decide di andare oltre Bitcoin, quindi un inventore. Perchè limitarsi ad una moneta per computer? Perché non mettere in piedi un intero universo in cui i computer rispettano dei contratti digitali molto più articolati. Vitalik ha in mente il computer definitivo che non può essere mai spento e dove programmi agiscono, scambiano transazioni, pagano, rispettano leggi. Quali leggi? Quelle scritte nei contratti che non possono essere infranti senza conseguenze. Code is law. Ricordiamocelo perché dovremmo tornare su questo.
Vitalik e co. mette su uno dei più importanti crowd funding della storia, quindi un imprenditore? Senza passare da Kickstarter (figuriamoci da un VC), vende quote del nascente progetto, paghi in Bitcoin ottieni Ether. Nasce Ethereum pre-sale.
Ma non arriva mai – qualcuno comincia a pensare “vi siete fregati i soldi” e qualcun’altro parte con il te l’avevo detto, in fondo
- They are asking an insane 30k BTC
- 50% pre mined
- They are setting a price out of nothing for 1 eth, while it’s not even out yet
- “ex” Goldman Sachs pricks are supporting this project
Però sarà il fatto che a differenza di Bitcoin, Ethereum suona meno anarchico, più politicamente corretto, piace di più alle istituzioni e alle corporation. In molti ci credono, scam, non scam, Microsoft e IBM ci credono. Microsoft aggiunge nel suo celebre (celebre?) Visual Studio uno strumento per programmare in solidity, il linguaggio per gli smart contract di Ethereum e IBM si lancia in un progetto che rimane un po’ fumoso che si chiama Adept che in un colpo solo incrocia due buzzword micidiali: Internet of things e blockchain. Ma non è l’unico …
Inizio del 2016, un bel momento per la blockchain, qualunque sia il significato che diamo a questa parola. C’è euforia, tutti parlano di Blockchain, ci sono blockchain per tutti i gusti …permissioned, unpermissioned, privata, pubblica, blockchain per i cibi, una per le piante, una per i dati, una per i diritti d’autore, blockchain più veloci, blockchain senza blocchi, blockchain senza chain, database pittati da blockchain, blockchain pistacchio e fragola etc.
Tutti parlano di blockchain – ai massimi livelli – ipotetica commissione governativa sull’innovazione tecnologica (true story)
avete messo degli obiettivi strategici sulla blockchain nel prossimo programma quadro
beh, abbiamo una nuova agenda digitale per l’innovazione
Sì, ma abbiamo messo dentro anche la blockchain?
Mah, veramente, dovremmo controllare
Il ministro è stato molto chiaro, senza blockchain salta qualche testa.
Ragazzini di vent’anni salgono in cattedra e sui banchi in fondo vecchi professori prendono appunti. Nel mezzo i quarantenni con qualche capello grigio, che magari hanno qualche Bitcoin da parte, e che hanno visto nascere il web, il p2p, il cloud etc. sono un po’ scettici. Perché dovrebbe funzionare la decentralizzazione oggi? Non ha funzionato nel 1990 circa quando è stato creato il web, non ha funzionato nel 200o circa con il p2p (beh emule e torrent funzionano però), infatti è arrivato il cloud, ma l’eroe di turno dice – non ero ancora nato nel 1994, non saprei dire cosa è andato storto – strappa l’applauso e mette tutti in fuorigioco. Non fare il vecchio, piegati anche tu al nuovo mondo delle DAPPs scritte poi con questi caratteri di MΞRÐA
Ma aspetta un po’, parliamo di contratti e di DAO. Cominciamo dai contratti o smart contract come si dice nell’ambiente. Prima precisazione gli smart contract non sono né smart né contract. Sono in realtà dei programmi che vengono messi in funzione sulla blockchain e vengono eseguiti in maniera identica in tutti i nodi della rete.
Ogni programma lo possiamo immaginare come una macchina a stati, ecco appunto. Ricominciamo, ogni programma ha dei registri in memoria che chiamiamo variabili di stato. Quando programma riceve una transazione, questo cambia il suo stato, spedisce un’altra transazione etc. Questi stati non sono memorizzati nella memoria di un solo computer ma in quella di tutti i computer (della rete). Questo per impedire che il programma possa essere spento o manomesso. In pratica le sue variabili sono mantenute nella blockchain alla stessa stregua del nostro saldo. Un computer terribilmente inefficiente, in pratica per eseguire un programma fatto di poche istruzioni migliaia di computer devono eseguirle in modo identico per poter dire: acconsento, siamo d’accordo sullo stato successivo del programma.
Terribilmente inefficiente ma praticamente indistruttibile, una volta che parte non può essere spento se spegnersi non è previsto nel suo codice.
Una Decentralized Autonomous Organization (DAO) è un contract con una dotazione finanziaria e che emette quote (token) che possono essere comprate con ether (la moneta di ethereum). Il contract può ricevere proposte progettuali e finanziarle usando la sua dotazione. Idealmente un nuovo modello di azienda senza uffici, senza CEO/CTO/CIO etc. che svolge in modo autonomo la gestione dei fondi e dove gli stakeholder votano con una transazione sulla blockchain, più token hai, più il tuo voto conta. Non è bellissimo?
Non avrai altro DAO all’infuori di me, e mi chiamerai THEDAO
Parte la campagna, da un punto di vista dei termini di accesso e partecipazione la posizione dei developer è più o meno questa “il codice è legge noi non abbiamo responsabilità”. Sarebbe la solita nerdata senza conseguenze se non si rivelasse il più grande crowdfounding di sempre, 150M$ in un mese.
The terms of The DAO Creation are set forth in the smart contract code existing on the Ethereum blockchain at 0xbb9bc244d798123fde783fcc1c72d3bb8c189413. Nothing in this explanation of terms or in any other document or communication may modify or add any additional obligations or guarantees beyond those set forth in The DAO’s code.
Mi trovo seduto a pranzo ospite di una grande azienda quando uno di loro scherzando annuncia – Davide invested 50 grands on TheDAO – io quasi mi strozzo col boccone, gli altri mi guardano e io – nah, just few hundreds, I like playing with new toys. Siamo positivi, cosa potrebbe andare storto, e vabbe’ al max ci perdo qualche centone.
Ma quanto sono sicuri questi contratti? diciamo che un contratto per essere sicuro non dovrebbe essere lungo, qualche centinaio di linee al max. Non lo dico io, lo dice Vitalik in un AMA. Ma la DAO e’ lunghissima, migliaia di linee di codice. Aggiungi di qua, aggiungi di là. Non è che poi si sfascia tutto.
The second-system effect (also known as second-system syndrome) is the tendency of small, elegant, and successful systems to be plagued with feature creep due to inflated expectations.[1] (The Mythical Man-Month.[2])
17 Giugno TheDAO viene sifonata, o quasi restano 27 giorni
Come ha fatto il DAO (o la DAO?) ad essere violato?
Quando un partecipante vuole uscire dalla DAO può scrivere del codice che invoca una funzione del contratto chiamata splitDAO () ma ci sono due problemi.
Il primo è che questa funzione quando invocata prima di tutto SPEDISCE gli ether al richiedente e solo DOPO impone che il nuovo balance è ZERO.
Il secondo problema, il codice di Ethereum può essere richiamato più e più volte facendo in modo che questa che dovrebbe essere una specie di macro transazione viene eseguita parzialmente molte volte, ma solo nella parte in cui spedisce i fondi e mai in quella in cui azzera il balance. Insomma, una bella regione critica, senza semafori, via libera … sempre.
Se la tua religione ti proibisce di leggere codice sorgente scrolla.
function splitDAO( uint _proposalID, address _newCurator ) noEther onlyTokenholders returns (bool _success) { ... // XXXXX Move ether and assign new Tokens. Notice how this is done first! uint fundsToBeMoved = (balances[msg.sender] * p.splitData[0].splitBalance) / p.splitData[0].totalSupply; if (p.splitData[0].newDAO.createTokenProxy. value(fundsToBeMoved)(msg.sender) == false) // XXXXX above is the line the attacker wants to run more than once throw; ... // Burn DAO Tokens Transfer(msg.sender, 0, balances[msg.sender]); withdrawRewardFor(msg.sender); // be nice, and get his rewards // XXXXX Notice the preceding line is critically before the next few totalSupply -= balances[msg.sender]; // XXXXX AND THIS IS DONE LAST balances[msg.sender] = 0; // XXXXX AND THIS IS DONE LAST TOO paidOut[msg.sender] = 0; return true; }
Il processo continuerà all’infinito, fino a quando non esaurisce tutti i gettoni di TheDAO.
In realtà però una pezza ce la possiamo mettere, infatti la DAO padre durante questo processo viene sifonata da una DAO figlia, che come il padre ha 28 giorni di tempo prima di poter finanziare qualcuno. Quindi è come una sanguisuga messa lì dall’hacker ma che l’hacker non potrà strappare dalla bestia prima di 28 giorni. C’è poco tempo … cosa possiamo fare?
Vitalik propone un soft fork, in pratica senza annullare nessuna delle transazioni già presenti nella blockchain ma limitandosi ad una specie di blacklist dove le transazioni aventi lo scopo di prelevare dall’account 0x7278d050619a624f84f51987149ddb439cdaadfba5966f7cfaea7ad44340a4ba (ie. the DAO and children) impedendo all’attacker l’accesso ai fondi superata la finestra dei 27 giorni.
Ai miners non restava che stare calmi, far funzionare le transazioni come al solito e aspettare una versione del software da scaricare e installare se avessero condiviso questa scelta.
L’attacker però non gradisce l’idea e scrive al mondo – vi denuncio, non sono un ladro. Ma il codice non era legge? In effetti, una legge ingiusta in questo caso, ingiusta per chi?
A soft or hard fork would amount to seizure of my legitimate and rightful ether, claimed legally through the terms of a smart contract. (…)
I reserve all rights to take any and all legal action against any accomplices of illegitimate theft, freezing, or seizure of my legitimate ether, and am actively working with my law firm. Those accomplices will be receiving Cease and Desist notices in the mail shortly.
(TheDAO Hacker)
Commento a caldo: ma ci sta trollando o davvero fa?
Ma visto che come minaccia legale è evidentemente poco credibile l’attacker trova un modo forse più efficace. Tenta di corrompere i miner, votate per me. Che significa, non adottate il soft fork.
[S]oon we will have a smart contract to reward miners who oppose the soft fork and mines the transaction. 1 million ether + 100 btc will be shared with miners.
TheDAO Hacker
Ma forse l’attacker non ha bisogno di scongiurare il soft fork, qualcosa è sfuggito ai geni della Ethereum Foundation, qualcosa è sfuggito a Vitalik.
Vitalik, ti sbagli il soft fork non funziona
Emin Gun Sirer è una cassandra (a Cagliari si direbbe una cugurra), ma nel caso della criptoanalisi e sicurezza informatica, si sa, la paranoia è una virtù. Peccato che nessuno ascolti le cassandre, altrimenti non sarebbero cassandre. Sirer è una figura nota nell’ambiente per aver spesso e volentieri messo il dito su possibili vulnerabilità nelle criptomonete, senza risparmiare ovviamente anche Bitcoin. Forse in tanti casi le sue analisi sono state speculazioni teoriche, ma questa volta trova una grossa falla all’idea del soft fork pensato per contrastare the DAO hack.
In pratica il soft fork diventa un vettore per un grande DoS (Denial of Service) che può essere architettato più o meno così: facciamo un flooding della rete con transazioni computazionalmente pesanti, e poi come ciliegina finale un’operazione sul DAO contract (quello blacklisted). Ecco che i miner si trovano impegnati a minare delle transazioni che poi si trovano costretti a rifiutare, bruciando cpu senza guadagnare nessuna fee.
Gotta find a way
To find a way
When I’m there
Gotta find a way
A better way(Nirvana)
Allora facciamo l’hard fork, sì ma cos’è? In sostanza una specie di rollback, un tornare indietro nel tempo. In realtà è un ri-allocamento dei fondi sifonati dentro un nuovo contratto DAO, quest’ultimo “aggiustato” e che permetterà solo ai legittimi token owner di riprendersi i fondi depositati.
La parola passa ai miner, solo l’adozione praticamente unanime di questo passaggio, che richiede una nuova versione del software di mining, può decretare il successo dell’operazione salvataggio. Ma è giusto o no fare questo salvataggio? In fondo da un lato abbiamo uno scenario in cui un solo individuo ha sifonato una buona parte degli ether in circolazione, creando una centralizzazione in termini di capitale, e creando un’enorme contraccolpo psicologico a tutti quelli che avevano creduto in Ethereum prima e in TheDAO poi. L’altro scenario, quello risultante dall’hard fork, sembra premiare i poveri derubati, ristabilire la giustizia, punire il colpevole o per lo meno metterlo fuori gioco. Quindi il gioco sembra facile, andiamo di hard fork. Beh, no. Non è così semplice, si crea un precedente nella tecnologia blockchain, viene mostrato e deciso che in fondo la blockchain non è così immutabile, non è vero che una transazione è per sempre se attraverso un’opera di discussione e persuasione viene fatta passare questa operazione. Si compromette alla radice il concetto stesso di blockchain. In fondo se hai puntato i tuoi soldi su theDAO hai sbagliato tu. Non eri obbligato.
Blocco 1920000
Il fork è riuscito, Ethereum è salvo, TheDAO è salva, o meglio inutile. Anch’io appena possibile mi informo su come convertire i miei token in ether e dimenticare questa storia. E’ stata una piccola esperienza negativa per il sottoscritto, immagino che qualcuno ci avesse investito parecchio, ora potrà tirare un sospiro di sollievo e recuperare i soldi. Non proprio tutti forse, insomma la restituzione dei DAO avviene al tasso base, mentre chi li ha comprati nella fase finale ha speso più di quello che recupera. Insomma la fregatura grossa e scongiurata. Per quelle piccole come limature, spread, gabelle, balzelli etc. non c’è scampo. Tutto sembra tornare alla normalità. I blocchi si susseguono al ritmo di uno ogni 15 secondi, come al solito, 1920001, 1920002, 1920003, … la vita riprende, in quel mondo ai più sconosciuto.
Qui Blocco 1920000, sono Ethereum classic, vi parlo dal passato e non mi arrendo
Blockchain e fork, idealmente una Blockchain ha una sola testa che avanza nel tempo blocco dopo blocco come un serpente digitale che guarda sempre avanti. Se per qualche malaugurato caso la rete dei miner si divide e crea una seconda testa la Blockchain si divide, una parte della rete cresce sulla testa numero uno, e l’altra parte sulla testa numero due. In generale quando questo succede tutti i nodi se ne accorgono e il protocollo stabilisce cosa fare: eliminare la branca che risulta più “corta”, diciamo con meno blocchi (non è così semplice, ma lasciamo stare i dettagli). In questo modo la branca perdente sparisce e la chain torna ad avere una sola testa. Questo vale quando la community è coesa e il fork avviene per caso, ma cosa succede quando il fork è forzato da un cambiamento delle regole e qualcuno non vuole invece cambiarle. Succede che nasce Ethereum Classic.
It is however, with deep regret, that we as a community have had to spontaneously organize to defend the Ethereum blockchain platform from its founding members and organization due to a long train of abuses, specifically by the leadership of the Ethereum Foundation.
Questa subcommunity continua a minare a partire dal blocco del fork, il 1920000 e da lì in su ma non con le nuove regole, bensì tenendo le vecchie, dove esiste una DAO sifonata ed un signor hacker che con il suo address prima o poi potrà intascare il maltolto.
Se sei arrivato in fondo a questo abbastanza lungo post ti meriti un premio. Ti linko qui una versione molto divertente di questa storia.
La storia di Ethereum by Whale Panda
Rispondi