En un Ataque Eclipse o Eclipse Attack un atacante busca aislar a un usuario específico o nodo dentro de una red punto a punto.
Cuando lo consigue, el atacante lo logra redireccionando las conexiones entrantes y salientes de la víctima de los nodos legítimos y haciendo que se conecte a los nodos que este controla. Esto provoca que quede aislado del resto de la red y de esta forma no pueda interactuar con ella.
Luego, al esconder el estado actual de la red, el atacante puede manipular al nodo asilado de diferentes formas para que confirme transacciones que no son válidas por el resto de la red e interrumpir la minería de bloques.
Se trata de un ataque que tiene su base en la explotación de los nodos cercanos al objetivo, por tanto, la facilidad con la que puede ejecutarse uno dependerá del tipo de cadena de bloques en donde se quiera perpetuar el ataque.
Pero si bien puede ser muy perjudicial para la víctima, la naturaleza descentralizada de las blockchains suele ser una buena herramienta preventiva, por eso es una práctica bastante rara de encontrar en el mundo real.
Veremos en este artículo como es que funciona específicamente este ataque, también como se puede mitigar y también los efectos que este tendría.
Contenido
¿Cómo funciona el ataque eclipse?
Un ataque eclipse en las criptomonedas puede ser llevado a cabo debido a que los nodos de una red descentralizada no pueden conectar simultáneamente con todos los nodos, debido a un límite en el ancho de banda. Gracias a esto, solo pueden interactuar con una serie limitada de nodos vecinos.
Esto es lo que aprovecha un atacante, que solo debe comprometer este grupo de nodos, controlándolos, en lugar de tener que atacar toda la red entera. Algo que si ocurriría durante un ataque sybil.
Para poder engañar al nodo víctima, el atacante utiliza una botnet o una red fantasma, que se crea a partir de nodos anfitriones que atacan al nodo objetivo con una gran cantidad de direcciones IP.
Luego el atacante espera a que la víctima se desconecte de la red, o lo provoca con un ataque de denegación de servicios (DDoS) para forzarlo a hacerlo.
Finalmente, cuando se reconecta, el nodo víctima necesita sincronizarse de nuevo con la red y utiliza las IP con las que fue bombardeado para hacerlo. Estas sabemos que son las IP de los nodos maliciosos.
Esto puede llevar un tiempo y varios intentos, pero una vez que se haya conectado a los nodos controlados por el atacante, entonces el nodo víctima ha quedado comprometido.
A partir de aquí el atacante puede darle información falsa a la víctima que no sospecha de nada. Generando algunos beneficios para el atacante.
¿Consecuencias de un ataque de este tipo?
Un atacante puede sacar ventaja de aislar a un nodo y al controlar las conexiones salientes y entrantes que este tiene. Una de estas es la de realizar un ataque de doble gasto con 0 confirmaciones.
Supongamos que tenemos un usuario A (el atacante), un usuario B (la víctima) y un usuario C (otro nodo de la red).
El usuario puede enviar un pago al usuario C y luego enviar la misma transacción al usuario B. El usuario B no podrá detectar este intento de doble gasto porque las conexiones apuntan a nodos de A, que le informan algo diferente. Solo conectándose al nodo C podría hacerlo, pero se encuentra aislado.
El usuario B podría aceptar las monedas, dándose cuenta del error una vez que se conecte finalmente a la cadena de bloques original. Una vez que lo haga, la transacción que recibido será inválida y perdería todos los fondos.
Otro objetivo que tendría un atacante para llevar a cabo este esquema es atacar a la cadena de bloques en sí. Básicamente aislando los nodos mineros y secuestrando el poder de minado.
La víctima solo vería la cadena de bloques que el atacante le estaría mostrando, lo cual le llevaría a apoyar a esta nueva cadena.
Si el atacante consiguiera controlar varias víctimas, en especial aquellas con un gran poder de minado, no solo le robaría hashpower a esa criptomoneda, sino que provocaría un hard fork bastante importante que contaría con una gran cantidad de poder de minado.
Existen también otros tipos de efectos que se pueden lograr sobre algunas cadenas de bloques que utilizan la Prueba de Trabajo (PoW) como Bitcoin.
Carrera de bloques
Se le llama carrera de bloques a la situación en la que dos mineros descubren un bloque al mismo tiempo. Uno se volverá parte de la red y el otro quedará huérfano.
Un atacante podría eclipsar a un minero, o varios, y tomar los bloques que este mina, publicándolo una vez que un bloque competidor ha sido descubierto. De esta forma, estaría desaprovechando el poder de minado de este, o del grupo que controla.
En cierta forma, esto se parece mucho a la minería egoísta, en eso de esconder bloques y librarlos solo para hacer el trabajo de alguien obsoleto.
Dividir el poder de minado
Si controla ciertos mineros con una gran cantidad de poder de hash, puede utilizar este poder para lanzar un ataque a la minería, como puede ser el ataque del 51%.
Además, puede ocultar los cambios en el hashpower al crear variaciones que se verían como naturales. Es decir, eclipsar y liberar a distintos nodos mineros para generar la falsa sensación de que nada raro está ocurriendo.
Doble gasto con N confirmaciones
Si el atacante ha eclipsado a una fracción X de minero, también puede lanzar un ataque de doble gasto de N confirmaciones.
En una transacción de N confirmaciones, el vendedor libera su producto una vez que se haya alcanzado ese valor de confirmaciones.
Aquí el atacante enviaría la transacción a los mineros con la cadena de bloques falsa, que la incorporarían a la información obsoleta que tienen.
Luego el atacante le enseñaría al comerciante esta vista, recibirá el producto y le enviaría al minero y al comerciante la verdadera cadena de bloques.
De esta forma, obtendría un bien y servicio, pero no lo pagaría porque la transacción no sería válida en la cadena de bloque que verdaderamente importa.
¿Cómo prevenir este ataque?
Un nodo puede ser eclipsado siempre y cuando el atacante cuente con una cantidad importante de direcciones IP. Por eso la forma más fácil de contrarrestar el ataque es limitar las conexiones entrantes y tener mucho cuidado con cualquier conexión que establezca el nodo.
Lamentablemente, si utilizamos este camino, podemos hacer más difícil que un nuevo nodo honesto se conecte a la red. En especial si todos los nodos toman esta medida.
Debido a que la naturaleza de la mayoría de las cadenas de bloques es de código abierto, es bastante fácil que un atacante con ciertos conocimientos pueda leer su código y entender como funciona para encontrar ciertas vulnerabilidades o errores a los cuales explotar.
Los cambios estructurales que se hacen sobre una de esta red son difíciles de implementar. Por eso si estás diseñando una nueva blockchain es mejor desarrollar los mecanismos necesarios para prevenirla desde el comienzo que hacerlo cuando ya está operativa.
Sin embargo, hay algunas recomendaciones que podemos utilizar para prevenir estos ataques:
1. Selección aleatoria de nodos
Una manera de estructurar esta red punto a punto para hacer más difícil este ataque es básicamente hacer que los nodos se conecten a direcciones IP aleatorias cada vez que se sincronizan con la red, en lugar de siempre usar una lista de nodos.
Esta medida reduce significativamente la posibilidad de que un atacante controle a un nodo, incluso si este recién se ha conectado a la red.
2. Selección determinística de nodos
Otra solución consiste en tomar un camino completamente opuesto al que vimos arriba. En lugar de elegir IPs de forma aleatoria, un nodo podría tener una lista de nodos en los que confía para sincronizarse cada vez que se reconecta a la red.
Esto le haría la tarea muy difícil al atacante si es que quiere que los nodos se conecten a su red de nodos maliciosos. Tendría que controlar todos los nodos de su lista y eso no siempre será posible.
Otra forma de hacerlo es que la cadena de bloques incorpore un cierto sistema de puntajes que brinde confianza acerca de los nodos, así un nodo que se conecta a la red puede elegir entre ellos sin preocuparse de que podría estar siendo engañado.
Sería como un sistema de identificación, que contario a hacerlo de forma aleatoria, brindaría más seguridad a la red y la volvería menos susceptible al ataque de terceros que podrían aislar a ciertos nodos del resto de la red.
Sin embargo, hay un par de problemas que encontramos en esta última solución a pesar de que es una buena idea en los papeles.
Por un lado, si todos los nodos se conectan a una serie de nodos en concreto, esto causaría problemas de escalabilidad en la red. Ya que los mismos no podrían hacer frente a todas las conexiones necesarias.
También crearía un problema de falta de anonimato, al existir una forma de identificar los nodos en lugar de que estos sean completamente indistinguibles en la red a pesar de la IP (la cual no necesariamente puede ser la real, podría el nodo estar detrás de Tor).
3. Incrementar las conexiones de nodos
También se puede incrementar la cantidad de conexiones que establece un nodo, lo cual aumenta las posibilidades de que el mismo se conecte a usuarios legítimos.
Esta solución también aumentaría los requerimientos de un atacante, que ahora necesitaría más nodos para poder aislar a la víctima.
Sin embargo, esta solución también tiene sus problemas, y tiene que ver precisamente con el ancho de banda.
Si una red aumentara la cantidad de conexiones que un nodo establece, estaría sacrificado rendimiento, limitando la eficacia así de esta solución.
Además, no habría tantos nodos que pudieran participar debido a que las conexiones serían demasiado para su configuración. Por ejemplo, algunos routers podrían dar problemas.
4. Restricción a nuevos nodos
Si se estableciera algún tipo de mecanismo que ocasionara que sea más difícil o costoso crear nuevos nodos en la red, la cadena de bloques haría más difícil o costoso a un atacante crear los nodos que necesita para eclipsar a la víctima.
Existen varias formas de implementar esto, como por ejemplo la de limitar el número de nodos por IP o dispositivo. Una medida que es interesante, pero que puede ser resuelta por el atacante fácilmente si cuenta con suficientes dispositivos con sus propias IPs únicas.
Además, esto también limitaría la cantidad de nodos que existirían en la red y, por tanto, la volvería más centralizada.
Resumen
- Es un ataque donde el nodo víctima queda aislado de la red y esto es aprovechado por el atacante.
- Se pueden confirmar transacciones inválidas y también crear una disrupción en la minería.
- Es un tipo de ataque que no afecta a toda la red, sino que a un nodo en particular.
Conclusión
Se trata de un ataque que afecta a un usuario en particular, o una serie de ellos, en lugar de toda la red. Pero si se implementa en forma masiva o de forma estratégica, puede eventualmente perjudicar toda la red.
Es por esto que se debe trabajar en implementar soluciones adecuadas para este problema en particular, así como aprender a configurar un nodo de la manera correcta.
Agrega un Comentario