Pentesting SmartContracts: From Web 2.0 to Web3 #NNED10
Últimamente estamos muy metidos en el mundo Web3 y también en su seguridad. Aprendiendo mucho sobre ello en los últimos meses. Nuestra idea con el taller era mostrar a la comunidad cómo se abre un nuevo mundo para la ciberseguridad, ya que el mundo web3 requiere de perfiles en ciberseguridad que mejore notablemente la seguridad que allí existe. Son perfiles deseados por las empresas que han emprendiendo aventuras en el mundo Web3. Hay lo que se dice, un filón.
Figura 2: Libro dedicado a «Bitcoin: La tecnología Blockchain y su investigación» de Yaiza Rubio y Félix Brezo |
Muchas veces nos cuesta ver diferentes caminos, pero la ciberseguridad es transversal a disciplinas como la Inteligencia Artificial (fijaros en el proyecto OMLASP, un proyecto para recopilar técnicas de auditoría y revisión de fiabilidad de algoritmos de IA), Internet de las cosas y los sistemas embebidos, la industria 4.0 o la Web3. Miremos donde miremos, aunque no sea “nuestro mundo” necesitan ciberseguridad. Como digo somos una disciplina transversal que proporciona confianza a los negocios para poder avanzar.
Mini Taller
El taller no dejaba de ser unas pinceladas de lo que uno puede encontrar en el mundo Web3 y cómo se puede aplicar una metodología (o algo similar) a este mundo. El taller se partía en dos partes:
- Introducción a la Web3, aplicación de metodología para auditar SmartContracts y tipos de vulnerabilidades (con ejemplos).
- Análisis estático y análisis dinámico sobre SmartContracts, utilizando diferentes herramientas y aplicando algo de metodología.
- Por último, propusimos un reto en el que los alumnos (ya para casa) debían hacer un ‘hackme’ y conseguir pasar tres retos. El premio un NFT (y solo había tres, por lo que solo podía haber tres ganadores). Respecto al reto, otro día os hago un post.
La primera parte del taller era “la sencilla”, la de contextualizar, la de poder “tocar” esa barrera de entrada que muchas veces tiene la Web3. La de poder entender de forma más práctica aquellos términos que todos conocemos, pero que muchas veces nos suenan tan lejanos: Blockchain, Wallet, Transacción, Gas, SmartContract, bytecode, OpCode, ABI (Application Binary Interface) se definieron términos y se mostró cómo crear nuestro propio laboratorio para el taller.
Tras explicar la parte más introductoria y montar el laboratorio inicial dónde se pudo ver cómo funciona la importación de cuentas, cómo conectarnos contra nuestra blockchain local con Ganache o cómo funciona un pequeño SmartContract denominado “hiworld” pasamos a mostrar lo que es Solidity y sus posibilidades. Se dio una clase rápida de elementos de Solidity que son interesantes conocer (no se dio una clase de programación, ya que hubiera sido imposible en tiempo y forma).
Conocer el lenguaje principal en el que se crean SmartContracts es importante de cara a entender, posteriormente, cómo aplican las vulnerabilidades en este entorno. Es cierto que el pentester tendrá herramientas que permiten el análisis de código, pero no hay nada mejor que entender el código, ya que, si no, no podremos avanzar en el trabajo.
¿Cómo plantear la auditoría por cajas?
En otras palabras:
- La caja blanca sería algo similar a tener el código de los SmartContracts y disponer de todo tipo de información sobre el proyecto que se va a auditar, es decir, tenemos rol de administrador.
- La caja gris podría ser algo similar a encontrarnos el proyecto desplegado (puede ser en un entorno de pruebas) y disponer de la dirección del contrato (o contratos) y disponer del ABI de dicho contrato. En este punto veremos que podemos interactuar con el contrato, obtener el bytecode, hacer un análisis sobre este, etcétera.
- La caja negra podría ser algo similar a solo poder disponer del bytecode y comenzar un proceso de ingeniería inversa interesante.
También se vieron algunas metodologías y estándares como: SWC, SCSVS y Hacken. Tras ver el SWC y cómo quiere asemejarse al CVE que todos conocemos y la metodología de Hacken dónde las fases de un pentesting tienen cierto paralelismo con, por ejemplo, la metodología PTES, vemos que hay intenciones de asemejar el pentesting en Web3 al que conocemos y tiene sentido.
Llegamos a la parte de presentar algunas de las vulnerabilidades más importantes (que no todas). La idea era presentar la vulnerabilidad, mostrar una animación que permitiese entenderlo mejor, explicar algunos casos reales que han afectado a un proyecto web3 por tener dicha vulnerabilidad y explicar mitigaciones. Vulnerabilidades como:
- Reentrancy Attack: Cómo te roban criptomonedas por un bug en tu SmartContract
- Denegación de Servico ((se vieron dos casos: uno en lógica de contrato y otro en Gas) Bugs que pueden dejar tu SmartContrat «fuera de juego»
- Ataque de phishing a tx.origin y robo de criptomonedas
- Proxy Backdoors
- Signature Replay
Os dejo el vídeo de OpenExpo para que podáis algunos ejemplos que se cuentan aquí:
Figura 5: SmartContracts, funcionamiento y vulnerabilidades
El taller avanzó con la parte de análisis estático de código, hablamos de la distribución de Halborn ZIION, la cual es interesante de utilizar ya que viene con una gran cantidad de herramientas y sus dependencias ya preparadas. Además, se hizo un listado interesante de herramientas y su clasificación, tal y como se puede ver en la imagen. Todas con su enlace a su Github o a dónde se encuentra la herramienta, si ésta es online.
Aquí comenzó la parte de análisis de código. Se hizo algunos ejemplos con contratos con vulnerabilidades y vimos en acción herramientas como Slither y Mythrill, tal y como se puede ver en la sigueitne imagen (de Slither) Se puede ver cómo Slither nos devuelve que este contrato tiene una vulnerabilidad alta (en rojo), un par medias (en amarillo) y nos va indicando las líneas exactas dónde se introduce la vulnerabilidad. Además, se puede ver una referencia que aporta más información a todo esto.
Por último, se trabajó sobre un ejemplo de DAST (o análisis dinámico), el cual también dejaremos para otro post, ya que requiere explicarlo con “mimo” y detalle.
Sin duda, fue extraordinario volver a vivir una Navaja Negra. He tenido la suerte de estar en muchas, pero fue especial ver cómo la gente vuelve a aquella normalidad que nunca pensamos que anhelaríamos tanto. Esperamos que los muchos asistentes (fue una grata sorpresa) que tuvimos disfrutasen y pudieran entrar en este mundo que inminente y que nos acompañará durante mucho tiempo: la Web3.
- Blockchain & SmartContracts: Una serie para aprender
- BlockChain & SmartContrats: Primer SmartContract con Solidity
- Blockchain & SmartContracts: Cómo probar y desplegar un SmartContract en Ethereum
- WWW, Web 1.0, Web 2.0, Web 3.0, Web3 y ¿Web 4.0?
- Metaverso, multiverso y las tierras digitales en que vivimos en forma de avatar
- Los Fan Tokens vs. las Criptomonedas y los NFTs: Level 101
- Tokenomics: Las criptomonedas y las «Proof-of-work»: Level 101
- Los NFTs y el registro mundial de los dueños de activos digitales en el Metaverso
- BitCoin: Blockchain y su investigación
- BlockChain & SmartContrats: El Internet descentralizado y el almacenamiento off-chain en IPFS
- Reentrancy Attack: Cómo te roban criptomonedas por un bug en tu SmartContract
- BlockChain & SmartContract: Bugs que pueden dejar tu SmartContrat «fuera de juego»
- Blockchain & SmartContracts: Patrones y buenas prácticas de seguridad
- Blockchain & SmartContracts: Herramientas de Auditoría de Seguridad de SmartContracts
- BlockChain & SmartContracts: Ataque de phishing a tx.origin y robo de criptomonedas
- BlockChain & SmartContracts: Ataques de Ice Phishing
- Blockchain & SmartContracts: Herramientas de análisis dinámico
- ZIION: Una distribución Linux para auditar SmartContracts (& BlockChain)
- Dominios Web3 en Etherenum Name Service y la trazabilizad de las transacciones Blockchain
- BlockChain & SmartContracts: Actualizar SmartContracts como los grandes protocolos
- Jumping level up (from) web2 (to) web3: Vulnerabilities & SCAMs – SmartContracts
- 20 millones (Euros) en Tokens de Optimism perdidos por no saber cómo funcionan los Wallets Multifirma
- BlockChain & SmartContracts: Cómo crear una DApp de la Web3 con Python (y Flask)
Contactar con Pablo González |
Powered by WPeMatico