el ataque a the dao: seguridad y consenso
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
Primeras noticias12- JUN
“Today we discovered a vulnerability in the ETH token wrapper”
MakerDAO slack
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)
Robin Hood Attack
Original DAO “White Hat” DAO
7.2M ETH
Address: bb9bc244d798123fde783fcc1c72d3bb8c189413 Address: 0xb136707642a4ea12fb4bae820f03d2562ebff487
(Editado)
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
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
• 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