Это версия Securify устарела и больше не будет поддерживаться. Пожалуйста, используйте Secureify v2.0.

Securify - это сканер безопасности для умных контрактов Ethereum, поддерживаемых Фондом Ethereum и цепью. Основное исследование Securify было проведено в Ice Center в Эт Цюрих.

Он имеет обширный список моделей безопасности, обычно встречающихся в интеллектуальных контрактах:
Проект предназначен для того, чтобы стать открытой платформой, приветствующей вклад от всего сообщества Ethereum Security. Чтобы предложить новые шаблоны, чтобы добровольно участвовать в тестировании или внести свой вклад в разработку новых шаблонов, пожалуйста, свяжитесь с нашей группой Discord.
souffle . Начиная с написанием, Soufflé не доступен в Windows, поэтому Securify не следует ожидать, что в Windows тоже не следует.solc должен иметь возможность использовать файл Solidity в качестве входного. Secureify предполагает, что правильная версия установлена для данного файла. solc доступен здесь.Построить:
./gradlew jarЧтобы запустить Secireify в файле Solidity:
java -jar build/libs/securify.jar -fs src/test/resources/solidity/transaction-reordering.solЧтобы запустить секьюризируется на выходе декомпиляции, предоставленном сценарием Pysolc.py (который требует Py-Solc):
java -jar build/libs/securify.jar -co out.json Запустить секвеничность на каком -то бинарнике EVM (например, solc ):
java -jar build/libs/securify.jar -fh src/test/resources/solidity/transaction-reordering.bin.hexЧтобы увидеть полный список вариантов:
java -jar build/libs/securify.jar -hЧтобы запустить тесты (которые используют junit4):
./gradlew test Обертка Python помогает справиться с solc и truffle . Требования находятся в файле TEDS.TXT. DockerFile можно использовать в качестве ссылки на настройку вашей локальной среды для использования этой обертки.
Установка должна быть достаточно проста для деривативов Debian или любой другой платформы, поддерживаемой Soufflé.
Для быстрой демонстрации, которая не требует суфле, вы можете использовать Docker.
Создайте изображение Docker:
docker build . -t securifyЗапустите секведите на небольшом примере:
docker run securify Вы можете изменить файлы, проанализированные путем указания тома для монтажа, и каждый *.sol
docker run -v $( pwd ) /folder_with_solidity_files:/project securify Добавление флага --truffle должно позволить SecuRify для запуска проекта Truffle, в котором уже установлены зависимости (так что запустите npm install до того, как необходимо). Без этого флага проект составлен с использованием solc . Добавьте -h , чтобы получить полный список параметров. В частности, если пользователь хочет получить информацию о компиляции от трюфеля, он должен добавить флаг -v .
Если кто -то хочет получить вывод JSON, Docker поддерживает флаг --json , который подавит симпатичный вывод и вместо этого вернет JSON. Обязательно добавьте флаг -q , если не должна отображаться информация о прогрессе, следовательно, приводя к чистому выводу JSON. Индексы соответствующих линий на основе 0, а это означает, что совпадение с линией i означает, что линия i+1 соответствует. В частности, первая строка имеет индекс 0.
Основные тесты на конечный к конечному
python3 test . pyТребования могут быть установлены с помощью Pipenv:
pipenv install или используя pip :
pip install -r requirements.txtЭти тесты сравнивают текущий вывод JSON, приведенный в соответствии с некоторыми прошлыми выводами, и сообщают о различиях между ними.
Вы можете добавить следующее .travis.yml в ваш проект, чтобы запустить SecureIfy на новых коммитах:
services:
- docker
before_install:
- docker pull chainsecurity/securify
script:
- docker run -v $(pwd):/project chainsecurity/securify
Это должно позволить Secureify запустить проект Truffle, в котором уже установлены зависимости (так что запустите npm install до того, как необходимо).
Вывод свободно следует за стилем Clang. Сообщается только о предупреждениях и уязвимостях. Если кто -то желает также получить информацию о соответствии, используйте флаг --json в Docker, или -co Flag на исполняемом файле Java, чтобы получить всю информацию о анализе в формате JSON.
См. Appling.md.
Присоединяйтесь к нашим разногласиям, чтобы обсудить с другими пользователями.
Хотя Securify регулярно используется для помощи аудитам в цепочке, все еще есть ошибки, в том числе:
computeBranches . В большинстве случаев этого достаточно, чтобы увеличить размер стека, используя вариант -Xss java , например java -Xss1G -jar ...solc ) не поддерживаются Низкие статически анализируют код EVM интеллектуального контракта, чтобы вывести важную семантическую информацию (включая факты управления и потока данных) о контракте. Этот шаг полностью автоматизирован с использованием Soufflé, масштабируемого решателя данных Datalog. Затем защитите чеки на выводящие факты, чтобы обнаружить нарушения безопасности или доказать соблюдение инструкций, связанных с безопасностью.
Полные технические детали, лежащие в основе сканера Secureify, доступны в исследовательской статье.