
O Securify 2.0 é um scanner de segurança dos contratos inteligentes da Ethereum, suportados pela Fundação Ethereum e pela segurança. A pesquisa principal por trás do Securify foi realizada no laboratório de sistemas seguro, confiável e inteligente da ETH Zurique.
É o sucessor do popular scanner de segurança Securify (você pode encontrar a versão antiga aqui).
Para construir o contêiner:
sudo docker build -t securify .
Para executar o contêiner:
sudo docker run -it -v <contract-dir-full-path>:/share securify /share/<contract>.sol
Nota: Para executar o código via Docker com uma versão de solidez diferente de 0.5.12 , você precisará modificar a variável ARG SOLC=0.5.12 na parte superior do Dockerfile para apontar para sua versão. Depois de construir com a versão correta, você não deve enfrentar erros.
As instruções a seguir assumem que um Python já está instalado. Além disso, o Securify requer solc , souffle e graphviz para serem instalados no sistema:
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc
Siga as instruções aqui: https://souffle-lang.github.io/download.html
Por favor, não opte pela versão instável, pois pode quebrar em qualquer momento.
sudo apt install graphviz
Após a instalação dos pré -requisitos, podemos configurar o ambiente virtual do Python a partir do qual executaremos os scripts neste projeto.
Na pasta raiz do projeto, execute os seguintes comandos para configurar e ativar o ambiente virtual:
virtualenv --python=/usr/bin/python3.7 venv
source venv/bin/activate
Verifique se a versão python é realmente 3.7 :
python --version
Definir LD_LIBRARY_PATH :
cd <securify_root>/securify/staticanalysis/libfunctors
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`
Por fim, instale as dependências do projeto executando os seguintes comandos da pasta <securify_root> :
pip install --upgrade pip
pip install -r requirements.txt
pip install -e .
Agora você está pronto para começar a usar a estrutura Securify.
Lembre -se: Antes de executar os scripts da estrutura, você precisará ativar o ambiente virtual com o seguinte comando:
source venv/bin/activate
Atualmente, o Securify2 suporta apenas contratos planos, ou seja, contratos que não contêm declarações de importação.
Analisar um contrato local simplesmente executado:
securify <contract_source>.sol [--use-patterns Pattern1 Pattern2 ...]
Ou faça o download do blockchain usando a API EtherScan.io:
securify <contract_address> --from-blockchain [--key <key-file>]
Observe que você precisa de uma tecla API do EtherScan.io para usar essa funcionalidade.
Analisar um contrato contra níveis específicos de gravidade executados:
securify <contract_source>.sol [--include-severity Severity1 Severity2]
securify <contract_source>.sol [--exclude-severity Severity1 Severity2]
Para executar todos os padrões disponíveis:
securify --list
| EU IA | Nome do padrão | Gravidade | Slither id | SWC ID | Comentários |
|---|---|---|---|---|---|
| 1 | Todamount | Crítico | - | SWC-114 | |
| 2 | TODReceiver | Crítico | - | SWC-114 | |
| 3 | Todransfer | Crítico | - | SWC-114 | |
| 4 | Sem restritoWrite | Crítico | - | SWC-124 | |
| 5 | RightToleftoverride | Alto | rtlo | SWC-130 | |
| 6 | ShadowedStateVariable | Alto | shadowing-state , shadowing-abstract | SWC-119 | |
| 7 | Selfdestrução irrestrita | Alto | suicidal | SWC-106 | |
| 8 | Não inicializado estatevável | Alto | uninitialized-state | SWC-109 | |
| 9 | Storage não inicializado | Alto | uninitialized-storage | SWC-109 | |
| 10 | UnrestriadDelegatEcall | Alto | controlled-delegatecall | SWC-112 | |
| 11 | Dao | Alto | reentrancy-eth | SWC-107 | |
| 12 | ERC20Interface | Médio | erc20-interface | - | |
| 13 | ERC721Interface | Médio | erc721-interface | - | |
| 14 | Incorreto | Médio | incorrect-equality | SWC-132 | |
| 15 | Trancado | Médio | locked-ether | - | |
| 16 | ReentrancyNoeth | Médio | reentrancy-no-eth | SWC-107 | |
| 17 | Txorigin | Médio | tx-origin | SWC-115 | |
| 18 | UNHINDLEDEXCECCECTION | Médio | unchecked-lowlevel | - | |
| 19 | Fluxo irrestrito | Médio | unchecked-send | SWC-105 | |
| 20 | Local não iniciado | Médio | uninitialized-local | SWC-109 | |
| 21 | UNUSUSTURANDOURN | Médio | unused-return | SWC-104 | |
| 22 | ShadowedBuiltin | Baixo | shadowing-builtin | - | |
| 23 | ShadowedLocalVariable | Baixo | shadowing-local | - | |
| 24 | CaltodefaultConstructor? | Baixo | void-cst | - | |
| 25 | Callinloop | Baixo | calls-loop | SWC-104 | |
| 26 | Reentrancybenign | Baixo | reentrancy-benign | SWC-107 | |
| 27 | Timestamp | Baixo | timestamp | SWC-116 | |
| 28 | Assembléia | Informações | assembly | - | |
| 29 | ERC20 Indexado | Informações | erc20-indexed | - | |
| 30 | LowlevelCalls | Informações | low-level-calls | - | |
| 31 | NamingConvention | Informações | naming-convention | - | |
| 32 | SolcVersion | Informações | solc-version | SWC-103 | |
| 33 | UNUSUSTSTATEVARIABLE | Informações | unused-state | - | |
| 34 | Toomanydigits | Informações | too-many-digits | - | |
| 35 | Constablestates | Informações | constable-states | - | |
| 36 | Externalfunctions | Informações | external-function | - | |
| 37 | StateVariablesDefaultVisibility | Informações | - | SWC-108 |
Os seguintes padrões Slither não são verificados por securificação, pois são verificados pelo compilador de solidez (ver. 0.5.8):
constant-functiondeprecated-standardspragmaAs seguintes vulnerabilidades do SWC não se aplicam a contratos de solidez com Pragma> = 5.8 e, portanto, não são verificados por securify: