martes, noviembre 15, 2022

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).

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

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.

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:

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.
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:
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.

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.


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
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:

  1. Muchas gracias por la información, se agradece mucho. ¿Sabes de alguna formación en seguridad blockchain?

    ResponderEliminar