Esta es la versión de Surify está en desuso y ya no será compatible. Utilice Surify v2.0.

Surify es un escáner de seguridad para los contratos inteligentes de Ethereum respaldados por la Fundación Ethereum y la seguridad de las cadenas. La investigación central detrás de Surify se realizó en el centro de hielo en ETH Zurich.

Cuenta con una extensa lista de patrones de seguridad que se encuentran comúnmente en los contratos inteligentes:
El proyecto está destinado a ser una plataforma abierta que acompañe las contribuciones de toda la comunidad de seguridad de Ethereum. Para sugerir nuevos patrones, ser voluntarios para las pruebas o contribuir al desarrollo de nuevos patrones, póngase en contacto a través de nuestro grupo de discordias.
souffle . Al momento de escribir, Soufflé no está disponible en Windows, por lo que tampoco se debe esperar que Surify se ejecute en Windows.solc para poder usar el archivo de solidez como entrada. Surify supone que la versión correcta está instalada para el archivo dado. solc está disponible aquí.Para construir:
./gradlew jarPara ejecutar Surify en un archivo de solidez:
java -jar build/libs/securify.jar -fs src/test/resources/solidity/transaction-reordering.solPara ejecutar Surify en la salida de descompilación proporcionada por el script Pysolc.py (que requiere PY-SOLC):
java -jar build/libs/securify.jar -co out.json Para ejecutar Surify en algún binario EVM (producido por ejemplo, por solc ):
java -jar build/libs/securify.jar -fh src/test/resources/solidity/transaction-reordering.bin.hexPara ver la lista completa de opciones:
java -jar build/libs/securify.jar -hPara ejecutar las pruebas (que usan JUnit4):
./gradlew test Un envoltorio de pitón ayuda a lidiar con solc y truffle . Los requisitos están en el archivo requisitos.txt. El DockerFile se puede utilizar como referencia para configurar su entorno local para usar este envoltorio.
La instalación debe ser bastante simple en los derivados de Debian, o cualquier otra plataforma compatible con Soufflé.
Para una demostración rápida que no requiere Soufflé, puede usar Docker.
Construye la imagen Docker:
docker build . -t securifyEjecute Surify en un pequeño ejemplo:
docker run securify Puede cambiar los archivos analizados especificando un volumen para montar, y cada archivo *.sol contenido será procesado por Surify:
docker run -v $( pwd ) /folder_with_solidity_files:/project securify Agregar un indicador --truffle debería permitir que Surify se ejecute sobre el proyecto de trufa en el que las dependencias ya se han instalado (así que ejecute npm install antes si es necesario). Sin esta bandera, el proyecto se compila usando solc . Agregue un -h para obtener la lista completa de opciones. En particular, si el usuario desea recibir información de compilación de Truffle, debe agregar el indicador -v .
Si uno quiere recibir la salida de JSON, el Docker admite una bandera --json que suprimirá la bonita salida y devolverá JSON. Asegúrese de agregar el indicador -q si no se debe mostrar información de progreso, lo que resulta en una salida JSON pura. Los índices de las líneas coincidentes están basadas en 0, lo que significa que una coincidencia de línea i significa que la línea i+1 TH coincide. En particular, la primera línea tiene un índice de 0.
Las pruebas básicas de extremo a extremo se pueden ejecutar a través del archivo test.py:
python3 test . pyLos requisitos se pueden instalar utilizando Pipenv:
pipenv install o usando pip :
pip install -r requirements.txtEstas pruebas comparan la salida de JSON actual dada por Surify con alguna salida pasada e informan las diferencias entre los dos.
Puede agregar el siguiente .travis.yml a su proyecto para ejecutar Securify en nuevas comodidades:
services:
- docker
before_install:
- docker pull chainsecurity/securify
script:
- docker run -v $(pwd):/project chainsecurity/securify
Esto debería permitir que Surify se ejecute sobre el proyecto de trufa en el que las dependencias ya se han instalado (por lo tanto, ejecute npm install antes si es necesario).
La salida sigue libremente el estilo de clang. Solo se informan advertencias y vulnerabilidades. Si uno desea obtener también la información de cumplimiento, utilice el indicador --json en el indicador Docker o -co en el ejecutable de Java para obtener toda la información de análisis en formato JSON.
Ver contribuyente. MD.
Únase a nuestra discordia para discutir con otros usuarios.
Aunque Surify se usa regularmente para ayudar a las auditorías en Chainsecurity, todavía hay errores, que incluyen:
computeBranches son recursivos. En la mayoría de los casos, es suficiente aumentar el tamaño de la pila usando la opción -Xss de java , por ejemplo, java -Xss1G -jar ...solc ) no son compatibles SALIFICACIÓN ESTÁTICO Analiza el código EVM del contrato inteligente para inferir información semántica importante (incluidos los hechos de flujo de control y de flujo de datos) sobre el contrato. Este paso está completamente automatizado utilizando Soufflé, un solucionador de datos escalable. Luego, Surify verifica los hechos inferidos para descubrir violaciones de seguridad o probar el cumplimiento de las instrucciones relevantes para la seguridad.
Los detalles técnicos completos detrás del escáner Securify están disponibles en el trabajo de investigación.