Cómo usar Oyente, un analizador de seguridad de contrato inteligente - Tutorial de solidez

En nuestros blogs anteriores, hemos aprendido cómo crear un contrato inteligente válido simple basado en el IDE basado en el navegador de Ethereum, cómo implementar un script "Hello World" en Solidity con Truffle y Ganache CLI herramientas, y cómo revisar sus códigos de contrato inteligente con una herramienta de auditoría automática, Mythril.

Con el crecimiento explosivo de las ICO que se basan principalmente en los contratos inteligentes de Ethereum, la revisión y la seguridad del código se están volviendo más importantes que nunca. Como lenguaje principal de contrato inteligente, Solidity fue influenciado por C ++, Python y JavaScript y está diseñado para apuntar a la máquina virtual Ethereum (EVM). En una reciente conferencia de Blackhat Ethereum, Trail of Bits afirma que "la solidez es la fuente de casi todos los problemas de Ethereum".

Presentación de Ethatum Blackhat de Trail of Bits

En nuestras propias prácticas de revisión de código, nos hemos dado cuenta de que Oyente, otra herramienta inteligente de auditoría automática de contratos, nos ha ayudado a identificar con precisión varios errores legítimos, en lugar de solo generar un montón de falsas alarmas.

En enero de 2016, Oyente fue desarrollado por investigadores de la Universidad Nacional de Singapur. Puede encontrar el trabajo de investigación original aquí. Oyente es una herramienta de ejecución simbólica que funciona directamente con el código de bytes de la máquina virtual Ethereum (EVM) sin acceso a la representación de alto nivel (por ejemplo, Solidity, Serpent). Este mecanismo es crítico ya que la cadena de bloques Ethereum solo almacena el código de contratos de EVM byte, no su fuente.

Oyente puede detectar algunos de los últimos defectos de seguridad de Ethereum, incluido el error TheDAO, que causó una pérdida de 60 millones de dólares en junio de 2016.

En este artículo, demostraremos cómo instalar, implementar y usar Oyente en el sistema Ubuntu. La versión de Ubuntu que estoy usando para este artículo es Ubuntu de 64 bits, 16.04.4. Recomendamos encarecidamente que ejecute Ubuntu en VMWare, porque es mucho más suave que VirtualBox y mucho más barato (gratis) que Parallels.

Configuración del entorno de trabajo de Linux:

sudo apt-get install python
sudo apt install python-pip
pip install virtualenv
sudo apt install vim

Ejecute un Python Virtualesbinv:

python -m virtualenv envsp
fuente env / bin / activar

Instalar Oyente:

pip2 instalar oyente

Puede encontrar el siguiente error:

Se debe a una versión incorrecta de python3. Intenta resolver este problema haciendo lo siguiente:

sudo apt-get install python3-venv
Python3 -m venv venv
pip install web3

Luego, verifique la versión de python3 y configure su Ubuntu con el archivo de encabezado Python.h de su versión de python3, ejecutando:

python3 - versión

Y luego corre:

sudo apt-get install python3.6-dev

Tenga en cuenta que debe reemplazar el "3.6" con su número de versión de Python3.

Ahora intente la instalación de Oyente nuevamente:

pip2 instalar oyente

Instalar Solidity:

sudo add-apt-repository ppa: ethereum / ethereum
sudo apt-get update
sudo apt-get install solc

Instale la máquina virtual Ethereum (EVM):

sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa: ethereum / ethereum
sudo apt-get update
sudo apt-get install ethereum

Instalar Z3:

Este paso puede demorar hasta 30 minutos. Tómate un café y disfruta de un video.

Python scripts / mk_make.py - python
cd build
hacer
sudo make install

UrHurray !! ¡Tienes Oyente instalado! Ahora vamos a evaluar un contrato inteligente con él.

python oyente.py -s 

Compruebe si su salida es algo como lo anterior. Si es así, ¡Oyente funciona completamente bien con tu Ubuntu! Eres bueno para ir.

Conclusión

Aquí está mi sugerencia para usar herramientas de auditoría automática: primero revise manualmente y luego use una herramienta para descubrir problemas inadvertidos, en lugar de al revés. Es útil mantener un buen flujo de trabajo, para que los resultados generados por las herramientas automáticas no confundan su propio criterio.

Además, vale la pena mencionar que, en comparación con otras herramientas de auditoría de contratos inteligentes, como Mythril, Oyente ofrece mejores resultados. Concluimos esto analizando y comparando cuidadosamente nuestros informes de revisión manual y los informes de herramientas automáticas en varios errores de desbordamiento y desbordamiento de Uint. Aunque Mythril genera más alertas, la mayoría de ellas son falsas alarmas obvias. Creemos que Mythril no toma en consideración el contexto del código tanto como lo hace Oyente.

En conclusión, los desarrolladores y los buscadores de errores criptográficos realmente deberían considerar a Oyente si desean asegurar sus contratos inteligentes.

Por Yuan He, investigador de seguridad de HaloBlock.io