Pentesting SmartContracts: From Web 2.0 to Web3 #NNED10
Recientemente se ha celebrado la décima edición de Navaja Negra. Una CON que se ha celebrado de nuevo sin necesitar el online, una CON que ha mostrado que la comunidad sigue viva y con muchas ganas de compartir. Este año tuvimos la suerte de poder estar allí impartiendo un mini taller sobre "Pentesting a SmartContracts" (que no es lo único que se debe revisar en un proyecto Web3, pero sí es una parte fundamental de un proyecto Web3, ya que podemos decir que es la lógica de todo ello).
Ú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.
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:
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?
Figura 1: Pentesting SmartContracts: From Web 2.0 to Web3
Ú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 |
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.
Figura 3: Introducción a Web3
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?
Si tenemos que hacer un paralelismo con nuestras auditorías de caja blanca, gris y negra podríamos decir algo parecido a esto en el mundo web3:
En otras palabras:
Figura 4: Tipos de Auditorias por "cajas" en Web3
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.
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
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.
Figura 6: Herramientas para el taller
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.
Figura 7: Auditoria con Slither
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.
Más artículos de Web3, Blockchain & SmartContracts
- 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)
Saludos,
Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advanced Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root", “Pentesting con Powershell” y de "Empire: Hacking Avanzado en el Red Team", Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDCO de Telefónica. Para consultas puedes usar el Buzón Público para contactar con Pablo González
Contactar con Pablo González |
1 comentario:
Muchas gracias por la información, se agradece mucho. ¿Sabes de alguna formación en seguridad blockchain?
Publicar un comentario