Este artículo es una contribución de la comunidad. El autor es Minzhi He, auditor de CertiK.

Las opiniones expresadas en este artículo son las del colaborador/autor y no reflejan necesariamente las opiniones de Binance Academy.

En breve

Los puentes blockchain son la base para lograr la interoperabilidad en el sector blockchain. Por lo tanto, asegurar los puentes es muy importante. Algunas vulnerabilidades comunes de seguridad del puente incluyen autenticación débil dentro y fuera de la cadena, manejo inadecuado de tokens nativos y configuraciones incorrectas. El puente debe probarse para garantizar que pueda resistir todos los vectores de ataque y garantizar una lógica de verificación adecuada.

Introducir

Un puente blockchain es un protocolo que conecta dos blockchains para permitir la interacción entre ellas. Si posee bitcoins pero desea participar en la actividad DeFi en la red Ethereum, el puente blockchain le permitirá hacerlo sin vender sus bitcoins.

Los puentes blockchain son fundamentales para lograr la interoperabilidad en el sector blockchain. Operan utilizando diferentes autenticaciones dentro y fuera de la cadena y, por lo tanto, tienen diferentes vulnerabilidades de seguridad.

¿Por qué es importante la seguridad del puente?

Los puentes suelen contener tokens que los usuarios quieren transferir de una cadena a otra. A menudo implementados como contratos inteligentes, los puentes contienen una cantidad significativa de tokens a medida que se acumulan las transferencias entre cadenas, lo que los convierte en objetivos lucrativos para los piratas informáticos.

Además, los puentes blockchain tienen una gran superficie de ataque porque involucran muchos componentes. Dada esa naturaleza, los actores maliciosos están muy motivados para apuntar a aplicaciones entre cadenas para retirar grandes sumas de fondos.

Los ataques a puentes provocarán pérdidas de más de 1.300 millones de dólares en 2022, lo que representa el 36% de las pérdidas totales del año, según estimaciones de CertiK.

Vulnerabilidades puente comunes

Para mejorar la seguridad de los puentes, es valioso comprender las vulnerabilidades comunes de los puentes y probarlos antes de lanzarlos. Estas vulnerabilidades se pueden clasificar en cuatro tipos de la siguiente manera.

Autenticación en cadena débil

Para puentes simples, especialmente aquellos diseñados para DApps específicas, la validación en cadena suele ser mínima. Estos puentes dependen de un backend centralizado para realizar operaciones básicas como acuñar, quemar y transferir tokens mientras toda la verificación se realiza fuera de la cadena.

Por el contrario, otros tipos de puentes utilizan contratos inteligentes para validar mensajes y realizar verificación en cadena. En este caso, cuando un usuario deposita dinero en una cadena, el contrato inteligente genera un mensaje firmado y devuelve la firma en la transacción. Esta firma sirve como prueba de depósito y se utiliza para verificar la solicitud de retiro de un usuario en otra cadena. Este proceso podrá prevenir varios ataques de seguridad, incluidos ataques de repetición y registros de depósitos falsos.

Sin embargo, si existen vulnerabilidades en el proceso de autenticación en cadena, un atacante puede causar daños graves. Por ejemplo, si un puente utiliza un árbol Merkle para autenticar registros de transacciones, un atacante podría crear pruebas de manipulación. Esto significa que pueden eludir la autenticación de prueba y acuñar nuevos tokens en sus cuentas si el proceso de autenticación es vulnerable.

Algunos puentes implementan el concepto de "tokens envueltos". Por ejemplo, cuando un usuario transfiere DAI de Ethereum a la cadena BNB, su DAI se toma del contrato de Ethereum y se libera una cantidad equivalente de DAI envuelto en la cadena BNB.

Sin embargo, si esta transacción no se autentica correctamente, un atacante puede implementar un contrato malicioso para enrutar tokens envueltos desde el puente a una dirección incorrecta manipulando la funcionalidad.

Los atacantes también necesitan que la víctima apruebe el contrato puente para transferir los tokens utilizando la función "transferFrom" para retirar activos del contrato puente.

Desafortunadamente, esto empeora porque muchos puentes requieren una aprobación ilimitada de tokens por parte de los usuarios de DApp. Este es un método popular que reduce las tarifas del gas pero crea un riesgo adicional al permitir que el contrato inteligente acceda a una cantidad ilimitada de tokens desde la billetera del usuario. Los atacantes pueden aprovechar la falta de autenticación y las aprobaciones excesivas para transferirles tokens de otros usuarios.

Autenticación débil fuera de la cadena

En algunos sistemas puente, los servidores backend fuera de la cadena desempeñan un papel importante en la verificación de la legitimidad de los mensajes enviados desde la cadena de bloques. En este caso, nos centramos en verificar las transacciones de depósito.

Un puente blockchain con autenticación fuera de la cadena funciona de la siguiente manera:

  1. Los usuarios interactúan con la DApp para depositar tokens en un contrato inteligente en la cadena de origen.

  2. Luego, esta DApp envía la cadena hash de la transacción de depósito al servidor backend a través de API.

  3. La cadena hash de la transacción está sujeta a alguna validación del servidor. Si se considera legítimo, el firmante firma un mensaje y envía la firma a la interfaz de usuario a través de la API.

  4. Al recibir una firma, la DApp la verificará y permitirá a los usuarios retirar sus tokens de la cadena de destino.

El servidor backend debe garantizar que la transacción de depósito que procesa realmente tuvo lugar y no ha sido manipulada. Este servidor backend determina si los usuarios pueden retirar tokens en la cadena de destino y, por lo tanto, es un objetivo de alto valor para los atacantes.

El servidor backend necesita validar la estructura del evento emitido de la transacción, así como la dirección del contrato que emitió el evento. Si se ignora esto último, un atacante puede implementar un contrato malicioso para falsificar un evento de depósito con la misma estructura que un evento de depósito legítimo.

Si el servidor backend no verifica qué dirección emitió el evento, lo considera una transacción válida y firma el mensaje. Luego, el atacante puede enviar el hash de la transacción al backend, evitando la verificación y permitiéndole retirar tokens de la cadena de destino.

Manejo inadecuado de tokens nativos

Los puentes tienen diferentes enfoques para manejar tokens nativos y tokens de utilidad. Por ejemplo, en la red Ethereum, los tokens nativos son ETH y la mayoría de los tokens de utilidad cumplen con el estándar ERC-20.

Cuando los usuarios pretenden transferir su ETH a otra cadena, primero deben depositarlo en el contrato puente. Para lograr esto, los usuarios simplemente necesitan adjuntar ETH a la transacción y la cantidad de ETH se puede obtener leyendo el campo "msg.value" de la transacción.

Enviar tokens ERC-20 es significativamente diferente a enviar ETH. Para depositar un token ERC-20, los usuarios primero deben autorizar el contrato puente para gastar sus tokens. Una vez que hayan aprobado esto y depositado los tokens en el contrato puente, el contrato quemará los tokens del usuario usando la función "burnFrom()" o transferirá los tokens del usuario al contrato usando la función "transferFrom(("). )". .

Un método para diferenciar esto es utilizar una declaración if-else dentro de la misma función. Otro enfoque es crear dos funciones separadas para manejar cada situación. Intentar depositar ETH utilizando la función de depósito ERC-20 puede resultar en la pérdida de estos fondos.

Al procesar solicitudes de depósito ERC-20, los usuarios suelen proporcionar direcciones de token como entrada para la función de depósito. Esto plantea un riesgo importante ya que pueden producirse llamadas externas no confiables durante la transacción. Implementar una lista blanca que solo incluya tokens respaldados por puentes es una forma popular de mitigar el riesgo. Sólo se permiten direcciones incluidas en la lista blanca como argumentos. Esto evita llamadas externas porque el equipo del proyecto ha filtrado direcciones de token.

Sin embargo, también pueden surgir problemas cuando los puentes manejan transferencias entre cadenas de tokens nativos, ya que los tokens nativos no tienen una dirección. La dirección número 0 (0x000...0) representa el token original. Esto puede ser problemático porque pasar la dirección 0 a una función puede omitir la verificación de la lista blanca incluso si se implementa incorrectamente.

Cuando el contrato puente llama a "transferFrom" para transferir los activos del usuario al contrato, la llamada externa a la dirección cero devuelve falso porque no hay ninguna función "transferFrom" implementada en la dirección cero. Sin embargo, la transacción aún puede ocurrir si el contrato no maneja el valor de retorno de manera adecuada. Esto crea una oportunidad para que los atacantes realicen transacciones sin transferir ningún token al contrato.

Configuración incorrecta

En la mayoría de los puentes de blockchain, un rol privilegiado es responsable de incluir tokens y direcciones en listas blancas o negras, asignar o cambiar firmantes y otras configuraciones importantes. Garantizar que todas las configuraciones sean correctas es fundamental, ya que incluso errores aparentemente pequeños pueden provocar pérdidas importantes.

De hecho, hubo un problema en el que un atacante evitó con éxito la verificación del registro de transferencia debido a una mala configuración. El equipo del proyecto realizó una actualización del protocolo unos días antes del hack, que implicó cambiar una variable. Variable utilizada para representar el valor predeterminado de un mensaje confiable. Este cambio da como resultado que todos los mensajes se consideren automáticamente probados, lo que permite que un atacante envíe un mensaje arbitrario y omita el proceso de verificación.

Cómo mejorar la seguridad del puente

Las cuatro vulnerabilidades puente comunes explicadas anteriormente demuestran los desafíos de garantizar la seguridad en un ecosistema blockchain interconectado. Hay consideraciones importantes para abordar cada una de estas vulnerabilidades, y no existe un único manual que se aplique a todas ellas.

Por ejemplo, proporcionar pautas generales para garantizar un proceso de verificación sin errores es un desafío porque cada puente tiene sus propios requisitos de verificación. El enfoque más eficaz para evitar la omisión de la verificación es probar minuciosamente el puente contra todos los posibles vectores de ataque y garantizar una lógica de verificación adecuada.

En resumen, es fundamental realizar pruebas rigurosas contra posibles ataques y prestar especial atención a las vulnerabilidades de seguridad más comunes para los puentes.

resumen

Debido a su alto valor, los puentes entre cadenas han sido durante mucho tiempo un objetivo para los atacantes. Los desarrolladores pueden aumentar la seguridad de sus puentes realizando pruebas exhaustivas antes de la implementación y utilizando a terceros para participar en la auditoría, para reducir el riesgo de ataques devastadores, que han plagado los puentes en los últimos años. Los puentes son componentes muy importantes en un mundo de múltiples cadenas, pero la seguridad debe ser una preocupación principal para diseñar y construir una infraestructura Web3 eficaz.

Leer más:

¿Qué es un puente Blockchain?

¿Qué es la interoperabilidad entre cadenas?

Tres puentes de criptomonedas populares y cómo funcionan

¿Qué son las fichas envueltas?

Descargo de responsabilidad y advertencia de riesgo: este contenido se le presenta "tal cual" para información general y fines educativos únicamente, sin representación ni garantía de ningún tipo. No debe interpretarse como asesoramiento financiero, legal o profesional, ni pretende ser una recomendación para comprar ningún producto o servicio específico. Debe buscar su propio consejo en asesores profesionales adecuados. En los casos en que los artículos sean aportados por colaboradores externos, tenga en cuenta que las opiniones expresadas pertenecen al colaborador externo y no reflejan necesariamente las opiniones de Binance Academy. Lea nuestro descargo de responsabilidad completo aquí para obtener más detalles. Los precios de los activos digitales pueden fluctuar. El valor de su inversión puede subir o bajar y es posible que no recupere la cantidad que invirtió. Usted es el único responsable de sus decisiones de inversión y Binance Academy no es responsable de las pérdidas en las que pueda incurrir. Este material no debe interpretarse como asesoramiento financiero, legal o de otro tipo. Para obtener más información, consulte nuestros Términos de uso y Advertencia de riesgos.