En términos simples, ¿cómo se pirateó la DAO y se le quitaron los fondos?

¿Cómo fue pirateada la DAO? ¿Alguien puede explicar en términos simples?

Respuestas (4)

La explicación simple de alto nivel sería así;

Cuando usted (como titular de un token DAO) se separa de DAO, crea un nuevo DAO secundario y le devuelve (en una transacción) su parte enviándola al nuevo DAO dividido (su DAO).

El atacante creó un bucle (llamando recursivamente a la splitDAOfunción) que hizo que el DAO pagara varias veces en lugar de una vez.

Este ciclo provocó que el DAO transfiriera repetidamente (27996 veces) el monto del 237.62451099999999 Ethernuevo DAO secundario.

La publicación de blog de Ethcore hace un buen trabajo al describir la historia del ataque. Básicamente, sabían de la vulnerabilidad dos días antes del ataque y arreglaron la función que pensaban que estaba afectada. Leer más aquí blog slock.it .

Del tipo que escribió sobre la vulnerabilidad antes del ataque:

Escribí esta vulnerabilidad la semana pasada: puedes leer más sobre esto en mi blog. En palabras simples, es como si la cajera del banco no cambiara tu saldo hasta que te haya dado todo el dinero que solicitaste. "¿Puedo retirar $500? Espera, antes de eso, ¿puedo retirar $500?"

Y así. Los contratos inteligentes, tal como están diseñados, solo comprueban que tiene $ 500 al principio, una vez, y permiten que se interrumpan.

La entrada de blog que menciona se puede encontrar aquí .

Una analogía razonable que he escuchado es:

  • Vas a un cajero automático y retiras el dinero.
  • Después de que el cajero automático le da el dinero, desconecta el cajero automático antes de que actualice su cuenta.
  • Vuelve a conectar el cajero automático, retira dinero y repite el proceso.

Una de las cosas que pueden ayudar a mitigar este ataque de reentrada es que primero se actualice su cuenta en el cajero automático, antes de darle el dinero.

Utiliza repetidamente una parte del código dao para enviar Ether a un nuevo child-dao que está bajo el control de los piratas informáticos pero bloqueado durante 27 días para que no se retire.

¿Por qué no podía simplemente extraerlo a su propia billetera? Como el código no permite esto para un Dao recién creado por un período predefinido de 27 días.

¿Por qué no podía simplemente extraerlo a su propia billetera?
Creo que porque el niño dao todavía está controlado por código.
Yap, puedes ver el código dao del niño aquí: etherchain.org/account/…