El estado de los esquemas Ponzi – Solidificado

Desde los primeros días de Ethereum, los contratos inteligentes de Ponzi Scheme han estado apareciendo constantemente en las noticias. Han sido exhibidos no solo por las cuestiones éticas planteadas por los esquemas piramidales (a veces llamados "experimentos sociales"), sino también porque tienden a causar mucho más daño que el contrato inteligente promedio existente.

La explosiva mezcla de memes, "¡OBTENGA RÁPIDO RÁPIDO!" Y copie y pegue el código provocó una gran controversia, piruetas y robos de ETH. Este ecosistema es tan rico desde una perspectiva de seguridad que podría utilizarse como un estudio de caso sobre cómo la falta de cuidado puede afectar la calidad del código.

Los primeros días

Los siguientes contratos sentaron las bases para las fábricas de memes de hoy.

El contrato del Trono del Rey del Éter se usa hasta hoy como un ejemplo de cómo un send () a un contrato puede revertir debido a una función de reserva que gasta demasiado gas, o que el contrato de recepción lo revierta por la fuerza, lo que resulta en un contrato que está siempre congelado en estado. Fue congelado a principios de 2016, lo que convirtió a "Sir Wobblle" en el rey eterno, porque su billetera consumía más que los 2300 gases disponibles (enlace).

El Rubixi fue también uno de los primeros, lanzado a principios de 2016. El código fue copiado de un contrato anterior de Ponzi, pero el implementador olvidó cambiar el nombre de la función de constructor que se mantuvo como "DynamicPyramid". Esta función establece el msg.sender como propietario, por lo que cualquier dirección puede reclamar la propiedad del contrato y luego agotar las tarifas que cobró. Después de que se encontró la vulnerabilidad, los usuarios hicieron un ranking de direcciones que obtuvieron la mayoría de las tarifas:

Fuente: Bitcointalk

A partir de la solidez 0.4.23, la sintaxis del constructor cambió, y esto habría mitigado el error anterior.

En marzo de 2016, el esquema gubernamental cobró vida. El contrato tenía una función de pago que iteraba sobre todos los usuarios calculando el monto a pagar. Poco después de su despliegue, 1100 ETH se atascaron en él, debido a que los requisitos de gas de la función mencionada superaron el límite de gas del bloque.

En 2017, un innovador experimento académico del Dr. Jochen Hoenicke evolucionó el concepto a lo que todavía es el estándar actual. En su estudio, por primera vez, identificó las llamadas inversiones y creó el esquema en el que los recién llegados pagaban tarifas para todos los usuarios actuales. El problema es que el valor del token aumenta a medida que se venden más tokens, incentivando los retiros con el tiempo Hoenicke creó una prueba de concepto en la red de pruebas de Ropsten, y también incluyó los errores conocidos del contrato, incluida una función pública para drenar todo el ETH. Poco después, alguien más publicó el contrato a la red principal, y tuvo un error que fue maltratado días después (como lo describe el propio Hoenicke en su página web), lo que provocó el robo de al menos 2000ETH (enlace).

Bartoletti et al (2017) publicaron un documento sobre los Esquemas Ponzi y el impacto general en Ethereum, que describía varios aspectos del ecosistema, incluida la seguridad (enlace). Las conclusiones fueron algo alarmantes, ya que alrededor del 10% de los contratos inteligentes en Ethereum son Esquemas Ponzi, que contienen una cantidad considerable de ETH en ellos.

Historia reciente

Los esquemas de Ponzi han evolucionado, habiendo sobrevivido a los dolores de crecimiento del ecosistema (debo decir mucho más que en otros ecosistemas). Los contratos han evolucionado en complejidad y (casualmente o no) también han sido explotados varias veces.

Aunque la naturaleza de los contratos todavía es discutible (la ética de los esquemas Ponzi está fuera del alcance de este artículo), los usuarios parecen confiar realmente en el hecho de que se implementan en contratos inteligentes y en el hecho de que los esquemas no prometen intervención humana. .

Fuente: hilo de reddit powh3d, powh3d es la tercera versión de la Prueba de manos débiles, la historia que se describe a continuación.

También han implementado una nueva funcionalidad que aumenta la popularidad de los esquemas, la principal es masternodes, que permite a los influyentes atraer a otros usuarios y obtener un recorte de sus ganancias, lo que lleva a un flujo de artículos que fomentan el uso de dichos esquemas (enlace, enlace). , enlace, enlace).

Envío gratis disponible

El caso (o casos) más prominente en la memoria reciente es PoWHCoin y sus escisiones. Sus implementaciones de la moneda original de Ponzi fueron hackeadas una tras otra, generando prensa tanto en el lado cómico de la misma (enlace) como, por supuesto, de la comunidad de seguridad.

En resumen, Proof of Weak Hands (sitio web original: enlace) es un contrato inteligente que incentiva a los usuarios a "invertir" y mantener sus fichas (y ETH en el contrato inteligente) con la expectativa de que más "inversionistas entrarán en juego" y que Las fichas se venderán más adelante a un valor más alto. También incluyó el concepto masternode anteriormente mencionado.

Sus contratos inteligentes fueron hackeados uno tras otro, lo que resultó en el robo de fondos (enlace) y en los fondos de un contrato congelados (enlace). Curiosamente, los fondos congelados en el contrato de Shadowfork realmente se recuperaron, utilizando la misma vulnerabilidad de PoWHCoin (no pudimos encontrar ninguna información sobre si fueron devueltos a los usuarios).

Contenido original de ShadowPyramid

Entonces comenzó a generar una ola de clones que son difíciles de rastrear (enlace, enlace). Todas las escisiones se crean con el mismo nivel de humor y declaraciones audaces sobre seguridad:

Auditado?

La versión actual es https://powh.io/, que actualmente posee más de 4.5k ETH, o aproximadamente 2.5 millones de USD (junio / 2018) (enlace).

La EthPyramid también parece ser muy prominente, habiendo cambiado su marca a https://ethphoenix.io/. Actualmente posee 132 ETH / 91k USD. El objetivo del equipo era crear un contrato Ponzi libre de vulnerabilidad, y hasta ahora han tenido éxito.

Sabemos que no todos se reían

También una mención de honor a PonziCoin.co. Fue clonado a partir de un contrato Ponzi creado en 2014. Después de recibir algo de atención, el desarrollador detuvo el tema de lo que llamó "el primer esquema Ponzi legítimo del mundo". (enlace, enlace).

Ahora analizaremos algunas de las derivaciones y también trataremos de encontrar otras versiones de esquemas posiblemente interesantes (desde una perspectiva de seguridad).

Tenga en cuenta que no estamos auditando los contratos, solo les echaremos un vistazo rápido para encontrar posibles problemas. No considere los contratos libres de errores no divulgados aquí. Si alguna vez tiene dudas sobre la legitimidad de estos esquemas, vuelva a leer este prefacio dos veces. Tampoco revisamos ninguno de los Dapps que no se mencionan a continuación.

Como se esperaba, la mayoría de los esquemas creados hoy son clones de ethPyramid o PoWH. Los clones de ethPyramid suelen ser una copia exacta del original, incluido el nombre (la búsqueda de ethPyramid en Etherscan devuelve más de 10 resultados). La multitud de PoWH en realidad cambia bits y piezas de código, y a algunos de ellos todavía no les importa los desbordamientos de uint. A menudo dejan comentarios cómicos en el código fuente, como podemos ver en un par de fragmentos a continuación:

Ahora vamos a revisar esquemas no relacionados:

PonziICO se usó por última vez hace unos 50 días, actualmente tiene un poco más de 3 Eth, lo primero que me llamó la atención fue el hecho de que las tarifas son significativamente más altas de lo normal, al 50%:

Hay un bucle for ilimitado en el código (ver caso de gobernabilidad en el prefacio). Un bucle ilimitado podría hacer que la función alcance el límite de gas de bloque si el número del inversor es demasiado grande y, por lo tanto, provoca una denegación de servicio hasta que aumenten los límites de gas. Al menos, solo se ejecuta cada vez que alguien invierte o reinvierte, por lo que los usuarios aún podrán retirar sus fondos si eso sucede:

Estos contratos son muy similares, Ethstick parece una evolución de Piggibank. Todas las transferencias ETH en los contratos son envíos no verificados, como se muestra a continuación:

En el caso anterior, se recomienda una reversión, un requerimiento o una transferencia en lugar de envío. Si el envío falla, la función regresa, pero los fondos permanecen en el contrato inteligente. En otros lugares del contrato está presente el mismo problema.

Dos problemas con el código anterior, el valor de retorno del envío no se verifica, y si revierte, el saldo del usuario aún se modifica, por lo que el usuario perderá la cantidad de forma permanente. También tenga en cuenta que el estado se modifica solo después del envío, lo que posiblemente haga que el contrato sea vulnerable a la reentrada (la función de respaldo de un contrato inteligente podría llamar a la función de retiro una y otra vez hasta que se alcance el límite de gas).

El otro número que invoca la función podría adivinar fácilmente el número aleatorio calculado en la cadena (tomando el hash keccak del bloque.numero), ya que se procesarán en el mismo bloque, utilizando el mismo número de bloque.como parámetro.

Otra ilimitada para, lección no aprendida de Gobierno. Aunque el pago comienza en el índice de pagos, si se acumulan demasiados pagos adeudados, se podría alcanzar el límite de bloque de gas (la función de pago es bastante pesada, escribiendo varias variables de estado).

Un juego ponzi, donde el usuario paga por la tierra pero también puede encontrar cofres del tesoro que pagan. Fue "autodestructivo" por el propietario, drenando los éteres 1.047 que estaban almacenados en él. No se pudo encontrar la referencia si esto se debió a razones legítimas, la interfaz aún está en funcionamiento.

En este juego, el precio del token comienza en 1 ETH y aumenta un 20% por cada token comprado. Tomado de la página web:

Aunque se indica lo anterior, el creador del contrato puede drenar su saldo de la siguiente manera:

Como en el ejemplo anterior, el propietario podría autodestructirse y obtener todos los fondos del contrato:

Aunque se anunciaba como completamente inútil, los usuarios tenían que confiar en el propietario del contrato:

Como se vio anteriormente, la codificación descuidada puede convertirse en un desastre. Para la mayoría de los casos anteriores, una buena revisión, una buena cobertura de pruebas y una auditoría podrían haber evitado los peores problemas. No es de extrañar por qué los desarrolladores de esos contratos no se identificaron (aparte de usar apodos en la minoría de los casos). Cuando se codifica un contrato inteligente, el cuidado nunca es suficiente. Es imposible parchear los roles, la única manera de hacerlo bien es tener tantas revisiones como sea posible, una cobertura de prueba sólida y auditorías independientes.