smart contracts ciberseguridad

Una cuestión muy importante para la ciberseguridad es que a los smart contracts se les añadió la posibilidad ser actualizados (Upgradeable Contracts). Un añadido que genera bastante debate al hablar de ciberseguridad y que choca frontalmente con uno de los principales dogmas de la cadena de bloques: la inmutabilidad.

Desplegar un contrato, de un token por ejemplo, conlleva un trabajo muy complejo detrás, tanto por parte de desarrolladores como de empresas. Por ejemplo, a la hora de publicitar la Pre-Sale. Por lo que cualquier contratiempo puede dar al traste con un trabajo de meses. Por otro lado, como el código suele ser público, “los malos” están esperando el momento oportuno para realizar cualquier tipo de acción maliciosa sobre el despliegue y llevarse un buen botín.

Buscar vulnerabilidades

Poder actualizar los contratos es un elemento muy bueno de mitigación cuando un problema es identificado en el contrato. Cuando se hace público, si no lo era, miles de “auditores” freelance, conocidos como GreyHat hackers, se lanzan a auditar los smart contracts. Su objetivo es buscar las vulnerabilidades que la empresa encargada de auditar el contrato “no supo” encontrar. Pero los cibercriminales también auditan por su cuenta y beneficio. A diferencia de “los malos”, los hackers buenos suelen avisar a la empresa de que su contrato tiene un fallo. Quizá, pidiendo algo a cambio.

Ciberseguridad blockchain para proteger la cadena de bloques

Es el momento en que los desarrolladores intentan buscar la vulnerabilidad antes que algún cibercriminal sepa explotarla y robar los activos, lo que derivaría en consecuencias desastrosas para todos, menos para los malos, claro. En ese momento, lo que se suele hacer es PAUSAR el contrato y actualizar el contrato lo más rápido posible para mitigar la vulnerabilidad, si es que la había.

Actualizar significa cambiar el código

El problema es que el remedio puede ser peor que la enfermedad. Pausar el contrato, está bien, pero la mejor práctica SIEMPRE es volver a desplegarlo, pero si nos alejamos del mundo puramente técnico no es tan sencillo. Implica campañas en RRSS y medios de comunicación, dirección publicada con los pares en Uniswap y un largo etcétera. Por lo que se opta por actualizar el contrato. Actualizar significa cambiar el código, pero ¿qué pasa con “los malos”? Si un desarrollador puede hacerlo, la gran pregunta que se plantea es si ellos también podrán hacerlo. Gran dilema.

Cross-chain, tendencia en el cosmos de la ciberseguridad blockchain

A grandes rasgos, existen dos patrones para actualizar los contratos: data separation y delegatecall. La diferencia entre ambos es que en delegatecall, el más usado, porque los desarrolladores tienen toneladas de tutoriales en internet, la actualización se realiza mediante un contrato intermedio conocido como “Proxy”.  En Data Separation no hay contrato intermedio, sino que uno llama a otro.

Ciberseguridad y smart contracts

Aunque a priori, usar un contrato intermedio puede parece más seguro, hay que tener en cuenta que ya tenemos otro contrato en juego. Imaginaos un grupo de cibercriminales. Mientras que los contratos pueden tener líneas y líneas de código, las necesarias para el correcto funcionamiento de la aplicación, el contrato Proxy apenas tiene 40. Entonces, parece obvio que lo más eficiente es dedicar todos los esfuerzos en buscar fallos en un contrato más pequeño. Así ocurrió en la primera implementación de Proxy por OpenZeppelin, corregida en versiones posteriores del compilador de Solidity. Y aquí esta el problema: usar plantillas para desarrollar contratos actualizables no es aconsejable. Se requiere un estudio pormenorizado de las funciones, declaración de variables y llamadas de bajo nivel. Delegatecall lo es.

Foto de TheDigitalArtist, en Pixabay

Por lo tanto, ¿actualizamos o no?

También puedes seguirnos en nuestros canales de Telegram y Twitter

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

  • bitcoinBitcoin (BTC) $ 35,610.00
  • ethereumEthereum (ETH) $ 1,107.98
  • tetherTether (USDT) $ 1.00
  • rippleXRP (XRP) $ 0.296384
  • litecoinLitecoin (LTC) $ 141.84
  • cardanoCardano (ADA) $ 0.292086
  • bitcoin-cashBitcoin Cash (BCH) $ 482.68
  • stellarStellar (XLM) $ 0.291621
  • chainlinkChainlink (LINK) $ 15.17
  • binancecoinBinance Coin (BNB) $ 39.20
  • moneroMonero (XMR) $ 163.90
  • eosEOS (EOS) $ 2.69
  • tezosTezos (XTZ) $ 2.35
Esta web utiliza cookies. Puedes ver aquí la Política de Cookies. Si continuas navegando estás aceptándola    Ver
Privacidad
Optimized with PageSpeed Ninja