8. Black Friday
“The DAO is currently sustaining a
sophisticated attack.”
“The attacker has moved the stolen ether
to a child DAO.”
The DAO Child DAO
3.6M ETH
3.6M ETH ($60 M) Movidos a otro Smart-Contract
(Editado)
10. Robin Hood Attack
Original DAO “White Hat” DAO
7.2M ETH
Address: bb9bc244d798123fde783fcc1c72d3bb8c189413 Address: 0xb136707642a4ea12fb4bae820f03d2562ebff487
(Editado)
12. 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)
13. 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
14. 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
15. 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
17. 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
19. • 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
20. 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)
21. Links de interés
1. Child DAO:
https://etherchain.org/account/0x304a554a310c7e546dfe434669c62820b7d83490
2. 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-contracts
4. 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
22. El ataque a The DAO: Seguridad y consenso
Carlos Buendía
Blockchain Engineer at Grant Thornton
Ethereum Spain Organizer
@buendiadas