Con esta publicación de blog, el propósito es revelar formalmente una amenaza grave a la plataforma Ethereum. Antes de la bifurcación dura de Ethereum Berlin, esta amenaza era muy real.
Comencemos con algunos antecedentes sobre Ethereum y el estado.
El estado Ethereum consiste en un trie patricia-merkle (un árbol de prefijos). Este artículo no entrará en demasiados detalles, a medida que crece el estado, las ramas de este árbol se vuelven más y más densas. Cada cuenta añadida es una hoja. Entre la raíz del árbol y la hoja misma, hay muchos nodos "intermedios".
Para encontrar una cuenta determinada u "hoja" en este enorme árbol, debe resolver entre 6 y 9 hashes desde la raíz hasta los nodos intermedios para finalmente resolver el último hash, que apuntará a los datos que estamos buscando. para.
En resumen: por cada búsqueda Trie realizada para encontrar una cuenta, se realizan 8-9 operaciones de análisis. Cada operación de análisis es una búsqueda en la base de datos, y cada búsqueda en la base de datos de palabras puede ser cualquier cantidad de operaciones de disco reales. El número de operaciones de disco es difícil de estimar, pero dado que la clave trie es un hash criptográfico (resistente a colisiones), la clave es "aleatoria", que es el peor de los casos para cualquier base de datos.
A medida que Ethereum crezca, será necesario aumentar el precio del gas para las operaciones que acceden al trie. Esto se realizó en Tangerine Whistle en el bloque 2,463,000 en octubre de 2016, que incluía EIP150. EIP150 aumentó drásticamente el costo del gas de algunas operaciones después del llamado "ataque de Shanghai" e hizo una serie de cambios para prevenir ataques DoS.
También se implementó otro aumento de gas en la mejora de Estambul, en la altura del bloque 9,069,000 en diciembre de 2019. En esta actualización, se activa EIP 1884.
EIP 1884 introduce los siguientes cambios en los costos operativos:
SLOAD aumentó de 200 a 800gas,
BALANCE aumentó de 400 a 700gas (AUTOBALANCE disminuyó),
EXTCODEHASH aumentó de 400 a 700 de gas.
En marzo de 2019, Martin Swende realizó algunas mediciones del rendimiento del código de operación EVM. Esta investigación condujo a la creación de EIP-1884. Unos meses antes de que EIP-1884 se pusiera en línea, se publicó oficialmente el documento "Broken Meter" (septiembre de 2019).
Dos investigadores de seguridad de ethereum (Hubert Ritzdorf y Matthias Egli) colaboraron con uno de los autores del artículo, Daniel Perez, para convertir una vulnerabilidad en un arma, que enviaron al programa de recompensas de ethereum. Esto es el 4 de octubre de 2019.
Lo alentamos a que lea esa presentación en su totalidad, es un informe bien escrito.
En un canal dedicado a discutir la seguridad entre clientes, los desarrolladores de Geth, Parity y Aleth fueron informados sobre la confirmación de ese día.
El fundador de Yearn.Finance niega haber abandonado el proyecto: Jinse Finance informó que el fundador de Yearn.Finance, Andre Cronje, acaba de twittear: "Todavía aquí, todavía en construcción, nada ha cambiado". [2020/10/10]
La esencia de la vulnerabilidad es desencadenar consultas aleatorias. Una variante muy simple es:
En su informe, los investigadores ejecutaron esta carga útil a través de eth_call en un nodo sincronizado con la red principal, estas son las cantidades ejecutadas al usar 10M de gas:
Usa EXTCODEHASH (400 gas) para lanzar un ataque de gas de 10M
Paridad: ~90s
Geth: ~70s
Use EXTCODESIZE (700gas) para lanzar un ataque de gas de 10M
Paridad : ~50s
Obtención: ~38 s
Claramente, los cambios introducidos por EIP 1884 tuvieron un impacto en la reducción de ataques, pero no lo suficiente.
Eso es cierto antes de Devcon Osaka. Durante Devcon, se compartió el conocimiento del problema entre los desarrolladores de clientes de mainnet. También tuvimos una reunión con Hubert y Mathias y Greg Markou (personal de ETC de Chainsafe). Los desarrolladores de ETC también recibieron el informe.
A medida que 2019 llega a su fin, sabemos que tenemos problemas mayores de lo que anticipábamos anteriormente, con transacciones maliciosas que podrían hacer que los intervalos de bloqueo aumenten a minutos. Para empeorar las cosas, los desarrolladores ya no están satisfechos con EIP-1884, que rompió algunos procedimientos contractuales, y los usuarios y mineros se apresuran a aumentar el límite de gas.
Además, solo dos meses después, en diciembre de 2019, Parity Ethereum anunció que dejaría de trabajar en Ethereum, mientras que OpenEthereum se hizo cargo del mantenimiento del código base.
Posteriormente, se creó un nuevo canal de coordinación de clientes donde los desarrolladores de Geth, Nethermind, OpenEthereum y Besu continuaron coordinándose.
Nos dimos cuenta de que teníamos que adoptar dos enfoques para abordar estos problemas. Una forma es usar el protocolo Ethereum y de alguna manera resolver ese problema en la capa del protocolo. Mejor no romper el contrato, mejor no castigar el "buen" comportamiento, pero aun así tratar de prevenir los ataques.
La segunda forma es a través de la ingeniería de software, cambiando el modelo y la estructura de datos en el cliente.
La primera actualización iterativa sobre cómo manejar este tipo de ataques se puede ver aquí. En febrero de 2020, la solución se lanzó oficialmente en forma de EIP 2583. La idea detrás de esto es simplemente agregar una penalización cada vez que una búsqueda Trie resulte en una falla.
Sin embargo, Peter encontró una solución para esta idea, un ataque de "relé de protección", que limita el alcance efectivo de esta penalización (alrededor de 800 gases).
El problema con las multas por faltas es que primero se debe realizar una búsqueda para determinar que se debe imponer una multa. Sin embargo, si no queda suficiente gasolina para hacer la penalización, indica que se ha hecho efectiva la tarifa pendiente. Incluso si resulta en el lanzamiento de una excepción, es posible envolver estas lecturas de estado en llamadas anidadas. Los llamantes externos pueden continuar repitiendo el ataque sin pagar una penalización (total).
Como tal, este EIP ha sido abandonado mientras buscamos mejores alternativas.
Alexey Akhunov exploró el concepto de Petróleo, que es una segunda fuente de "gas", pero es fundamentalmente diferente del gas en que es invisible para la capa ejecutiva y puede dar lugar a transacciones de restauración global.
Martin hizo una propuesta similar en mayo de 2020, para Karma.
Al iterar sobre estos planes, Vitalik Buterin recomienda solo aumentar el costo del gas y mantener las listas de acceso. En agosto de 2020, Martin y Vitalik comenzaron a iterar, que luego se convirtió en EIP-2929 y EIP-2930.
EIP-2929 resuelve de manera efectiva muchos problemas anteriores.
A diferencia de EIP-1884 (aumentar el costo incondicionalmente), solo aumenta el costo del contenido al que aún no se ha accedido. Esto resultó en un aumento de costos netos de menos del uno por ciento.
Además, como EIP-2930, no rompe ningún flujo de contrato
Y se puede ajustar aún más aumentando el costo del gas (sin interrumpir las operaciones).
El 15 de abril de 2021, todos se pondrán en marcha con la actualización de Berlín.
En octubre de 2019, el intento de Peter de resolver este problema fue tomar instantáneas de estado dinámico.
Una instantánea es una estructura de datos secundaria utilizada para almacenar el estado de Ethereum en un formato plano, que se puede construir completamente en línea durante la operación en vivo de un nodo Geth.
El beneficio de esto es que actúa como una estructura de aceleración para el acceso estatal:
En lugar de proporcionar lecturas de disco O(log N) (sobrecarga de LevelDB x) para acceder a cuentas/ranuras de almacenamiento, las instantáneas pueden proporcionar tiempo de acceso O(1) directo (sobrecarga de LevelDB x).
Las instantáneas son compatibles con la cuenta por entrada O(1) y la iteración de almacenamiento, lo que permite que los nodos remotos recuperen datos de estado secuenciales mucho más baratos que antes.
La presencia de instantáneas también permite casos de uso más exóticos, como la poda fuera de línea de Tries de estado o la migración a otros formatos de datos.
La desventaja de las instantáneas es que la cuenta original y los datos de almacenamiento se duplican efectivamente. Para mainnet, esto significa usar 25 GB adicionales de espacio SSD.
La idea de las instantáneas dinámicas se inició a mediados de 2019, el objetivo principal es ser el habilitador de la sincronización instantánea. En ese momento, el equipo de Geth estaba trabajando en una serie de "grandes proyectos".
Recorte sin conexión
Instantánea dinámica+Sincronización instantánea
Distribución de estado de LES a través de estado de fragmento
Sin embargo, al final se decidió priorizar las instantáneas por completo, aplazando otros proyectos por ahora. Estos sentaron las bases de lo que se convertiría en el algoritmo de sincronización snap/1. Se fusionó con mainnet en marzo de 2020.
Con el lanzamiento de la función Dynamic Snapshot, tenemos algo de espacio para respirar. Sería doloroso si la red ethereum fuera atacada, sí, pero al menos sería posible notificar a los usuarios sobre la habilitación de instantáneas. Toda la generación de instantáneas llevará una cantidad significativa de tiempo y las instantáneas aún no se sincronizarán, pero la red al menos seguirá funcionando.
En marzo-abril de 2021, se lanzó el protocolo snap/1 en geth, lo que permite la sincronización mediante un nuevo algoritmo basado en instantáneas. Si bien todavía no es el modo de sincronización predeterminado, esto es lo que hace que las instantáneas sean útiles no solo como protección contra ataques, sino también para los usuarios.
Según los términos del acuerdo, la actualización de Berlín se implementará oficialmente en abril de 2021.
Aquí hay algunos puntos de referencia desarrollados en nuestro entorno de monitoreo de AWS:
Antes de la actualización de Berlín, sin instantánea, 25 millones de gas: 14,3 s
Antes de la actualización de Berlín, había una instantánea, 25M de gas: 1,5 s
Después de la actualización de Berlín, sin instantánea, 25 millones de gas: ~3,1 s
Después de la actualización de Berlín, hay una instantánea, 25M de gas: ~0,3 s
Los números (aproximados) dicen que la actualización de Berlín reduce la efectividad del ataque en un factor de 5, y la instantánea reduce la efectividad del ataque en un factor de 10, para una reducción total del impacto del ataque en un factor de 50.
Estimamos que actualmente en la red principal (15 millones de gas), la creación de un bloque puede tardar entre 2,5 y 3 s en un nodo geth sin una instantánea. Este número seguirá deteriorándose (para los nodos que no son instantáneas) a medida que crece el estado.
Si el reembolso se usa para aumentar el uso efectivo de gas dentro de un bloque, se puede mejorar aún más (máximo) por un factor de 2x. Con EIP 1559, el límite de gas del bloque será más elástico y permitirá otro aumento de 2x en ráfagas temporales (ELASTICITY_MULTIPLIER).
En cuanto a la factibilidad de realizar este ataque, el costo que requiere el atacante para comprar un bloque completo es de unos pocos ETH (1.5 ETH por 100Gwei para comprar 15Mgas).
Esta amenaza ha sido durante mucho tiempo un "secreto a voces" y, de hecho, se ha revelado públicamente al menos una vez sin darse cuenta, y se ha mencionado varias veces durante las conferencias telefónicas de ACD sin detalles claros.
Con la actualización de Berlín ahora en el pasado, y los nodos geth que usan instantáneas de forma predeterminada, estimamos que el nivel de amenaza es demasiado bajo para ser público, y es hora de una divulgación completa de lo que los desarrolladores anteriores estaban haciendo detrás de escena.
Es fundamental que la comunidad tenga la oportunidad de comprender las razones detrás de los cambios que afectan negativamente la experiencia del usuario, como el aumento de los costos de la gasolina y la limitación de los reembolsos.
Esta publicación fue escrita por Martin Holst Swende y Peter Szilagyi el 2021-04-23. Compartido con otros proyectos basados en Ethereum el 26 de abril de 2021 y divulgado públicamente el 18 de mayo de 2021.
Tags:
1. Observación Dorada | ¿BTC realmente consume tanta energía?Alcanzar un futuro sostenible es una cuestión existencial para la humanidad. Así que cualquiera que acuse a los gobiernos.
Este artículo fue editado originalmente por ZB Research Institute Resumen de puntos calientes: 1. CEO de Galaxy Digital: Bitcoin debería poder mantener la marca de $ 40.
Como grupo comunitario, tiendo a estar increíblemente entusiasmado con los protocolos fuera de la cadena como una forma de escalar la web. Permite que la mayoría de las transacciones se muevan de las cadenas de bloque.
Con esta publicación de blog, el propósito es revelar formalmente una amenaza grave a la plataforma Ethereum. Antes de la bifurcación dura de Ethereum Berlin.
El 12 de mayo, Musk, un compañero de clase que "trae bienes" en el círculo monetario de vez en cuando.
Parece que debido a la influencia del contenido de la revista Nature.
Este año ha sido una montaña rusa para Ethereum, con Ethereum a partir de 2021 a poco más de $720. Sin embargo, en el momento de escribir este informe.