Il était une fois…. TheDAO

Régis
12 min readJun 24, 2016

--

Projet créé le 30 avril 2016, crowdfundé par plus de 11 000 investisseurs et 14% de la totalité de l’ether disponible sur le marché. TheDao a attiré plus de 200 M$ au moment du closing. C’est une “Decentralized Autonomous Organization”; une organisation autonome décentralisée. Son objectif est (était) de financer des projets liés à la blockchain Ethereum. Les leaders de ce projet sont les fondateurs de Slock.it, société qui a pour ambition d’utiliser la blockchain Ethereum pour permettre de louer, vendre ou partager n’importe quel actif physique en bénéficiant de la transparence, de la sécurité et de l’immutabilité de la blockchain, sans intermédiaire. Son projet le plus connu est l’ethereum computer.

Comment fonctionne TheDAO

https://daowiki.atlassian.net/wiki/

Régi par un smart contract, TheDAO permet à tous ses “actionnaires” de proposer des projets et de voter pour ou contre leur financement. C’est un fond d’investissement décentralisé, dont les investissements sont décidés par la foule des actionnaires au cours de période de vote. Chaque détenteur de token (actif digital) TheDAO peut également à tout moment choisir de “spliter”, c’est à dire de se désolidariser des choix en cours et créer une entité appelée “child DAO” qui lui permettra de récupérer ses ethers en échange de token TheDAO. Pour faire un “split”, un certain nombre d’étapes doivent être réalisées :

  • Créer la proposition de split
  • S’ouvre alors une période de 7 jours minimum appelée “debating period”, durant laquelle il vous faudra voter oui à votre proposition de split (pour pouvoir appeler la fonction splitDAO)
  • Après ces 7 jours, appelez la fonction “splitDAO” du contrat, ce qui split officiellement TheDAO. Vos ethers et vos “Reward Tokens” sont entièrement sous vôtre contrôle.
  • Attendre 27 jours pour que soit effectivement créé votre nouveau DAO (a noter que d’autres participants peuvent voter oui a votre proposition de split).
  • Créer une proposition qui envoie tous les ethers de votre DAO à une adresse et voter oui à cette proposition.
  • Attendre 14 jours mininum de “debating period”
  • Exécuter la proposition et recevoir ses ethers.

Il vous faudra donc 48 jours minimum pour récupérer vos ethers dans un de vos comptes.

LA FONCTION splitDAO EST LE SEUL MECANISME ACTIF QUI PERMET DE RECUPERER DES ETHERS DE TheDAO.

TheDarkDAO: 3,6 millions d’Ether soustraits

Techniquement

L’attaque est ce qu’on appelle une “Recursive Call Attack” ou “Race To Empty”. Elle consiste à profiter d’une vulnérabilité du code régissant TheDAO, et à faire appel de manière répétée via la récursivité à la fonction splitDAO à partir d’un child DAO. L’attaque a été répétée 27996 fois et a permis de soustraire 3,6 millions d’ether (par 237.62451099999999 ETH à chaque fois) de TheDAO pour les loger dans le DAO de l’attaquant (TheDarkDAO). Par ailleurs, une erreur de typographie dans l’écriture d’une fonctionTransfer au lieu de transfer (notée T et non t) aurait permis à cette attaque la répétition à l’infinie de la boucle d’attaque. A ce stade, celui-ci ne peut pas les utiliser/transférer sur un autre compte car le code originel oblige à attendre 27 jours pour que le compte de TheDarkDAO soit effectivement disponible pour son créateur. Il n’en reste pas moins que les fonds sont totalement sous le contrôle de TheDarkDAO et que personne sauf son créateur n’y a accès. Vous trouverez ci-dessous un schéma décrivant l’entrelacement des comptes et des votes :

https://medium.com/@oaeee/the-attack-story-38f4789b3c3b#.mcsqmqu5o
Le child DAO a pour nom de proposition “lonely, so lonely”

Pour un descriptif plus technique des attaques, consultez : http://vessenes.com/deconstructing-thedao-attack-a-brief-code-tour/

Les réactions de la communauté

A noter tout d’abord que TheDAO et Ethereum Foundation (qui gère la blockchain Ethereum) sont deux entités totalement distinctes. Slock.it, porteur du projet TheDAO est le fer de lance des Dapps (Decentralized Applications) sur Ethereum, mais reste une société privée et indépendante. TheDAO a drainé environ 14% des ethers présents sur le marché et une grande partie de la communauté Ethereum a investi dans le projet, y compris des membres de l’Ethereum Foundation.

Une première réaction aurait pu être de ne rien faire. Après tout, TheDAO est un contrat privé régi par un code. TheDarkDAO a profité d’une “feature” de TheDAO pour se constituer un capital de 3,6 millions d’ETH. Malheureusement, et c’est assez récurent dans l’histoire des cryptos monnaies, cela arrive. Le code de TheDAO a été proposé à toute la communauté qui a pu à loisir le checker, et investir en toute connaissance de cause.

Cependant, rapidement, on assiste à un certain nombre d’appels de différents “ténors” de la communauté, certains allant jusqu’à demander un “hard fork” avec “rollback”.

Hard fork, soft fork, fork..

Un “fork” est un changement du protocole de la blockchain. Il a pour objet de modifier les règles du jeu. Certaines modifications peuvent être mineures (soft fork) ou plus importantes. Dans tous les cas, leurs acceptations reposent sur un consensus de la communauté.

Un hard fork est une modification du protocole de la blockchain Ethereum, qui crée une nouvelle version de la blockchain. L’idée du hard fork aurait été, dans ce cas, de proposer un hack permettant de modifier l’histoire écrite dans la blockchain en “restituant” à TheDAO les ethers soustraits par TheDarkDAO, puis en les transférant après aux souscripteurs de TheDAO. Un hard fork nécessite une adhésion de la communauté, car certains acteurs pourraient rejeter les modifications et continuer avec l’ancien protocole leur blockchain; la Fondation serait alors ruinée en terme d’image et on aurait deux formes d’ethers différents coexistants…

Un Hard fork avec rollback, c’est rejouer toutes les transactions depuis le bloc de l’attaque, en insérant dans le protocole le rejet des transactions de l’attaquant, solution rapidement rejetée, car couteuse en terme d’image et d’adhésion.

Un soft fork, est une mise à jour mineure et optionnelle du protocole. Dans le cas d’un soft fork, il s’agit d’une restriction des règles régissant l’ancien protocole. Les transactions validées par les mineurs du nouveau protocole seront validées par ceux étant sur l’ancien. L’objectif pour les tenants du soft fork est que l’implémentation du nouveau protocole se fasse sur plus de 51% des mineurs afin d’inscrire dans le temps les nouvelles règles. L’idée dans le cas de TheDarkDAO est de simplement ajouter au protocole une impossibilité de déplacer les fonds depuis l’adresse de TheDarkDAO afin de gagner du temps.

Les propositions techniques

La Fondation Ethereum “gère” trois clients permettant de construire, miner et interagir avec la blockchain : Go-eth (Geth), Eth et cpp, et pyeth. Le client le plus populaire est Geth (>90% des miners), il est écrit en langage GO. Ces clients ne proposent pas par défaut de possibilité de “blacklister” une adresse ou un hash de contrat. La Fondation a ainsi proposer d’ajouter une telle caractéristique dans le protocole. Initialement, cela correspondait à l’ajout dans le code du refus de voir toute transaction faisant diminuer la balance en ether de TheDAO, avec pour ceux qui ne voudraient pas utiliser cette feature, la possibilité d’ajouter un flag : — no-dao-soft-fork. Cette solution indiquait clairement l’orientation de l’implementation Geth (en faveur). Cette proposition a rapidement été modifiée de façon à être plus générique que — no-dao-soft-fork ou — yes-dao-soft-fork, pour être transformée en — illegal-code-hashes qui ignore les smart contracts ayant tel hash. Cela a l’avantage d’inclure une fonctionnalité supplémentaire qui permettra facilement de gérer une table d’exclusion pour un mineur spécifique.

Par ailleurs, un autre client d’Ethereum est proposé par EthCore : Parity ( https://blog.ethcore.io/). Ce client privé, développé par Gavin WOULD, un des core développeurs d’Ethereum initiaux, a rapidement pris position pour un soft fork et a rapidement proposé un patch permettant de bloquer les fonds détenus par TheDarkDAO. A noter que parity propose également une solution hard fork : le principe serait de choisir un block (le numéro #1.818.181 est proposé) qui aurait la particularité d’avoir un état transitionnel supplémentaire. Cet état permettrait deux choses :

  • retourner tous les fonds transférés en dehors de TheDAO lors de l’attaque et détruire les comptes des attaquants.
  • modifier le code de TheDarkDAO de façon à ce que les détenteurs de TheDAO token puissent équitablement retirer leurs fonds.

Il est important de noter que tous les acteurs peuvent proposer leur solution, mais que dans ce cas, ce seront les mineurs qui décideront finalement d’implémenter tel ou tel code, avec tel ou tel flag. Actuellement, le débat fait rage dans la communauté…

TheDAO : too big to fail?

TheDAO a été (trop) largement souscrit, avec 14% des ethers en circulation pour un montant de plus de 200 M$ (au plus haut du cours de l’ETH), alors même que c’était un précurseur.

  • Solidity est un langage ad-hoc créé pour les scripts tournants sur l’Ethereum Virtual Machine (EVM) de la blockchain. C’est donc un langage jeune dans lequel il peut y avoir des erreurs…
  • Le code du contrat était public; tout le monde a été invité a vérifier le code. Il semblerait que peu de gens aient fait cet effort avant d’investir.
  • TheDAO est un gros programme (à l’échelle d’Ethereum) de 1000 lignes de code écrites dans le langage solidity. Bien que revu et corrigé par les plus éminents membres de la communauté, il y a forcément des erreurs.1000 lignes, avec une quasi absence d’outils permettant de contrôler, vérifier ce code.
  • 200 millions de $, soit la valorisation la plus élevée atteinte par TheDAO. Une telle somme attire forcément tous les hackers et autres pirates informatiques. Avec la forte résonance de la presse, le code a été étudié après son déploiement. Rapidement, un certain nombre de chercheurs ont tiré la sonnette d’alarme en expliquant différents hacks possibles et même la faille utilisée par TheDarkDAO avait été mise en évidence en partie dans divers papiers publiés préalablement à l’attaque. Des mesures correctives ont été proposées et mise en débat par Slock.it. Cependant, le mécanisme d’upgrade est soumis à la communauté et donc demande de longues semaines de débats avant toute adoption. Aucune mesure concrète n’a pu être prise dans l’urgence. Il est certain qu’un coffre contenant 200 M$ et dont les portes sont ouvertes attire l’intérêt…

Pour anticiper ces failles, une bonne idée aurait été de mettre TheDAO sur le réseau testnet d’Ethereum et de proposer une récompense (un bounty) conséquente à ceux qui réussiraient à hacker le code.

On peut aussi se poser la question de savoir s’il est judicieux de tenter de gérer de l’argent par des smart contrats à ce stade de développement de la blockchain.

Remarque : D’autres DAOs, tel que MakerDAO ont repéré des attaques potentielles et ont pu les contrecarrer en rachetant tous leurs token Maker, pour en ré-émettre ultérieurement, tout en protégeant les fonds investis.(https://forum.makerdao.com/t/governance-meeting-minutes-june-12-2016/638).

TheDAO : le bien ou le mal ?

Une autre façon de voir les choses, serait de dire que TheDAO a une caractéristique (une feature) spéciale qui lorsqu’elle est bien utilisée permet de le vider… Après tout, il n’y a pas eu de vol au sens propre du terme, il y a simplement une utilisation détournée de la fonction splitDao. Evidemment, cette utilisation est décalée avec l’intention initiale du contrat, mais la question reste ouverte.

Si le hacker n’est pas un petit génie, il sait tout du moins lire, et a une excellente connaissance des mécanismes d’Ethereum et en particulier de Solidity, le langage dans lequel a été écrit le smart contrat TheDAO. Il a utilisé une fonction. Moralement, la question du bien et du mal se pose, mais qui décide? Et ce d’autant plus que l’environnement Ethereum promet de construire des applications qu’on ne peut pas arrêter…

La gouvernance chez Ethereum

Ethereum est une blockchain jeune (en production depuis le 30 juillet 2015) dont la proposition de valeur est la suivante :

"Ethereum est une plateforme décentralisée qui execute des smarts contrats : des applications qui s'exécutent exactement tel que programmées, sans possibilité de les arréter, non censurable, sans fraude possible et sans interférence de tierce partie" ( https://www.ethereum.org/)

Neutralité?

TheDarkDAO met en exergue un certain nombre de questions concernant la gouvernance d’Ethereum. Les membres de la Fondation Ethereum se sont largement impliqués dans TheDAO:

  • en occupant notamment les fonctions de curateurs
  • en s’investissant financièrement dans le projet
  • ont apporté leur soutient à la DAO et donc une grande crédibilité

Il y a clairement un conflit d’intérêt entre les objectifs premiers de la Fondation Ethereum et le problème survenu sur TheDAO.

Les imbrications de TheDAO, Slock.it et la Fondation Ethereum n’ont pas laissé cette proposition de valeur s’exprimer dans sa nature première. Ceci n’aurait sûrement pas été le cas sur une blockchain plus mature et plus décentralisée (au sens de la gouvernance), tel que la blockchain Bitcoin où typiquement l’affaire MtGox n’a jamais eu pour effet un soulèvement de la communauté pour tenter un sauvetage des fonds hackés.

Est-ce que la crédibilité de la Fondation a été entamée par la gestion de cette crise?

La Fondation n’aurait probablement pas dû intervenir et laisser l’écosystème gérer seul son infortune. La question reste cependant ouverte et la communauté se déchire. Il faut cependant noter que beaucoup des “investisseurs” de TheDAO ont, semble-t-il, fait aveuglément confiance à Slock.it et à la Fondation dans leur choix d’investir, sans avoir le recul ou les due-diligence habituelles pour des montants de cet ordre.

Immutabilité de la blockchain?

Les propositions de hard fork, soft fork, et la forte concentration des clients Ethereum utilisant à plus de 90% Geth (l’implémentation en GO), posent également la question de la neutralité et de l’immutabilité de la blockchain Ethereum. Bien que le hard fork avec rollbacks ait été rapidement rejeté par Vitalik Butterin (la figure de proue médiatique et le très talentueux initiateur d’Ethereum), la Fondation laisse planer un doute quand à la possibilité d’un hard fork sans rollback. Le doute ne devrait pas être permis 4 jours après l’évènement!

En effet, la Fondation maitrise et diffuse Geth (le client permettant d’accéder et de faire tourner la blockchain) et à ce titre, les options par défaut suggérées sont très souvent implémentées par les mineurs. Si le soft fork est proposé par défaut, ce sera probablement celui qui fera consensus. Il y a bien une influence de la Fondation Ethereum. Ce n’est pas la même façon de considérer les choses si les mineurs doivent ajouter eux-même l’option. Par ailleurs, il est à noter que Le client Parity a déjà ajouté le soft fork par défaut. Parity est une initiative privée mené par Gavin Would, un des influents fondateurs de Ethereum et lui aussi très proche de la Fondation.

Notons que le manque de diversité des clients ne permet pas une neutralité.

L’Ether

Pour rappel, exécuter un contrat sur la plateforme Ethereum n’est pas gratuit. Les frais payés sont exprimés en une unité appelée “gas” qui est indexé sur le cours de l’Ether. Pour faire une comparaison, on pourrait dire que cela revient à payer l’essence qui fait rouler une voiture. Or l’Ether a subi de nombreux swings au cours de cette “crise”. Il a perdu jusqu’à 50% de sa valeur pré-crise dans des volumes de transaction records. Ci-après, vous trouverez un graphique de l’évolution du prix avec les volumes: http://coinmarketcap.com/currencies/ethereum/

Cette crise de la DAO met en évidence le coté hautement spéculatif, dont il faut tenir compte dans la création et l’utilisation des smart contracts. La rentabilité de certains projets peut être ainsi sévèremment dégradée en fonction du cours de l’Ether.

Le juridique

A ce jour, aucune plainte n’a été déposée, même si il semblerait qu’en France cela ne va pas tarder. La blockchaine dispose-t-elle d’une immunité juridique ? Non, le droit s’applique, mais lequel? La jurisprudence sur ce sujet n’est pas encore établie. Les questions (non exhaustives..) que l’on pourrait se poser: Quid des responsabilités:

  • du développeur du smart contract
  • de la société ou le propriétaire du smart contract déployé
  • de la Fondation
  • du hacker (TheDarkDAO)
  • de communauté Ethereum

De nombreuses autres questions sont en suspend :

  • Quelles sont les personnes derrière les adresses et leurs responsabilités ?
  • Dans quel pays peut-on attaquer ?
  • Quel type de propriété ?

conclusion

Comprendre la blockchain et les smart contracts nécessitent des compétences fortes en cryptographie, en programmation, en algorithmes, et sûrement en juridique à terme … Il existe plusieurs types de blockchains, avec des caractéristiques propres (privées, publiques, avec permission ou pas, avec différents types de gouvernance )…

Bref, la blockchain est une technologie aujourd’hui complexe faisant appel à nombres de problématiques pointues qu’on ne peut pas expliquer en 5 minutes. Ethereum survivra, ou pas à cette crise, mais quoi qu’il en soit la technologie blockchain perdurera.

Celà reste des technologies jeunes, porteuses de potentiels nouveaux paradigmes, mais qui nécessitent un réel investissement, tant au niveau de la compréhension que des outils.

Note : Des contres attaques ont été menées par des groupes amicaux dont l’objectif est de sécuriser les fonds restant dans TheDAO. Nous reviendrons ultérieurement sur ce sujet.

Régis PIETRASZEWSKI (@rgsptr) et Laurent MALLET (@ellis2323)

https://www.gitbook.com/book/ellis2323/blckchn/details

Un grand merci à François-Régis PERRIER pour sa relecture attentive

--

--