Graduación

1

Proyectos desarrollados por los estudiantes

Introducción al Ethereum Developer Program

2

¿Cómo convertirse en blockchain developer?

3

¿Qué es el Ethereum Developer Program?

4

Ethereum Developer Program: Plan de Contenido

5

Ethereum Developer Program: Guía de estudio

Semana 1: Importancia del Manejo de Memoria

6

Importancia del Manejo de Memoria

7

Importancia del Manejo de Memoria: Actividades

8

Cómo se almacenan los datos en Ethereum

Semana 2: Web3-react

9

Salto de Web2 a Web3: React

10

Salto de Web2 a Web3: Actividades

11

Web3 Stack

12

¿Qué es Web3-React y cómo usarlo en tu próximo proyecto?

Semana 3: Ethereum Virtual Machine y Criptografía

13

Infraestructura y Funcionamiento de la Ethereum Virtual Machine

14

Fundamentos de Criptografía y EVM

15

Criptografía y Funcionamiento de la Ethereum Virtual Machine: Actividades

Semana 4: Creando tu primer Smart Contract

16

Crea tu primer smart contract

17

Crea tu primer smart contract: Actividades

Semana 5: Solidity

18

Aprendiendo Solidity desde cero

Superando la primera etapa del Ethereum Developer Program

19

RETO: NFT dinámicos con datos Off Chain

Semana 6: Tokens y Tokenización

20

Tokens y Tokenización

Semana 7: Testing Tools y Despliegue

21

Testing Tools y Despliegue: Actividades de la semana

22

Testing Tools y Despliegue

Semana 9: Auditoría y Seguridad de Smart Contracts

23

Auditoría y Seguridad de Smart Contracts

24

Auditoria y Seguridad de Smart Contracts: Resumen y actividades

Semana 10: Integraciones en Web3: Web3.js vs. Ether.js

25

Integraciones en Web3: Web3.js Vs Ether.js

Semana 11: Monetización para Blockchain Developers

26

Monetización para Blockchain Developers

Recursos Adicionales

27

Consideraciones de seguridad para smart contracts

28

Memory vs. Storage en Solidity

Consideraciones de seguridad para smart contracts

27/28

Lectura

Muchos de los ataques que ocurren en los proyectos web3 se podrían prevenir teniendo mayor énfasis en la seguridad de los contratos inteligentes.

Por lo general, los atacantes encuentran y explotan deficiencias en el ciclo de desarrollo de software: la serie de pasos que se llevan a cabo para lanzar un nuevo código en el mundo, desde el diseño hasta la implementación y el mantenimiento. Si los protocolos adecuados y las mejores prácticas estuvieran disponibles de forma más fácil, es posible que ocurrirían menos incidentes de seguridad.

El propósito de este post es resumir los fundamentos básicos de seguridad que los desarrolladores y equipos de seguridad de web3 deben tener en cuenta al diseñar, desarrollar y mantener un sistema de contratos inteligentes seguros. El marco que se presenta analiza 8 categorías principales de consideraciones de seguridad, desde el modelado de amenazas hasta la preparación de respuesta ante emergencias, que deben implementarse a lo largo del ciclo de vida del desarrollo de software.

Antes de revisar las consideraciones de seguridad es importante entender las fases de desarrollo de un ciclo de software. Podemos describir 5 fases:

  • A) Diseño: se describen las funciones y operaciones deseadas del sistema, incluidos puntos de referencia importantes y propiedades invariables.
  • B) Desarrollo: los desarrolladores escriben el código del sistema.
  • C) Prueba y revisión: se reúnen todos los módulos en un entorno de prueba y los evalúan para verificar su correcto funcionamiento, escala y otros factores.
  • D) Despliegue: el sistema creado se lleva a producción.
  • E) Mantenimiento: los desarrolladores evalúan y modifican el sistema para garantizar que esté realizando las funciones previstas.

El ciclo del desarrollo de software no siempre sigue necesariamente un camino lineal: las categorías pueden superponerse o extenderse a fases adicionales en la práctica. Los pasos pueden repetirse para cada lanzamiento. Y es posible que algunas tareas, como las pruebas y las revisiones de seguridad, deban ejecutarse en todo momento.

Ahora examinemos con mayor detalle estas fases y las consideraciones de seguridad para cada una de ellas. Para compartir estas mejores prácticas de la manera más simple y concreta, y que sean más fácil de comprender y aplicar, usaremos las preguntas: ¿qué?, ¿por qué?, ¿cómo?

Fase de diseño

#1: Considera el modelado de amenazas y el diseño de seguridad

  • ¿Qué?: Es importante implementar una práctica explícita de identificación y priorización de amenazas potenciales a un sistema desde el comienzo del ciclo de desarrollo: los desarrolladores de contratos inteligentes deben identificar cualquier control de seguridad para implementar en el desarrollo, así como cualquier amenaza que deba verificarse en las pruebas, auditorías y seguimiento. Todas las suposiciones de seguridad, incluido el nivel esperado de sofisticación y los medios económicos de un atacante, deben definirse y articularse claramente en la fase de diseño.
  • ¿Por qué?: Si bien es tentador para los desarrolladores centrarse únicamente en los usos previstos de un contrato o protocolo inteligente, este único enfoque puede dejarlos con puntos ciegos que los atacantes pueden explotar y explotarán.
  • ¿Cómo?: Sigue las prácticas de modelado de amenazas conocidas. Si un equipo de desarrollo no tiene experiencia interna en seguridad, entonces debe contratar a consultores de seguridad al principio de la fase de diseño. Adopte una mentalidad de “atacante” al diseñar el sistema y asuma que cualquier individuo, máquina o servicio puede verse razonablemente comprometido.

Fase de desarrollo

#2: Considera la administración y el control de acceso

  • ¿Qué?: Implementa controles de acceso que restrinjan la capacidad de llamar a funciones especiales que realizan tareas administrativas, como actualizar contratos y establecer parámetros especiales, a cuentas privilegiadas y contratos inteligentes. Siga el “principio del mínimo privilegio”: que cada actor solo debe tener la cantidad mínima de acceso requerida.
  • ¿Por qué?: El mantenimiento de protocolos a través de procesos de actualización y gobernanza permite a los desarrolladores mejorar el protocolo agregando nuevas funciones, solucionando problemas de seguridad y abordando condiciones cambiantes. Si la capacidad de realizar actualizaciones no se controla adecuadamente, esto puede constituir una vulnerabilidad de seguridad crítica.
  • ¿Cómo?: Configura una billetera multifirma (multisig) o un contrato DAO que administrará los cambios en nombre de la comunidad de manera transparente. Los cambios deben someterse a un proceso de revisión exhaustivo, junto con un bloqueo de tiempo (promulgación retrasada intencionalmente con la capacidad de cancelar) para garantizar que se pueda verificar su corrección y revertirse en caso de un ataque de gobierno. Asegúrate de que las claves privilegiadas se almacenen y se acceda de forma segura en billeteras de autocustodia o servicios de custodia seguros.

#3: Considera plantillas e integraciones reusables y probadas

  • ¿Qué?: Siempre que sea posible, utiliza los estándares de contratos inteligentes existentes (p. ej., contratos OpenZeppelin) y evalúa los supuestos de seguridad de las integraciones de protocolo que se podría necesitar realizar con los protocolos existentes.
  • ¿Por qué?: El uso de estándares e implementaciones existentes, probados y auditados por la comunidad, contribuye en gran medida a reducir los riesgos de seguridad. Evaluar los riesgos de las integraciones de protocolo te ayuda a desarrollar comprobaciones de seguridad para protegerse contra ataques a componentes externos, como la manipulación de oráculos.
  • ¿Cómo?: Importa bibliotecas e interfaces de contratos de confianza cuya seguridad se haya auditado; ¡Después de todo, el objetivo de cripto y web3 es el uso, la reutilización y la composición de código abierto! Asegúrate de documentar las dependencias de tu contrato y sus versiones en el código base y minimiza tu espacio de código donde puedas; por ejemplo, importa submódulos específicos de grandes proyectos en lugar de todo. Comprende sus exposiciones para que pueda monitorear los ataques a la cadena de suministro. Utiliza interfaces oficiales para llamar a protocolos externos y asegúrate de tener en cuenta los posibles riesgos de integración. Supervisa las actualizaciones y las divulgaciones de seguridad de los contratos que has reutilizado.

Fase de prueba y revisión

#4: Considera hacer pruebas y crear documentación

  • ¿Qué?: Crea una documentación clara y completa del código y configura un conjunto de pruebas rápido, completo y fácil de ejecutar. Siempre que sea posible, configura entornos de prueba en redes de prueba o mediante simulación de red principal para una experimentación más profunda.
  • ¿Por qué?: Escribir suposiciones para el comportamiento esperado de una base de código ayuda a garantizar que se aborden los riesgos en los modelos de amenazas y que los usuarios y auditores externos entiendan las intenciones del equipo de desarrollo. La creación de un conjunto de pruebas para el código ayuda a probar, o refutar, las suposiciones de desarrollo y fomenta un pensamiento más profundo sobre los modelos de amenazas. Este conjunto de pruebas debe incluir pruebas de diseños de mecanismos que verifiquen los tokenomics de un proyecto en escenarios de mercado extremos, junto con pruebas unitarias y pruebas de integración.
  • ¿Cómo?: Implementa un marco de pruebas y verificadores de seguridad conocidos, como Hardhat, Mythril, Slither, Truffle, etc., que brindan diferentes técnicas de prueba, como fuzzing, verificación de propiedades o incluso verificación formal. Documenta tu código, ampliamente, utilizando los comentarios de NatSpec para especificar los efectos secundarios, los parámetros y los valores de retorno previstos. Produce documentación en vivo utilizando herramientas de generación de documentación junto con explicaciones de diseño de alto nivel.

#5: Considera revisiones internas y auditorias de seguridad

  • ¿Qué?: Dedica tiempo a encontrar errores a través de revisiones de código internas y externas.
  • ¿Por qué?: Alejarse del desarrollo de funciones para centrarse en las preocupaciones de seguridad les da a los desarrolladores tiempo para encontrar problemas potencialmente oscuros. Las auditorías externas pueden ser especialmente útiles en esto, ya que pueden aportar perspectivas y conocimientos externos que el equipo de desarrollo no tiene.
  • ¿Cómo?: En un momento apropiado en el desarrollo del proyecto, programa una congelación de funciones para dar tiempo a una revisión interna, seguida de una auditoría externa. Esto debe tener lugar antes de cualquier implementación y actualización en vivo. Consulta las guías de ConsenSys, Nascent, OpenZeppelin y Trail of Bits, que brindan a los desarrolladores listas de verificación de consideraciones, incluido el tiempo, para cualquiera que se prepare para una auditoría. Asegúrate también de revisar las transacciones de implementación para asegurar que utilicen la versión del código auditado y tengan los parámetros adecuados, especialmente al actualizar el software.

Fases de despliegue y mantenimiento

#6: Considera incentivar la participación de la comunidad

  • ¿Qué?: Crea programas que fomenten la participación de la comunidad en la mejora de la seguridad en bases de código de código abierto. Una forma de hacerlo es creando recompensas por errores. Otra forma es alentar a la comunidad a desarrollar bots de detección de monitoreo de protocolo.
  • ¿Por qué?: Los equipos de desarrollo pueden beneficiarse enormemente al aprovechar un conjunto más amplio de conocimientos y experiencia. (Nuevamente, también el punto donde el código abierto ayuda en criptografía). En particular, tales programas pueden ayudar a generar entusiasmo por un proyecto, esencialmente convirtiendo a la comunidad y a los hackers de sombrero blanco en evangelistas. También pueden ayudar a convertir a los posibles atacantes en activos de seguridad al proporcionar vías para que los piratas informáticos se conviertan en defensores.
  • ¿Cómo?: Usa plataformas de recompensas por errores (como Code4rena, HackenProof, Immunefi o Secureum) para financiar sistemas de recompensas con recompensas basadas en la gravedad que incentiven a los piratas informáticos expertos a revelar vulnerabilidades de manera segura. Los equipos de desarrollo pueden alentar a las comunidades de sus protocolos a aprovechar los enfoques tradicionales y nativos de web3 para incentivar las recompensas de errores y para que los participantes se beneficien potencialmente al mejorar la seguridad en una situación en la que todos ganan.

#7: Considera el monitoreo en tiempo real

  • ¿Qué?: Implementa sistemas para monitorear los contratos inteligentes y los componentes operativos críticos, como oráculos y puentes, que informen de actividades sospechosas al equipo de desarrollo y la comunidad en función de modelos de amenazas conocidos.
  • ¿Por qué?: La detección temprana de problemas permite que un equipo responda a vulnerabilidades y errores rápidamente, lo que podría detener o mitigar cualquier daño. Esto parece obvio, pero puede pasarse por alto en la planificación.
  • ¿Cómo?: Usa plataformas de monitoreo o nodos distribuidos para ejecutar bots que monitoreen eventos de contratos inteligentes en tiempo real. Implementa paneles y notificaciones de alerta para los equipos de desarrollo y la comunidad en general, según sea necesario.

#8: Considera las operaciones de respuesta a incidentes y emergencias

  • ¿Qué?: Haz uso de herramientas y procesos que permitan una respuesta inmediata ante cualquier problema de seguridad.
  • ¿Por qué?: Incluso con las mejores medidas de seguridad previas a la implementación, aún es posible que los contratos inteligentes y los componentes críticos, como oráculos y puentes, tengan problemas activos. Tener personal dedicado, procesos claros y automatizaciones adecuadas garantiza que los incidentes puedan investigarse rápidamente y resolverse lo más rápido posible.
  • ¿Cómo?: Prepárate para lo peor planificando cómo responder a incidentes o emergencias y automatizando las capacidades de respuesta en la mayor medida posible. Esto incluye asignar responsabilidades de investigación y respuesta a personal capacitado que pueda ser contactado públicamente sobre problemas de seguridad a través de una lista de correo de seguridad distribuida, instrucciones en el depósito de códigos o mediante un registro de contrato inteligente. Con base en los modelos de amenazas del protocolo, desarrolla un conjunto de procesos que podrían incluir simulacros de escenarios y tiempos de respuesta esperados para tomar acciones de emergencia. Considera la posibilidad de integrar la automatización en la respuesta a incidentes: por ejemplo, las herramientas pueden ingerir y actuar sobre eventos de los bots de Forta.

Las consideraciones de seguridad deben ser una parte integral del desarrollo exitoso, no solo una ocurrencia tardía o un complemento.

Si bien este marco comparte una guía rápida para aquellos que crean protocolos y aplicaciones web3 para promover la seguridad durante todo el proceso de desarrollo, ninguna descripción breve puede proporcionar una discusión exhaustiva de todos los aspectos de la seguridad de los contratos inteligentes. Los equipos que carecen de experiencia interna en seguridad deben comunicarse con expertos en seguridad web3 calificados que puedan ayudarlos a aplicar la guía general anterior a sus situaciones específicas. Pero, sobre todo, recuerda que la seguridad nunca es solo una simple cuestión de marcar casillas en un simple manifiesto de lista de verificación para administrar la complejidad; como tal, siempre será un conjunto interminable y continuo de mejores prácticas. Todavía estamos comenzando a establecer estas mejores prácticas, por lo que ahora es el momento de crearlas y compartirlas en colaboración, en todos los niveles para todos los desarrolladores.


💡 Para mayor referencia, visita el texto original “Smart Contract Security: A Simple Checklist for Web3 Development.

Aportes 2

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

Resumen

En cada etapa del ciclo de desarrollo de software pregúntate qué, por qué y cómo y aplica 8 consideraciones de seguridad para tus smart contracts.
Ciclo de desarrollo:

  • Diseño
    • modelado de amenazas y diseño de seguridad
  • Desarrollo
    • administración y control de acceso
    • plantillas e integraciones reusables y probadas
  • Prueba y revisión
    • hacer pruebas y documentar
    • revisiones internas y auditorías de seguridad
  • Despliegue
    • incentiva participación de la comunidad
    • monitoreo en tiempo real
    • operaciones de respuesta a emergencias e incidentes
  • Mantenimiento

excelente informacion