Más de 50 años después del primer mensaje interconectado, las redes de pares (P2P) siguen siendo criaturas raras en la vasta jungla de Internet. La capacidad de Bitcoin para proporcionar un sistema monetario abierto depende de su arquitectura P2P, y en su superficie de ataque, es la capa de red—cómo los pares descubren y se conectan entre sí—la que resulta ser más vulnerable. Hay dos lugares principales donde pueden surgir problemas: el propio protocolo de conexión de Bitcoin y los protocolos de Internet en los que depende. En este sentido, Core tiene un mandato dual: prevenir vectores de Denegación de Servicio (DoS) que pueden ser abusados entre nodos, y permitir que estos se comuniquen de manera segura en el desafiante entorno de Internet.
P2P
“Los gobiernos son buenos para cortar las cabezas de redes controladas centralizadamente como Napster, pero las redes P2P puras como Gnutella y Tor parecen mantenerse firmes.”
– Satoshi, 7 de noviembre de 2008 [1]
El protocolo P2P abarca cómo los nodos intercambian mensajes sobre transacciones, bloques y otros pares. Este intercambio de información es fundamental antes de que se pueda realizar cualquier transacción o validación de consenso, lo que lo convierte en una de las principales preocupaciones.
A lo largo de los años, ha habido varios errores en esta área. En 2017, por ejemplo, se corrigió y divulgó una vulnerabilidad en un servidor SOCKS malicioso [2]. Esta vulnerabilidad de «desbordamiento de buffer» podría, en teoría, llevar a diferentes tipos de ataques: colapsar el nodo, inyectar cargas útiles maliciosas o modificar datos en el nodo. En 2020, se informó y se corrigió una vulnerabilidad de alta gravedad en la que un par remoto podía obtener direcciones prohibidas, aumentando la lista de prohibiciones de forma cuadrática, lo que equivale a un DoS sobre el nodo [3]. Esta vulnerabilidad no fue divulgada hasta 2024. Este tipo de error se caracteriza como «de alta gravedad» ya que el ataque es simple de ejecutar, su efecto resulta en una pérdida de funcionalidad para el nodo, y tiene pocas condiciones previas requeridas para que funcione. Estos son los tipos de errores que mantienen a los desarrolladores de Core desvelados, y por ello se recomienda encarecidamente actualizar tu nodo a una versión aún mantenida (las versiones más antiguas de Core no reciben mantenimiento activo).
Esta red distribuida que llamamos Bitcoin sigue siendo relativamente pequeña: el conteo de nodos en clearnet se encuentra alrededor de 20,000, y aun asumiendo generosamente 100,000 nodos en TOR, seguimos teniendo una red pequeña y fácilmente supervisable. Recientemente, Daniela Brozzoni y naiyoma demostraron [4] que si un nodo funciona tanto con clearnet como con Tor, es trivial mapear las direcciones IPv4 y Tor de un nodo. Es muy probable que esto ya sea realizado por agencias de inteligencia y empresas de análisis de cadenas. Se vuelve fácil notar qué nodos publican qué transacciones primero, deduciendo la IP original de la transacción y, por ende, su localización. Si bien esto no es un error per se, ya que el nodo no se colapsa ni se comporta mal, se puede considerar una vulnerabilidad, ya que ofrece un método para vincular una dirección IP dada a una transacción.
Cómo prevenir esto de manera efectiva sigue siendo una pregunta abierta.
Los Territorios Peligrosos de la Web
“Construimos nuestras computadoras como construimos nuestras ciudades. Con el tiempo, sin un plan, sobre ruinas.” – Ellen Ullman [5]
Bitcoin opera en Internet, y su capacidad para seguir siendo un sistema distribuido y descentralizado depende de las propiedades de la misma infraestructura de Internet. Desafortunadamente, la arquitectura de Internet tal como la conocemos hoy es extremadamente insegura, con ataques conocidos que se emplean rutinariamente. La mayoría de estos ataques se realizan sin que se detecten hasta que el daño ya ha sido causado, y esto sin mencionar los regímenes de vigilancia que invaden Internet en la actualidad.
El vector de ataque más conocido y práctico a tener en cuenta se llama ataque de eclipse, donde todos los pares de un nodo víctima son maliciosos y alimentan una visión específica de la cadena o de la red al nodo víctima. Esta clase de ataque es fundamental en sistemas distribuidos; si controlas los pares de un nodo, controlas su percepción de la red. Ethan Heilman y colaboradores presentaron uno de los primeros ataques de eclipse prácticos en Bitcoin en USENIX 2015 [6], y en 2018, el documento sobre el ataque Erebus describió un ataque de eclipse “sigiloso” a través de un Sistema Autónomo (AS) malicioso [7].
Estos ataques aprovechan en gran medida debilidades en la forma en que las redes de Internet se comunican entre sí, como la topología de enrutamiento de los AS o mediante un protocolo llamado Border Gateway Protocol (BGP). Aunque existen iniciativas en curso para asegurar el protocolo BGP, como BGPsec y RPKI, ambos tienen limitaciones bien comprendidas, dejando a los administradores de Internet deseando soluciones más sólidas. Hasta que eso ocurra, Internet seguirá siendo el salvaje oeste.
Un análisis reciente de cedarctic en Chaincode Labs encontró que los nodos de Bitcoin están alojados en solo 4,551 AS, una fracción relativamente pequeña de las redes constitutivas que forman Internet. Describen una serie de ataques que pueden conducir a ataques de eclipse al comprometer el AS ascendente en el que operan los nodos [8]. La pequeña distribución de nodos entre AS y las relaciones específicas entre estos crean un vector de ataque único. Si bien existe remediaciones, no está claro si este vector de ataque fue bien comprendido previamente por los bitcoiners o sus adversarios.
Cualquier ataque que dependa de comprometer uno o varios AS requiere recursos, coordinación y habilidades para llevarse a cabo. Aunque no se ha reportado un ataque exitoso de este tipo en un nodo de Bitcoin, se han llevado a cabo con éxito contra mineros [9], billeteras [10], plataformas de intercambio [11] y puentes [12]. Aunque no vamos a solucionar Internet, podemos dotar a los nodos de herramientas para operar en este entorno adversarial.
Arsenal de Redes
A continuación, se presentan algunas características y funcionalidades que Bitcoin Core ha desarrollado o integrado para proteger a los usuarios contra ataques a nivel de red:
TOR (The Onion Router) es la red de superposición enfocada en la privacidad más antigua incorporada en Bitcoin Core. Crea saltos entre una red aleatoria de pares para ofuscar el tráfico.
v2transport [13] cifra las conexiones entre pares, ocultando el tráfico de espías y censores. El objetivo es frustrar a los observadores pasivos de la red para que no puedan espiar el contenido de tus comunicaciones con otros nodos.
I2P (el Proyecto de Internet Invisible [14]) es una característica opcional de Core que permite añadir una capa adicional, privada y cifrada a tus conexiones. Es una red de anonimato similar a Tor que se basa en pares para ofuscar el tráfico entre clientes y servidores.
ASmap [15] es otra característica opcional de Core que implementa una mitigación para el ataque de Erebus ya descrito por los autores en el documento, y se aplica a todos los ataques basados en AS. Al hacer que el mecanismo de conexión de Bitcoin sea consciente del AS del que provienen los pares, se asegura diversidad entre ellos, lo que hace que un ataque de eclipse sea exponencialmente más difícil, ya que un atacante tendría que comprometer muchos AS, lo cual es poco probable y casi imposible sin ser detectado. Bitcoin Core soporta la creación de un mapa de redes IP a su AS (un mapa AS) desde la versión 20.0, y el proyecto Kartograf permite a cualquier usuario generar fácilmente dicho ASmap.
Dado que es probable que Internet continúe siendo vulnerable a muchos ataques, una de las cosas que podemos hacer es observar el comportamiento de nuestros pares para intentar detectar comportamientos maliciosos. Este es el impulso detrás del proyecto de observador de pares por 0xb10c [16]. Proporciona un sistema de registro basado en tracepoints eBPF (una forma de observar las acciones más pequeñas en un programa que se ejecuta en un sistema operativo) para observar la actividad de un nodo, incluido el comportamiento de los pares. También te ofrece todo lo necesario para construir tus propios sistemas de registro.
Bitcoin Debe Ser Robusto
Asegurar la capacidad de conectarse a pares e intercambiar mensajes es un componente esencial de lo que hace que Bitcoin funcione.
Bitcoin opera en un entorno adversarial multidimensional, en el que muchas de las amenazas son generadas por las limitaciones de la arquitectura misma de Internet. Si Bitcoin quiere sobrevivir y prosperar, sus desarrolladores y usuarios deben aprender a navegar por estas extrañas aguas.
El precio de las redes abiertas es la vigilancia eterna.
No pierdas la oportunidad de adquirir El Problema Central, que presenta artículos escritos por muchos desarrolladores de Core que explican los proyectos en los que trabajan personalmente.
Este artículo es la Carta del Editor presentada en la última edición impresa de Bitcoin Magazine, El Problema Central. Lo compartimos aquí como una vista previa de las ideas exploradas en todo el número.
[0] https://web.mit.edu/gtmarx/www/connect.html
[1] https://satoshi.nakamotoinstitute.org/emails/cryptography/4/
[2] https://bitcoincore.org/en/2019/11/08/CVE-2017-18350/
[3] https://bitcoincore.org/en/2024/07/03/disclose-unbounded-banlist/
[4] https://delvingbitcoin.org/t/fingerprinting-nodes-via-addr-requests/1786/
[5] https://en.wikiquote.org/wiki/Ellen_Ullman
[6] https://www.usenix.org/system/files/conference/usenixsecurity15/sec15-paper-heilman.pdf
[7] https://ihchoi12.github.io/assets/tran2020stealthier.pdf
[8] https://delvingbitcoin.org/t/eclipsing-bitcoin-nodes-with-bgp-interception-attacks/1965
[9] https://www.theregister.com/2014/08/07/bgp_bitcoin_mining_heist/
[10] https://www.theverge.com/2018/4/24/17275982/myetherwallet-hack-bgp-dns-hijacking-stolen-ethereum
[11] https://medium.com/s2wblog/post-mortem-of-klayswap-incident-through-bgp-hijacking-en-3ed7e33de600
[12] www.coinbase.com/blog/celer-bridge-incident-analysis
[13] https://bitcoinops.org/en/topics/v2-p2p-transport/
[14] https://geti2p.net/en/
[15] https://asmap.org
[16] https://peer.observer
[13] https://github.com/asmap/kartograf
Fuente: bitcoinmagazine.com