miércoles, octubre 12, 2022

570M de USD robados en Tokens BNBs de la Binance Smart Chain (BSC)

LLevamos unas semanas muy duras en el ámbito de la ciberseguridad en Blockchain y es que en apenas 30 días hemos visto cómo 160 millones de USD han sido robados a Wintermute tras que se descubriera que el proceso por el cual Profanity generaba sus “Vanity wallets”, cómo 1.45 Millones se robaron también a 0xbad un famoso bot MEV que tenía una vulnerabilidad en su SmartContract que permitía ejecución remota de código, los 20 M robados a Optimism… y ahora nos encontramos con el ataque a la Binance Smart Chain (o BSC).

Figura 1: 570M de USD robados en Tokens BNBs de la Binance Smart Chain (BSC)

Y es que el jueves por la noche cundió el pánico en la comunidad cripto por cómo se veía que uno de los "bridges" más importantes de la Blockchain de Binance "minteaba" en solamente 2 transacciones un total de 2.000.000 BNBs la moneda oficial de esta red; el equivalente en dólares serían de unos 527 millones, uno de los mayores ataques jamás ocurridos en el ámbito Blockchain. Y sí, el robo fue en la Blockchain “descentralizada” de Binance y no directamente a la empresa como muchos medios han comunicado.

Bridges

En el ecosistema Blockchain existe un problema muy grande sin una clara solución aun, la interoperabilidad entre las diferentes Blockchain (ya sean L1 o L2) de una manera descentralizada. La mayoría de las veces el traspaso de información y activos de unas a otras se suele hacer por medio de Bridges o “Puentes” en Español.

Figura 2: Libro dedicado a "Bitcoin: La tecnología Blockchain y su investigación"
de Yaiza Rubio y Félix Brezo

La mayoría de estos funcionan de una manera centralizada en el que a cada lado del puente se encuentra un SmartContract en una Blockchain y de por medio un servidor centralizado. A la hora de por ejemplo enviar tokens de una Blockchain A a otra distinta B lo que en verdad ocurre es que estos tokens se van a bloquear en el SmartContract de la Blockchain A y el SmartContract de la Blockchain B va a enviar los activos a tu wallet de esa Blockchain. Aquí tenéis una ilustración de cómo funciona el proceso.

Figura 3: Ilustración de funcionamiento de un Bridge centralizado

Los Bridges descentralizados para evitar tener una entidad central que se encargue de gestionar las transacciones usan las llamadas “Zero Knowledge proofs” o pruebas de cero conocimiento. En un artículo futuro explicaremos detenidamente cómo funcionan este tipo de pruebas y veremos como son el futuro de la escalabilidad en las cadenas de Blockchain.

Pero para lo que hoy nos atañe nos basta saber que estas pruebas son muy seguras y que en nuestro caso las emite el SmartContract de la Blockchain A cuando le enviamos Tokens y si se la pasamos al SmartContract de la Blockchain B este nos enviara a nuestro wallet el importe de tokens que hayamos depositado en la anterior Blockchain.

Ataque a la Binance Smart Chain

El robo se produjo el jueves por la noche y este se debió a un exploit que contenía el Bridge de Binance uno de los puentes más importantes de la red debido a que este tiene acceso a mintear nuevos BNBs, además de ser el puente oficial que usa la propia Binance.

Este es un puente “descentralizado” como en el ejemplo del que hemos hablado antes, el exploit tomaba ventaja de un bug en el SmartContract de la red de la BSC que permite validar pruebas que a priori serían inválidas. Esta no es la primera vez que se lleva a cabo un ataque del estilo, ya ha ocurrido otras veces que un puente entre dos cadenas de Blockchain ha sido vulnerado por vectores similares.


El atacante creo una prueba en la que le decía al SmartContract que había depositado una cantidad de 1.000.000 BNBs en la Beacon Chain de Binance y que quería recibir en la Binance Smart Chain los Tokens, un sistema sin fallos habría detectado que esta prueba era inválida, pero el código del contrato contenía un bug por el cual permitía que esa prueba fuera validada. Luego usó esta prueba para enviar dos transacciones distintas al puente por lo que pudo sustraer con éxito 2 millones de BNBs lo que serían unos 570M USD. Aquí podemos ver las dos transacciones.


Este modelo permitiría sustraer todos los activos del puente y mintear una cantidad ilimitada de BNBs creando una inflación que arrasase con el precio del Token, pero por practicidad el ladrón solo sustrajo los 2.000.000 BNBs. Si nos fijamos bien en las dos transacciones podremos ver que la prueba enviada en cada una de estas es mucho más corta de lo normal si lo comparamos con otras transacciones que se envían al Bridge.

Figura 6: Pruebas inválidas enviadas al SmartContract

Poco después de que se explotase esta vulnerabilidad se pausó por completo la red de Binance para evitar que cundiera el pánico generalizado por la red y que más gente se aprovechara de ese vector de ataque; esto en una Blockchain como Ethereum sería imposible dado su grado de descentralización; pero es que la red BSC no es “descentralizada” realmente, ya que los validadores de esta Blockchain son solo 21 y son escogidos exclusivamente por Binance, entonces ante cualquier problema siempre existe la posibilidad de pausar la red.

Figura 7: Wallet del ciberdelincuente, aquí podemos ver donde tiene los activos robados

Sin embargo antes de que la red fuera pausada por completo el cibercriminal pudo sacar 100M a otras Blockchains, en la imagen de arriba podemos ver cómo tiene repartidos los activos. De los cuales más de 10M han sido congelados ya por entidades como Theter que poseen el control sobre USDT. Ahora estamos a la espera de que se reanude la red con un posible fork en el que estas dos transacciones no existan, al estilo The DAO cuando sufrió el robo por un Ataque de Reentrancy.

Conclusiones finales

El ataque podría haber sido mucho peor y por cómo ha movido de lento los fondos y lo “mal” que los ha gestionado para que no se los bloquearan podemos deducir que el criminal no está muy experimentado en DeFi. Este tipo de ataques a Bridges no es la primera vez que ocurren y volverán a ocurrir, tenemos que tener en cuenta que el verificar pruebas de cero conocimiento implica una complejidad muy grande y por ello detectar este tipo de bugs es muy complicado. Nos vemos en los siguientes artículos.

Más artículos de Web3, Blockchain & SmartContracts
Saludos,

AutorChema Garabito. Desarrollador Full-Stack. Ideas Locas Telefónica CDO.

No hay comentarios:

Entrada destacada

10 maneras de sacarle el jugo a tu cuenta de @MyPublicInbox si eres un Perfil Público

Cuando doy una charla a algún amigo, conocido, o a un grupo de personas que quieren conocer MyPublicInbox , siempre se acaban sorprendiendo ...

Entradas populares