A lo largo de los dos últimos artículos de esta serie de SmartContracts & Blockchain hemos visto diferentes recursos (parte 1, parte 2) que nos pueden ayudar a la hora de auditar SmartContracts. En el artículo de hoy vamos a ver algunas de las más usadas herramientas de análisis dinámico a la hora de auditar SmartContracts, sobre todo para aquellos compatibles con la EVM.
Las herramientas de análisis dinámico son aquellas que nos proporcionan resultados dependiendo de la ejecución del código en runtime. En estas se despliega el bytecode del contrato compilado a una EVM local y se tratará de seguir el flujo del contrato para los inputs que se le den.
La primera herramienta que os muestro es Myth, que analiza, despliega y prueba el bytecode del contrato que le provee ais. Soporta contratos de Ethereum, Hedera, Quórum, Tron… Utiliza ejecución simbólica para detectar parte de las vulnerabilidades. Esta es una de las herramientas más usadas y conocidas para revisar la seguridad de SmartContracts.
Figura 1: Blockchain & SmartContracts: Herramientas de análisis dinámico
La primera herramienta que os muestro es Myth, que analiza, despliega y prueba el bytecode del contrato que le provee ais. Soporta contratos de Ethereum, Hedera, Quórum, Tron… Utiliza ejecución simbólica para detectar parte de las vulnerabilidades. Esta es una de las herramientas más usadas y conocidas para revisar la seguridad de SmartContracts.
Figura 2: Mypth analizando un SmartContract
(clic para ver en grande)
En la imagen tenemos Myth mostrando posibles vulnerabilidades de un SmartContrat. Para instalarlo simplemente tenemos que ejecutar lo siguiente en la consola.
“”” pip3 install mythril “””Y para ejecutarlo solo hay que lanzar el comando:
“”” myth analyze [smartContractFiles] myth analyze -a [address]
“””Es otra herramienta de ejecución simbólica para SmartContracts y Blockchains. Entre sus posibilidades permite explorar todos los posibles estados que puede alcanzar una función en un contrato, generar inputs conflictivos, detectar malos controles de flujo, acceder al análisis mediante una API de Python, etcétera.
Figura 3: Manticore detectando un overflow
“”” pip install manticore (optional) pip install “manticore[native]” “””Y para usarla:
“”” manticore [file] “””MAIAN se encarga de detectar tres tipos de vulnerabilidades en SmartContracts basados en la EVM: Prodigal, Suicidal y Greedy. Funciona ejecutando el bytecode del contrato y trazando diferentes llamadas para confirmar la presencia de estos bugs. Si quieres entrar en profundidad en cómo funciona la herramienta aquí tienes su whitepaper.
Figura 4: MAIAN analizando un contrato
Para instalarla simplemente tenemos que clonar su repositorio e instalar algunas dependencias:
“”” git clone https://github.com/ivicanikolicsg/MAIAN pip3 install web3 sudo pacman -S ethereum evm solc python-pyqt5 “””Y para ejecutarla tenemos varias opciones, la primera de ellas es usando el código fuente del contrato por ejemplo un contrato hecho en Solidity:
“”” python maian.py -s [file.sol] [contractName] “””La segunda es usando el bytecode del contrato en forma hexadecimal:
“”” python maian.py -bs [file.hex] “””Y la tercera y última usando el bytecode compilado:
“”” python maian.py -b [evmCompiledBytecode] “””Vertigo es un framework de Mutation testing hecho para testear SmartContracts. Para quien no sepa que es Mutation testing, es una forma de testing en la que se cambian componentes clave de código para asegurarse de que el software será capaz de detectar los errores en tiempo de ejecución. Su filosofía es más un voy a romper partes de tu programa a ver si este se da cuenta.
Figura 5: Libro dedicado a "Bitcoin: La tecnología Blockchain y su investigación" de Yaiza Rubio y Félix Brezo |
Cabe destacar que este framework está preparado para usarse en proyectos de Solidity como Hardhat o Truffle. Para poder usarlo solo tenemos que usar pip:
“”” pip3 install eth-vertigo “””Después dependiendo si tenemos nuestro proyecto con Hardhat(1) o Truffle y de las redes que tengamos configuradas en el proyecto deberemos usar los siguientes comandos:
“”” (1) vertigo run --hardhat-parallel 2 “”” “”” (2) vertigo run --network [configuredNetWorkInTruffle] “””Un ejemplo de la información que nos da la herramienta sería:
… [*] Running analysis on 5 mutants 100%|████████████████████████████████████████████████████| 5/5 [00:17<00:00, 4.38s/mutant] [*] Done with campaign run [+] Report: Mutation testing report: Number of mutations: 5 Killed: 4 / 5 Mutations: [+] Survivors Mutation: File: /Users/chgara/temp/tasks/contracts/Tasks.sol Line nr: 19 Result: Lived Original line: if (balances[msg.sender] < amount) return false; Mutated line: if (balances[msg.sender] <= amount) return false; ...Un framework de análisis para Web Assembly y SmartContracts tanto EVM como BTC. Ofrece una sencilla API sobre la que construir herramientas que necesiten decompilar el bytecode de un contrato, trazar la llamada a una función, controlar el flujo de ejecución…
Figura 6: Resultado del código anterior
(Clic para agrandar)
“”” pip3 install octopus “””Y un ejemplo del uso de la API de manera sencilla para observar el flujo de ejecución podría ser el siguiente:
from octopus.analysis.graph import CFGGraph from octopus.platforms.ETH.cfg import EthereumCFG file_name = "temp/tasks/evm_bytecode/Zeppelin_ethernaut0.bytecode" with open(file_name) as f: bytecode_hex = f.read() cfg = EthereumCFG(bytecode_hex) graph = CFGGraph(cfg) graph.view()Esta ejemplo anterior es una API para usar análisis estático, pero la mayoría de las otras son para realizar análisis dinámico.
Conclusión
Cada poco tiempo suele saltar alguna noticia de un ataque a un SmartContract que hace perder millones a la comunidad y a sus desarrolladores. Con las herramientas y buenas prácticas que hemos visto en estos 4 últimos artículos de la serie de SmartContracts & Blockchain podemos tratar de verificar nosotros mismos la seguridad de los proyectos que usamos o creamos. Nos vemos en el próximo artículo. Más artículos sobre este mundo Web3:
Cada poco tiempo suele saltar alguna noticia de un ataque a un SmartContract que hace perder millones a la comunidad y a sus desarrolladores. Con las herramientas y buenas prácticas que hemos visto en estos 4 últimos artículos de la serie de SmartContracts & Blockchain podemos tratar de verificar nosotros mismos la seguridad de los proyectos que usamos o creamos. Nos vemos en el próximo artículo. Más artículos sobre este mundo 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
No hay comentarios:
Publicar un comentario