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.
Resumen
Los puentes blockchain son fundamentales para lograr la interoperabilidad en el espacio blockchain. Por lo tanto, la seguridad de la tecnología de puente entre cadenas es crucial. Algunas vulnerabilidades comunes de seguridad del puente blockchain incluyen verificación insuficiente dentro y fuera de la cadena, manejo inadecuado de tokens nativos y configuración incorrecta. Para garantizar que la lógica de verificación sea sólida, se recomienda probar el puente entre cadenas contra todos los posibles vectores de ataque.
Introducción
Un puente blockchain es un protocolo que conecta dos blockchains y les permite interactuar. A través del puente blockchain, si los usuarios desean participar en actividades DeFi en la red Ethereum, solo necesitan tener Bitcoin y no necesitan venderlo para lograr sus objetivos.
El puente Blockchain es la base para la interoperabilidad en el campo blockchain. Utilizan varias verificaciones dentro y fuera de la cadena para funcionar, por lo que también puede haber diferentes vulnerabilidades de seguridad.
¿Por qué es crítica la seguridad de los puentes blockchain?
Los puentes blockchain suelen contener tokens que los usuarios quieren transferir de una cadena a otra. Los puentes blockchain generalmente se implementan en forma de contratos inteligentes. A medida que las transferencias entre cadenas continúan acumulándose, una gran cantidad de tokens se mantendrán en el puente. Esta enorme riqueza los convertirá en un objetivo codiciado para los piratas informáticos.
Además, la superficie de ataque de los puentes blockchain tiende a ser grande debido a la gran cantidad de componentes involucrados. Por lo tanto, los delincuentes tienen fuertes incentivos para apuntar a aplicaciones entre cadenas para obtener grandes cantidades de fondos.
Según estimaciones de CertiK, los ataques a puentes blockchain causaron más de 1.300 millones de dólares en pérdidas en 2022, lo que representa el 36% de las pérdidas totales de ese año.
Vulnerabilidades comunes de seguridad de puentes entre cadenas
Para mejorar la seguridad de un puente blockchain, es importante comprender las vulnerabilidades de seguridad comunes de los puentes entre cadenas y probar el puente blockchain antes de lanzarlo. Estas vulnerabilidades provienen principalmente de los siguientes cuatro aspectos:
Verificación en cadena insuficiente
Para puentes blockchain simples, especialmente aquellos diseñados para una dApp específica, generalmente solo existe un nivel mínimo de verificación en cadena. Estos puentes dependen de un backend centralizado para realizar operaciones básicas como acuñación, quema y transferencias de tokens, y toda la verificación se realiza fuera de la cadena.
Mientras que otros tipos de puentes utilizan contratos inteligentes para validar mensajes y verificarlos en cadena. En este caso, cuando un usuario deposita fondos en la cadena, el contrato inteligente genera un mensaje firmado y devuelve la firma en la transacción. Esta firma se utilizará como prueba de depósito y para verificar la solicitud de retiro del usuario en otra cadena. Este proceso debería evitar varios ataques a la seguridad, incluidos ataques de repetición y registros de recarga falsificados.
Sin embargo, si existe una vulnerabilidad en el proceso de verificación en cadena, un ataque podría causar daños graves. Por ejemplo, si la cadena de bloques utiliza árboles Merkle para verificar los registros de transacciones, un atacante puede generar pruebas falsificadas. Esto significa que si el proceso de verificación es vulnerable, un atacante puede eludir la verificación de prueba y acuñar nuevos tokens en su cuenta.
Algunos puentes blockchain implementan el concepto de "tokens envueltos". Por ejemplo, cuando un usuario transfiere DAI de Ethereum a BNB Chain, su DAI se retira del contrato de Ethereum y se emite una cantidad igual de DAI envuelto en BNB Chain.
Sin embargo, si esta transacción no se valida adecuadamente, un atacante puede implementar un contrato malicioso que manipule esta funcionalidad para enrutar tokens envueltos desde el puente a la dirección incorrecta.
El atacante también necesita que la víctima apruebe el contrato de puente entre cadenas antes de utilizar la función "TransferFrom" para transferir tokens, quitando así activos del contrato de puente entre cadenas.
Pero la parte complicada es que muchos puentes entre cadenas requieren que los usuarios de dApp aprueben una cantidad ilimitada de tokens. Esta práctica es muy común, lo que puede reducir las tarifas del gas, pero permite que los contratos inteligentes accedan a una cantidad ilimitada de tokens desde la billetera del usuario. lo que traerá Riesgos Adicionales. Los atacantes aprovecharían estas verificaciones insuficientes y aprobaciones excesivas para transferir tokens de otros usuarios a ellos mismos.
Verificación fuera de cadena insuficiente
En algunos sistemas de puentes entre cadenas, los servidores backend fuera de la cadena desempeñan un papel crucial en la verificación de la legitimidad de los mensajes enviados desde la cadena de bloques. En este caso, debemos centrarnos en la verificación de la transacción de recarga.
Un puente blockchain con verificación fuera de la cadena funciona de la siguiente manera:
Los usuarios interactúan con la dApp y depositan tokens en contratos inteligentes en la cadena de origen.
Luego, la dApp envía el hash de la transacción de depósito al servidor backend a través de la API.
El servidor debe verificar el hash de la transacción varias veces. 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.
Una vez recibida la firma, la dApp la verifica y permite al usuario retirar tokens de la cadena objetivo.
El servidor backend debe asegurarse de que las transacciones de recarga que maneja sean reales y no falsificadas. Este servidor backend determina si un usuario puede retirar tokens en la cadena objetivo, convirtiéndolo en el primer objetivo de los ataques.
El servidor backend necesita verificar la estructura del evento de inicio de la transacción y la dirección del contrato que inició el evento. Si se ignora esto último, los atacantes pueden implementar contratos maliciosos para falsificar eventos de recarga con la misma estructura que los eventos de recarga legítimos.
Si el servidor backend no verifica qué dirección inició el evento, asumirá que es una transacción válida y firmará el mensaje. Luego, un atacante puede enviar el hash de la transacción al servidor backend, evitando la verificación y permitiéndole retirar tokens de la cadena de destino.
Manejo inadecuado de tokens nativos
Los puentes entre cadenas adoptan un enfoque diferente a los tokens nativos y los tokens de utilidad. Por ejemplo, en la red Ethereum, el token nativo es ETH y la mayoría de los tokens de utilidad cumplen con el estándar ERC-20.
Si un usuario tiene la intención de transferir su ETH a otra cadena, primero debe depositarlo en el contrato de puente entre cadenas. Para hacer esto, el usuario simplemente adjunta ETH a la transacción y puede recuperar la cantidad de ETH leyendo el campo de transacción "msg.value".
Depositar tokens ERC-20 es muy diferente a depositar ETH. Para depositar tokens ERC-20, los usuarios primero deben permitir que el contrato puente entre cadenas utilice sus tokens. Después de aprobar y depositar los tokens en el contrato puente entre cadenas, el contrato utilizará la función "burnFrom()" para destruir los tokens del usuario, o la función "transferFrom()" para transferir los tokens del usuario al contrato.
Para distinguir qué operación es, puede usar declaraciones if-else en la misma función. O cree dos funciones separadas para manejar cada escenario. Debido a los diferentes métodos de procesamiento, si un usuario intenta depositar ETH utilizando la función de depósito ERC-20, es posible que se pierda el ETH.
Al procesar solicitudes de depósito ERC-20, los usuarios suelen proporcionar la dirección del token como parámetro de entrada para la función de depósito. Esto plantea un riesgo importante, ya que pueden producirse llamadas externas no confiables durante las transacciones. Usar una lista blanca para incluir solo tokens respaldados por un puente entre cadenas es una práctica común para minimizar el riesgo. Sólo las direcciones incluidas en la lista blanca se pasan como parámetros. Esto evita llamadas externas porque el equipo del proyecto ha filtrado las direcciones de los tokens.
Sin embargo, también existe un problema cuando el puente entre cadenas maneja la transferencia entre cadenas de tokens nativos, porque los tokens nativos no tienen direcciones. Los tokens nativos se pueden representar mediante una dirección especial, la "dirección cero" (0x000... 0). Pero hay un problema con esto: si la lógica de verificación de la lista blanca no se implementa correctamente, pasar una dirección cero a la función puede omitir la verificación de la lista blanca.
Cuando el contrato de puente entre cadenas llama a "TransferFrom" para transferir activos del usuario al contrato, la llamada externa a la dirección cero devolverá falso porque la función "transferFrom" no está implementada en la dirección cero. Sin embargo, si el contrato no maneja el valor de retorno correctamente, la transacción aún puede continuar realizándose. Esto crea una oportunidad para que un atacante ejecute una transacción sin transferir ningún token al contrato.
Error de configuración
En la mayoría de los puentes de blockchain, existe una función privilegiada responsable de incluir tokens y direcciones en listas blancas o negras, asignar o cambiar firmantes y otras configuraciones clave. Es fundamental garantizar que todas las configuraciones sean precisas, ya que descuidos aparentemente triviales pueden provocar daños importantes.
De hecho, ha habido incidentes en los que los atacantes lograron eludir la verificación del registro de transferencia debido a una mala configuración. El equipo del proyecto implementó una actualización del protocolo días antes del hack en la que se cambió una determinada variable. Esta variable es el valor predeterminado utilizado para representar mensajes confiables. Este cambio hace que todos los mensajes se consideren autenticados automáticamente, lo que permite que un atacante envíe un mensaje aleatorio y pase la validación.
Cómo mejorar la seguridad de los puentes entre cadenas
Las cuatro vulnerabilidades comunes de los puentes entre cadenas descritas anteriormente demuestran que no se pueden subestimar los desafíos que enfrenta la seguridad en un ecosistema blockchain conectado. Para abordar estas vulnerabilidades, debemos considerar "según las condiciones locales". Ningún método puede ser una panacea para abordar todas las vulnerabilidades.
Por ejemplo, dado que cada puente entre cadenas tiene requisitos de verificación únicos, sería difícil garantizar que el proceso de verificación esté libre de errores simplemente proporcionando pautas generales. La forma más eficaz de evitar la omisión de la verificación es probar exhaustivamente el puente entre cadenas contra todos los posibles vectores de ataque y garantizar que la lógica de verificación sea razonable.
En definitiva, se deben realizar pruebas rigurosas contra posibles ataques, prestando especial atención a las vulnerabilidades de seguridad más comunes en los puentes entre cadenas.
Conclusión
Debido al gran volumen de fondos, los puentes entre cadenas han sido el objetivo de los atacantes durante mucho tiempo. Los constructores pueden fortalecer la seguridad de los puentes entre cadenas realizando pruebas integrales previas a la implementación e incorporando auditorías de terceros, reduciendo así el riesgo de ataques catastróficos que se han cernido sobre los puentes entre cadenas en los últimos años. Los puentes entre cadenas son cruciales en un mundo de múltiples cadenas, pero la seguridad debe ser una consideración primordial al diseñar y construir una infraestructura Web3 eficaz.
Otras lecturas
¿Qué es un puente blockchain?
¿Qué es la interoperabilidad entre cadenas?
Tres puentes de criptomonedas populares y cómo funcionan
¿Qué es una ficha envuelta?
Descargo de responsabilidad y advertencia de riesgo: el contenido de este artículo son hechos y tienen como objetivo información general y fines educativos únicamente y no constituyen ninguna representación o garantía. Este artículo no debe interpretarse como asesoramiento financiero, legal u otro tipo de asesoramiento profesional y no es una recomendación para que compre ningún producto o servicio específico. Debe buscar su propio consejo en asesores profesionales adecuados. Si este artículo fue proporcionado por un colaborador externo, tenga en cuenta que las opiniones expresadas en este artículo pertenecen al colaborador externo y no reflejan necesariamente las opiniones de Binance Academy. Para obtener más información, haga clic aquí para leer nuestro descargo de responsabilidad completo. Los precios de los activos digitales pueden fluctuar. El valor de su inversión puede aumentar o disminuir y es posible que no recupere el capital invertido. Usted es el único responsable de sus propias decisiones de inversión y Binance Academy no es responsable de las pérdidas que pueda sufrir. Este artículo no constituye asesoramiento financiero, legal ni de otro tipo. Para obtener más información, consulte nuestros Términos de uso y Advertencia de riesgos.

