¿Es posible crear una herramienta que lea contratos inteligentes y verifique si es seguro?

Realmente necesito ayuda con mi proyecto de tesis. Actualmente estoy encontrando la brecha que mi asesor está pidiendo y parece que me está costando mucho. Lo que podría pensar es en realidad crear una herramienta que lea contratos inteligentes y vea las fallas y vulnerabilidades del contrato inteligente codificado. ¿Podría alguien explicarme si esto es posible y si hay alguna referencia que desee compartir o también algunas ideas para mi proyecto de tesis? ¡Actualmente estudiando informática por cierto! ¡Gracias de antemano!

Hay un depurador hecho por los chicos de Truffle que puedes revisar
Creo que preguntas sobre las herramientas de verificación formales: consulta ethereum.stackexchange.com/questions/11092/…
Por otro lado, creo que los "defectos y vulnerabilidades" se refieren a exploits conocidos y errores contractuales comunes. No creo que sea un tema adecuado para una tesis porque a) requiere algo de experiencia con contratos inteligentes yb) están surgiendo nuevos exploits
Además, incluso después de la verificación formal, eso solo prueba que el código hace lo que especifica la especificación. Esto no prueba que la especificación no tenga consecuencias no deseadas. Probablemente sea imposible probar que cualquier programa implementado en el mundo real no tenga consecuencias no deseadas. Ni siquiera podemos hacer que las leyes se escriban correctamente y hemos tenido milenios de tratar de hacerlo bien. (Matar = malo. Excepto en defensa propia. Excepto en defensa propia usando fuerza excesiva. Excepto en defensa propia usando fuerza excesiva cuando se está bajo el calor del momento, niebla de guerra/estrés. Etc.)

Respuestas (2)

En el caso completamente general, esto es lógicamente imposible, porque se reduce a resolver el "problema de detención". (¿En qué nivel de educación se encuentra esta "tesis"? Espero que cualquier investigador de informática esté familiarizado con este principio fundamental de computabilidad).

Usted /puede/ escanear código de bytes en busca de comportamientos particulares, llamadas a funciones, etc., pero tan pronto como se permita cualquier tipo de direccionamiento indirecto o entrada proporcionada por el usuario, esos escaneos terminan siendo heurísticos, en lugar de pruebas infalibles.

Otra forma de formular eso: es totalmente posible verificar completamente un programa cuando se conocen todas las entradas, y no se permite que el programa se bifurque hacia atrás en el flujo de ejecución o use llamadas de función no inlinable (por lo tanto, no hay posibilidad de recursividad). Esto , a su vez, está vagamente relacionado con por qué los compiladores FORTRAN fueron tan buenos en la optimización. Una vez que analice este tema de verdad, encontrará una gran cantidad de resultados interesantes que se remontan a los albores de la computación de von Neuman.

Profundizar en el área del "análisis de programas estáticos" probablemente sea fructífero. Hay muchos resultados tanto teóricos como prácticos en el campo, aunque la mayoría de ellos están dirigidos a encontrar desbordamientos de búfer en el código C que a tratar de encontrar si un programa "es malo".

La otra pregunta es cómo se define "malo": no me queda claro si se puede llegar a una definición formal estricta de lo que es un programa "malo", que sería útil y no trivial.

A lo que te refieres es al análisis de programas estáticos. En general, no es posible crear una herramienta completamente automatizada que pueda verificar todas las vulnerabilidades con una recuperación y precisión perfectas.

Existen buenas herramientas para verificar la presencia de vulnerabilidades. Por ejemplo, https://contract-library.com realiza análisis de seguridad para todos los contratos inteligentes en la red principal de Ethereum y las redes de prueba. Aquí hay un ejemplo de un contrato vulnerable: https://contract-library.com/contracts/Ethereum/0xb91824d10079a44864a9bec11b4ae022d7732e05

Algunas de las vulnerabilidades que puede detectar están relacionadas con el gas. Aquí está nuestro documento que describe algunos de estos análisis si está interesado en replicar/mejorar nuestros resultados: https://www.nevillegrech.com/assets/pdf/madmax-oopsla18.pdf