Preguntas frecuentes sobre el hackeo de TheDAO: ¿Cómo ocurrió el ataque el 17 de junio de 2016?

Kobayashi

Preguntas frecuentes sobre el hackeo de TheDAO: ¿Cómo ocurrió el ataque el 17 de junio de 2016?

¿Alguien puede explicar cómo sucedió el ataque DAO? Vitalik Buterin explicó aquí que se realizó dividiendo un DAO del DAO principal pero llamando a la splitfunción de forma recursiva.

Sabemos que la función recursiva es un tipo de función que se llama a sí misma, pero no estoy seguro de que sea el mismo caso que sucedió en el ataque DAO.

¿Alguien puede explicar qué significa llamar a una función de forma recursiva y cómo sucedió exactamente en el reciente ataque a la DAO?

Jus12

Es un poco difícil entender esto por completo sin el conocimiento de la solidez, el lenguaje contractual de alto nivel subyacente y cómo el EVM subyacente maneja las llamadas reentrantes (el método A llama a B y luego B llama a A).

roland kofler

Cualquiera que lea este artículo sobre el vector de ataque y esta publicación del foro podría haber descubierto que Ursium tiene una confianza errónea porque la función de división llama a la función de recompensa. Entonces sería fácil ejecutar el ataque para un web3.jsdesarrollador mediocre.

dragosb

No sé por qué esta es la respuesta aceptada. No explica nada, solo dos enlaces que tampoco explican lo que sucedió.

roland kofler

es una wiki de la comunidad, adelante y edítala

alper

El enlace del foro está muerto @Roland Kofler

roland kofler

¿Qué sucedió? 3,641,694 ETH donde se dividieron de theDAO. El atacante encontró una laguna en la función splitDAO normal para poder reutilizar los mismos tokens DAO una y otra vez.

¿Cómo funcionó exactamente el ataque?El atacante logró combinar 2 exploits. El primer exploit fue llamar recursivamente a la función split DAO. Eso significa que la primera llamada regular activaría una segunda llamada (irregular) de la función y la segunda llamada activaría otra llamada y así sucesivamente. Las siguientes llamadas se realizan en un estado antes de que el saldo del atacante vuelva a 0. Esto permitió al atacante dividir 20 veces (tener que buscar el número exacto) por transacción. No podía hacer más; de lo contrario, las transacciones se habrían vuelto demasiado grandes y eventualmente habrían alcanzado el límite de bloques. Este ataque ya habría sido doloroso. Sin embargo, lo que lo hizo realmente doloroso es que el atacante logró replicar este ataque desde las mismas dos direcciones con los mismos tokens una y otra vez (aproximadamente 250 veces desde 2 direcciones cada una). Entonces, el atacante encontró un segundo exploit que permitía dividir sin destruir los tokens en el DAO principal. Se las arreglaron para transferir los tokens antes de que fueran enviados a la dirección 0x0 y solo después de esto son devueltos) La combinación de ambos ataques multiplicó el efecto. El ataque uno a uno habría sido muy intensivo en capital (debe aportar 1/20 de la cantidad robada por adelantado), el ataque dos habría llevado mucho tiempo.

¿Es seguro el Ether restante en el DAO? No, lo más probable es que este exploit se haya utilizado para drenar todo el Ether del DAO. El atacante dejó de drenar ETH cuando Vitalik escribió su primera respuesta de blog que mencionaba el plan de bifurcaciones blandas y duras. Podemos suponer que el hacker se detuvo por razones estratégicas para hacer que la decisión de la comunidad sobre una bifurcación fuera menos probable. Sin embargo, los atacados también votaron en otras propuestas de bifurcación, para obtener más detalles, eche un vistazo aquí .

Dado que el Ether del atacante está en una copia de un contrato theDAO, ¿se puede robar el ETH de la misma manera? Esto hubiera sido posible si al menos un actor honesto hubiera votado por esta división. Dado que el atacante es probablemente el único accionista y curador de esta DAO, no se puede realizar el mismo ataque.

¿Cómo funcionaría la bifurcación suave propuesta? La bifurcación blanda sería una acción inmediata principalmente para ganar tiempo. Los mineros podrían modificar el cliente de Ethereum para que ignore todas las transacciones en las que, como resultado de la transacción, se deduce ETH de una dirección que tiene el código de la DAO. Los mineros también ignorarían bloques de otros mineros que incluirían dicha transacción. Si la mayoría de los mineros decide hacerlo, sería imposible para todos mover ETH de cada versión "theDAO". Por lo tanto, afectaría al "theDAO" principal y a todas las divisiones, incluidas la regular y la maliciosa.

¿Ya está disponible una versión de software de ETH con esta modificación? Sí, Parity y GETH han lanzado versiones adecuadas.

¿Qué debe suceder para activar la bifurcación suave? Requeriría un esfuerzo coordinado de la mayoría de los mineros. La coordinación es importante, de lo contrario, un minero probablemente perdería su ETH. Si, por ejemplo, realiza una mina en solitario, NO debe cambiar a la versión parcheada a menos que esté convencido de que la mayoría de los mineros lo hicieron porque, de lo contrario, su software ignorará la cadena más larga, ya que la consideraría inválida.

Los mineros necesitan comunicarse entre sí y definir un bloque en el futuro que debería usarse para cambiar a la nueva versión. Tan pronto como la mayoría acepta una nueva versión, es peligroso para un minero no usar la nueva versión.

Si la bifurcación suave tiene éxito, ¿cuál es el camino a seguir? Lo más probable es que la bifurcación suave sea solo una solución temporal. Si fuera la solución final, significaría que básicamente todo el ETH en todos los contratos de DAO se congela para siempre. Hay dos caminos más probables a seguir. Primero, una bifurcación dura: con una bifurcación dura, literalmente, todo es posible; discutiremos los caminos probables más adelante. El segundo camino desde el softfork freez es permitir solo cierto tipo de transacciones. Bajo el supuesto de que no se drena más ETH del DAO, un softfork 2 más específico podría permitir que cada DTH reciba su parte del ETH restante.

Si la bifurcación suave no tiene éxito, ¿qué pasará?Un lío muy grande de ataques y contraataques. El hacker de calor blanco y negro comenzará a explotar este error. Sin embargo, dado que cada división será pública, todos pueden unirse a cada división. La estrategia correcta sería dividir sus fichas para tener una cantidad muy pequeña de fichas en cada división. Entonces, si alguien está realizando el ataque, otros también tendrán acciones en el DAO dividido, lo que les permitirá realizar este ataque nuevamente en el nuevo DAO después de que finalice el período de creación. Esto podría resultar en una división interminable. Crearía incentivos para enviar spam a la red o sobornar a los mineros para censurar las transacciones. Además, es muy probable que se encuentren y exploten otros errores. Si termináramos en esta etapa, es muy probable que todos los DTH no técnicos lo perdieran todo.

¿Cuáles son los argumentos a favor y en contra de la bifurcación suave? El mayor argumento a favor de la bifurcación suave es la prevención del gran desorden que ocurriría sin una. Hay argumentos filosóficos en su contra: esencialmente, el softfork sería una forma de censura. Sin embargo, la mayoría de los afectados por esta censura le darían la bienvenida (todos los poseedores de tokens DAO) esperan al atacante. Sin embargo, hay un pequeño grupo de personas también afectadas por esto que podría no quererlo, todos los que escupieron de manera regular y confían en que ninguno de los otros accionistas en este DAO dividido los atacará (por ejemplo, porque son los únicos una).

¿Cuándo y cómo es posible una bifurcación dura?Una bifurcación dura requeriría una discusión más larga y un consenso. Para ejecutar una bifurcación dura, los mineros son menos importantes. Más importantes son los intercambios y el jugador clave en el ecosistema. (Fundación Ethereum, desarrolladores principales, empresas líderes en el ecosistema). Si todos esos jugadores aceptan una bifurcación dura, incluso una pequeña minoría de mineros sería suficiente, pero lo más importante: los mineros se unirían en esas condiciones casi con seguridad. Con una bifurcación dura en principal, TODOS los cambios de reglas son posibles. Se puede crear Ether nuevo, se puede destruir ETH legítimo, etc. Sin embargo, las posibilidades son 0 de que la comunidad esté de acuerdo con tal bifurcación. Entonces podemos reducir el rango esperado. En el extremo superior (en una escala de valor ETH por token DAO) sería una reversión completa de todas las divisiones ilegítimas. Eso significaría que los tokens DAO podrían volver a ser canjeables por 0.01ETH cada uno. El extremo inferior sería la proporción de ETH que queda en el contrato DAO, actualmente 0.006857 ETH (sin saldo adicional). Sin embargo, para tal solución no se requeriría una bifurcación dura, podría hacerse con una bifurcación suave. Entonces, una solución de consenso también podría ser que solo se restauren partes. Otros podrían destruirse o utilizarse para algún tipo de bien común (p. ej., la fundación Ethereum, un fondo descentralizado que subvencionará futuras auditorías de seguridad).

Información Adicional:

¿Cuál es la diferencia entre un tenedor duro y uno blando?Una bifurcación suave significa que un estado/bloque que solía ser válido ya no es válido en la nueva versión. En este caso, un estado que resultaría en gastar ETH de cualquier contrato con el código de la DAO se consideraría inválido. Una bifurcación dura hace válido un estado que antes no era válido. La gran ventaja de una bifurcación suave es que solo los mineros necesitan actualizar su software. Aunque eventualmente todos deberían hacerlo, si todos esperan suficientes confirmaciones, solo aceptarán estados que sean válidos según las nuevas reglas. Sin embargo, en una bifurcación dura, todos (consumidores, intercambios, ...) necesitan actualizar su software. De lo contrario, corren el riesgo de perder su ETH y otros activos en Ethereum. Por esta razón, el período entre el acuerdo sobre la bifurcación y la ejecución de la bifurcación debería ser mucho más grande de lo que puede ser en una bifurcación blanda.

¿Podemos rastrear la identidad del atacante? Esta es una pregunta abierta. Existe una probabilidad decente de que el ataque no se planeó con mucha anticipación, por lo que el pirata informático podría haber cometido errores al usar direcciones que se pueden vincular a su identidad. Aquí hay una excelente descripción general de las cuentas involucradas. El hacker fue cuidadoso y usó solo ETH de una transacción de Shapeshift.

¿Cuándo empezó el hacker a planear este ataque? Los dos contratos clave que contenían los tokens y tenían la lógica que permitía la división recursiva se crearon 2 días antes del ataque. Entonces por lo menos dos días. Sin embargo, se inició una división 7 días antes del ataque. Sin embargo, aún no está 100% claro si el atacante y el iniciador de esa división son el mismo. Es probable pero no necesario. El atacante podría haber usado cualquier propuesta dividida. Pero incluso si el atacante fue el iniciador de la escisión, no significa que ya estuvieran preparando el ataque en ese entonces. Bajo el supuesto de que el DAO estaba libre de errores, ha habido una oportunidad de arbitraje de comprar tokens DAO por menos de 0.01ETH y convertirlos a 0.01ETH con una división.

Si se implementa la bifurcación blanda, ¿puedo seguir transfiriendo tokens DAO? Sí, toda transacción que no afecte el saldo ETH de un contrato con el código de theDAO aún es posible. Puede encontrar más detalles sobre las diferentes soluciones de horquillas aquí

Este wiki se inició desde https://www.reddit.com/r/ethereum/comments/4os7l5/the_big_thedao_heist_faq por koeppelmann. La comunidad realiza más actualizaciones.

anand011090

@Roland Kofler Entiendo esto del reingreso, pero ¿puedo obtener más detalles sobre cómo el atacante pudo emitir más de 1 transacción porque una transacción habría logrado el saldo del atacante 0 en el DAO principal, pero cómo las siguientes transacciones fueron exitosas?

malta doble

Una respuesta de muy alto nivel y muy simplificada.

Si envía una solicitud de división al DAO, verifica su cuenta de token, crea una nueva copia del DAO con sus éteres y luego reduce su cuenta por la cantidad de tokens que dividió.

Sin embargo, si la dirección desde la que envía la solicitud de división reacciona a la respuesta enviando una nueva solicitud de división, su cuenta de tokens aún no está actualizada y puede recuperar más tokens de los que hay en su cuenta.

Eso permite que su cuenta de fichas caiga por debajo de cero, lo que le permite recuperar más éteres de los que ingresa.

Jus12

¿De dónde vienen los éteres extra?