jueves, junio 02, 2022

Una hora con Richard Stallman que da para varias entrevistas

Hoy por la mañana ha sido el día, al fin, que he conseguido que Richard Stallman me permitiera hacerle un pequeña entrevista de ocho preguntas. Nos conocimos hace tiempo en una charla en la Fundación Telefónica, y luego nos fuimos a comer un grupo de ponentes y organizadores. Y charlamos largo y tendido. Ahora, en mi espacio de entrevistas en el blog de Una al día, donde ya he entrevistado a Kevin Mitnick, a César Cerrudo, a Gabriel Bergel y a Miroslav Stampar, quería entrevistar también a Richard Stallman.

Figura 1: Una hora con Richard Stallman que da para varias entrevistas

El proceso no ha sido sencillo. Primero tenía que conseguir que aceptara responder a las preguntas. Y me llevó un tiempo, y que varias personas me hicieran de "padrinos" que me avalaran ante él. Para ello, le envié las ocho preguntas que quería hacerle, que son las que podéis ver en la Figura 3.

Figura 2: RMS y yo el día que comimos juntos. 

Después de un tiempo hablando con él, por correo electrónico, y después de que se sintiera cómodo, pasamos a la siguiente parte del proceso, que era encontrar el canal para hacerla y tiempo para que él se sintiera cómodo y no agobiado. Estas son las preguntas, ¿qué crees que contestará?

Figura 3: Preguntas que ha respondido Richard Stallman en la entrevista

Al final acordamos utilizar un servidor de Mumble de la Free Software Foundation, y buscar el tiempo para que él estuviera a gusto. Y esto era hoy. Hoy era el día elegido. El proceso era que yo llamara a un número de teléfono en Italia, donde se encuentra para una charla. Así que así he hecho.

Figura 4: Un mes con comunicación para cerrar la entrevista
con mensajes a la NSA en todos los e-mails. 

Hoy tenía muchas cosas que hacer, pero no quería perder la ventana de oportunidad de hacerle la entrevista, y que nos ha llevado una hora. Una hora en la Richard Stallman no solo ha explicado las preguntas, sino que se ha extendido en explicar con calma todos los puntos que él ha querido hacer foco.

Figura 5: Entrevista en Mumble hoy por la mañana.

Hemos hablado de GitHub, de Copilot o como él dice "CopyAlot", hemos hablado de la creación de código, de Metaverso, de Criptomonedas, de anonimato, de malware, de GNU - por supuesto - y sobre todo de Software Libre y el impacto de éste en el mundo. Por supuesto, me ha corregido cada vez que mi lenguaje era inexacto, que los detalles son importantes. Seguro que de muchas puedes adivinar qué ha dicho... otras, tal vez no. Eso sí, que GNU es el sistema operativo y Linux solo un componente, que quede claro. Sí, señor Stallman, en mis libros queda claro.

(Revisada y Ampliada) de Carlos Álvarez y Pablo González en 0xWord

Ahora, tengo trabajo de transcripción y de puesta en formato legible de la entrevista, que ha dado para tanto que creo que voy a tener que dividirla en dos o tres partes, que será publicadas en el blog de Una al día, así que os avisaré cuando salgan. Para mí, el premio ha sido poder pasar esta hora con él, que me quedaré con todo eso que me ha dicho "off-the-record" solo para mis oídos.

¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


miércoles, junio 01, 2022

Blockchain & SmartContracts: Auditoría y Pentesting de SmartContracts (y BlockChains) con herramientas de análisis de código estático

En las anteriores partes vimos, primero patrones y recomendaciones de seguridad para los SmartContracts y las cadenas de BlockChain y, en segundo lugar una serie de  Herramientas visuales que nos podían ayudar para que nuestros SmartContacts y BlockChain tuvieran una mejor seguridad, dándonos ayudas visuales. En el artículo de hoy vamos a continuar hablando sobre cómo fortificar mejor y auditar SmartContracts, y para ello hoy vamos a ver unas cuantas herramientas de análisis de código estático.

Figura 1: Blockchain & SmartContracts: Auditoría y Pentesting de
SmartContracts (y BlockChains) con herramientas de análisis de código estático

Estas nos van ha ayudar a seguir algunos de los “buenos patrones” que nombramos en el primer artículo, además de avisarnos si tenemos algún tipo de vulnerabilidad en nuestro código. Para conseguir este objetivo, estas herramientas se basan en procesar y analizar el código de nuestros contratos en busca de patrones o similitudes con el de otros que tuvieran problemas. Vamos a ver algunas herramientas.

Herramienta Slither:

Esta es una de las herramientas por excelencia a la hora de auditar contratos. Es capaz de detectar más de 80 vulnerabilidades distintas en un contrato además de sugerir optimizaciones para el mismo. Se instala simplemente ejecutando:
“
pip3 install slither-analyzer
“
Una vez instalado basta con ejecutar el siguiente comando para que busque posibles vectores de ataque en tu contrato.
“
slither . [NombreDeContrato]
“
En mi caso, de todo lo que resaltó Slither lo más importante fue una vulnerabilidad de Reentrancy que tenía una función.


Además algunas de las cosas que también permite son las siguientes:
  • Proxy Upgradeability: Comprobar si tu contrato puede ser actualizado utilizando el patrón Proxy. Si ya tienes instalado Slither basta con ejecutar el siguiente comando.
“
slither-check-upgradeability . [ContractName]
“
Figura 3: Slither evaluando si el contrato es actualizable

  • Code similarity detector: Comprobar si una función en tu contrato es vulnerable si es similar a otras parecidas. Esto lo hace posible un avanzado modelo de machine learning y 60.000 SmartContracts vulnerables de ejemplo. Para usar esta utilidad hace falta instalación adicional, para ello dirígete a este enlace. Una vez instalado todo lo requerido, podremos por ejemplo recopilar información de una función que tenga nuestro contrato.
“
slither-simil test etherscan_verified_contracts.bin --filename [pathDelFichero] --fname [NombreDelContrato].[NombreDeLaFuncion] --input cache.npz --ntop 25 --solc solc-0.4.25
“
Figura 4: Slither encontrando código similar en EtherScan

Además permite que continúes tú mismo entrenando el modelo. Eso sí para lograr algo significativo te harán falta muchos SmartContracts.
  • ERC Conformance: Comprueba si tu contrato cumple a rajatabla los estándares ERC y por lo tanto si otros contratos pueden interactuar con él. No hace falta instalar nada más, con lanzar el siguiente comando basta.
“
slither-check-erc . [Nombre Del Contrato]
“
Figura 5 Slither verificando si el token cumple con los estándares.
Herramienta Gigahorse Toolchain
 
Gigahorse es una herramienta que convierte código compilado a instrucciones de la EVM a un lenguaje de orden más alto basado en funciones, es muy parecido a LLVM solo que en vez de compilar este decompila. Esta es una herramienta de muy bajo nivel, por lo general se utiliza solamente para construir otras herramientas que requieran de decompilar el bytecode de Smart Contracts. Como es una herramienta que no se usa muy a menudo no os enseñaré ni cómo instalarla ni cómo usarla, simplemente os dejo una imagen de qué pasa cuándo se usa. El bytecode que he usado es éste.

Figura 6: Slither decompilando el Bytecode

En la imagen os muestro algunas de la información que saca la herramienta del bytecode, como el nombre de las funciones con sus inputs y tipos de salida, el ensamblador equivalente, algunos metadatos… Además mucha otra información, pero como veis por el carácter de la información que nos proporciona la herramienta está más orientada a ser usada por debajo de otras herramientas, algunas de ellas son MadMax, Ethainter

Herramienta MadMax

MadMax se encarga de buscar vulnerabilidades asociadas al gas en tus contratos y evitar así posibles ataques de DoS o similares. Esta herramienta por detrás utiliza Gigahorse y para poder usarla hará falta tener Gigahorse instalado. Una vez lo tengamos instalado clonamos el repositorio de MadMax con el parámetro “--recursive” y accedemos al repositorio y compilamos Souflle para poder usarlo.
“””
cd gigahorse-toolchain/souffle-addon && make
“””
Después ejecutamos MadMax pasándole por parámetros el bytecode del contrato.
“””
gigahorse-toolchain/gigahorse.py -C madmax.dl [contract.hex]
“””
Si usáis sistemas operativos basados en Arch lo mas seguro es que no lo podáis ejecutar por problemas con librerías, como me ha pasado a mí. Si queréis ver ejemplos del uso de esta herramienta podéis acceder a esta aplicación web y observar cómo se usa MadMax para realizar parte de la decompilación de bytecode en un lenguaje muy similar a Solidity.

Herramienta Oyente

En su artículo se define la herramienta de la siguiente manera “An Smart Contracts analysis tool based symbolic execution” ergo, una herramienta de análisis que se encarga de analizar para qué entradas un contrato puede tener fallos o vulnerabilidades. 
Se puede instalar de dos formas, una minimal y otra full; en nuestro caso no vamos a necesitar ninguna parte de la herramienta de la parte full así que instalaremos la versión minimal.

Figura 8: Oyente buscando vulnerabilidades en el SmartContract

Para instalar la herramienta simplemente tenemos que ejecutar los siguientes comandos, ya que sólo se puede utilizar en sistemas operativos basados en GNU/Linux.
“””
python2 -m virtualenv env
source env/bin/activate
pip2 install web3==3.6.0
pip2 install oyente
“””
Y para ejecutar la herramienta podemos pasarle un contrato escrito en Solidity o el bytecode de un contrato o una URL con el contrato. En nuestro caso vamos a usar el bytecode anterior.
“””
oyente -s contract.hex -b
“””
Herramienta Echidna

Se basa en Fuzzy Finding para encontrar patrones en tu código que puedan dar lugar a vulnerabilidades, además muy parecida a Slither y de hecho en parte por detrás utiliza Slither. En concreto esta herramienta se enfoca más en CI/CD para que le puedas hacer tests de integración continua a tus contratos y así asegurarte de que nunca subes un error grave.



Entre los proyectos que lo usan se encuentra Uniswap, así que es una herramienta bastante conocida. Para instalarla simplemente tenemos que clonar el repositorio, acceder a él y lanzar los siguientes comandos en la consola:
“””
docker build -t echidna .
“””
Esto puede tardar un rato largo dependiendo del ordenador que tengas, sino si tienes un sistema operativo común como Ubuntu o alguno basado en Debian puedes ir a releases y descargar la última versión para tu sistema operativo. En mi caso como uso Arch pues tengo que compilar desde source. Ahora para probarla podéis ejecutar el siguiente comando:

- Si lo habéis instalado desde docker:
“””
docker run -it -v `pwd`:/src echidna echidna-test /src/tests/solidity/basic/flags.sol
“””
- Si lo habéis instalado normal:
“””
echidna echidna-test [pathDelContrato]
“””
Figura 10: Echidna pasando tests al contrato provisto.

Bien, estas son algunas de las herramientas de análisis estático más importantes a la hora de auditar Smart Contracts sobre todo si son compatibles con la EVM. En un siguiente artículo os mostraré las herramientas de análisis dinámico con las cuales es más fácil detectar de forma satisfactoria bugs o vulnerabilidades que nuestro contrato tenga. Información crítica para mejorar la seguridad, que puedes complementar con lecturas como la de este libro donde vas a aprender qué rastros buscan los investigadores en tus actividades.

Figura 11: Libro dedicado a "Bitcoin: La tecnología Blockchain y su investigación"
de Yaiza Rubio y Félix Brezo en 0xWord

 Más artículos sobre este mundo Web3:
Saludos,

Entrada destacada

+300 referencias a papers, posts y talks de Hacking & Security con Inteligencia Artificial

Hace un mes comencé a recuperar en un post mi interés en los últimos años, donde he publicado muchos artículos en este blog , y he dejado mu...

Entradas populares