
Secureify 2.0 - это сканер безопасности для интеллектуальных контрактов Ethereum, поддерживаемых Фондом Ethereum и цепью. Основное исследование Securify было проведено в безопасной, надежной и интеллектуальной системной лаборатории в Eth Zurich.
Это преемник популярного сканера Secireify Security Scanner (вы можете найти старую версию здесь).
Чтобы построить контейнер:
sudo docker build -t securify .
Чтобы запустить контейнер:
sudo docker run -it -v <contract-dir-full-path>:/share securify /share/<contract>.sol
Примечание. Чтобы запустить код через Docker с версией Solidity, которая отличается от 0.5.12 , вам необходимо будет изменить переменную ARG SOLC=0.5.12 в верхней части Dockerfile , чтобы указать на вашу версию. После создания с правильной версией вы не должны сталкиваться с ошибками.
Следующие инструкции предполагают, что Python уже установлен. В дополнение к этому, Securify требует, чтобы solc , souffle и graphviz были установлены в системе:
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc
Следуйте инструкциям здесь: https://souffle-lang.github.io/download.html
Пожалуйста, не выбирайте нестабильную версию, так как она может сломаться в любой момент.
sudo apt install graphviz
После того, как предпосылки были установлены, мы можем настроить виртуальную среду Python, из которой мы будем запускать сценарии в этом проекте.
В корневой папке проекта выполните следующие команды для настройки и активации виртуальной среды:
virtualenv --python=/usr/bin/python3.7 venv
source venv/bin/activate
Убедитесь, что версия python на самом деле 3.7 :
python --version
Установить LD_LIBRARY_PATH :
cd <securify_root>/securify/staticanalysis/libfunctors
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`
Наконец, установите зависимости проекта, выполнив следующие команды из папки <securify_root> :
pip install --upgrade pip
pip install -r requirements.txt
pip install -e .
Теперь вы готовы начать использовать структуру Secureify.
Помните: перед выполнением сценариев Framework вам нужно активировать виртуальную среду со следующей командой:
source venv/bin/activate
В настоящее время Securify2 поддерживает только фиксированные контракты, т.е. контракты, которые не содержат импортных заявлений.
Чтобы проанализировать местный контракт, просто запустите:
securify <contract_source>.sol [--use-patterns Pattern1 Pattern2 ...]
Или загрузите его с блокчейна, используя API etherscan.io:
securify <contract_address> --from-blockchain [--key <key-file>]
Обратите внимание, что вам нужен апи-клавиш от etherscan.io, чтобы использовать эту функциональность.
Для анализа договора против конкретных уровней тяжести работа:
securify <contract_source>.sol [--include-severity Severity1 Severity2]
securify <contract_source>.sol [--exclude-severity Severity1 Severity2]
Чтобы запустить все доступные шаблоны:
securify --list
| ИДЕНТИФИКАТОР | Имя шаблона | Тяжесть | Slither id | SWC ID | Комментарии |
|---|---|---|---|---|---|
| 1 | Todamount | Критический | - | SWC-114 | |
| 2 | Todreceiver | Критический | - | SWC-114 | |
| 3 | Тодтрансфер | Критический | - | SWC-114 | |
| 4 | Неограниченный писатель | Критический | - | SWC-124 | |
| 5 | Righttoleftoverride | Высокий | rtlo | SWC-130 | |
| 6 | SHAHEDSTTATEVARIAL | Высокий | shadowing-state , shadowing-abstract | SWC-119 | |
| 7 | Неограниченный самостоятельный | Высокий | suicidal | SWC-106 | |
| 8 | Неонициализированная статей | Высокий | uninitialized-state | SWC-109 | |
| 9 | Неинициализованный Старидж | Высокий | uninitialized-storage | SWC-109 | |
| 10 | UnserrictedDelegateCall | Высокий | controlled-delegatecall | SWC-112 | |
| 11 | Дао | Высокий | reentrancy-eth | SWC-107 | |
| 12 | ERC20Interface | Середина | erc20-interface | - | |
| 13 | ERC721Interface | Середина | erc721-interface | - | |
| 14 | Неверноэравнение | Середина | incorrect-equality | SWC-132 | |
| 15 | Заблокирован | Середина | locked-ether | - | |
| 16 | Reentrancynoeth | Середина | reentrancy-no-eth | SWC-107 | |
| 17 | Txorigin | Середина | tx-origin | SWC-115 | |
| 18 | UnkendledException | Середина | unchecked-lowlevel | - | |
| 19 | Неограниченный детерфлоу | Середина | unchecked-send | SWC-105 | |
| 20 | Неонициализированный | Середина | uninitialized-local | SWC-109 | |
| 21 | Неиспользованный | Середина | unused-return | SWC-104 | |
| 22 | ShoneedBuiltin | Низкий | shadowing-builtin | - | |
| 23 | ShoneedLocalVariable | Низкий | shadowing-local | - | |
| 24 | CalltodefaultConstructor? | Низкий | void-cst | - | |
| 25 | Callinloop | Низкий | calls-loop | SWC-104 | |
| 26 | Reentrancybenign | Низкий | reentrancy-benign | SWC-107 | |
| 27 | Временная метка | Низкий | timestamp | SWC-116 | |
| 28 | Сборка | Информация | assembly | - | |
| 29 | ERC20INDEXED | Информация | erc20-indexed | - | |
| 30 | Lowellcalls | Информация | low-level-calls | - | |
| 31 | Namingconvention | Информация | naming-convention | - | |
| 32 | Солкверсия | Информация | solc-version | SWC-103 | |
| 33 | Неиспользованный статей | Информация | unused-state | - | |
| 34 | TOOMANYDIGITS | Информация | too-many-digits | - | |
| 35 | Константы | Информация | constable-states | - | |
| 36 | Внешние функции | Информация | external-function | - | |
| 37 | StateVariablesDefaultVisibility | Информация | - | SWC-108 |
Следующие схемы SLITHER не проверяются с помощью Securify, поскольку они проверяются компилятором Solidity (версия 0.5.8):
constant-functiondeprecated-standardspragmaСледующие уязвимости SWC не применяются к контрактам на прочность с Pragma> = 5,8 и поэтому не проверены с помощью Securify: