el ataque a the dao: seguridad y consenso

22
El ataque a The DAO: Seguridad y consenso Carlos Buendía Blockchain Engineer at Grant Thornton Ethereum Spain Organizer 28-06-2016 @buendiadas

Upload: ethereum-madrid

Post on 15-Apr-2017

436 views

Category:

Technology


0 download

TRANSCRIPT

El ataque a The DAO: Seguridad y consenso

Carlos BuendíaBlockchain Engineer at Grant Thornton

Ethereum Spain Organizer28-06-2016

@buendiadas

The DAO

• Smart contract sobre la red de Ethereum

• Desarrollada por el equipo de Slock.it

• Propiedad de los Token Holders

Cronología

12- JUN

Primeras noticias12- JUN

“Today we discovered a vulnerability in the ETH token wrapper”

MakerDAO slack

“No DAO funds at risk”12- JUN

17- JUN

Black Friday

“The DAO is currently sustaining a sophisticated attack.”

“The attacker has moved the stolen ether to a child DAO.”

The DAO Child DAO3.6M ETH

3.6M ETH ($60 M) Movidos a otro Smart-Contract

(Editado)

22- JUN

Robin Hood Attack

Original DAO “White Hat” DAO

7.2M ETH

Address: bb9bc244d798123fde783fcc1c72d3bb8c189413 Address: 0xb136707642a4ea12fb4bae820f03d2562ebff487

(Editado)

El ataque

El ataque: Recursive Split (I)

The DAO

Withdraw ()

Wallet Contract

Split (address del código atacante)

Hacker_Balance=0

Call_Split (Sender)

Address: 304a554a310C7e546dfe434669C62820b7D83490 Address: bb9bc244d798123fde783fcc1c72d3bb8c189413

N times

ETH Balance + = amount

Dark DAO

(Editado)

El ataque: Recursive Split (II)

// Burn DAO Tokens Transfer(msg.sender, 0, balances[msg.sender]); withdrawRewardFor(msg.sender);

totalSupply -= balances[msg.sender]; balances[msg.sender] = 0; paidOut[msg.sender] = 0; return true;

1: Movimiento de fondos

2: Actualización de balances

El ataque: Recursive Split• No es vulnerabilidad de Ethereum

• No es vulnerabilidad (directa) de Solidity

• Error (humano) de código (Reentrada)*

• Encontrado en la función del contrato : splitDAO

http://forum.ethereum.org/discussion/1317/reentrant-contracts

Soluciones, Lecciones aprendidas

• Siempre actualizar balances antes de realizar transferencias

• Limitación de “gas”(o coste por llamada) a direcciones no conocidas

• Auditabilidad del código

¿Soluciones?

Solución: Softfork

• Los mineros (validadores de transacciones) actualizan su código.

• Acuerdan no validar las transacciones

• El Ether robado pasaría a ser inutilizable

• Solución temporal

Solución: Softfork

• Cambio en el protocolo (toda solución es posible)

• Cambio en el protocolo. Protocolo = Consenso

Solución: Hardfork

• Devolver fondos, olvidar ejecución de contrato…

• Antecedentes: Bitcoin 2010

Solución: No hacer nada• El usuario asume riesgos al adquirir sus fondos

• Principio de Inmutabilidad

• El atacante adquiriría 3.6M Eth ($60M)

• Nuevos ataques a The DAO (Probablemente pérdida total de los fondos)

Links de interés1. Child DAO: https://

etherchain.org/account/0x304a554a310c7e546dfe434669c62820b7d834902. Respuesta de Ethereum:

https://blog.ethereum.org/2016/06/17/critical-update-re-dao-vulnerability/3. Ataque de Reentrada: http://forum.ethereum.org/discussion/1317/reentrant-contracts4. Blog Seguridad Blockchain:

http://hackingdistributed.com/2016/06/16/scanning-live-ethereum-contracts-for-bugs/5. Blog Personal de Peter Vessenes:

http://vessenes.com/deconstructing-thedao-attack-a-brief-code-tour/6. Estado del la votación al Soft Fork: http://ethermine.org/stats/votes

El ataque a The DAO: Seguridad y consenso

Carlos BuendíaBlockchain Engineer at Grant Thornton

Ethereum Spain Organizer

@buendiadas